gherkin-2.12.2/0000755000004100000410000000000012244512574013263 5ustar www-datawww-datagherkin-2.12.2/Rakefile0000644000004100000410000000133112244512574014726 0ustar www-datawww-data# encoding: utf-8 GHERKIN_VERSION = Gem::Specification.load(File.dirname(__FILE__) + '/gherkin.gemspec').version.version require 'rubygems' unless ENV['RUBY_CC_VERSION'] require 'bundler' Bundler.setup Bundler::GemHelper.install_tasks end ENV['RUBYOPT'] = nil # Necessary to prevent Bundler from *&^%$#ing up rake-compiler. require 'rake/clean' begin # Support Rake >= 0.9.0 require 'rake/dsl_definition' include Rake::DSL rescue LoadError end $:.unshift(File.dirname(__FILE__) + '/lib') Dir['tasks/**/*.rake'].each { |rake| load File.expand_path(rake) } task :default => [:spec, :cucumber] task :spec => defined?(JRUBY_VERSION) ? :jar : :compile task :cucumber => defined?(JRUBY_VERSION) ? :jar : :compile gherkin-2.12.2/.gitattributes0000644000004100000410000000014212244512574016153 0ustar www-datawww-dataspec/gherkin/fixtures/dos_line_endings.feature -crlf spec/gherkin/fixtures/with_bom.feature -crlf gherkin-2.12.2/.mailmap0000644000004100000410000000010412244512574014677 0ustar www-datawww-dataGregory Hnatiuk Mike Sassak gherkin-2.12.2/Gemfile0000644000004100000410000000012112244512574014550 0ustar www-datawww-datasource "https://rubygems.org" gemspec # gem 'cucumber', :path => '../cucumber' gherkin-2.12.2/examples/0000755000004100000410000000000012244512574015101 5ustar www-datawww-datagherkin-2.12.2/examples/parse_and_output_json.rb0000644000004100000410000000111612244512574022032 0ustar www-datawww-datarequire 'gherkin/parser/parser' require 'gherkin/formatter/json_formatter' require 'stringio' require 'multi_json' # This example reads a couple of features and outputs them as JSON. io = StringIO.new formatter = Gherkin::Formatter::JSONFormatter.new(io) parser = Gherkin::Parser::Parser.new(formatter) sources = ["features/native_lexer.feature", "features/escaped_pipes.feature"] sources.each do |s| path = File.expand_path(File.dirname(__FILE__) + '/../' + s) parser.parse(IO.read(path), path, 0) end formatter.done puts MultiJson.dump(MultiJson.load(io.string), :pretty => true) gherkin-2.12.2/js/0000755000004100000410000000000012244512574013677 5ustar www-datawww-datagherkin-2.12.2/js/lib/0000755000004100000410000000000012244512574014445 5ustar www-datawww-datagherkin-2.12.2/js/lib/gherkin/0000755000004100000410000000000012244512574016074 5ustar www-datawww-datagherkin-2.12.2/js/lib/gherkin/lexer/0000755000004100000410000000000012244512574017213 5ustar www-datawww-datagherkin-2.12.2/js/lib/gherkin/lexer/.npmignore0000644000004100000410000000000012244512574021200 0ustar www-datawww-datagherkin-2.12.2/js/.npmignore0000644000004100000410000000001012244512574015665 0ustar www-datawww-dataexample gherkin-2.12.2/build_native_gems.sh0000755000004100000410000000031112244512574017275 0ustar www-datawww-data#!/bin/sh rm -Rf release mkdir release GEM_PLATFORM=java gem build gherkin.gemspec GEM_PLATFORM=x86-mswin32 gem build gherkin.gemspec GEM_PLATFORM=x86-mingw32 gem build gherkin.gemspec mv *.gem releasegherkin-2.12.2/features/0000755000004100000410000000000012244512574015101 5ustar www-datawww-datagherkin-2.12.2/features/step_definitions/0000755000004100000410000000000012244512574020447 5ustar www-datawww-datagherkin-2.12.2/features/step_definitions/eyeball_steps.rb0000644000004100000410000000007412244512574023630 0ustar www-datawww-dataGiven /^they have arrived$/ do |table| puts table.raw end gherkin-2.12.2/features/step_definitions/json_parser_steps.rb0000644000004100000410000000110212244512574024531 0ustar www-datawww-datarequire 'stringio' require 'gherkin/formatter/pretty_formatter' require 'gherkin/json_parser' require 'multi_json' Given /^a PrettyFormatter$/ do @io = StringIO.new @formatter = Gherkin::Formatter::PrettyFormatter.new(@io, true, false) end Given /^a JSON lexer$/ do @json_parser = Gherkin::JSONParser.new(@formatter, @formatter) end Given /^the following JSON is parsed:$/ do |text| @json_parser.parse(MultiJson.dump(MultiJson.load(text), :pretty => true)) end Then /^the outputted text should be:$/ do |expected_text| @io.string.strip.should == expected_text end gherkin-2.12.2/features/step_definitions/json_formatter_steps.rb0000644000004100000410000000127212244512574025250 0ustar www-datawww-datarequire 'stringio' require 'gherkin/formatter/json_formatter' require 'gherkin/listener/formatter_listener' # Monkey patching so that Hash.to_json has a predictable result. class Hash alias orig_keys keys def keys orig_keys.sort end end Given /^a JSON formatter$/ do @out = StringIO.new @formatter = Gherkin::Formatter::JSONFormatter.new(@out) end Then /^the outputted JSON should be:$/ do |expected_json| require 'multi_json' @formatter.done actual_json = @out.string puts actual_json puts MultiJson.dump(MultiJson.load(actual_json), :pretty => true) expected = MultiJson.load(expected_json) actual = MultiJson.load(actual_json) actual.should == expected end gherkin-2.12.2/features/step_definitions/gherkin_steps.rb0000644000004100000410000000140612244512574023642 0ustar www-datawww-dataGiven /^a "(ruby|native)" "([^\"]*)" parser$/ do |ruby_or_native, parser_name| @parser = Gherkin::Parser::Parser.new(@formatter, false, parser_name, ruby_or_native=="ruby") end Given "the following text is parsed:" do |text| @parser.parse(text, "test.feature", 0) end Then "there should be no parse errors" do @formatter.errors.should == [] end Then /^there should be a parse error on (line \d+)$/ do |line| @formatter.line(line).should include(:syntax_error, line) end Then /^there should be parse errors on (lines .*)$/ do |lines| lines.each do |line| step "there should be a parse error on line #{line}" end end Transform /^line \d+$/ do |step_arg| tr_line_number(step_arg) end Transform /^lines .*$/ do |step_arg| tr_line_numbers(step_arg) end gherkin-2.12.2/features/step_definitions/pretty_formatter_steps.rb0000644000004100000410000000533012244512574025625 0ustar www-datawww-datarequire 'stringio' require 'fileutils' require 'gherkin' require 'gherkin/formatter/pretty_formatter' require 'gherkin/formatter/json_formatter' require 'gherkin/json_parser' module PrettyPlease def pretty_machinery(gherkin, feature_path) io = StringIO.new formatter = Gherkin::Formatter::PrettyFormatter.new(io, true, false) parser = Gherkin::Parser::Parser.new(formatter, true) parse(parser, gherkin, feature_path) io.string end def json_machinery(gherkin, feature_path) json = StringIO.new json_formatter = Gherkin::Formatter::JSONFormatter.new(json) gherkin_parser = Gherkin::Parser::Parser.new(json_formatter, true) parse(gherkin_parser, gherkin, feature_path) json_formatter.done io = StringIO.new pretty_formatter = Gherkin::Formatter::PrettyFormatter.new(io, true, false) json_parser = Gherkin::JSONParser.new(pretty_formatter, pretty_formatter) json_parser.parse(json.string) io.string end def parse(parser, gherkin, feature_path) begin parser.parse(gherkin, feature_path, 0) rescue => e if e.message =~ /Lexing error/ FileUtils.mkdir "tmp" unless File.directory?("tmp") written_path = "tmp/#{File.basename(feature_path)}" File.open(written_path, "w") {|io| io.write(gherkin)} e.message << "\nSee #{written_path}" end raise e end end end World(PrettyPlease) Given /^I have Cucumber's source code next to Gherkin's$/ do @cucumber_home = File.dirname(__FILE__) + '/../../../cucumber' raise "No Cucumber source in #{@cucumber_home}" unless File.file?(@cucumber_home + '/bin/cucumber') end Given /^I find all of the \.feature files$/ do @feature_paths = Dir["#{@cucumber_home}/**/*.feature"].sort end When /^I send each prettified original through the "([^"]*)" machinery$/ do |machinery| @error = false @feature_paths.each do |feature_path| begin next if feature_path =~ /iso-8859-1\.feature/ original = pretty_machinery(IO.read(feature_path), feature_path) via_machinery = self.__send__("#{machinery}_machinery", original, feature_path) via_machinery.should == original rescue RSpec::Expectations::ExpectationNotMetError => e announce "==========" announce feature_path if(e.message =~ /(@@.*)/m) announce $1 @error = true else announce "Identical, except for newlines" end rescue => e e.message << "\nFatal error happened when parsing #{feature_path}." raise e end end end Then /^the machinery output should be identical to the prettified original$/ do raise "Some features didn't make it through the machinery" if @error end gherkin-2.12.2/features/steps_parser.feature0000644000004100000410000000233012244512574021166 0ustar www-datawww-dataFeature: Gherkin Steps parser In order to save time and make my features clearer As a Cucumber developer I want a steps parser to make writing compound steps easier Background: Given a "ruby" "steps" parser Scenario: Parsing steps Given the following text is parsed: """ Given a one step And a two step \"\"\" Here is a multiline string That follows a step With an argument #{arg} \"\"\" And a one two three step When another step Then there should be a table | one | two | three | | foo | bar | #{arg} | """ Then there should be no parse errors Scenario: Trying to parse a full feature with the step parser Given the following text is parsed: """ Feature: A Feature Scenario: Yes, there is one Given I have a step When I execute this step Then something should happen """ Then there should be parse errors on lines 1 and 2 Scenario: Tags Given the following text is parsed: """ @a_tag Given a step When I trip Then I should sign up for dancing lessons """ Then there should be a parse error on line 1 gherkin-2.12.2/features/json_formatter.feature0000644000004100000410000003073612244512574021523 0ustar www-datawww-dataFeature: JSON formatter In order to support greater access to features we want JSON Background: Given a JSON formatter And a "ruby" "root" parser Scenario: Only a Feature Given the following text is parsed: """ # language: no # Another comment Egenskap: Kjapp """ And the following text is parsed: """ # language: no # Yet another comment Egenskap: Kjappere """ Then the outputted JSON should be: """ [ { "comments": [ { "line": 1, "value": "# language: no" }, { "line": 2, "value": "# Another comment" } ], "description": "", "keyword": "Egenskap", "line": 3, "name": "Kjapp", "uri": "test.feature", "id": "kjapp" }, { "comments": [ { "line": 1, "value": "# language: no" }, { "line": 2, "value": "# Yet another comment" } ], "description": "", "keyword": "Egenskap", "line": 3, "name": "Kjappere", "uri": "test.feature", "id": "kjappere" } ] """ Scenario: Feature with scenarios and outlines Given the following text is parsed: """ @one Feature: OH HAI Scenario: Fujin Given wind Then spirit @two Scenario: _why Given chunky Then bacon @three @four Scenario Outline: Life Given some @five Examples: Real life |boredom| |airport| |meeting| Scenario: who stole my mojo? When I was |asleep| And so \"\"\"plaintext innocent \"\"\" # The Scenario Outline: with # all Then nice # comments # everywhere Examples: An example # I mean | partout | """ Then the outputted JSON should be: """ [ { "uri": "test.feature", "description": "", "elements": [ { "description": "", "keyword": "Scenario", "line": 4, "id": "oh-hai;fujin", "name": "Fujin", "steps": [ { "keyword": "Given ", "line": 5, "name": "wind" }, { "keyword": "Then ", "line": 6, "name": "spirit" } ], "type": "scenario" }, { "description": "", "keyword": "Scenario", "line": 9, "id": "oh-hai;-why", "name": "_why", "steps": [ { "keyword": "Given ", "line": 10, "name": "chunky" }, { "keyword": "Then ", "line": 11, "name": "bacon" } ], "tags": [ { "line": 8, "name": "@two" } ], "type": "scenario" }, { "description": "", "examples": [ { "description": "", "keyword": "Examples", "line": 18, "id": "oh-hai;life;real-life", "name": "Real life", "rows": [ { "id": "oh-hai;life;real-life;1", "cells": [ "boredom" ], "line": 19 }, { "id": "oh-hai;life;real-life;2", "cells": [ "airport" ], "line": 20 }, { "id": "oh-hai;life;real-life;3", "cells": [ "meeting" ], "line": 21 } ], "tags": [ { "line": 17, "name": "@five" } ] } ], "keyword": "Scenario Outline", "line": 14, "id": "oh-hai;life", "name": "Life", "steps": [ { "keyword": "Given ", "line": 15, "name": "some " } ], "tags": [ { "line": 13, "name": "@three" }, { "line": 13, "name": "@four" } ], "type": "scenario_outline" }, { "description": "", "keyword": "Scenario", "line": 23, "id": "oh-hai;who-stole-my-mojo?", "name": "who stole my mojo?", "steps": [ { "keyword": "When ", "line": 24, "name": "I was", "rows": [ { "cells": [ "asleep" ], "line": 25 } ] }, { "doc_string": { "content_type": "plaintext", "line": 27, "value": "innocent" }, "keyword": "And ", "line": 26, "name": "so" } ], "type": "scenario" }, { "comments": [ { "line": 31, "value": "# The" } ], "description": "", "examples": [ { "comments": [ { "line": 36, "value": "# comments" }, { "line": 37, "value": "# everywhere" } ], "description": "", "keyword": "Examples", "line": 38, "id": "oh-hai;with;an-example", "name": "An example", "rows": [ { "id": "oh-hai;with;an-example;1", "cells": [ "partout" ], "comments": [ { "line": 39, "value": "# I mean" } ], "line": 40 } ] } ], "keyword": "Scenario Outline", "line": 32, "id": "oh-hai;with", "name": "with", "steps": [ { "comments": [ { "line": 33, "value": "# all" } ], "keyword": "Then ", "line": 34, "name": "nice" } ], "type": "scenario_outline" } ], "keyword": "Feature", "line": 2, "id": "oh-hai", "name": "OH HAI", "tags": [ { "line": 1, "name": "@one" } ] } ] """ Scenario: Feature with Background Given the following text is parsed: """ Feature: Kjapp Background: No idea what Kjapp means Given I Google it # Writing JSON by hand sucks Scenario: Then I think it means "fast" """ Then the outputted JSON should be: """ [ { "uri": "test.feature", "keyword": "Feature", "name": "Kjapp", "id": "kjapp", "description": "", "line": 1, "elements": [ { "type": "background", "keyword": "Background", "line": 3, "name": "No idea what Kjapp means", "description": "", "steps": [ { "keyword": "Given ", "line": 4, "name": "I Google it" } ] }, { "type": "scenario", "comments": [{"value": "# Writing JSON by hand sucks", "line": 6}], "keyword": "Scenario", "id": "kjapp;", "name": "", "description": "", "line": 7, "steps": [ { "keyword": "Then ", "name": "I think it means \"fast\"", "line": 8 } ] } ] } ] """ Scenario: Feature with a description We want people to be able to put markdown formatting into their descriptions but this means we need to respect whitespace at the start and end of lines in the description. Pay close attention to the whitespace in this example. Given the following text is parsed: """ Feature: Foo one line another line some pre-formatted stuff Background: b name test test Scenario: s name test test Scenario Outline: s o name test test Given Examples: e name test test | foo | | table | """ Then the outputted JSON should be: """ [ { "uri": "test.feature", "keyword": "Feature", "id": "foo", "name": "Foo", "description": "one line \nanother line \n\n some pre-formatted stuff", "line": 1, "elements": [ { "description": " test \n test", "keyword": "Background", "line": 7, "name": "b name", "type": "background" }, { "description": " test \n test", "keyword": "Scenario", "line": 11, "id": "foo;s-name", "name": "s name", "type": "scenario" }, { "description": " test \n test", "examples": [ { "description": " test \n test", "keyword": "Examples", "line": 21, "id": "foo;s-o-name;e-name", "name": "e name", "rows": [ { "id": "foo;s-o-name;e-name;1", "cells": [ "foo" ], "line": 24 }, { "id": "foo;s-o-name;e-name;2", "cells": [ "table" ], "line": 25 } ] } ], "keyword": "Scenario Outline", "line": 15, "id": "foo;s-o-name", "name": "s o name", "steps": [ { "keyword": "Given ", "line": 19, "name": "" } ], "type": "scenario_outline" } ] } ] """ gherkin-2.12.2/features/json_parser.feature0000644000004100000410000002114012244512574021001 0ustar www-datawww-dataFeature: JSON lexer In order to support greater access to features we want JSON Background: Given a PrettyFormatter And a JSON lexer Scenario: Only a Feature Given the following JSON is parsed: """ [ { "comments": [ {"value": "# language: no"}, {"value": "# Another comment"} ], "description": "", "keyword": "Egenskap", "id": "kjapp", "name": "Kjapp", "tags": [], "uri": "test.feature" } ] """ Then the outputted text should be: """ # language: no # Another comment Egenskap: Kjapp """ Scenario: Feature with scenarios and outlines Given the following JSON is parsed: """ [ { "comments": [], "keyword": "Feature", "id": "oh-hai", "name": "OH HAI", "tags": [{"name": "@one"}], "uri": "test.feature", "description": "", "elements":[ { "comments": [], "tags": [], "keyword": "Scenario", "id": "oh-hai/fujin", "name": "Fujin", "description": "", "type": "scenario", "line": 4, "steps": [ { "comments": [], "keyword": "Given ", "name": "wind", "line": 5 }, { "comments": [], "keyword": "Then ", "name": "spirit", "line": 6 } ] }, { "comments": [], "tags": [{"name": "@two"}], "keyword": "Scenario", "id": "oh-hai/_why", "name": "_why", "description": "", "type": "scenario", "line": 9, "steps": [ { "comments": [], "keyword": "Given ", "name": "chunky", "line": 10 }, { "comments": [], "keyword": "Then ", "name": "bacon", "line": 11 } ] }, { "comments": [], "tags": [{"name": "@three"}, {"name": "@four"}], "keyword": "Scenario Outline", "id": "oh-hai/life", "name": "Life", "description": "", "type": "scenario_outline", "line": 14, "steps": [ { "comments": [], "keyword": "Given ", "name": "some ", "line": 15 } ], "examples": [ { "type": "examples", "comments": [], "tags": [{"name": "@five"}], "keyword": "Examples", "id": "oh-hai/life/real-life", "name": "Real life", "description": "", "line": 18, "rows": [ { "comments": [], "cells": ["boredom"], "line": 19 }, { "comments": [], "cells": ["airport"], "line": 20 }, { "comments": [], "cells": ["meeting"], "line": 21 } ] } ] }, { "comments": [], "tags": [], "keyword": "Scenario", "id": "oh-hai/who-stole-my-mojo?", "name": "who stole my mojo?", "description": "", "type": "scenario", "line": 23, "steps": [ { "comments": [], "keyword": "When ", "name": "I was", "line": 24, "rows": [ { "comments": [], "line": 25, "cells": ["asleep"] } ] }, { "comments": [], "keyword": "And ", "name": "so", "line": 26, "doc_string": { "value": "innocent", "line": 27 } } ] }, { "comments": [{"value": "# The"}], "tags": [], "keyword": "Scenario Outline", "description": "", "type": "scenario_outline", "line": 32, "id": "oh-hai/with", "name": "with", "steps": [ { "comments": [{"value": "# all"}], "keyword": "Then ", "line": 34, "name": "nice" } ], "examples": [ { "type": "examples", "comments": [{"value": "# comments"}, {"value": "# everywhere"}], "tags": [], "keyword": "Examples", "id": "oh-hai/with/an-example", "name": "An example", "description": "", "line": 38, "rows": [ { "comments": [{"value": "# I mean"}], "line": 40, "cells": ["partout"] }, { "comments": [{"value": "# I really mean"}], "line": 40, "cells": ["bartout"] } ] } ] } ] } ] """ Then the outputted text should be: """ @one Feature: OH HAI Scenario: Fujin Given wind Then spirit @two Scenario: _why Given chunky Then bacon @three @four Scenario Outline: Life Given some @five Examples: Real life | boredom | | airport | | meeting | Scenario: who stole my mojo? When I was | asleep | And so \"\"\" innocent \"\"\" # The Scenario Outline: with # all Then nice # comments # everywhere Examples: An example # I mean | partout | # I really mean | bartout | """ Scenario: Feature with Background Given the following JSON is parsed: """ [ { "comments": [], "description": "", "keyword": "Feature", "id": "kjapp", "name": "Kjapp", "tags": [], "uri": "test.feature", "elements": [ { "type": "background", "comments": [], "description": "", "keyword": "Background", "line": 2, "name": "No idea what Kjapp means", "steps": [ { "comments": [], "keyword": "Given ", "line": 3, "name": "I Google it" } ] }, { "type": "scenario", "comments": [{"value": "# Writing JSON by hand sucks"}], "tags": [], "keyword": "Scenario", "id": "kjapp/", "name": "", "description": "", "line": 6, "steps": [ { "comments": [], "keyword": "Then ", "name": "I think it means \"fast\"", "line": 7 } ] } ] } ] """ Then the outputted text should be: """ Feature: Kjapp Background: No idea what Kjapp means Given I Google it # Writing JSON by hand sucks Scenario: Then I think it means "fast" """ gherkin-2.12.2/features/pretty_formatter.feature0000644000004100000410000000140212244512574022065 0ustar www-datawww-data@cucumber-source-available Feature: Pretty Formatter In order to have pretty gherkin I want to verify that all prettified cucumber features parse OK Scenario: Parse all the features in Cucumber Given I have Cucumber's source code next to Gherkin's And I find all of the .feature files When I send each prettified original through the "pretty" machinery Then the machinery output should be identical to the prettified original @no-javascript Scenario: Parse all the features in Cucumber with JSON Given I have Cucumber's source code next to Gherkin's And I find all of the .feature files When I send each prettified original through the "json" machinery Then the machinery output should be identical to the prettified original gherkin-2.12.2/features/.cucumber/0000755000004100000410000000000012244512574016764 5ustar www-datawww-datagherkin-2.12.2/features/.cucumber/stepdefs.json0000644000004100000410000001233412244512574021477 0ustar www-datawww-data[ { "file_colon_line": "features/step_definitions/eyeball_steps.rb:1", "flags": "", "source": "^they have arrived$", "steps": [ { "args": [ ], "name": "they have arrived" } ] }, { "file_colon_line": "features/step_definitions/gherkin_steps.rb:1", "flags": "", "source": "^a \"(ruby|native)\" \"([^\\\"]*)\" parser$", "steps": [ ] }, { "file_colon_line": "features/step_definitions/gherkin_steps.rb:5", "flags": "", "source": "^the\\ following\\ text\\ is\\ parsed:$", "steps": [ { "args": [ ], "name": "the following text is parsed:" } ] }, { "file_colon_line": "features/step_definitions/gherkin_steps.rb:9", "flags": "", "source": "^there\\ should\\ be\\ no\\ parse\\ errors$", "steps": [ { "args": [ ], "name": "there should be no parse errors" } ] }, { "file_colon_line": "features/step_definitions/gherkin_steps.rb:13", "flags": "", "source": "^there should be a parse error on (line \\d+)$", "steps": [ { "args": [ { "offset": 33, "val": "line 1" } ], "name": "there should be a parse error on line 1" } ] }, { "file_colon_line": "features/step_definitions/gherkin_steps.rb:17", "flags": "", "source": "^there should be parse errors on (lines .*)$", "steps": [ { "args": [ { "offset": 32, "val": "lines 1 and 2" } ], "name": "there should be parse errors on lines 1 and 2" }, { "args": [ { "offset": 32, "val": "lines 1 through 3" } ], "name": "there should be parse errors on lines 1 through 3" }, { "args": [ { "offset": 32, "val": "lines 10 and 17" } ], "name": "there should be parse errors on lines 10 and 17" }, { "args": [ { "offset": 32, "val": "lines 3 and 5" } ], "name": "there should be parse errors on lines 3 and 5" }, { "args": [ { "offset": 32, "val": "lines 5, 10 and 12" } ], "name": "there should be parse errors on lines 5, 10 and 12" } ] }, { "file_colon_line": "features/step_definitions/json_formatter_steps.rb:13", "flags": "", "source": "^a JSON formatter$", "steps": [ ] }, { "file_colon_line": "features/step_definitions/json_formatter_steps.rb:18", "flags": "", "source": "^the outputted JSON should be:$", "steps": [ { "args": [ ], "name": "the outputted JSON should be:" } ] }, { "file_colon_line": "features/step_definitions/json_parser_steps.rb:6", "flags": "", "source": "^a PrettyFormatter$", "steps": [ ] }, { "file_colon_line": "features/step_definitions/json_parser_steps.rb:11", "flags": "", "source": "^a JSON lexer$", "steps": [ ] }, { "file_colon_line": "features/step_definitions/json_parser_steps.rb:15", "flags": "", "source": "^the following JSON is parsed:$", "steps": [ { "args": [ ], "name": "the following JSON is parsed:" } ] }, { "file_colon_line": "features/step_definitions/json_parser_steps.rb:19", "flags": "", "source": "^the outputted text should be:$", "steps": [ { "args": [ ], "name": "the outputted text should be:" } ] }, { "file_colon_line": "features/step_definitions/pretty_formatter_steps.rb:50", "flags": "", "source": "^I have Cucumber's source code next to Gherkin's$", "steps": [ { "args": [ ], "name": "I have Cucumber's source code next to Gherkin's" } ] }, { "file_colon_line": "features/step_definitions/pretty_formatter_steps.rb:55", "flags": "", "source": "^I find all of the \\.feature files$", "steps": [ { "args": [ ], "name": "I find all of the .feature files" } ] }, { "file_colon_line": "features/step_definitions/pretty_formatter_steps.rb:59", "flags": "", "source": "^I send each prettified original through the \"([^\"]*)\" machinery$", "steps": [ { "args": [ { "offset": 45, "val": "json" } ], "name": "I send each prettified original through the \"json\" machinery" }, { "args": [ { "offset": 45, "val": "pretty" } ], "name": "I send each prettified original through the \"pretty\" machinery" } ] }, { "file_colon_line": "features/step_definitions/pretty_formatter_steps.rb:83", "flags": "", "source": "^the machinery output should be identical to the prettified original$", "steps": [ { "args": [ ], "name": "the machinery output should be identical to the prettified original" } ] } ]gherkin-2.12.2/features/native_lexer.feature0000644000004100000410000000063412244512574021146 0ustar www-datawww-dataFeature: Native (C/Java) Lexer Background: Given a "native" "root" parser Scenario: Parsing an empty feature Given the following text is parsed: """ Feature: blah """ Then there should be no parse errors Scenario: Parsing a comment Given the following text is parsed: """ # A comment Feature: Hello """ Then there should be no parse errors gherkin-2.12.2/features/escaped_pipes.feature0000644000004100000410000000027212244512574021263 0ustar www-datawww-dataFeature: Escaped pipes Scenario: They are the future Given they have arrived | æ | o | | a | ø | Given they have arrived | æ | \|o | | \|a | ø\\ |gherkin-2.12.2/features/feature_parser.feature0000644000004100000410000001607112244512574021472 0ustar www-datawww-data# language: en Feature: Gherkin Feature lexer In order to make it easy to control the Gherkin syntax As a Gherkin developer bent on Gherkin world-domination I want a feature lexer that uses a feature parser to make all the syntax decisions for me Background: Given a "ruby" "root" parser Scenario: Correctly formed feature Given the following text is parsed: """ # Apologies to Bill Watterson @cardboard_box @wip Feature: Transmogrification As a young boy with a hyperactive imagination I want a cardboard box In order to transform the ennui of suburban life into something befitting my imagination Background: Given I have a transmogrifier And I am a member of G.R.O.S.S Scenario: Whoozit to whatzit transmogrification Given I have a whoozit When I put it in the transmogrifier And I press the "transmogrify" button Then I should have a whatzit Scenario Outline: Imaginary Beings Given I have a When I transmogrify it with the incantation: \"\"\" ALAKAZAM! \"\"\" Then I should have an Examples: | boring being | exciting being | | Sparrow | Alicanto | | Goldfish | Baldanders | | Cow | Hsiao | Scenario: Sense of humor detection Given the following excerpt: \"\"\" WOMAN: Who are the Britons? ARTHUR: Well, we all are. we're all Britons and I am your king. WOMAN: I didn't know we had a king. I thought we were an autonomous collective. DENNIS: You're fooling yourself. We're living in a dictatorship. A self-perpetuating autocracy in which the working classes-- WOMAN: Oh there you go, bringing class into it again. DENNIS: That's what it's all about if only people would-- ARTHUR: Please, please good people. I am in haste. Who lives in that castle? \"\"\" When I read it Then I should be amused """ Then there should be no parse errors Scenario: Keyword before feature Given the following text is parsed: """ Scenario: Bullying my way to the head of the line Given I am a big bully of a scenario Then I should be caught by the syntax police(y) Feature: Too timid to stand up for myself """ Then there should be parse errors on lines 1 through 3 Scenario: Multiple Features in file Given the following text is parsed: """ Feature: Scenario: Hi Feature: Uh ohs Scenario Outline: Feature: This is silly """ Then there should be parse errors on lines 3 and 5 Scenario: Tag ends background and scenario Given the following text is parsed: """ Feature: test feature Background: Given a something @tag And something else @foo Scenario: my scenario @tag Given this is a step @oh_hai And this is a horrible idea Then it shouldn't work """ Then there should be parse errors on lines 5, 10 and 12 Scenario: Malformed Tables Given the following text is parsed: """ Feature: Antiques Roadshow Scenario Outline: Table Given a Then a Examples: | foo | bar | | 42 | towel | @hello | 1 | prime | Scenario: Table arguments Given this step needs this table: | foo | bar | | one | two | @tag | aaa | bbb | """ Then there should be parse errors on lines 10 and 17 Scenario: Well-formed Tables Given the following text is parsed: """ Feature: Row-by-row Scenario: Tables with comments! Given I can now comment out a row: | Key | Value | # | Yes | No | # | Good | Bad | | Good | Evil | Then I am pleased by these things: | Raindrops | Roses | # | Whiskers | Kittens | | Bright Copper | Kettles | # | Warm woolen | Mittens | | Also Oban | And Hendricks | """ Then there should be no parse errors Scenario: Multiline keyword descriptions Given the following text is parsed: """ Feature: Documentation is fun Scenario Outline: With lots of docs We need lots of embedded documentation for some reason \"\"\" # Not interpreted as a pystring, just plain text Oh hai \"\"\" La la la Examples: | one | two | | foo | bar | \"\"\" Oh Hello \"\"\" # Body of the scenario outline starts below Given And something # The real examples table Examples: | something | else | | orange | apple | """ Then there should be no parse errors Scenario: Scenario Outline with multiple Example groups Given the following text is parsed: """ Feature: Outline Sample Scenario: I have no steps Scenario Outline: Test state Given without a table Given without a table Examples: Rainbow colours | state | other_state | | missing | passing | | passing | passing | | failing | passing | Examples: Only passing | state | other_state | | passing | passing | """ Then there should be no parse errors Scenario: Multiple Scenario Outlines with multiline outline steps Given the following text is parsed: """ Feature: Test Scenario Outline: with step tables Given I have the following fruits in my pantry | name | quantity | | cucumbers | 10 | | strawberrys | 5 | | apricots | 7 | When I eat from the pantry Then I should have in the pantry Examples: | number | fruits | left | | 2 | cucumbers | 8 | | 4 | strawberrys | 1 | | 2 | apricots | 5 | Scenario Outline: placeholder in a multiline string Given my shopping list \"\"\" Must buy some \"\"\" Then my shopping list should equal \"\"\" Must buy some cucumbers \"\"\" Examples: | fruits | | cucumbers | """ Then there should be no parse errors gherkin-2.12.2/features/parser_with_native_lexer.feature0000644000004100000410000001430712244512574023557 0ustar www-datawww-dataFeature: Gherkin Feature lexer/parser In order to make it easy to control the Gherkin syntax As a Gherkin developer bent on Gherkin world-domination I want a feature lexer that uses a feature parser to make all the syntax decisions for me Background: Given a "native" "root" parser Scenario: Correctly formed feature When the following text is parsed: """ # Apologies to Bill Watterson @cardboard_box @wip Feature: Transmogrification As a young boy with a hyperactive imagination I want a cardboard box In order to transform the ennui of suburban life into something befitting my imagination Background: Given I have a transmogrifier And I am a member of G.R.O.S.S Scenario: Whoozit to whatzit transmogrification Given I have a whoozit When I put it in the transmogrifier And I press the "transmogrify" button Then I should have a whatzit Scenario Outline: Imaginary Beings Given I have a When I transmogrify it with the incantation: \"\"\" ALAKAZAM! \"\"\" Then I should have an Examples: | boring being | exciting being | | Sparrow | Alicanto | | Goldfish | Baldanders | | Cow | Hsiao | Scenario: Sense of humor detection Given the following excerpt: \"\"\" WOMAN: Who are the Britons? ARTHUR: Well, we all are. we're all Britons and I am your king. WOMAN: I didn't know we had a king. I thought we were an autonomous collective. DENNIS: You're fooling yourself. We're living in a dictatorship. A self-perpetuating autocracy in which the working classes-- WOMAN: Oh there you go, bringing class into it again. DENNIS: That's what it's all about if only people would-- ARTHUR: Please, please good people. I am in haste. Who lives in that castle? \"\"\" When I read it Then I should be amused """ Then there should be no parse errors Scenario: Keyword before feature When the following text is parsed: """ Scenario: Bullying my way to the head of the line Given I am a big bully of a scenario Then I should be caught by the syntax police(y) Feature: Too timid to stand up for myself """ Then there should be parse errors on lines 1 through 3 Scenario: Tag ends background and scenario When the following text is parsed: """ Feature: test feature Background: Given a something @tag And something else @foo Scenario: my scenario @tag Given this is a step @oh_hai And this is a horrible idea Then it shouldn't work """ Then there should be parse errors on lines 5, 10 and 12 Scenario: Tables When the following text is parsed: """ Feature: Antiques Roadshow Scenario Outline: Table Given a Then a Examples: | foo | bar | | 42 | towel | @hello | 1 | prime | Scenario: Table arguments Given this step needs this table: | foo | bar | | one | two | @tag | aaa | bbb | """ Then there should be parse errors on lines 10 and 17 Scenario: Multiline keyword descriptions When the following text is parsed: """ Feature: Documentation is fun Scenario Outline: With lots of docs We need lots of embedded documentation for some reason \"\"\" # Not interpreted as a docstring, just plain text Oh hai \"\"\" La la la Examples: | one | two | | foo | bar | \"\"\" Oh Hello \"\"\" # Body of the scenario outline starts below Given And something # The real examples table Examples: | something | else | | orange | apple | """ Then there should be no parse errors Scenario: Scenario Outline with multiple Example groups When the following text is parsed: """ Feature: Outline Sample Scenario: I have no steps Scenario Outline: Test state Given without a table Given without a table Examples: Rainbow colours | state | other_state | | missing | passing | | passing | passing | | failing | passing | Examples: Only passing | state | other_state | | passing | passing | """ Then there should be no parse errors Scenario: Multiple Scenario Outlines with multiline outline steps When the following text is parsed: """ Feature: Test Scenario Outline: with step tables Given I have the following fruits in my pantry | name | quantity | | cucumbers | 10 | | strawberrys | 5 | | apricots | 7 | When I eat from the pantry Then I should have in the pantry Examples: | number | fruits | left | | 2 | cucumbers | 8 | | 4 | strawberrys | 1 | | 2 | apricots | 5 | Scenario Outline: placeholder in a multiline string Given my shopping list \"\"\" Must buy some \"\"\" Then my shopping list should equal \"\"\" Must buy some cucumbers \"\"\" Examples: | fruits | | cucumbers | """ Then there should be no parse errors gherkin-2.12.2/features/support/0000755000004100000410000000000012244512574016615 5ustar www-datawww-datagherkin-2.12.2/features/support/env.rb0000644000004100000410000000147712244512574017743 0ustar www-datawww-dataif RUBY_VERSION =~ /1.9/ Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 end require 'rubygems' require 'bundler' Bundler.setup # I'm sure there's a better way than this... %w{ /../../spec /../../lib}.each do |path| $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + path) end require 'gherkin' require 'gherkin/sexp_recorder' module TransformHelpers def tr_line_number(step_arg) /(\d+)$/.match(step_arg)[0].to_i end def tr_line_numbers(step_arg) if step_arg =~ /through/ Range.new(*step_arg.scan(/\d+/).collect { |i| i.to_i }) else step_arg.scan(/\d+/).collect { |i| i.to_i } end end end class GherkinWorld include TransformHelpers def initialize @formatter = Gherkin::SexpRecorder.new end end World do GherkinWorld.new end gherkin-2.12.2/.rspec0000644000004100000410000000000712244512574014375 0ustar www-datawww-data--colorgherkin-2.12.2/.ruby-version0000644000004100000410000000001312244512574015722 0ustar www-datawww-data2.0.0-p247 gherkin-2.12.2/spec/0000755000004100000410000000000012244512574014215 5ustar www-datawww-datagherkin-2.12.2/spec/spec_helper.rb0000644000004100000410000000364712244512574017045 0ustar www-datawww-datadef silence_warnings(&block) warn_level = $VERBOSE $VERBOSE = nil result = block.call $VERBOSE = warn_level result end if RUBY_VERSION =~ /1\.9|2\.0/ silence_warnings do Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 end end if defined?(JRUBY_VERSION) java_import java.util.ArrayList ArrayList.__persistent__ = true end require 'rubygems' require 'bundler' Bundler.setup require 'rspec' require 'gherkin' require 'stringio' require 'gherkin/sexp_recorder' require 'gherkin/shared/encoding_group' require 'gherkin/shared/lexer_group' require 'gherkin/shared/tags_group' require 'gherkin/shared/doc_string_group' require 'gherkin/shared/row_group' require 'gherkin/lexer/encoding' $:.unshift(File.dirname(__FILE__)) module GherkinSpecHelper def scan_file(file) @lexer.scan(fixture(file)) end def fixture(file) encoding = Gherkin::Lexer::Encoding.new encoding.read_file(File.dirname(__FILE__) + "/gherkin/fixtures/" + file) end def rubify_hash(hash) if defined?(JRUBY_VERSION) h = {} hash.keySet.each{|key| h[key] = hash[key]} h else hash end end end RSpec.configure do |c| c.include(GherkinSpecHelper) end # Allows comparison of Java List with Ruby Array (rows) RSpec::Matchers.define :r do |expected| match do |row| silence_warnings do def row.inspect "r " + self.map{|cell| cell}.inspect end end row.map{|cell| cell}.should == expected end end RSpec::Matchers.define :a do |expected| match do |array| silence_warnings do def array.inspect "a " + self.map{|e| e.to_sym}.inspect end end array.map{|e| e.to_sym}.should == expected end end RSpec::Matchers.define :sym do |expected| match do |actual| expected.to_s == actual.to_s end end RSpec::Matchers.define :allow do |event| match do |parser| parser.expected.index(event) end end gherkin-2.12.2/spec/gherkin/0000755000004100000410000000000012244512574015644 5ustar www-datawww-datagherkin-2.12.2/spec/gherkin/tag_expression_spec.rb0000644000004100000410000000721512244512574022242 0ustar www-datawww-datarequire 'spec_helper' require 'gherkin/tag_expression' require 'gherkin/formatter/model' module Gherkin describe TagExpression do def tag(name) Formatter::Model::Tag.new(name, 0) end context "no tags" do before(:each) do @e = Gherkin::TagExpression.new([]) end it 'should be empty' do @e.should be_empty end it "should match @foo" do @e.evaluate([tag('@foo')]).should == true end it "should match empty tags" do @e.evaluate([]).should == true end end context "@foo" do before(:each) do @e = Gherkin::TagExpression.new(['@foo']) end it "should match @foo" do @e.evaluate([tag('@foo')]).should == true end it "should not match @bar" do @e.evaluate([tag('@bar')]).should == false end it "should not match no tags" do @e.evaluate([]).should == false end end context "!@foo" do before(:each) do @e = Gherkin::TagExpression.new(['~@foo']) end it "should match @bar" do @e.evaluate([tag('@bar')]).should == true end it "should not match @foo" do @e.evaluate([tag('@foo')]).should == false end end context "@foo || @bar" do before(:each) do @e = Gherkin::TagExpression.new(['@foo,@bar']) end it "should match @foo" do @e.evaluate([tag('@foo')]).should == true end it "should match @bar" do @e.evaluate([tag('@bar')]).should == true end it "should not match @zap" do @e.evaluate([tag('@zap')]).should == false end end context "(@foo || @bar) && !@zap" do before(:each) do @e = Gherkin::TagExpression.new(['@foo,@bar', '~@zap']) end it "should match @foo" do @e.evaluate([tag('@foo')]).should == true end it "should not match @foo @zap" do @e.evaluate([tag('@foo'), tag('@zap')]).should == false end end context "(@foo:3 || !@bar:4) && @zap:5" do before(:each) do @e = Gherkin::TagExpression.new(['@foo:3,~@bar','@zap:5']) end it "should count tags for positive tags" do rubify_hash(@e.limits).should == {'@foo' => 3, '@zap' => 5} end it "should match @foo @zap" do @e.evaluate([tag('@foo'), tag('@zap')]).should == true end end context "Parsing '@foo:3,~@bar', '@zap:5'" do before(:each) do @e = Gherkin::TagExpression.new([' @foo:3 , ~@bar ', ' @zap:5 ']) end unless defined?(JRUBY_VERSION) it "should split and trim (ruby implementation detail)" do @e.__send__(:ruby_expression).should == "(!vars['@bar']||vars['@foo'])&&(vars['@zap'])" end end it "should have limits" do rubify_hash(@e.limits).should == {"@zap"=>5, "@foo"=>3} end end context "Tag limits" do it "should be counted for negative tags" do @e = Gherkin::TagExpression.new(['~@todo:3']) rubify_hash(@e.limits).should == {"@todo"=>3} end it "should be counted for positive tags" do @e = Gherkin::TagExpression.new(['@todo:3']) rubify_hash(@e.limits).should == {"@todo"=>3} end it "should raise an error for inconsistent limits" do lambda do @e = Gherkin::TagExpression.new(['@todo:3', '~@todo:4']) end.should raise_error(/Inconsistent tag limits for @todo: 3 and 4/) end it "should allow duplicate consistent limits" do @e = Gherkin::TagExpression.new(['@todo:3', '~@todo:3']) rubify_hash(@e.limits).should == {"@todo"=>3} end end end end gherkin-2.12.2/spec/gherkin/java_lexer_spec.rb0000644000004100000410000000100212244512574021314 0ustar www-datawww-data#encoding: utf-8 if defined?(JRUBY_VERSION) require 'spec_helper' module Gherkin module JavaLexer describe "Java Lexer" do before do @listener = Gherkin::SexpRecorder.new @lexer = Java::GherkinLexer::I18nLexer.new(@listener) end it_should_behave_like "a Gherkin lexer" it_should_behave_like "a Gherkin lexer lexing tags" it_should_behave_like "a Gherkin lexer lexing doc_strings" it_should_behave_like "a Gherkin lexer lexing rows" end end end end gherkin-2.12.2/spec/gherkin/json_parser_spec.rb0000644000004100000410000001224512244512574021534 0ustar www-datawww-data#encoding: utf-8 require 'stringio' require 'spec_helper' require 'gherkin/json_parser' require 'gherkin/formatter/json_formatter' require 'multi_json' module Gherkin describe JSONParser do def check_json(json) io = StringIO.new f = Formatter::JSONFormatter.new(io) p = JSONParser.new(f, f) p.parse(json) f.done expected = MultiJson.load(json) actual = MultiJson.load(io.string) begin actual.should == expected rescue puts "EXPECTED" puts json puts "ACTUAL" puts io.string puts "======" raise end end it "should parse a barely empty feature" do check_json(%{[ { "id": "one", "uri": "test.feature", "keyword": "Feature", "name": "One", "description": "", "line" : 3 } ]}) end it "should parse feature with tags and one scenario" do check_json(%{[ { "id": "one", "uri": "test.feature", "tags": [ { "name": "@foo", "line": 22 } ], "keyword": "Feature", "name": "One", "description": "", "line": 3, "elements": [ { "id": "one/two", "type": "scenario", "steps": [ { "name": "Hello", "rows": [ { "cells": ["foo", "bar"] } ] } ] } ] } ]}) end it "should parse feature with match, result and embedding" do check_json(%{ [ { "id":"one", "uri":"test.feature", "tags":[ { "name":"@foo", "line":22 } ], "keyword":"Feature", "name":"One", "description":"", "line":3, "elements":[ { "id":"one/a-scenario", "type":"scenario", "steps":[ { "keyword":"Given ", "name":"a passing step", "line":6, "match":{ "arguments":[ { "offset":22, "val":"cukes" } ], "location":"features/step_definitions/steps.rb:1" }, "result":{ "status":"failed", "error_message":"You suck", "duration":-1 }, "embeddings":[ { "mime_type":"text/plain", "data":"Tm8sIEknbSBub3QgaW50ZXJlc3RlZCBpbiBkZXZlbG9waW5nIGEgcG93ZXJmdWwgYnJhaW4uIEFsbCBJJ20gYWZ0ZXIgaXMganVzdCBhIG1lZGlvY3JlIGJyYWluLCBzb21ldGhpbmcgbGlrZSB0aGUgUHJlc2lkZW50IG9mIHRoZSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaCBDb21wYW55Lg==" } ], "output":[ "Hello", "World" ] } ], "after": [ { "match":{ "location":"features/step_definitions/hooks.rb:1" }, "result":{ "status":"passed", "error_message":"Passed after", "duration": 3 } }, { "match":{ "location":"features/step_definitions/hooks.rb:3" }, "result":{ "status":"failed", "error_message":"Failed After", "duration": 22 } } ] } ] } ] }) end it "shoud parse a complex feature" do check_json('[' + fixture("complex.json") + ']') end end end gherkin-2.12.2/spec/gherkin/formatter/0000755000004100000410000000000012244512574017647 5ustar www-datawww-datagherkin-2.12.2/spec/gherkin/formatter/spaces.feature0000644000004100000410000000025312244512574022502 0ustar www-datawww-dataFeature: Adding Scenario: Add two numbers Given the following input: """ hello """ When the calculator is run Then the output should be 4 gherkin-2.12.2/spec/gherkin/formatter/step_printer_spec.rb0000644000004100000410000000305012244512574023722 0ustar www-datawww-data# encoding: utf-8 require 'spec_helper' require 'gherkin/formatter/step_printer' require 'gherkin/formatter/argument' require 'stringio' module Gherkin module Formatter class ParenthesisFormat def text(text) "(#{text})" end end class BracketFormat def text(text) "[#{text}]" end end describe StepPrinter do before do @io = StringIO.new @p = StepPrinter.new @pf = ParenthesisFormat.new @bf = BracketFormat.new end it "should replace 0 args" do @p.write_step(@io, @pf, @bf, "I have 10 cukes", []) @io.string.should == "(I have 10 cukes)" end it "should replace 1 arg" do @p.write_step(@io, @pf, @bf, "I have 10 cukes", [Argument.new(7, '10')]) @io.string.should == "(I have )[10]( cukes)" end it "should replace 1 unicode arg" do @p.write_step(@io, @pf, @bf, "I hæve øæ cåkes", [Argument.new(7, 'øæ')]) @io.string.should == "(I hæve )[øæ]( cåkes)" end it "should replace 2 args" do @p.write_step(@io, @pf, @bf, "I have 10 yellow cukes in my belly", [Argument.new(7, '10'), Argument.new(17, 'cukes')]) @io.string.should == "(I have )[10]( yellow )[cukes]( in my belly)" end it "should replace 2 unicode args" do @p.write_step(@io, @pf, @bf, "Æslåk likes æøå", [Argument.new(0, 'Æslåk'), Argument.new(12, 'æøå')]) @io.string.should == "[Æslåk]( likes )[æøå]" end end end end gherkin-2.12.2/spec/gherkin/formatter/ansi_escapes_spec.rb0000644000004100000410000000126412244512574023646 0ustar www-datawww-datarequire 'spec_helper' require 'gherkin/formatter/ansi_escapes' module Gherkin module Formatter describe AnsiEscapes do describe "instance methods" do include AnsiEscapes it "failed should be red" do failed.should == "\e[31m" end it "failed_arg should be red bold" do failed_arg.should == "\e[31m\e[1m" end end describe "class methods" do subject { AnsiEscapes } it "failed should be red" do subject.failed.should == "\e[31m" end it "failed_arg should be red bold" do subject.failed_arg.should == "\e[31m\e[1m" end end end end end gherkin-2.12.2/spec/gherkin/formatter/filter_formatter_spec.rb0000644000004100000410000001412712244512574024563 0ustar www-datawww-data# encoding: utf-8 require 'stringio' require 'spec_helper' require 'gherkin/parser/parser' require 'gherkin/formatter/filter_formatter' require 'gherkin/formatter/pretty_formatter' module Gherkin module Formatter describe FilterFormatter do attr_accessor :file before do self.file = 'complex_for_filtering.feature' end def verify_filter(filters, *line_ranges) io = StringIO.new pretty_formatter = Gherkin::Formatter::PrettyFormatter.new(io, true, false) filter_formatter = Gherkin::Formatter::FilterFormatter.new(pretty_formatter, filters) parser = Gherkin::Parser::Parser.new(filter_formatter) path = File.dirname(__FILE__) + "/../fixtures/" + file source = File.new(path).read + "# __EOF__" parser.parse(source, path, 0) source_lines = source.split("\n") expected = (line_ranges.map do |line_range| source_lines[(line_range.first-1..line_range.last-1)] end.flatten).join("\n").gsub(/# __EOF__/, '') io.string.strip.should == expected.strip end context "invalid mix" do it "should throw exception on different filters" do lambda do verify_filter(['@tag1', /regexp/, 88], 1..61) end.should raise_exception(/Inconsistent filters/) end end context "tags" do it "should filter on feature tag" do verify_filter(['@tag1'], 1..61) end it "should filter on scenario tag" do verify_filter(['@tag4'], 1..19) end it "should filter on abother scenario tag" do verify_filter(['@tag3'], 1..37) end it "should filter on scenario outline tag" do verify_filter(['@more'], 1..14, 46..61) end it "should filter on first examples tag" do verify_filter(['@neat'], 1..14, 46..55) end it "should filter on second examples tag" do verify_filter(['@hamster'], 1..14, 46..49, 56..61) end it "should not replay examples from ignored scenario outline" do self.file = 'scenario_outline_with_tags.feature' verify_filter(['~@wip'], 1..2, 12..14) end it "should not replay examples from ignored scenario outline" do self.file = 'scenario_outline_with_tags.feature' verify_filter(['~@wip'], 1..2, 12..14) end it "should not choke on examples with only header" do self.file = 'examples_with_only_header.feature' verify_filter(['@failing'], 1..7, 12..15) end end context "names" do it "should filter on scenario name" do verify_filter([/Reading a Scenario/], 1..19) end it "should filter on scenario outline name" do verify_filter([/More/], 1..14, 46..61) end it "should filter on first examples name" do verify_filter([/Neato/], 1..14, 46..55) end it "should filter on second examples name" do verify_filter([/Rodents/], 1..14, 46..49, 56..61) end it "should filter on various names" do self.file = 'hantu_pisang.feature' verify_filter([/Pisang/], 1..8, 19..32) end it "should filter on background name" do self.file = 'hantu_pisang.feature' verify_filter([/The background/], 1..5) end it "should not choke on examples with only header" do self.file = 'examples_with_only_header.feature' verify_filter([/B/], 1..7, 12..15) end end context "lines" do context "on the same line as feature element keyword" do it "should filter on scenario without line" do self.file = 'scenario_without_steps.feature' verify_filter([3], 1..4) end it "should filter on scenario line" do verify_filter([16], 1..19) end it "should filter on scenario outline line" do verify_filter([47], 1..14, 46..61) end it "should filter on first examples line" do verify_filter([51], 1..14, 46..55) end it "should filter on second examples line" do verify_filter([57], 1..14, 46..49, 56..61) end it "should not choke on examples with only header" do self.file = 'examples_with_only_header.feature' verify_filter([13], 1..7, 12..15) verify_filter([14], 1..7, 12..15) end it "should fix issue 145" do self.file = 'issue_145.feature' verify_filter([14], 1..2, 6..12, 14..14) end it "should fix issue 145 more tests" do self.file = 'issue_145.feature' verify_filter([13,15,18], 1..2, 6..13, 15..15, 16..18) end end context "on the same line as step keyword" do it "should filter on step line" do verify_filter([17], 1..19) end it "should filter on scenario outline line" do verify_filter([48], 1..14, 46..61) end end context "on examples header line" do it "should filter on first table" do verify_filter([52], 1..14, 46..55) end it "should filter on second table" do verify_filter([58], 1..14, 46..49, 56..61) end end context "on examples example line" do it "should filter on first table" do verify_filter([53], 1..14, 46..53, 55..55) end end context "on tag line" do it "should filter on first tag" do verify_filter([15], 1..19) end end context "multiline argument" do it "should filter on table line" do verify_filter([36], 1..14, 20..37) end it "should filter on first pystring quote" do verify_filter([41], 1..14, 38..45) end it "should filter on last pystring quote" do verify_filter([44], 1..14, 38..45) end end end end end end gherkin-2.12.2/spec/gherkin/formatter/pretty_formatter_spec.rb0000644000004100000410000001413012244512574024617 0ustar www-datawww-data# encoding: utf-8 require 'spec_helper' require 'gherkin/formatter/pretty_formatter' require 'gherkin/formatter/argument' require 'gherkin/formatter/model' require 'gherkin/listener/formatter_listener' require 'gherkin/parser/parser' require 'stringio' module Gherkin module Formatter describe PrettyFormatter do include AnsiEscapes def assert_io_include(s) actual = @io.string actual.gsub!(/\e\[m/, "\e[0m") # JANSI resets without the 0. actual.should include(s) end def assert_pretty(input, expected_output=input) [true, false].each do |force_ruby| io = StringIO.new pf = Gherkin::Formatter::PrettyFormatter.new(io, true, false) parser = Gherkin::Parser::Parser.new(pf, true, "root", force_ruby) parser.parse(input, "test.feature", 0) output = io.string output.should == expected_output end end before do @io = StringIO.new @f = Gherkin::Formatter::PrettyFormatter.new(@io, false, true) end it "should print comments when scenario is longer" do @f.uri("features/foo.feature") @f.feature(Model::Feature.new([], [], "Feature", "Hello", "World", 1, "hello")) @f.scenario(Model::Scenario.new([], [], "Scenario", "The scenario", "", 4, "the-scenario")) @f.step(Model::Step.new([], "Given ", "some stuff", 5, nil, nil)) @f.step(Model::Step.new([], "When ", "foo", 6, nil, nil)) @f.match(Model::Match.new([], "features/step_definitions/bar.rb:56")) @f.result(Model::Result.new('passed', 22, nil)) @f.match(Model::Match.new([], "features/step_definitions/bar.rb:96")) @f.result(Model::Result.new('passed', 33, nil)) @f.eof() assert_io_include(%{Feature: Hello World Scenario: The scenario #{comments}# features/foo.feature:4#{reset} }) assert_io_include(%{ #{passed}Given #{reset}#{passed}some stuff#{reset} #{comments}# features/step_definitions/bar.rb:56#{reset} }) assert_io_include(%{ #{passed}When #{reset}#{passed}foo#{reset} #{comments}# features/step_definitions/bar.rb:96#{reset} }) end it "should print comments when step is longer" do @f.uri("features/foo.feature") @f.feature(Model::Feature.new([], [], "Feature", "Hello", "World", 1, "hello")) step = Model::Step.new([], "Given ", "some stuff that is longer", 5, nil, nil) match = Model::Match.new([], "features/step_definitions/bar.rb:56") result = Model::Result.new('passed', 0, nil) @f.scenario(Model::Scenario.new([], [], "Scenario", "The scenario", "", 4, "the-scenario")) @f.step(step) @f.match(match) @f.result(result) @f.eof() assert_io_include(%{Feature: Hello World Scenario: The scenario #{comments}# features/foo.feature:4#{reset} }) assert_io_include(%{ #{passed}Given #{reset}#{passed}some stuff that is longer#{reset} #{comments}# features/step_definitions/bar.rb:56#{reset} }) end it "should highlight arguments for regular steps" do @f.uri("foo.feature") @f.scenario(Model::Scenario.new([], [], "Scenario", "Lots of cukes", "", 3, "lots-of-cukes")) @f.step(Model::Step.new([], "Given ", "I have 999 cukes in my belly", 3, nil, nil)) @f.match(Model::Match.new([Gherkin::Formatter::Argument.new(7, '999')], nil)) @f.result(Model::Result.new('passed', 6, nil)) @f.eof() assert_io_include( "\n" + " Scenario: Lots of cukes \e[90m# foo.feature:3\e[0m\n") assert_io_include( " #{passed}Given #{reset}#{passed}I have #{reset}#{passed_arg}999#{reset}#{passed} cukes in my belly#{reset}\n" ) end # See https://github.com/cucumber/gherkin/pull/171 it "should highlight arguments when there are optional arguments" do @f.uri("foo.feature") @f.scenario(Model::Scenario.new([], [], "Scenario", "Lots of cukes", "", 3, "lots-of-cukes")) @f.step(Model::Step.new([], "Given ", "I have 999 cukes in my belly", 3, nil, nil)) @f.match(Model::Match.new([ Gherkin::Formatter::Argument.new(nil, nil), # An optional argument Gherkin::Formatter::Argument.new(7, '999') ], nil)) @f.result(Model::Result.new('passed', 6, nil)) @f.eof() assert_io_include( "\n" + " Scenario: Lots of cukes \e[90m# foo.feature:3\e[0m\n" ) assert_io_include( " #{passed}Given #{reset}#{passed}I have #{reset}#{passed_arg}999#{reset}#{passed} cukes in my belly#{reset}\n" ) end it "should prettify scenario" do assert_pretty(%{Feature: Feature Description Some preamble Scenario: Scenario Description description has multiple lines Given there is a step """ with pystrings """ And there is another step | æ | \\|o | | \\|a | ø\\\\ | Then we will see steps }) end it "should prettify scenario outline with table" do assert_pretty(%{# A feature comment @foo Feature: Feature Description Some preamble on several lines # A Scenario Outline comment @bar Scenario Outline: Scenario Ouline Description Given there is a """ string with """ And a table with | | | | @zap @boing Examples: Examples Description | foo | bar | baz | | Banana | I | am hungry | | Beer | You | are thirsty | | Bed | They | are tired | }) end it "should preserve tabs" do assert_pretty(IO.read(File.dirname(__FILE__) + '/tabs.feature'), IO.read(File.dirname(__FILE__) + '/spaces.feature')) end it "should escape backslashes and pipes" do io = StringIO.new f = Gherkin::Formatter::PrettyFormatter.new(io, true, false) f.__send__(:table, [Gherkin::Formatter::Model::DataTableRow.new([], ['|', '\\'], 1)]) io.string.should == ' | \\| | \\\\ |' + "\n" end end end end gherkin-2.12.2/spec/gherkin/formatter/model_spec.rb0000644000004100000410000000160612244512574022311 0ustar www-datawww-datarequire 'spec_helper' require 'gherkin/formatter/model' require 'gherkin/formatter/argument' module Gherkin module Formatter module Model describe Tag do it "should be equal when name is equal" do tags = [Tag.new('@x', 1), Tag.new('@y', 2), Tag.new('@x', 3)] tags.to_a.uniq.length.should == 2 end end describe Step do it "should provide arguments for outline tokens" do step = Step.new([], 'Given ', "I have cukes in belly", 10, nil, nil) step.outline_args.map{|arg| [arg.offset, arg.val]}.should == [[7, ""], [25, ""]] end it "should provide no arguments when there are no outline tokens" do step = Step.new([], 'Given ', "I have 33 cukes in my belly", 10, nil, nil) step.outline_args.to_a.should == [] end end end end endgherkin-2.12.2/spec/gherkin/formatter/json_formatter_spec.rb0000644000004100000410000001234712244512574024251 0ustar www-datawww-datarequire 'spec_helper' require 'gherkin/formatter/json_formatter' require 'gherkin/formatter/model' require 'multi_json' require 'stringio' module Gherkin module Formatter describe JSONFormatter do it "renders results" do io = StringIO.new f = JSONFormatter.new(io) f.uri("f.feature") f.feature(Model::Feature.new([], [], "Feature", "ff", "", 1, "ff")) f.scenario(Model::Scenario.new([], [], "Scenario", "ss", "", 2, "ff/ss")) f.step(Model::Step.new([], "Given ", "g", 3, nil, nil)) f.match(Model::Match.new([], "def.rb:33")) data = "abc" if defined?(JRUBY_VERSION) data = data.to_java_bytes end f.embedding("mime-type", data) f.write("step output") f.result(Model::Result.new(:passed, 1, nil)) f.step(Model::Step.new([], "When ", "w", 4, nil, nil)) f.match(Model::Match.new([], "def.rb:44")) f.result(Model::Result.new(:passed, 1, nil)) f.after(Model::Match.new([], "def.rb:55"), Model::Result.new(:passed, 22, nil)) f.eof f.done expected = %{ [ { "id": "ff", "uri": "f.feature", "keyword": "Feature", "name": "ff", "line": 1, "description": "", "elements": [ { "id": "ff/ss", "keyword": "Scenario", "name": "ss", "line": 2, "description": "", "type": "scenario", "steps": [ { "keyword": "Given ", "name": "g", "line": 3, "match": { "location": "def.rb:33" }, "embeddings": [ { "mime_type": "mime-type", "data": "YWJj" } ], "output": [ "step output" ], "result": { "status": "passed", "duration": 1 } }, { "keyword": "When ", "name": "w", "line": 4, "match": { "location": "def.rb:44" }, "result": { "status": "passed", "duration": 1 } } ], "after": [ { "match":{ "location":"def.rb:55" }, "result":{ "status":"passed", "duration": 22 } } ] } ] } ] } MultiJson.load(io.string).should == MultiJson.load(expected) end it "renders results as pretty json" do io = StringIO.new f = JSONFormatter.new(io) f.uri("f.feature") f.feature(Model::Feature.new([], [], "Feature", nil, nil, nil, nil)) f.eof f.done expected = %{ [ { "keyword": "Feature", "uri": "f.feature" } ] } io.string.should == MultiJson.dump(MultiJson.load(expected), :pretty => true) end it 'supports append_duration' do io = StringIO.new f = JSONFormatter.new(io) f.uri("f.feature") f.feature(Model::Feature.new([], [], "Feature", "ff", "", 1, "ff")) f.scenario(Model::Scenario.new([], [], "Scenario", "ss", "", 2, "ff/ss")) f.step(Model::Step.new([], "Given ", "g", 3, nil, nil)) f.match(Model::Match.new([], "def.rb:33")) f.result(Model::Result.new(:passed, 3, nil)) f.append_duration(1) f.eof f.done expected = %{ [ { "id": "ff", "uri": "f.feature", "keyword": "Feature", "name": "ff", "line": 1, "description": "", "elements": [ { "id": "ff/ss", "keyword": "Scenario", "name": "ss", "line": 2, "description": "", "type": "scenario", "steps": [ { "keyword": "Given ", "name": "g", "line": 3, "match": { "location": "def.rb:33" }, "result": { "status": "passed", "duration": 1000000000 } } ] } ] } ] } MultiJson.load(io.string).should == MultiJson.load(expected) end end end end gherkin-2.12.2/spec/gherkin/formatter/tabs.feature0000644000004100000410000000023312244512574022153 0ustar www-datawww-dataFeature: Adding Scenario: Add two numbers Given the following input: """ hello """ When the calculator is run Then the output should be 4 gherkin-2.12.2/spec/gherkin/formatter/tag_count_formatter_spec.rb0000644000004100000410000000207112244512574025254 0ustar www-datawww-data# encoding: utf-8 require 'spec_helper' require 'gherkin/parser/parser' require 'gherkin/formatter/tag_count_formatter' module Gherkin module Formatter describe TagCountFormatter do it "should count tags" do tag_counts = {} dummy = Gherkin::SexpRecorder.new formatter = Gherkin::Formatter::TagCountFormatter.new(dummy, tag_counts) parser = Gherkin::Parser::Parser.new(formatter) f = File.new(File.dirname(__FILE__) + "/../fixtures/complex_with_tags.feature").read parser.parse(f, 'f.feature', 0) tag_counts.should == { "@hamster" => ["f.feature:58"], "@tag1" => ["f.feature:18","f.feature:23","f.feature:39","f.feature:52","f.feature:58"], "@tag2" => ["f.feature:18","f.feature:23","f.feature:39","f.feature:52","f.feature:58"], "@tag3" => ["f.feature:18", "f.feature:23"], "@tag4" => ["f.feature:18"], "@neat" => ["f.feature:52"], "@more" => ["f.feature:52", "f.feature:58"] } end end end end gherkin-2.12.2/spec/gherkin/parser/0000755000004100000410000000000012244512574017140 5ustar www-datawww-datagherkin-2.12.2/spec/gherkin/parser/parser_spec.rb0000644000004100000410000000066712244512574022004 0ustar www-datawww-datarequire 'spec_helper' module Gherkin module Parser describe Parser do unless defined?(JRUBY_VERSION) it "should raise when feature doesn't parse" do p = Parser.new(double('formatter').as_null_object) lambda do p.parse("Feature: f\nFeature: f", __FILE__, __LINE__-1) end.should raise_error(Regexp.new("Parse error at #{__FILE__}:\\d+")) end end end end end gherkin-2.12.2/spec/gherkin/sexp_recorder.rb0000644000004100000410000000254012244512574021036 0ustar www-datawww-datarequire 'gherkin/rubify' require 'gherkin/formatter/model' module Gherkin class SexpRecorder include Rubify def initialize @sexps = [] end # We can't use method_missing - therubyracer isn't able to invoke methods like that. [:comment, :tag, :feature, :background, :scenario, :scenario_outline, :examples, :step, :doc_string, :row, :eof, :uri, :syntax_error].each do |event| define_method(event) do |*args| args = rubify(args) args = sexpify(args) @sexps << [event] + args end end def to_sexp @sexps end # Useful in IRB def reset! @sexps = [] end def errors @sexps.select { |sexp| sexp[0] == :syntax_error } end def line(number) @sexps.find { |sexp| sexp.last == number } end def sexpify(o) array = (defined?(JRUBY_VERSION) && Java.java.util.Collection === o) || (defined?(V8) && V8::Array === o) || Array === o if array o.map{|e| sexpify(e)} elsif(Formatter::Model::Row === o) { "cells" => sexpify(o.cells), "comments" => sexpify(o.comments), "line" => o.line, } elsif(Formatter::Model::Comment === o) o.value elsif(Formatter::Model::Tag === o) o.name else o end end end end gherkin-2.12.2/spec/gherkin/i18n_spec.rb0000644000004100000410000003405512244512574017771 0ustar www-datawww-data#encoding: utf-8 require 'spec_helper' module Gherkin module Lexer describe I18n do before do @listener = Gherkin::SexpRecorder.new end def scan_file(lexer, file) lexer.scan(File.new(File.dirname(__FILE__) + "/fixtures/" + file).read) end it "should recognize keywords in the language of the lexer" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_no.feature") @listener.to_sexp.should == [ [:comment, "#language:no", 1], [:feature, "Egenskap", "i18n support", "", 2], [:scenario, "Scenario", "Parsing many languages", "", 4], [:step, "Gitt ", "Gherkin supports many languages", 5], [:step, "Når ", "Norwegian keywords are parsed", 6], [:step, "Så ", "they should be recognized", 7], [:eof] ] end it "should recognize keywords that are a little ambiguous" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_fr2.feature") @listener.to_sexp.should == [ [:comment, "#language:fr", 1], [:feature, "Fonctionnalité", "i18n", "", 2], [:scenario, "Scénario", "Le French", "", 4], [:step, "Etant donné ", "qqch", 5], [:step, "Etant donnée ", "qqch", 6], [:step, "Etant donnés ", "qqch", 7], [:step, "Etant données ", "qqch", 8], [:eof] ] end it "should parse languages without a space after keywords" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_zh-CN.feature") @listener.to_sexp.should == [ [:comment, "#language:zh-CN", 1], [:feature, "功能", "加法", "", 2], [:scenario, "场景", "两个数相加", "", 4], [:step, "假如", "我已经在计算器里输入6", 5], [:step, "而且", "我已经在计算器里输入7", 6], [:step, "当", "我按相加按钮", 7], [:step, "那么", "我应该在屏幕上看到的结果是13", 8], [:eof] ] end it "should parse languages with spaces after some keywords but not others" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_fr.feature") @listener.to_sexp.should == [ [:comment, "#language:fr", 1], [:feature, "Fonctionnalité", "Addition", "", 2], [:scenario_outline, "Plan du scénario", "Addition de produits dérivés", "", 3], [:step, "Soit ", "une calculatrice", 4], [:step, "Etant donné ", "qu'on tape ", 5], [:step, "Et ", "qu'on tape ", 6], [:step, "Lorsqu'", "on tape additionner", 7], [:step, "Alors ", "le résultat doit être ", 8], [:examples, "Exemples", "", "", 10], [:row, %w{a b somme}, 11], [:row, %w{2 2 4}, 12], [:row, %w{2 3 5}, 13], [:eof] ] end it "should recognize keywords in Portuguese (1st variant)" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_pt1.feature") @listener.to_sexp.should == [ [:comment, "# language: pt", 1], [:feature, "Funcionalidade", "Reconhece \"Funcionalidade\"", "", 2], [:background, "Contexto", "Reconhece \"Contexto\"", "", 4], [:scenario, "Cenário", "Reconhece \"Cenário\" com acento", "", 6], [:scenario, "Cenario", "Reconhece \"Cenário\" sem acento", "", 8], [:scenario_outline, "Esquema do Cenário", "Reconhece \"Esquema do Cenário\" com acento", "", 10], [:step, "Dado ", "que é um valor e que reconhece \"Dado\";", 11], [:step, "Dada ", "a afirmação de que reconhece \"Dada\";", 12], [:step, "Dados ", "os factos acima e ainda que reconhece \"Dados\";", 13], [:step, "Dadas ", "as afirmações acima e ainda que reconhece \"Dadas\";", 14], [:step, "Quando ", "reconhece \"Quando\";", 15], [:step, "Então ", "também reconhece \"Então\" com acento e", 16], [:step, "Entao ", "também reconhece \"Então\" sem acento;", 17], [:step, "E ", "reconhece \"E\";", 18], [:step, "Mas ", "também reconhece \"Mas\".", 19], [:examples, "Exemplos", "Reconhece \"Exemplos\"", "", 21], [:row, ["Valor"], 22], [:row, ["1"], 23], [:scenario_outline, "Esquema do Cenario", "Reconhece \"Esquema do Cenário\" sem acento", "", 25], [:step, "Dado ", "que é um valor;", 26], [:examples, "Cenários", "Reconhece \"Cenários\" com acento", "", 28], [:row, ["Valor"], 29], [:row, ["1"], 30], [:scenario_outline, "Delineação do Cenário", "Reconhece \"Delineação do Cenário\" com acento", "", 32], [:step, "Dado ", "que é um valor;", 33], [:examples, "Cenarios", "Reconhece \"Cenários\" sem acento", "", 35], [:row, ["Valor"], 36], [:row, ["1"], 37], [:scenario_outline, "Delineacao do Cenario", "Reconhece \"Delineação do Cenário\" sem acento", "", 39], [:step, "Dado ", "que é um valor;", 40], [:examples, "Exemplos", "Reconhece \"Exemplos\"", "", 42], [:row, ["Valor"], 43], [:row, ["1"], 44], [:eof] ] end it "should recognize keywords in Portuguese (2nd variant)" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_pt2.feature") @listener.to_sexp.should == [ [:comment, "# language: pt", 1], [:feature, "Característica", "Reconhece \"Característica\" com acento", "", 2], [:background, "Cenário de Fundo", "Reconhece \"Cenário de Fundo\" com acento", "", 4], [:eof] ] end it "should recognize keywords in Portuguese (3rd variant)" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_pt3.feature") @listener.to_sexp.should == [ [:comment, "# language: pt", 1], [:feature, "Caracteristica", "Reconhece \"Característica\" sem acento", "", 2], [:background, "Cenario de Fundo", "Reconhece \"Cenário de Fundo\" sem acento", "", 4], [:eof] ] end it "should recognize keywords in Portuguese (4th variant)" do lexer = Gherkin::Lexer::I18nLexer.new(@listener, false) scan_file(lexer, "i18n_pt4.feature") @listener.to_sexp.should == [ [:comment, "# language: pt", 1], [:feature, "Característica", "Reconhece \"Característica\" com acento", "", 2], [:background, "Fundo", "Reconhece \"Fundo\"", "", 4], [:eof] ] end describe 'keywords' do it "should have code keywords without space, comma, exclamation or apostrophe" do ['Avast', 'Akkor', 'Etantdonné', 'Lorsque', '假設'].each do |code_keyword| Gherkin::I18n.code_keywords.should include(code_keyword) end end it "should reject the bullet stars" do Gherkin::I18n.code_keywords.should_not include('*') end it "should report keyword regexp" do Gherkin::I18n.keyword_regexp(:step).should =~ /\|Quando \|Quand \|Quan \|Pryd \|/ end it "should print available languages" do ("\n" + Gherkin::I18n.language_table).should == %{ | ar | Arabic | العربية | | bg | Bulgarian | български | | bm | Malay | Bahasa Melayu | | ca | Catalan | català | | cs | Czech | Česky | | cy-GB | Welsh | Cymraeg | | da | Danish | dansk | | de | German | Deutsch | | el | Greek | Ελληνικά | | en | English | English | | en-Scouse | Scouse | Scouse | | en-au | Australian | Australian | | en-lol | LOLCAT | LOLCAT | | en-old | Old English | Englisc | | en-pirate | Pirate | Pirate | | en-tx | Texan | Texan | | eo | Esperanto | Esperanto | | es | Spanish | español | | et | Estonian | eesti keel | | fa | Persian | فارسی | | fi | Finnish | suomi | | fr | French | français | | gl | Galician | galego | | he | Hebrew | עברית | | hi | Hindi | हिंदी | | hr | Croatian | hrvatski | | hu | Hungarian | magyar | | id | Indonesian | Bahasa Indonesia | | is | Icelandic | Íslenska | | it | Italian | italiano | | ja | Japanese | 日本語 | | kn | Kannada | ಕನ್ನಡ | | ko | Korean | 한국어 | | lt | Lithuanian | lietuvių kalba | | lu | Luxemburgish | Lëtzebuergesch | | lv | Latvian | latviešu | | nl | Dutch | Nederlands | | no | Norwegian | norsk | | pa | Panjabi | ਪੰਜਾਬੀ | | pl | Polish | polski | | pt | Portuguese | português | | ro | Romanian | română | | ru | Russian | русский | | sk | Slovak | Slovensky | | sr-Cyrl | Serbian | Српски | | sr-Latn | Serbian (Latin) | Srpski (Latinica) | | sv | Swedish | Svenska | | th | Thai | ไทย | | tl | Telugu | తెలుగు | | tr | Turkish | Türkçe | | tt | Tatar | Татарча | | uk | Ukrainian | Українська | | uz | Uzbek | Узбекча | | vi | Vietnamese | Tiếng Việt | | zh-CN | Chinese simplified | 简体中文 | | zh-TW | Chinese traditional | 繁體中文 | } end it "should print keywords for a given language" do ("\n" + Gherkin::I18n.get('fr').keyword_table).should == %{ | feature | "Fonctionnalité" | | background | "Contexte" | | scenario | "Scénario" | | scenario_outline | "Plan du scénario", "Plan du Scénario" | | examples | "Exemples" | | given | "* ", "Soit ", "Etant donné ", "Etant donnée ", "Etant donnés ", "Etant données ", "Étant donné ", "Étant donnée ", "Étant donnés ", "Étant données " | | when | "* ", "Quand ", "Lorsque ", "Lorsqu'" | | then | "* ", "Alors " | | and | "* ", "Et " | | but | "* ", "Mais " | | given (code) | "Soit", "Etantdonné", "Etantdonnée", "Etantdonnés", "Etantdonnées", "Étantdonné", "Étantdonnée", "Étantdonnés", "Étantdonnées" | | when (code) | "Quand", "Lorsque", "Lorsqu" | | then (code) | "Alors" | | and (code) | "Et" | | but (code) | "Mais" | } end it "should not list keywords that start with a number" do Gherkin::I18n.get('en-old').code_keywords.should include("Ðaðe") Gherkin::I18n.get('en-old').code_keywords.should_not include("7") end end end end end gherkin-2.12.2/spec/gherkin/fixtures/0000755000004100000410000000000012244512574017515 5ustar www-datawww-datagherkin-2.12.2/spec/gherkin/fixtures/with_bom.feature0000644000004100000410000000012312244512574022676 0ustar www-datawww-dataFeature: Feature Text Scenario: Reading a Scenario Given there is a stepgherkin-2.12.2/spec/gherkin/fixtures/complex.json0000644000004100000410000000663412244512574022070 0ustar www-datawww-data{ "id": "feature-text", "uri": "some/nice.feature", "name": "Feature Text", "keyword": "Feature", "description": "In order to test multiline forms", "tags": [ {"name": "@tag1"}, {"name": "@tag2"} ], "elements": [ { "type": "background", "description": "", "name": "", "keyword": "Background", "steps": [ { "name": "this is a background step", "keyword": "Given " }, { "name": "this is another one", "keyword": "When ", "line": 412 } ] }, { "type": "scenario_outline", "id": "feature-text/a-scenario-outline", "keyword": "Scenario Outline", "name": "An Scenario Outline", "description": "", "tags": [ {"name": "@foo"} ], "steps": [ { "name": "A step with a table", "keyword": "Given ", "rows" : [ {"cells": [ "a","row","for","a","step" ]} ] } ], "examples": [ { "id": "feature-text/a-scenario-outline/sweet-example", "name": "Sweet Example", "keyword": "Examples", "description": "", "rows" : [ {"cells" : [ "Fill","In" ] }, {"cells" : [ "The","Blanks" ] } ], "tags" : [ {"name": "@exampletag"} ] } ] }, { "type" : "scenario", "id": "feature-text/reading-a-scenario", "keyword": "Scenario", "name" : "Reading a Scenario", "description": "", "tags" : [ {"name": "@tag3"}, {"name": "@tag4"} ], "steps" : [ { "name" : "there is a step", "keyword": "Given "}, { "name" : "not another step", "keyword": "But " } ] }, { "type" : "scenario", "id": "feature-text/reading-a-second-scenario", "keyword": "Scenario", "name" : "Reading a second scenario", "description": "With two lines of text", "tags" : [ {"name": "@tag3"} ], "steps" : [ { "name" : "a third step with a table", "keyword": "Given ", "rows": [ { "cells" : [ "a","b" ], "line" : 987 }, { "cells" : [ "c","d" ] }, { "cells" : [ "e", "f" ] } ] }, { "name" : "I am still testing things", "keyword": "Given ", "rows": [ { "cells" : [ "g","h" ] }, { "cells" : [ "e","r" ] }, { "cells" : [ "k", "i" ] }, { "cells" : [ "n", "" ] } ] }, { "name" : "I am done testing these tables", "keyword": "Given " }, { "name" : "I am happy", "keyword": "Given " } ] }, { "type" : "scenario", "id": "feature-text/hammerzeit", "keyword": "Scenario", "name" : "Hammerzeit", "description": "", "steps" : [ { "name" : "All work and no play", "keyword": "Given ", "doc_string": { "content_type": "text", "value": "Makes Homer something something\nAnd something else", "line": 777 } }, { "name" : "crazy", "keyword": "Given " } ] } ] } gherkin-2.12.2/spec/gherkin/fixtures/iso-8859-1.feature0000644000004100000410000000021512244512574022433 0ustar www-datawww-data# language: no # encoding: iSo-8859-1 Egenskap: ISO-8859-1 Scenario: Nr this is encoded as Latin-1 S everything should parse gherkin-2.12.2/spec/gherkin/fixtures/simple_with_tags.feature0000644000004100000410000000016112244512574024432 0ustar www-datawww-data# FC @ft Feature: hi @st1 @st2 Scenario: First Given Pepper @st3 @st4 @ST5 @#^%&ST6**! Scenario: Secondgherkin-2.12.2/spec/gherkin/fixtures/complex_for_filtering.feature0000644000004100000410000000215212244512574025452 0ustar www-datawww-data#Comment on line 1 #Comment on line 2 @tag1 @tag2 Feature: Feature Text In order to test multiline forms As a ragel writer I need to check for complex combinations #Comment on line 9 #Comment on line 11 Background: Given this is a background step And this is another one @tag3 @tag4 Scenario: Reading a Scenario Given there is a step But not another step @tag3 Scenario: Reading a second scenario With two lines of text #Comment on line 24 Given a third step with a table | a | b | | c | d | | e | f | And I am still testing things And I am done testing these tables #Comment on line 29 Then I am happy | g | h | | e | r | | k | i | | n | | Scenario: Hammerzeit XX Given All work and no play Then crazy """ Makes Homer something something And something else """ @more Scenario Outline: More Given Some @neat Examples: Neato XX | whaa | | neat | | beat | @hamster Examples: Rodents | whaa | | hammy | | mousy | gherkin-2.12.2/spec/gherkin/fixtures/complex_with_tags.feature0000644000004100000410000000207412244512574024615 0ustar www-datawww-data#Comment on line 1 #Comment on line 2 @tag1 @tag2 Feature: Feature Text In order to test multiline forms As a ragel writer I need to check for complex combinations #Comment on line 9 #Comment on line 11 Background: Given this is a background step And this is another one @tag3 @tag4 Scenario: Reading a Scenario Given there is a step But not another step @tag3 Scenario: Reading a second scenario With two lines of text #Comment on line 24 Given a third step with a table |a|b| |c|d| |e|f| And I am still testing things |g|h| |e|r| |k|i| |n|| And I am done testing these tables #Comment on line 29 Then I am happy Scenario: Hammerzeit Given All work and no play """ Makes Homer something something And something else """ Then crazy @more Scenario Outline: More Given Some @neat Examples: Neato |whaa| |neat| |beat| @hamster Examples: Rodents |whaa| |hammy| |mousy|gherkin-2.12.2/spec/gherkin/fixtures/i18n_pt4.feature0000644000004100000410000000014212244512574022435 0ustar www-datawww-data# language: pt Característica: Reconhece "Característica" com acento Fundo: Reconhece "Fundo"gherkin-2.12.2/spec/gherkin/fixtures/hantu_pisang.feature0000644000004100000410000000124312244512574023552 0ustar www-datawww-dataFeature: search examples Background: The background Given passing without a table Scenario: should match Hantu Pisang Given passing without a table Scenario: Ignore me Given failing without a table Scenario Outline: Ignore me Given without a table Examples: | state | | 1111111 | Scenario Outline: Hantu Pisang match Given without a table Examples: | state | | 2222222 | Scenario Outline: no match in name but in examples Given without a table Examples: Hantu Pisang | state | | 3333333 | Examples: Ignore me | state | | 4444444 | gherkin-2.12.2/spec/gherkin/fixtures/with_bom_and_language_spec.feature0000644000004100000410000000015712244512574026404 0ustar www-datawww-data# language: nl Functionaliteit: Feature Text Scenario: Reading a Scenario Gegeven there is a step gherkin-2.12.2/spec/gherkin/fixtures/scenario_without_steps.feature0000644000004100000410000000005112244512574025672 0ustar www-datawww-dataFeature: f Scenario: a Scenario: b gherkin-2.12.2/spec/gherkin/fixtures/i18n_pt1.feature0000644000004100000410000000237612244512574022445 0ustar www-datawww-data# language: pt Funcionalidade: Reconhece "Funcionalidade" Contexto: Reconhece "Contexto" Cenário: Reconhece "Cenário" com acento Cenario: Reconhece "Cenário" sem acento Esquema do Cenário: Reconhece "Esquema do Cenário" com acento Dado que é um valor e que reconhece "Dado"; Dada a afirmação de que reconhece "Dada"; Dados os factos acima e ainda que reconhece "Dados"; Dadas as afirmações acima e ainda que reconhece "Dadas"; Quando reconhece "Quando"; Então também reconhece "Então" com acento e Entao também reconhece "Então" sem acento; E reconhece "E"; Mas também reconhece "Mas". Exemplos: Reconhece "Exemplos" | Valor | | 1 | Esquema do Cenario: Reconhece "Esquema do Cenário" sem acento Dado que é um valor; Cenários: Reconhece "Cenários" com acento | Valor | | 1 | Delineação do Cenário: Reconhece "Delineação do Cenário" com acento Dado que é um valor; Cenarios: Reconhece "Cenários" sem acento | Valor | | 1 | Delineacao do Cenario: Reconhece "Delineação do Cenário" sem acento Dado que é um valor; Exemplos: Reconhece "Exemplos" | Valor | | 1 |gherkin-2.12.2/spec/gherkin/fixtures/issue_145.feature0000644000004100000410000000054012244512574022612 0ustar www-datawww-dataFeature: issue 145 Scenario: Scenario 1 Given some condition Scenario Outline: Scenario 2 Given some condition When I go to Then some assertion Examples: | page | | /aaaa | | /bbbb | | /cccc | Scenario: Scenario 3 Given some condition Scenario: Scenario 4 Given some condition gherkin-2.12.2/spec/gherkin/fixtures/dos_line_endings.feature0000644000004100000410000000162612244512574024402 0ustar www-datawww-data#Comment on line 1 #Comment on line 2 @tag1 @tag2 Feature: Feature Text In order to test multiline forms As a ragel writer I need to check for complex combinations #Comment on line 9 #Comment on line 11 Background: Given this is a background step And this is another one @tag3 @tag4 Scenario: Reading a Scenario Given there is a step But not another step @tag3 Scenario: Reading a second scenario With two lines of text #Comment on line 24 Given a third step with a table |a|b| |c|d| |e|f| And I am still testing things |g|h| |e|r| |k|i| |n|| And I am done testing these tables #Comment on line 29 Then I am happy Scenario: Hammerzeit Given All work and no play """ Makes Homer something something And something else """ Then crazy gherkin-2.12.2/spec/gherkin/fixtures/simple_with_comments.feature0000644000004100000410000000026412244512574025325 0ustar www-datawww-data# Here is a comment Feature: Feature Text # Here is another # comment Scenario: Reading a Scenario # Here is a third comment Given there is a step # Here is a fourth comment gherkin-2.12.2/spec/gherkin/fixtures/1.feature0000644000004100000410000000023412244512574021231 0ustar www-datawww-dataFeature: Logging in So that I can be myself # Comment Scenario: Anonymous user can get a login form. Scenery here @tag Scenario: Another one gherkin-2.12.2/spec/gherkin/fixtures/scenario_outline_with_tags.feature0000644000004100000410000000022412244512574026503 0ustar www-datawww-dataFeature: Bug 67 @wip Scenario Outline: WIP When blah Examples: | a | | b | | c | Scenario: Not WIP When blah gherkin-2.12.2/spec/gherkin/fixtures/i18n_fr2.feature0000644000004100000410000000023012244512574022415 0ustar www-datawww-data#language:fr Fonctionnalité: i18n Scénario: Le French Etant donné qqch Etant donnée qqch Etant donnés qqch Etant données qqch gherkin-2.12.2/spec/gherkin/fixtures/examples_with_only_header.feature0000644000004100000410000000045612244512574026321 0ustar www-datawww-dataFeature: An example with only a header See [this thread](http://groups.google.com/group/cukes/browse_thread/thread/3e55777ee29c445c) Scenario Outline: When I do Then something Examples: A | page | | Golf | @failing Examples: B | Scottish Football | gherkin-2.12.2/spec/gherkin/fixtures/comments_in_table.feature0000644000004100000410000000016712244512574024560 0ustar www-datawww-dataFeature: x Scenario Outline: x Then x is Examples: | state | # comment | 1 | gherkin-2.12.2/spec/gherkin/fixtures/i18n_pt3.feature0000644000004100000410000000020312244512574022432 0ustar www-datawww-data# language: pt Caracteristica: Reconhece "Característica" sem acento Cenario de Fundo: Reconhece "Cenário de Fundo" sem acentogherkin-2.12.2/spec/gherkin/fixtures/i18n_no.feature0000644000004100000410000000027212244512574022346 0ustar www-datawww-data#language:no Egenskap: i18n support Scenario: Parsing many languages Gitt Gherkin supports many languages Når Norwegian keywords are parsed Så they should be recognized gherkin-2.12.2/spec/gherkin/fixtures/i18n_pt2.feature0000644000004100000410000000020512244512574022433 0ustar www-datawww-data# language: pt Característica: Reconhece "Característica" com acento Cenário de Fundo: Reconhece "Cenário de Fundo" com acentogherkin-2.12.2/spec/gherkin/fixtures/i18n_zh-CN.feature0000644000004100000410000000033412244512574022650 0ustar www-datawww-data#language:zh-CN 功能:加法 场景: 两个数相加 假如我已经在计算器里输入6 而且我已经在计算器里输入7 当我按相加按钮 那么我应该在屏幕上看到的结果是13 gherkin-2.12.2/spec/gherkin/fixtures/i18n_fr.feature0000644000004100000410000000051512244512574022341 0ustar www-datawww-data#language:fr Fonctionnalité: Addition Plan du scénario: Addition de produits dérivés Soit une calculatrice Etant donné qu'on tape Et qu'on tape Lorsqu'on tape additionner Alors le résultat doit être Exemples: | a | b | somme | | 2 | 2 | 4 | | 2 | 3 | 5 | gherkin-2.12.2/spec/gherkin/fixtures/complex.feature0000644000004100000410000000155112244512574022543 0ustar www-datawww-data#Comment on line 1 #Comment on line 2 @tag1 @tag2 Feature: Feature Text In order to test multiline forms As a ragel writer I need to check for complex combinations #Comment on line 9 #Comment on line 11 Background: Given this is a background step And this is another one @tag3 @tag4 Scenario: Reading a Scenario Given there is a step But not another step @tag3 Scenario: Reading a second scenario With two lines of text #Comment on line 24 Given a third step with a table |a|b| |c|d| |e|f| And I am still testing things |g|h| |e|r| |k|i| |n|| And I am done testing these tables #Comment on line 29 Then I am happy Scenario: Hammerzeit Given All work and no play """ Makes Homer something something And something else """ Then crazy gherkin-2.12.2/spec/gherkin/native_lexer_spec.rb0000644000004100000410000000143212244512574021670 0ustar www-datawww-data#encoding: utf-8 require 'spec_helper' module Gherkin module Lexer begin require 'gherkin/lexer/en' rescue LoadError # For Java/JRuby we might not have the generated ruby lexer, which # won't be used anyway. Just define a stub. class En native_impl('gherkin') end end describe "Native Lexer" do before do @listener = Gherkin::SexpRecorder.new @lexer = Gherkin::Lexer::En.new(@listener) end it_should_behave_like "a Gherkin lexer" it_should_behave_like "a Gherkin lexer lexing tags" it_should_behave_like "a Gherkin lexer lexing doc_strings" it_should_behave_like "a Gherkin lexer lexing rows" it_should_behave_like "encoding" unless ENV['GHERKIN_JS_NATIVE'] end end end gherkin-2.12.2/spec/gherkin/c_lexer_spec.rb0000644000004100000410000000106712244512574020630 0ustar www-datawww-data#encoding: utf-8 unless defined?(JRUBY_VERSION) require 'spec_helper' require 'gherkin_lexer_en' module Gherkin module Lexer describe "C Lexer" do before do @listener = Gherkin::SexpRecorder.new @lexer = Gherkin::CLexer::En.new(@listener) end it_should_behave_like "a Gherkin lexer" it_should_behave_like "a Gherkin lexer lexing tags" it_should_behave_like "a Gherkin lexer lexing doc_strings" it_should_behave_like "a Gherkin lexer lexing rows" it_should_behave_like "encoding" end end end end gherkin-2.12.2/spec/gherkin/rubify_spec.rb0000644000004100000410000000120212244512574020476 0ustar www-datawww-data#encoding: utf-8 if defined?(JRUBY_VERSION) require 'spec_helper' include Gherkin::Rubify module Gherkin module Rubify describe "rubify" do before do @java_collection = [double("Java.java.util.ArrayList")] @java_collection.stub(:===).and_return(Java.java.util.Collection) @java_collection.stub(:line).and_return(15) @rubified_array = rubify(@java_collection) end it "should keep the line number attribute from Java object" do @rubified_array.should respond_to(:line) @rubified_array.line.should == 15 end end end end endgherkin-2.12.2/spec/gherkin/shared/0000755000004100000410000000000012244512574017112 5ustar www-datawww-datagherkin-2.12.2/spec/gherkin/shared/lexer_group.rb0000644000004100000410000005235212244512574022001 0ustar www-datawww-data#encoding: utf-8 module Gherkin module Lexer shared_examples_for "a Gherkin lexer" do def scan(gherkin) @lexer.scan(gherkin) end describe "Comments" do it "should parse a one line comment" do scan("# My comment\n") @listener.to_sexp.should == [ [:comment, "# My comment", 1], [:eof] ] end it "should parse a multiline comment" do scan("# Hello\n\n# World\n") @listener.to_sexp.should == [ [:comment, "# Hello", 1], [:comment, "# World", 3], [:eof] ] end it "should not consume comments as part of a multiline name" do scan("Scenario: test\n#hello\n Scenario: another") @listener.to_sexp.should == [ [:scenario, "Scenario", "test", "", 1], [:comment, "#hello", 2], [:scenario, "Scenario", "another", "", 3], [:eof] ] end it "should not consume comments as part of a multiline example name" do scan("Examples: thing\n# ho hum\n| 1 | 2 |\n| 3 | 4 |\n") @listener.to_sexp.should == [ [:examples, "Examples", "thing", "", 1], [:comment, "# ho hum", 2], [:row, ["1","2"], 3], [:row, ["3","4"], 4], [:eof] ] end it "should allow empty comment lines" do scan("#\n # A comment\n #\n") @listener.to_sexp.should == [ [:comment, "#", 1], [:comment, "# A comment", 2], [:comment, "#", 3], [:eof] ] end it "should not allow comments within the Feature description" do lambda { scan("Feature: something\nAs a something\n# Comment\nI want something") }.should raise_error(/Lexing error on line 4/) end end describe "Tags" do it "should not take the tags as part of a multiline name feature element" do scan("Feature: hi\n Scenario: test\n\n@hello\n Scenario: another") @listener.to_sexp.should == [ [:feature, "Feature", "hi", "", 1], [:scenario, "Scenario", "test", "", 2], [:tag, "@hello", 4], [:scenario, "Scenario", "another", "", 5], [:eof] ] end end describe "Background" do it "should allow an empty background name and description" do scan("Background:\nGiven I am a step\n") @listener.to_sexp.should == [ [:background, "Background", "", "", 1], [:step, "Given ", "I am a step", 2], [:eof] ] end it "should allow an empty background description" do scan("Background: Yeah\nGiven I am a step\n") @listener.to_sexp.should == [ [:background, "Background", "Yeah", "", 1], [:step, "Given ", "I am a step", 2], [:eof] ] end it "should allow multiline descriptions ending at eof" do scan("Background: I have several\n Lines to look at\n None starting with Given") @listener.to_sexp.should == [ [:background, "Background", "I have several", " Lines to look at\n None starting with Given", 1], [:eof] ] end it "should allow multiline descriptions, including whitespace" do scan(%{Feature: Hi Background: It is my ambition to say in ten sentences what others say in a whole book. Given I am a step}) @listener.to_sexp.should == [ [:feature, "Feature", "Hi", "", 1], [:background, "Background", "It is my ambition to say", "in ten sentences\n what others say \nin a whole book.",2], [:step, "Given ", "I am a step", 6], [:eof] ] end end describe "Scenarios" do it "should be parsed" do scan("Scenario: Hello\n") @listener.to_sexp.should == [ [:scenario, "Scenario", "Hello", "", 1], [:eof] ] end it "should allow whitespace lines after the Scenario line" do scan(%{Scenario: bar Given baz }) @listener.to_sexp.should == [ [:scenario, "Scenario", "bar", "", 1], [:step, "Given ", "baz", 3], [:eof] ] end it "should allow multiline descriptions, including whitespace" do scan(%{Scenario: It is my ambition to say in ten sentences what others say in a whole book. Given I am a step }) @listener.to_sexp.should == [ [:scenario, "Scenario", "It is my ambition to say", "in ten sentences\nwhat others say \n in a whole book.", 1], [:step, "Given ", "I am a step", 5], [:eof] ] end it "should allow multiline names ending at eof" do scan("Scenario: I have several\nLines to look at\n None starting with Given") @listener.to_sexp.should == [ [:scenario, "Scenario", "I have several", "Lines to look at\nNone starting with Given", 1], [:eof] ] end it "should ignore gherkin keywords embedded in other words" do scan(%{Scenario: I have a Button Buttons are great Given I have some But I might not because I am a Charles Dickens character }) @listener.to_sexp.should == [ [:scenario, "Scenario", "I have a Button", "Buttons are great", 1], [:step, "Given ", "I have some", 3], [:step, "But ", "I might not because I am a Charles Dickens character", 4], [:eof] ] end it "should allow step keywords in Scenario names" do scan(%{Scenario: When I have when in scenario I should be fine Given I am a step }) @listener.to_sexp.should == [ [:scenario, "Scenario", "When I have when in scenario", "I should be fine", 1], [:step, "Given ", "I am a step", 3], [:eof] ] end end describe "Scenario Outlines" do it "should be parsed" do scan(<<-HERE) Scenario Outline: Hello With a description Given a cucumber Examples: With a name and a description |what| |green| HERE @listener.to_sexp.should == [ [:scenario_outline, "Scenario Outline", "Hello", "With a description", 1], [:step, "Given ", "a cucumber", 3], [:examples, "Examples", "With a name", "and a description", 4], [:row, ["what"], 6], [:row, ["green"], 7], [:eof] ] end it "should parse with no steps or examples" do scan(%{Scenario Outline: Hello Scenario: My Scenario }) @listener.to_sexp.should == [ [:scenario_outline, "Scenario Outline", "Hello", "", 1], [:scenario, "Scenario", "My Scenario", "", 3], [:eof] ] end it "should allow multiline description" do scan(<<-HERE) Scenario Outline: It is my ambition to say in ten sentences what others say in a whole book. Given I am a step HERE @listener.to_sexp.should == [ [:scenario_outline, "Scenario Outline", "It is my ambition to say", "in ten sentences\n what others say \nin a whole book.", 1], [:step, "Given ", "I am a step", 5], [:eof] ] end end describe "Examples" do it "should be parsed" do scan(%{Examples: |x|y| |5|6| }) @listener.to_sexp.should == [ [:examples, "Examples", "", "", 1], [:row, ["x","y"], 2], [:row, ["5","6"], 3], [:eof] ] end it "should parse multiline example names" do scan(%{Examples: I'm a multiline name and I'm ok f'real |x| |5| }) @listener.to_sexp.should == [ [:examples, "Examples", "I'm a multiline name", "and I'm ok\nf'real", 1], [:row, ["x"], 4], [:row, ["5"], 5], [:eof] ] end end describe "Steps" do it "should parse steps with inline table" do scan(%{Given I have a table |a|b| }) @listener.to_sexp.should == [ [:step, "Given ", "I have a table", 1], [:row, ['a','b'], 2], [:eof] ] end it "should parse steps with inline doc_string" do scan("Given I have a string\n\"\"\"\nhello\nworld\n\"\"\"") @listener.to_sexp.should == [ [:step, "Given ", "I have a string", 1], [:doc_string, '', "hello\nworld", 2], [:eof] ] end it "should parse steps with an empty name" do scan("Given ") @listener.to_sexp.should == [ [:step, "Given ", "", 1], [:eof] ] end end describe "A single feature, single scenario, single step" do it "should find the feature, scenario, and step" do scan("Feature: Feature Text\n Scenario: Reading a Scenario\n Given there is a step\n") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:scenario, "Scenario", "Reading a Scenario", "", 2], [:step, "Given ", "there is a step", 3], [:eof] ] end end describe "A feature ending in whitespace" do it "should not raise an error when whitespace follows the Feature, Scenario, and Steps" do scan("Feature: Feature Text\n Scenario: Reading a Scenario\n Given there is a step\n ") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:scenario, "Scenario", "Reading a Scenario", "", 2], [:step, "Given ", "there is a step", 3], [:eof] ] end end describe "A single feature, single scenario, three steps" do it "should find the feature, scenario, and three steps" do scan("Feature: Feature Text\n Scenario: Reading a Scenario\n Given there is a step\n And another step\n And a third step\n") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:scenario, "Scenario", "Reading a Scenario", "", 2], [:step, "Given ", "there is a step", 3], [:step, "And ", "another step", 4], [:step, "And ", "a third step", 5], [:eof] ] end end describe "A single feature with no scenario" do it "should find the feature" do scan("Feature: Feature Text\n") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:eof] ] end it "should parse a one line feature with no newline" do scan("Feature: hi") @listener.to_sexp.should == [ [:feature, "Feature", "hi", "", 1], [:eof] ] end end describe "A multi-line feature with no scenario" do it "should find the feature" do scan("Feature: Feature Text\n And some more text") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "And some more text", 1], [:eof] ] end end describe "A feature with a scenario but no steps" do it "should find the feature and scenario" do scan("Feature: Feature Text\nScenario: Reading a Scenario\n") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:scenario, "Scenario", "Reading a Scenario", "", 2], [:eof] ] end end describe "A feature with two scenarios" do it "should find the feature and two scenarios" do scan("Feature: Feature Text\nScenario: Reading a Scenario\n Given a step\n\nScenario: A second scenario\n Given another step\n") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:scenario, "Scenario", "Reading a Scenario", "", 2], [:step, "Given ", "a step", 3], [:scenario, "Scenario", "A second scenario", "", 5], [:step, "Given ", "another step", 6], [:eof] ] end it "should find the feature and two scenarios without indentation" do scan("Feature: Feature Text\nScenario: Reading a Scenario\nGiven a step\nScenario: A second scenario\nGiven another step\n") @listener.to_sexp.should == [ [:feature, "Feature", "Feature Text", "", 1], [:scenario, "Scenario", "Reading a Scenario", "", 2], [:step, "Given ", "a step", 3], [:scenario, "Scenario", "A second scenario", "", 4], [:step, "Given ", "another step", 5], [:eof] ] end end describe "A simple feature with comments" do it "should find the feature, scenarios, steps, and comments in the proper order" do scan_file("simple_with_comments.feature") @listener.to_sexp.should == [ [:comment, "# Here is a comment", 1], [:feature, "Feature", "Feature Text", "", 2], [:comment, "# Here is another # comment", 3], [:scenario, "Scenario", "Reading a Scenario", "", 4], [:comment, "# Here is a third comment", 5], [:step, "Given ", "there is a step", 6], [:comment, "# Here is a fourth comment", 7], [:eof] ] end it "should support comments in tables" do scan_file("comments_in_table.feature") @listener.to_sexp.should == [ [:feature, "Feature", "x", "", 1], [:scenario_outline, "Scenario Outline", "x", "", 3], [:step, "Then ", "x is ", 4], [:examples, "Examples", "", "", 6], [:row, ["state"], 7], [:comment, "# comment", 8], [:row, ["1"], 9], [:eof] ] end end describe "A feature with tags everywhere" do it "should find the feature, scenario, step, and tags in the proper order" do scan_file("simple_with_tags.feature") @listener.to_sexp.should == [ [:comment, "# FC", 1], [:tag, "@ft",2], [:feature, "Feature", "hi", "", 3], [:tag, "@st1", 5], [:tag, "@st2", 5], [:scenario, "Scenario", "First", "", 6], [:step, "Given ", "Pepper", 7], [:tag, "@st3", 9], [:tag, "@st4", 10], [:tag, "@ST5", 10], [:tag, "@#^%&ST6**!", 10], [:scenario, "Scenario", "Second", "", 11], [:eof] ] end end describe "Comment or tag between Feature elements where previous narrative starts with same letter as a keyword" do it "should lex this feature properly" do scan_file("1.feature") @listener.to_sexp.should == [ [:feature, "Feature", "Logging in", "So that I can be myself", 1], [:comment, "# Comment", 3], [:scenario, "Scenario", "Anonymous user can get a login form.", "Scenery here", 4], [:tag, "@tag", 7], [:scenario, "Scenario", "Another one", "", 8], [:eof] ] end end describe "A complex feature with tags, comments, multiple scenarios, and multiple steps and tables" do it "should find things in the right order" do scan_file("complex.feature") @listener.to_sexp.should == [ [:comment, "#Comment on line 1", 1], [:comment, "#Comment on line 2", 2], [:tag, "@tag1", 3], [:tag, "@tag2", 3], [:feature, "Feature", "Feature Text", "In order to test multiline forms\nAs a ragel writer\nI need to check for complex combinations", 4], [:comment, "#Comment on line 9", 9], [:comment, "#Comment on line 11", 11], [:background, "Background", "", "", 13], [:step, "Given ", "this is a background step", 14], [:step, "And ", "this is another one", 15], [:tag, "@tag3", 17], [:tag, "@tag4", 17], [:scenario, "Scenario", "Reading a Scenario", "", 18], [:step, "Given ", "there is a step", 19], [:step, "But ", "not another step", 20], [:tag, "@tag3", 22], [:scenario, "Scenario", "Reading a second scenario", "With two lines of text", 23], [:comment, "#Comment on line 24", 25], [:step, "Given ", "a third step with a table", 26], [:row, %w{a b}, 27], [:row, %w{c d}, 28], [:row, %w{e f}, 29], [:step, "And ", "I am still testing things", 30], [:row, %w{g h}, 31], [:row, %w{e r}, 32], [:row, %w{k i}, 33], [:row, ['n', ''], 34], [:step, "And ", "I am done testing these tables", 35], [:comment, "#Comment on line 29", 36], [:step, "Then ", "I am happy", 37], [:scenario, "Scenario", "Hammerzeit", "", 39], [:step, "Given ", "All work and no play", 40], [:doc_string, '', "Makes Homer something something\nAnd something else", 41 ], [:step, "Then ", "crazy", 45], [:eof] ] end end describe "Windows stuff" do it "should find things in the right order for CRLF features" do scan_file("dos_line_endings.feature") @listener.to_sexp.should == [ [:comment, "#Comment on line 1", 1], [:comment, "#Comment on line 2", 2], [:tag, "@tag1", 3], [:tag, "@tag2", 3], [:feature, "Feature", "Feature Text", "In order to test multiline forms\r\nAs a ragel writer\r\nI need to check for complex combinations", 4], [:comment, "#Comment on line 9", 9], [:comment, "#Comment on line 11", 11], [:background, "Background", "", "", 13], [:step, "Given ", "this is a background step", 14], [:step, "And ", "this is another one", 15], [:tag, "@tag3", 17], [:tag, "@tag4", 17], [:scenario, "Scenario", "Reading a Scenario", "", 18], [:step, "Given ", "there is a step", 19], [:step, "But ", "not another step", 20], [:tag, "@tag3", 22], [:scenario, "Scenario", "Reading a second scenario", "With two lines of text", 23], [:comment, "#Comment on line 24", 25], [:step, "Given ", "a third step with a table", 26], [:row, %w{a b}, 27], [:row, %w{c d}, 28], [:row, %w{e f}, 29], [:step, "And ", "I am still testing things", 30], [:row, %w{g h}, 31], [:row, %w{e r}, 32], [:row, %w{k i}, 33], [:row, ['n', ''], 34], [:step, "And ", "I am done testing these tables", 35], [:comment, "#Comment on line 29", 36], [:step, "Then ", "I am happy", 37], [:scenario, "Scenario", "Hammerzeit", "", 39], [:step, "Given ", "All work and no play", 40], [:doc_string, '', "Makes Homer something something\r\nAnd something else", 41], [:step, "Then ", "crazy", 45], [:eof] ] end end describe "errors" do it "should raise a Lexing error if an unparseable token is found" do ["Some text\nFeature: Hi", "Feature: Hi\nBackground:\nGiven something\nScenario A scenario", "Scenario: My scenario\nGiven foo\nAand bar\nScenario: another one\nGiven blah"].each do |text| lambda { scan(text) }.should raise_error(/Lexing error on line/) end end it "should include the line number and context of the error" do lambda { scan("Feature: hello\nScenario: My scenario\nGiven foo\nAand blah\nHmmm wrong\nThen something something") }.should raise_error(/Lexing error on line 4/) end it "Feature keyword should terminate narratives for multiline capable tokens" do scan("Feature:\nBackground:\nFeature:\nScenario Outline:\nFeature:\nScenario:\nFeature:\nExamples:\nFeature:\n") @listener.to_sexp.should == [ [:feature, "Feature", "", "", 1], [:background, "Background", "", "", 2], [:feature, "Feature", "", "", 3], [:scenario_outline, "Scenario Outline", "", "", 4], [:feature, "Feature", "", "", 5], [:scenario, "Scenario", "", "", 6], [:feature, "Feature", "", "", 7], [:examples, "Examples", "","", 8], [:feature, "Feature", "", "", 9], [:eof] ] end end end end end gherkin-2.12.2/spec/gherkin/shared/row_group.rb0000644000004100000410000001000612244512574021457 0ustar www-datawww-data# encoding: utf-8 module Gherkin module Lexer shared_examples_for "a Gherkin lexer lexing rows" do def scan(gherkin) @lexer.scan(gherkin) end rows = { "|a|b|\n" => %w{a b}, "|a|b|c|\n" => %w{a b c}, } rows.each do |text, expected| it "should parse #{text}" do @listener.should_receive(:row).with(r(expected), 1) scan(text.dup) end end it "should parse a row with many cells" do @listener.should_receive(:row).with(r(%w{a b c d e f g h i j k l m n o p}), 1) scan("|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|\n") end it "should parse multicharacter cell content" do @listener.should_receive(:row).with(r(%w{foo bar}), 1) scan("| foo | bar |\n") end it "should escape backslashed pipes" do @listener.should_receive(:row).with(r(['|', 'the', '\a', '\\', '|\\|']), 1) scan('| \| | the | \a | \\ | \|\\\| |' + "\n") end it "should parse cells with newlines" do @listener.should_receive(:row).with(r(["\n"]), 1) scan("|\\n|" + "\n") end it "should parse cells with spaces within the content" do @listener.should_receive(:row).with(r(["Dill pickle", "Valencia orange"]), 1) scan("| Dill pickle | Valencia orange |\n") end it "should allow utf-8" do scan(" | ůﻚ | 2 | \n") @listener.to_sexp.should == [ [:row, ["ůﻚ", "2"], 1], [:eof] ] end it "should allow utf-8 using should_receive" do @listener.should_receive(:row).with(r(['繁體中文 而且','並且','繁體中文 而且','並且']), 1) scan("| 繁體中文 而且|並且| 繁體中文 而且|並且|\n") end it "should parse a 2x2 table" do @listener.should_receive(:row).with(r(%w{1 2}), 1) @listener.should_receive(:row).with(r(%w{3 4}), 2) scan("| 1 | 2 |\n| 3 | 4 |\n") end it "should parse a 2x2 table with empty cells" do @listener.should_receive(:row).with(r(['1', '']), 1) @listener.should_receive(:row).with(r(['', '4']), 2) scan("| 1 | |\n|| 4 |\n") end it "should parse a row with empty cells" do @listener.should_receive(:row).with(r(['1', '']), 1).twice scan("| 1 | |\n") scan("|1||\n") end it "should parse a 1x2 table that does not end in a newline" do @listener.should_receive(:row).with(r(%w{1 2}), 1) scan("| 1 | 2 |") end it "should parse a row without spaces and with a newline" do @listener.should_receive(:row).with(r(%w{1 2}), 1) scan("|1|2|\n") end it "should parse a row with whitespace after the rows" do @listener.should_receive(:row).with(r(%w{1 2}), 1) scan("| 1 | 2 | \n ") end it "should parse a row with lots of whitespace" do @listener.should_receive(:row).with(r(["abc", "123"]), 1) scan(" \t| \t abc\t| \t123\t \t\t| \t\t \t \t\n ") end it "should parse a table with a commented-out row" do @listener.should_receive(:row).with(r(["abc"]), 1) @listener.should_receive(:comment).with("#|123|", 2) @listener.should_receive(:row).with(r(["def"]), 3) scan("|abc|\n#|123|\n|def|\n") end it "should raise LexingError for rows that aren't closed" do lambda { scan("|| oh hello \n") }.should raise_error(/Lexing error on line 1: '\|\| oh hello/) end it "should raise LexingError for rows that are followed by a comment" do lambda { scan("|hi| # oh hello \n") }.should raise_error(/Lexing error on line 1: '\|hi\| # oh hello/) end it "should raise LexingError for rows that aren't closed" do lambda { scan("|| oh hello \n |Shoudn't Get|Here|") }.should raise_error(/Lexing error on line 1: '\|\| oh hello/) end end end end gherkin-2.12.2/spec/gherkin/shared/doc_string_group.rb0000644000004100000410000000754712244512574023023 0ustar www-datawww-data# encoding: utf-8 module Gherkin module Lexer shared_examples_for "a Gherkin lexer lexing doc_strings" do def scan(gherkin) @lexer.scan(gherkin) end def ps(content) '"""%s"""' % ("\n" + content + "\n") end it "should provide the amount of indentation of the triple quotes to the listener" do str = < 1.3') s.add_development_dependency('cucumber', '>= 1.3.8') s.add_development_dependency('rake', '>= 10.1.0') s.add_development_dependency('bundler', '>= 1.3.5') # Make sure it's in sync with /.travis.yml s.add_development_dependency('rspec', '~> 2.14.1') s.add_development_dependency('rubyzip', '>= 1.0.0') s.add_development_dependency('ruby-beautify', '= 0.92.2') unless ENV['RUBY_CC_VERSION'] || Gherkin::JRUBY s.add_development_dependency('therubyracer', '>= 0.12.0') if ENV['GHERKIN_JS'] # For Documentation: s.add_development_dependency('yard', '>= 0.8.7.2') s.add_development_dependency('rdiscount', '>= 2.1.6') end # Only needed by Cucumber. Remove when Cucumber no longer needs those. s.add_development_dependency('builder', '>= 3.2.2') end gherkin-2.12.2/lib/0000755000004100000410000000000012244512574014031 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin.rb0000644000004100000410000000010312244512574015777 0ustar www-datawww-datarequire 'gherkin/lexer/i18n_lexer' require 'gherkin/parser/parser' gherkin-2.12.2/lib/gherkin/0000755000004100000410000000000012244512574015460 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin/formatter/0000755000004100000410000000000012244512574017463 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin/formatter/escaping.rb0000644000004100000410000000051212244512574021577 0ustar www-datawww-datamodule Gherkin module Formatter module Escaping # Escapes a pipes and backslashes: # # * | becomes \| # * \ becomes \\ # # This is used in the pretty formatter. def escape_cell(s) s.gsub(/\\(?!\|)/, "\\\\\\\\").gsub(/\n/, "\\n").gsub(/\|/, "\\|") end end end endgherkin-2.12.2/lib/gherkin/formatter/model.rb0000644000004100000410000001534512244512574021120 0ustar www-datawww-datarequire 'gherkin/native' require 'gherkin/formatter/hashable' module Gherkin module Formatter module Model class BasicStatement < Hashable attr_reader :comments, :keyword, :name, :line def initialize(comments, keyword, name, line) @comments, @keyword, @name, @line = comments, keyword, name, line end def line_range first = @comments.any? ? @comments[0].line : first_non_comment_line first..line end def first_non_comment_line @line end end class DescribedStatement < BasicStatement attr_reader :description def initialize(comments, keyword, name, description, line) super(comments, keyword, name, line) @description = description end end class TagStatement < DescribedStatement attr_reader :tags, :id def initialize(comments, tags, keyword, name, description, line, id) super(comments, keyword, name, description, line) @tags = tags @id = id end def first_non_comment_line @tags.any? ? @tags[0].line : @line end end class Feature < TagStatement native_impl('gherkin') def replay(formatter) formatter.feature(self) end end class Background < DescribedStatement native_impl('gherkin') def initialize(comments, keyword, name, description, line) super(comments, keyword, name, description, line) @type = "background" end def replay(formatter) formatter.background(self) end end class Scenario < TagStatement native_impl('gherkin') def initialize(comments, tags, keyword, name, description, line, id) super(comments, tags, keyword, name, description, line, id) @type = "scenario" end def replay(formatter) formatter.scenario(self) end end class ScenarioOutline < TagStatement native_impl('gherkin') def initialize(comments, tags, keyword, name, description, line, id) super(comments, tags, keyword, name, description, line, id) @type = "scenario_outline" end def replay(formatter) formatter.scenario_outline(self) end end class Examples < TagStatement native_impl('gherkin') attr_accessor :rows # needs to remain mutable for filters def initialize(comments, tags, keyword, name, description, line, id, rows) super(comments, tags, keyword, name, description, line, id) @rows = rows end def replay(formatter) formatter.examples(self) end class Builder def initialize(*args) @args = *args @rows = nil end def row(comments, cells, line, id) @rows ||= [] @rows << ExamplesTableRow.new(comments, cells, line, id) end def replay(formatter) build.replay(formatter) end def build Examples.new(*(@args << @rows)) end end end class Step < BasicStatement native_impl('gherkin') attr_reader :rows, :doc_string def initialize(comments, keyword, name, line, rows, doc_string) super(comments, keyword, name, line) @rows, @doc_string = rows, doc_string end def line_range range = super if(rows) range = range.first..rows[-1].line elsif(doc_string) range = range.first..doc_string.line_range.last end range end def replay(formatter) formatter.step(self) end def outline_args offset = 0 name.scan(/<[^<]*>/).map do |val| offset = name.index(val, offset) Argument.new(offset, val) end end class Builder def initialize(*args) @args = *args @rows = nil @doc_string = nil end def row(comments, cells, line, id) @rows ||= [] @rows << DataTableRow.new(comments, cells, line) end def doc_string(string, content_type, line) @doc_string = Formatter::Model::DocString.new(string, content_type, line) end def replay(formatter) build.replay(formatter) end def build Step.new(*(@args << @rows << @doc_string)) end end end class Comment < Hashable native_impl('gherkin') attr_reader :value, :line def initialize(value, line) @value, @line = value, line end end class Tag < Hashable native_impl('gherkin') attr_reader :name, :line def initialize(name, line) @name, @line = name, line end def eql?(tag) @name.eql?(tag.name) end def hash @name.hash end end class DocString < Hashable native_impl('gherkin') attr_reader :value, :content_type, :line def initialize(value, content_type, line) @value, @content_type, @line = value, content_type, line end def line_range line_count = value.split(/\r?\n/).length line..(line+line_count+1) end end class Row < Hashable attr_reader :comments, :cells, :line def initialize(comments, cells, line) @comments, @cells, @line = comments, cells, line end end class DataTableRow < Row native_impl('gherkin') end class ExamplesTableRow < Row native_impl('gherkin') attr_reader :id def initialize(comments, cells, line, id) super(comments, cells, line) @id = id end end class Match < Hashable native_impl('gherkin') attr_reader :arguments, :location def initialize(arguments, location) @arguments, @location = arguments, location end def replay(formatter) formatter.match(self) end end class Result < Hashable native_impl('gherkin') attr_reader :status, :duration, :error_message def initialize(status, duration, error_message) @status, @duration, @error_message = status, duration, error_message end def replay(formatter) formatter.result(self) end end end end end gherkin-2.12.2/lib/gherkin/formatter/tag_count_formatter.rb0000644000004100000410000000216612244512574024063 0ustar www-datawww-datamodule Gherkin module Formatter class TagCountFormatter def initialize(formatter, tag_counts) @formatter = formatter @tag_counts = tag_counts end def uri(uri) @uri = uri end def feature(feature) @feature_tags = feature.tags @formatter.feature(feature) end def scenario(scenario) record_tags((@feature_tags.to_a + scenario.tags.to_a).uniq, scenario.line) @formatter.scenario(scenario) end def scenario_outline(scenario_outline) @scenario_outline_tags = scenario_outline.tags @formatter.scenario_outline(scenario_outline) end def examples(examples) record_tags((@feature_tags.to_a + @scenario_outline_tags.to_a + examples.tags.to_a).uniq, examples.line) @formatter.examples(examples) end private def record_tags(tags, line) tags.each do |tag| @tag_counts[tag.name] ||= [] @tag_counts[tag.name] << "#{@uri}:#{line}" end end def method_missing(*args) @formatter.__send__(*args) end end end end gherkin-2.12.2/lib/gherkin/formatter/filter_formatter.rb0000644000004100000410000001033212244512574023357 0ustar www-datawww-datarequire 'gherkin/tag_expression' require 'gherkin/formatter/regexp_filter' require 'gherkin/formatter/line_filter' require 'gherkin/formatter/tag_filter' require 'gherkin/formatter/model' require 'gherkin/native' module Gherkin module Formatter class FilterFormatter native_impl('gherkin') def initialize(formatter, filters) @formatter = formatter @filter = detect_filter(filters) @feature_tags = [] @feature_element_tags = [] @examples_tags = [] @examples_range = [] @feature_events = [] @background_events = [] @feature_element_events = [] @examples_events = [] @examples_name = nil @feature_element_name = nil @feature_element_range = nil end def uri(uri) @formatter.uri(uri) end def feature(feature) @feature_tags = feature.tags @feature_name = feature.name @feature_events = [feature] end def background(background) @feature_element_name = background.name @feature_element_range = background.line_range @background_events = [background] end def scenario(scenario) replay! @feature_element_tags = scenario.tags @feature_element_name = scenario.name @feature_element_range = scenario.line_range @feature_element_events = [scenario] end def scenario_outline(scenario_outline) replay! @feature_element_tags = scenario_outline.tags @feature_element_name = scenario_outline.name @feature_element_range = scenario_outline.line_range @feature_element_events = [scenario_outline] end def examples(examples) replay! @examples_tags = examples.tags @examples_name = examples.name table_body_range = case(examples.rows.length) when 0 then examples.line_range.last..examples.line_range.last when 1 then examples.rows[0].line..examples.rows[0].line else examples.rows[1].line..examples.rows[-1].line end @examples_range = examples.line_range.first..table_body_range.last if(@filter.evaluate([], [], [table_body_range])) examples.rows = @filter.filter_table_body_rows(examples.rows) end @examples_events = [examples] end def step(step) if @feature_element_events.any? @feature_element_events << step else @background_events << step end @feature_element_range = @feature_element_range.first..step.line_range.last end def eof replay! @formatter.eof end def done @formatter.done end private def detect_filter(filters) raise "Inconsistent filters: #{filters.inspect}. Only one type [line,name,tag] can be used at once." if filters.map{|filter| filter.class}.uniq.length > 1 case(filters[0]) when Fixnum LineFilter.new(filters) when Regexp RegexpFilter.new(filters) when String TagFilter.new(filters) end end def replay! feature_element_ok = @filter.evaluate( (@feature_tags + @feature_element_tags), [@feature_name, @feature_element_name].compact, [@feature_element_range].compact ) examples_ok = @filter.evaluate( (@feature_tags + @feature_element_tags + @examples_tags), [@feature_name, @feature_element_name, @examples_name].compact, [@feature_element_range, @examples_range].compact ) if feature_element_ok || examples_ok replay_events!(@feature_events) replay_events!(@background_events) replay_events!(@feature_element_events) if examples_ok replay_events!(@examples_events) end end @examples_events.clear @examples_tags = [] @examples_name = nil @examples_range = nil end def replay_events!(events) events.each do |event| event.replay(@formatter) end events.clear end end end end gherkin-2.12.2/lib/gherkin/formatter/line_filter.rb0000644000004100000410000000101312244512574022277 0ustar www-datawww-datamodule Gherkin module Formatter class LineFilter def initialize(lines) @lines = lines end def evaluate(tags, names, ranges) ranges.detect do |range| @lines.detect do |line| range.include?(line) end end end def filter_table_body_rows(rows) body = rows.to_a[1..-1].select do |row| @lines.detect do |line| row.line == line end end [rows[0]] + body end end end end gherkin-2.12.2/lib/gherkin/formatter/tag_filter.rb0000644000004100000410000000053712244512574022135 0ustar www-datawww-datarequire 'gherkin/tag_expression' module Gherkin module Formatter class TagFilter def initialize(tags) @tag_expression = TagExpression.new(tags) end def evaluate(tags, names, ranges) @tag_expression.evaluate(tags.uniq) end def filter_table_body_rows(rows) rows end end end end gherkin-2.12.2/lib/gherkin/formatter/hashable.rb0000644000004100000410000000151412244512574021560 0ustar www-datawww-datamodule Gherkin module Formatter class Hashable def to_hash ivars = instance_variables # When tests are runn with therubyracer (JavaScript), an extra field might # exist - added by Ref::WeakReference # https://github.com/bdurand/ref/blob/master/lib/ref/weak_reference/pure_ruby.rb # Remove it - we don't want it in the JSON. ivars.delete(:@__weak_backreferences__) ivars.inject({}) do |hash, ivar| value = instance_variable_get(ivar) value = value.to_hash if value.respond_to?(:to_hash) if Array === value value = value.map do |e| e.respond_to?(:to_hash) ? e.to_hash : e end end hash[ivar[1..-1]] = value unless [[], nil].index(value) hash end end end end endgherkin-2.12.2/lib/gherkin/formatter/ansi_escapes.rb0000644000004100000410000000644712244512574022460 0ustar www-datawww-datamodule Gherkin module Formatter # Defines aliases for ANSI coloured output. Default colours can be overridden by defining # a GHERKIN_COLORS variable in your shell, very much like how you can # tweak the familiar POSIX command ls with # $LSCOLORS: http://linux-sxs.org/housekeeping/lscolors.html # # The colours that you can change are: # # undefined:: defaults to yellow # pending:: defaults to yellow # pending_arg:: defaults to yellow,bold # executing:: defaults to grey # executing_arg:: defaults to grey,bold # failed:: defaults to red # failed_arg:: defaults to red,bold # passed:: defaults to green # passed_arg:: defaults to green,bold # outline:: defaults to cyan # outline_arg:: defaults to cyan,bold # skipped:: defaults to cyan # skipped_arg:: defaults to cyan,bold # comment:: defaults to grey # tag:: defaults to cyan # # For instance, if your shell has a black background and a green font (like the # "Homebrew" settings for OS X' Terminal.app), you may want to override passed # steps to be white instead of green. Examples: # # export GHERKIN_COLORS="passed=white" # export GHERKIN_COLORS="passed=white,bold:passed_arg=white,bold,underline" # # (If you're on Windows, use SET instead of export). # To see what colours and effects are available, just run this in your shell: # # ruby -e "require 'rubygems'; require 'term/ansicolor'; puts Term::ANSIColor.attributes" # # Although not listed, you can also use grey module AnsiEscapes COLORS = { 'black' => "\e[30m", 'red' => "\e[31m", 'green' => "\e[32m", 'yellow' => "\e[33m", 'blue' => "\e[34m", 'magenta' => "\e[35m", 'cyan' => "\e[36m", 'white' => "\e[37m", 'grey' => "\e[90m", 'bold' => "\e[1m" } ALIASES = Hash.new do |h,k| if k.to_s =~ /(.*)_arg/ h[$1] + ',bold' end end.merge({ 'undefined' => 'yellow', 'pending' => 'yellow', 'executing' => 'grey', 'failed' => 'red', 'passed' => 'green', 'outline' => 'cyan', 'skipped' => 'cyan', 'comments' => 'grey', 'tag' => 'cyan' }) if ENV['GHERKIN_COLORS'] # Example: export GHERKIN_COLORS="passed=red:failed=yellow" ENV['GHERKIN_COLORS'].split(':').each do |pair| a = pair.split('=') ALIASES[a[0]] = a[1] end end ALIASES.keys.each do |key| define_method(key) do ALIASES[key].split(',').map{|color| COLORS[color]}.join('') end define_method("#{key}_arg") do ALIASES["#{key}_arg"].split(',').map{|color| COLORS[color]}.join('') end end def reset "\e[0m" end def up(n) "\e[#{n}A" end extend self end end end gherkin-2.12.2/lib/gherkin/formatter/argument.rb0000644000004100000410000000057012244512574021634 0ustar www-datawww-datarequire 'gherkin/native' require 'gherkin/formatter/hashable' module Gherkin module Formatter class Argument < Hashable native_impl('gherkin') attr_reader :offset, :val # Creates a new Argument that starts at character offset +offset+ with value +val+ def initialize(offset, val) @offset, @val = offset, val end end end end gherkin-2.12.2/lib/gherkin/formatter/step_printer.rb0000644000004100000410000000133012244512574022523 0ustar www-datawww-datamodule Gherkin module Formatter class StepPrinter def write_step(io, text_format, arg_format, step_name, arguments) unpacked_step_name = step_name.unpack("U*") text_start = 0 arguments.each do |arg| if(arg.offset != 0 && !arg.offset.nil?) io.write(text_format.text(unpacked_step_name[text_start..arg.offset-1].pack("U*"))) end if(!arg.val.nil?) io.write(arg_format.text(arg.val)) text_start = arg.offset + arg.val.unpack("U*").length end end io.write(text_format.text(unpacked_step_name[text_start..-1].pack("U*"))) unless text_start == unpacked_step_name.length end end end end gherkin-2.12.2/lib/gherkin/formatter/json_formatter.rb0000644000004100000410000000571612244512574023055 0ustar www-datawww-datarequire 'multi_json' require 'gherkin/formatter/model' require 'gherkin/native' require 'base64' module Gherkin module Formatter # This class doesn't really generate JSON - instead it populates an Array that can easily # be turned into JSON. class JSONFormatter native_impl('gherkin') include Base64 def initialize(io) raise "Must be writeable" unless io.respond_to?(:write) @io = io @feature_hashes = [] @current_step_or_hook = nil end def done @io.write(MultiJson.dump(@feature_hashes, :pretty => true)) end def uri(uri) @uri = uri end def feature(feature) @feature_hash = feature.to_hash @feature_hash['uri'] = @uri @feature_hashes << @feature_hash end def background(background) feature_elements << background.to_hash end def scenario(scenario) feature_elements << scenario.to_hash end def scenario_outline(scenario_outline) feature_elements << scenario_outline.to_hash end def examples(examples) all_examples << examples.to_hash end def step(step) @current_step_or_hook = step.to_hash steps << @current_step_or_hook end def match(match) @current_step_or_hook['match'] = match.to_hash end def result(result) @current_step_or_hook['result'] = result.to_hash end def append_duration(timestamp) #check to make sure result exists (scenario outlines do not have results yet) if !@current_step_or_hook['result'].nil? #convert to nanoseconds timestamp = timestamp * 1000000000 rshash = @current_step_or_hook['result'].to_hash rshash['duration'] = timestamp.to_i @current_step_or_hook['result'] = rshash end end def before(match, result) add_hook(match, result, "before") end def after(match, result) add_hook(match, result, "after") end def embedding(mime_type, data) embeddings << {'mime_type' => mime_type, 'data' => encode64s(data)} end def write(text) output << text end def eof end private def add_hook(match, result, hook) hooks = feature_element[hook] ||= [] hooks << {'match' => match.to_hash, 'result' => result.to_hash} end def feature_elements @feature_hash['elements'] ||= [] end def feature_element feature_elements[-1] end def all_examples feature_element['examples'] ||= [] end def steps feature_element['steps'] ||= [] end def embeddings @current_step_or_hook['embeddings'] ||= [] end def output @current_step_or_hook['output'] ||= [] end def encode64s(data) # Strip newlines Base64.encode64(data).gsub(/\n/, '') end end end end gherkin-2.12.2/lib/gherkin/formatter/regexp_filter.rb0000644000004100000410000000057312244512574022654 0ustar www-datawww-datamodule Gherkin module Formatter class RegexpFilter def initialize(regexen) @regexen = regexen end def evaluate(tags, names, ranges) @regexen.detect do |regexp| names.detect do |name| name =~ regexp end end end def filter_table_body_rows(rows) rows end end end end gherkin-2.12.2/lib/gherkin/formatter/pretty_formatter.rb0000644000004100000410000001501512244512574023424 0ustar www-datawww-data# encoding: utf-8 require 'gherkin/formatter/ansi_escapes' require 'gherkin/formatter/step_printer' require 'gherkin/formatter/argument' require 'gherkin/formatter/escaping' require 'gherkin/formatter/model' require 'gherkin/native' module Gherkin module Formatter class PrettyFormatter native_impl('gherkin') include AnsiEscapes include Escaping def initialize(io, monochrome, executing) @io = io @step_printer = StepPrinter.new @monochrome = monochrome @executing = executing @steps = [] # Prevent warnings, initialize fields @background = @tag_statement = @formats = @statement = nil end def uri(uri) @uri = uri end def feature(feature) print_comments(feature.comments, '') print_tags(feature.tags, '') @io.puts "#{feature.keyword}: #{feature.name}" print_description(feature.description, ' ', false) end def background(background) replay @statement = background end def scenario(scenario) replay @statement = scenario end def scenario_outline(scenario_outline) replay @statement = scenario_outline end def replay print_statement print_steps end def print_statement return if @statement.nil? calculate_location_indentations @io.puts print_comments(@statement.comments, ' ') print_tags(@statement.tags, ' ') if @statement.respond_to?(:tags) # Background doesn't @io.write " #{@statement.keyword}: #{@statement.name}" location = @executing ? "#{@uri}:#{@statement.line}" : nil @io.puts indented_location(location, true) print_description(@statement.description, ' ') @statement = nil end def print_steps while(@steps.any?) print_step('skipped', [], nil, true) end end def examples(examples) replay @io.puts print_comments(examples.comments, ' ') print_tags(examples.tags, ' ') @io.puts " #{examples.keyword}: #{examples.name}" print_description(examples.description, ' ') table(examples.rows) end def step(step) @steps << step end def match(match) @match = match print_statement print_step('executing', @match.arguments, @match.location, false) end def result(result) @io.write(up(1)) print_step(result.status, @match.arguments, @match.location, true) end def print_step(status, arguments, location, proceed) step = proceed ? @steps.shift : @steps[0] text_format = format(status) arg_format = arg_format(status) print_comments(step.comments, ' ') @io.write(' ') @io.write(text_format.text(step.keyword)) @step_printer.write_step(@io, text_format, arg_format, step.name, arguments) @io.puts(indented_location(location, proceed)) doc_string(step.doc_string) if step.doc_string table(step.rows) if step.rows end class MonochromeFormat def text(text) text end end class ColorFormat include AnsiEscapes def initialize(status) @status = status end def text(text) self.__send__(@status) + text + reset end end def arg_format(key) format("#{key}_arg") end def format(key) if @formats.nil? if @monochrome @formats = Hash.new(MonochromeFormat.new) else @formats = Hash.new do |formats, status| formats[status] = ColorFormat.new(status) end end end @formats[key] end def eof replay # NO-OP end def done # NO-OP end def table(rows) cell_lengths = rows.map do |row| row.cells.map do |cell| escape_cell(cell).unpack("U*").length end end max_lengths = cell_lengths.transpose.map { |col_lengths| col_lengths.max }.flatten rows.each_with_index do |row, i| row.comments.each do |comment| @io.puts " #{comment.value}" end j = -1 @io.puts ' | ' + row.cells.zip(max_lengths).map { |cell, max_length| j += 1 color(cell, nil, j) + ' ' * (max_length - cell_lengths[i][j]) }.join(' | ') + ' |' end end private def doc_string(doc_string) @io.puts " \"\"\"" + doc_string.content_type + "\n" + escape_triple_quotes(indent(doc_string.value, ' ')) + "\n \"\"\"" end def exception(exception) exception_text = "#{exception.message} (#{exception.class})\n#{(exception.backtrace || []).join("\n")}".gsub(/^/, ' ') @io.puts(failed(exception_text)) end def color(cell, statuses, col) if statuses self.__send__(statuses[col], escape_cell(cell)) + reset else escape_cell(cell) end end if(RUBY_VERSION =~ /^1\.9|2\.0/) START = /#{'^'.encode('UTF-8')}/ TRIPLE_QUOTES = /#{'"""'.encode('UTF-8')}/ else START = /^/ TRIPLE_QUOTES = /"""/ end def indent(string, indentation) string.gsub(START, indentation) end def escape_triple_quotes(s) s.gsub(TRIPLE_QUOTES, '\"\"\"') end def print_tags(tags, indent) @io.write(tags.empty? ? '' : indent + tags.map{|tag| tag.name}.join(' ') + "\n") end def print_comments(comments, indent) @io.write(comments.empty? ? '' : indent + comments.map{|comment| comment.value}.join("\n#{indent}") + "\n") end def print_description(description, indent, newline=true) if description != "" @io.puts indent(description, indent) @io.puts if newline end end def indented_location(location, proceed) indentation = proceed ? @indentations.shift : @indentations[0] location ? (' ' * indentation + ' ' + comments + "# #{location}" + reset) : '' end def calculate_location_indentations line_widths = ([@statement] + @steps).map {|step| (step.keyword+step.name).unpack("U*").length} max_line_width = line_widths.max @indentations = line_widths.map{|w| max_line_width - w} end end end end gherkin-2.12.2/lib/gherkin/parser/0000755000004100000410000000000012244512574016754 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin/parser/root.txt0000644000004100000410000000343012244512574020500 0ustar www-datawww-data | | feature | background | scenario | scenario_outline | examples | step | row | doc_string | eof | comment | tag | | root | feature | E | E | E | E | E | E | E | eof | push(meta) | push(meta) | | feature | E | background | scenario | scenario_outline | E | E | E | E | eof | push(meta) | push(meta) | | step | E | E | scenario | scenario_outline | E | step | step | step | eof | push(meta) | push(meta) | | outline_step | E | E | scenario | scenario_outline | examples | outline_step | outline_step | outline_step | eof | push(meta) | push(meta) | | background | E | E | scenario | scenario_outline | E | step | E | E | eof | push(meta) | push(meta) | | scenario | E | E | scenario | scenario_outline | E | step | E | E | eof | push(meta) | push(meta) | | scenario_outline | E | E | E | E | E | outline_step | E | E | eof | push(meta) | push(meta) | | examples | E | E | E | E | E | E | examples_table | E | eof | push(meta) | push(meta) | | examples_table | E | E | scenario | scenario_outline | examples | E | examples_table | E | eof | push(meta) | push(meta) | | eof | E | E | E | E | E | E | E | E | E | E | E | gherkin-2.12.2/lib/gherkin/parser/meta.txt0000644000004100000410000000117412244512574020446 0ustar www-datawww-data | | feature | background | scenario | scenario_outline | examples | step | row | doc_string | eof | comment | tag | | meta | E | E | E | E | E | E | E | E | eof | comment | tag | | comment | pop() | pop() | pop() | pop() | pop() | pop() | pop() | pop() | eof | pop() | tag | | tag | pop() | E | pop() | pop() | pop() | E | E | E | E | E | tag | | eof | E | E | E | E | E | E | E | E | E | E | E | gherkin-2.12.2/lib/gherkin/parser/parser.rb0000644000004100000410000001063512244512574020602 0ustar www-datawww-datarequire 'gherkin/i18n' require 'gherkin/lexer/i18n_lexer' require 'gherkin/native' require 'gherkin/listener/formatter_listener' module Gherkin module Parser class ParseError < StandardError def initialize(state, new_state, expected_states, uri, line) super("Parse error at #{uri}:#{line}. Found #{new_state} when expecting one of: #{expected_states.join(', ')}. (Current state: #{state}).") end end class Parser native_impl('gherkin') # Initialize the parser. +machine_name+ refers to a state machine table. def initialize(formatter, raise_on_error=true, machine_name='root', force_ruby=false, iso_code = 'en') @formatter = formatter @listener = Listener::FormatterListener.new(@formatter) @raise_on_error = raise_on_error @machine_name = machine_name @machines = [] @lexer = Gherkin::Lexer::I18nLexer.new(self, force_ruby, iso_code) end def parse(gherkin, feature_uri, line_offset) @formatter.uri(feature_uri) @line_offset = line_offset @feature_uri = feature_uri push_machine(@machine_name) begin @lexer.scan(gherkin) ensure pop_machine end end def i18n_language @lexer.i18n_language end def errors @lexer.errors end [:comment, :tag, :feature, :background, :scenario, :scenario_outline, :examples, :step, :doc_string, :row, :eof].each do |m| define_method(m) do |*args| if(event(m.to_s, args[-1])) @listener.__send__(m, *args) end end end def event(ev, line) l = line ? @line_offset+line : nil machine.event(ev, l) do |state, legal_events| if @raise_on_error raise ParseError.new(state, ev, legal_events, @feature_uri, l) else # Only used for testing @listener.syntax_error(state, ev, legal_events, @feature_uri, l) end end end def push_machine(name) @machines.push(Machine.new(self, name)) end def pop_machine @machines.pop end def machine @machines[-1] end def expected machine.expected end def force_state(state) machine.instance_variable_set('@state', state) end class Machine def initialize(parser, name) @parser = parser @name = name @transition_map = transition_map(name) @state = name end def event(ev, line) states = @transition_map[@state] raise "Unknown state: #{@state.inspect} for machine #{@name}" if states.nil? new_state = states[ev] case new_state when "E" yield @state, expected when /push\((.+)\)/ @parser.push_machine($1) @parser.event(ev, line) when "pop()" @parser.pop_machine() @parser.event(ev, line) else raise "Unknown transition: #{ev.inspect} among #{states.inspect} for machine #{@name}" if new_state.nil? @state = new_state end end def expected allowed = @transition_map[@state].find_all { |_, action| action != "E" } allowed.collect { |state| state[0] }.sort - ['eof'] end private @@transition_maps = {} def transition_map(name) @@transition_maps[name] ||= build_transition_map(name) end def build_transition_map(name) table = transition_table(name) events = table.shift[1..-1] table.inject({}) do |machine, actions| state = actions.shift machine[state] = Hash[*events.zip(actions).flatten] machine end end def transition_table(name) state_machine_reader = StateMachineReader.new lexer = Gherkin::I18n.new('en').lexer(state_machine_reader) machine = File.dirname(__FILE__) + "/#{name}.txt" lexer.scan(File.read(machine)) state_machine_reader.rows end class StateMachineReader attr_reader :rows def initialize @rows = [] end def uri(uri) end def row(row, line_number) @rows << row end def eof end end end end end end gherkin-2.12.2/lib/gherkin/parser/steps.txt0000644000004100000410000000075512244512574020662 0ustar www-datawww-data | | feature | background | scenario | scenario_outline | examples | step | row | doc_string | eof | comment | tag | | steps | E | E | E | E | E | step | E | E | eof | E | E | | step | E | E | E | E | E | step | step | steps | eof | E | E | | eof | E | E | E | E | E | E | E | E | E | E | E | gherkin-2.12.2/lib/gherkin/native.rb0000644000004100000410000000025312244512574017273 0ustar www-datawww-dataif defined?(JRUBY_VERSION) require 'gherkin/native/java' elsif ENV['GHERKIN_JS_NATIVE'] require 'gherkin/native/therubyracer' else require 'gherkin/native/null' end gherkin-2.12.2/lib/gherkin/listener/0000755000004100000410000000000012244512574017305 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin/listener/event.rb0000644000004100000410000000150212244512574020751 0ustar www-datawww-datamodule Gherkin module Listener class Event < Array def event self[0] end def keyword self[1] end def line_match?(lines) lines.include?(line) end def name_match?(name_regexen) return false unless [:feature, :background, :scenario, :scenario_outline, :examples].include?(event) name_regexen.detect{|name_regex| name =~ name_regex} end def replay(listener) begin listener.__send__(event, *args) rescue ArgumentError => e e.message << "\nListener: #{listener.class}, args: #{args.inspect}" raise e end end private def name self[2] end def line self[-1] end def args self[1..-1] end end end end gherkin-2.12.2/lib/gherkin/listener/formatter_listener.rb0000644000004100000410000001020212244512574023535 0ustar www-datawww-datarequire 'gherkin/native' require 'gherkin/formatter/model' module Gherkin module Listener # Adapter from the "raw" Gherkin Listener API # to the slightly more high-level Formatter API, # which is easier to implement (less state to keep track of). class FormatterListener native_impl('gherkin') def initialize(formatter) @formatter = formatter @stash = Stash.new @current_builder = nil end def comment(value, line) @stash.comment Formatter::Model::Comment.new(value, line) end def tag(name, line) @stash.tag Formatter::Model::Tag.new(name, line) end def feature(keyword, name, description, line) @stash.feature(name) do |comments, tags, id| replay Formatter::Model::Feature.new(comments, tags, keyword, name, description, line, id) end end def background(keyword, name, description, line) @stash.feature_element(name) do |comments, tags, id| replay Formatter::Model::Background.new(comments, keyword, name, description, line) end end def scenario(keyword, name, description, line) replay_step_or_examples @stash.feature_element(name) do |comments, tags, id| replay Formatter::Model::Scenario.new(comments, tags, keyword, name, description, line, id) end end def scenario_outline(keyword, name, description, line) replay_step_or_examples @stash.feature_element(name) do |comments, tags, id| replay Formatter::Model::ScenarioOutline.new(comments, tags, keyword, name, description, line, id) end end def examples(keyword, name, description, line) replay_step_or_examples @stash.examples(name) do |comments, tags, id| @current_builder = Formatter::Model::Examples::Builder.new(comments, tags, keyword, name, description, line, id) end end def step(keyword, name, line) replay_step_or_examples @stash.step do |comments| @current_builder = Formatter::Model::Step::Builder.new(comments, keyword, name, line) end end def row(cells, line) @stash.row do |comments, id| @current_builder.row(comments, cells, line, id) end end def doc_string(content_type, value, line) @current_builder.doc_string(value, content_type, line) end def eof replay_step_or_examples @formatter.eof end def syntax_error(state, ev, legal_events, uri, line) @formatter.syntax_error(state, ev, legal_events, uri, line) end private def replay(element) element.replay(@formatter) end class Stash attr_reader :comments, :tags, :ids def initialize @comments, @tags, @ids = [], [], [] @row_index = 0 end def comment(comment) @comments << comment end def feature(name) @feature_id = id(name) yield @comments, @tags, @feature_id @comments, @tags = [], [] end def feature_element(name) @feature_element_id = "#{@feature_id};#{id(name)}" yield @comments, @tags, @feature_element_id @comments, @tags = [], [] end def examples(name) @examples_id = "#{@feature_element_id};#{id(name)}" @row_index = 0 yield @comments, @tags, @examples_id @comments, @tags = [], [] end def step @row_index += 1 yield @comments @comments = [] end def row @row_index += 1 yield @comments, defined?(@examples_id) ? "#{@examples_id};#{@row_index}" : :undefined_examples_id @comments = [] end def tag(tag) @tags << tag end def id(name) (name || '').gsub(/[\s_]/, '-').downcase end end def replay_step_or_examples return unless @current_builder replay(@current_builder) @current_builder = nil end end end end gherkin-2.12.2/lib/gherkin/tag_expression.rb0000644000004100000410000000350312244512574021040 0ustar www-datawww-datarequire 'gherkin/native' module Gherkin class TagExpression native_impl('gherkin') attr_reader :limits def initialize(tag_expressions) @ands = [] @limits = {} tag_expressions.each do |expr| add(expr.strip.split(/\s*,\s*/)) end end def empty? @ands.empty? end def evaluate(tags) return true if @ands.flatten.empty? vars = Hash[*tags.map{|tag| [tag.name, true]}.flatten] raise "No vars" if vars.nil? # Useless statement to prevent ruby warnings about unused var !!Kernel.eval(ruby_expression) end private def add(tags_with_negation_and_limits) negatives, positives = tags_with_negation_and_limits.partition{|tag| tag =~ /^~/} @ands << (store_and_extract_limits(negatives, true) + store_and_extract_limits(positives, false)) end def store_and_extract_limits(tags_with_negation_and_limits, negated) tags_with_negation = [] tags_with_negation_and_limits.each do |tag_with_negation_and_limit| tag_with_negation, limit = tag_with_negation_and_limit.split(':') tags_with_negation << tag_with_negation if limit tag_without_negation = negated ? tag_with_negation[1..-1] : tag_with_negation if @limits[tag_without_negation] && @limits[tag_without_negation] != limit.to_i raise "Inconsistent tag limits for #{tag_without_negation}: #{@limits[tag_without_negation]} and #{limit.to_i}" end @limits[tag_without_negation] = limit.to_i end end tags_with_negation end def ruby_expression "(" + @ands.map do |ors| ors.map do |tag| if tag =~ /^~(.*)/ "!vars['#{$1}']" else "vars['#{tag}']" end end.join("||") end.join(")&&(") + ")" end end end gherkin-2.12.2/lib/gherkin/i18n.rb0000755000004100000410000001250412244512574016571 0ustar www-datawww-datarequire 'gherkin/rubify' require 'gherkin/native' require 'multi_json' module Gherkin class I18n LexerNotFound = Class.new(LoadError) native_impl('gherkin') unless defined?(BYPASS_NATIVE_IMPL) FEATURE_ELEMENT_KEYS = %w{feature background scenario scenario_outline examples} STEP_KEYWORD_KEYS = %w{given when then and but} KEYWORD_KEYS = FEATURE_ELEMENT_KEYS + STEP_KEYWORD_KEYS LANGUAGES = MultiJson.load(File.open(File.dirname(__FILE__) + '/i18n.json', 'r:utf-8').read) class << self include Rubify # Used by code generators for other lexer tools like pygments lexer and textmate bundle def all LANGUAGES.keys.sort.map{|iso_code| get(iso_code)} end def get(iso_code) languages[iso_code] ||= new(iso_code) end # Returns all keyword translations and aliases of +keywords+, escaped and joined with |. # This method is convenient for editor support and syntax highlighting engines for Gherkin, where # there is typically a code generation tool to generate regular expressions for recognising the # various I18n translations of Gherkin's keywords. # # The +keywords+ arguments can be one of :feature, :background, :scenario, # :scenario_outline, :examples, :step. def keyword_regexp(*keywords) unique_keywords = all.map do |i18n| keywords.map do |keyword| if keyword.to_s == 'step' i18n.step_keywords.to_a else i18n.keywords(keyword).to_a end end end unique_keywords.flatten.compact.map{|kw| kw.to_s}.sort.reverse.uniq.join('|').gsub(/\*/, '\*') end def code_keywords rubify(all.map{|i18n| i18n.code_keywords}).flatten.uniq.sort end def code_keyword_for(gherkin_keyword) gherkin_keyword.gsub(/[\s',!]/, '').strip end def language_table require 'stringio' require 'gherkin/formatter/pretty_formatter' require 'gherkin/formatter/model' io = StringIO.new pf = Gherkin::Formatter::PrettyFormatter.new(io, true, false) table = all.map do |i18n| Formatter::Model::DataTableRow.new([], [i18n.iso_code, i18n.keywords('name')[0], i18n.keywords('native')[0]], nil) end pf.table(table) io.string end def unicode_escape(word, prefix="\\u") word = word.unpack("U*").map do |c| if c > 127 || c == 32 "#{prefix}%04x" % c else c.chr end end.join end private def languages @languages ||= {} end end attr_reader :iso_code def initialize(iso_code) @iso_code = iso_code @keywords = LANGUAGES[iso_code] raise "Language not supported: #{iso_code.inspect}" if @iso_code.nil? @keywords['grammar_name'] = @keywords['name'].gsub(/\s/, '') end def lexer(listener, force_ruby=false) if force_ruby || ENV['GHERKIN_RUBY'] =~ /true/i rb(listener) else begin c(listener) rescue NameError, LoadError => e warn("WARNING: #{e.message}. Reverting to Ruby lexer.") rb(listener) end end rescue LoadError => e raise LexerNotFound, "No lexer was found for #{iso_code} (#{e.message}). Supported languages are listed in gherkin/i18n.json." end def c(listener) require 'gherkin/c_lexer' CLexer[underscored_iso_code].new(listener) end def rb(listener) require "gherkin/lexer/#{underscored_iso_code}" Lexer.const_get(underscored_iso_code.capitalize).new(listener) end def underscored_iso_code @iso_code.gsub(/[\s-]/, '_').downcase end # Keywords that can be used in Gherkin source def step_keywords STEP_KEYWORD_KEYS.map{|iso_code| keywords(iso_code)}.flatten.uniq end # Keywords that can be used in code def code_keywords result = step_keywords.map{|keyword| self.class.code_keyword_for(keyword)} result.delete('*') result.delete_if {|kw| kw =~ /^\d/} result end def keywords(key) key = key.to_s raise "No #{key.inspect} in #{@keywords.inspect}" if @keywords[key].nil? @keywords[key].split('|').map{|keyword| real_keyword(key, keyword)} end def keyword_table require 'stringio' require 'gherkin/formatter/pretty_formatter' require 'gherkin/formatter/model' io = StringIO.new pf = Gherkin::Formatter::PrettyFormatter.new(io, false, false) gherkin_keyword_table = KEYWORD_KEYS.map do |key| Formatter::Model::Row.new([], [key, keywords(key).map{|keyword| %{"#{keyword}"}}.join(', ')], nil) end code_keyword_table = STEP_KEYWORD_KEYS.map do |key| code_keywords = keywords(key).reject{|keyword| keyword == '* '}.map do |keyword| %{"#{self.class.code_keyword_for(keyword)}"} end.join(', ') Formatter::Model::Row.new([], ["#{key} (code)", code_keywords], nil) end pf.table(gherkin_keyword_table + code_keyword_table) io.string end private def real_keyword(key, keyword) if(STEP_KEYWORD_KEYS.index(key)) (keyword + ' ').sub(/< $/, '') else keyword end end end end gherkin-2.12.2/lib/gherkin/platform.rb0000644000004100000410000000061412244512574017632 0ustar www-datawww-data# Detect the platform we're running and warn if it is not supported module Gherkin unless defined?(Gherkin::VERSION) # See the comment in gherkin.gemspec if you bump the MINOR version (MAJOR.MINOR.PATCH). VERSION = '2.12.2' JRUBY = defined?(JRUBY_VERSION) if !JRUBY && !(RUBY_VERSION =~ /^(1\.9\.3|2\.0)/) warn("WARNING: Unsupported Ruby version - #{RUBY_VERSION}") end end end gherkin-2.12.2/lib/gherkin/json_parser.rb0000644000004100000410000001055512244512574020340 0ustar www-datawww-datarequire 'base64' require 'gherkin/formatter/argument' require 'gherkin/formatter/model' require 'gherkin/native' require 'multi_json' module Gherkin class JSONParser native_impl('gherkin') include Base64 def initialize(reporter, formatter) @reporter, @formatter = reporter, formatter end # Parse a gherkin object +o+, which can either be a JSON String, # or a Hash (from a parsed JSON String). def parse(o) o = MultiJson.load(o) if String === o o.each do |f| @formatter.uri(f['uri']) Formatter::Model::Feature.new(comments(f), tags(f), keyword(f), name(f), description(f), line(f), id(f)).replay(@formatter) (f["elements"] || []).each do |feature_element| feature_element(feature_element).replay(@formatter) (feature_element["before"] || []).each do |hook| before(hook) end (feature_element["steps"] || []).each do |step| step(step).replay(@formatter) match(step) result(step) embeddings(step) output(step) end (feature_element["after"] || []).each do |hook| after(hook) end (feature_element["examples"] || []).each do |eo| Formatter::Model::Examples.new(comments(eo), tags(eo), keyword(eo), name(eo), description(eo), line(eo), id(eo), examples_rows(eo['rows'])).replay(@formatter) end end end @formatter.eof end private def feature_element(o) case o['type'] when 'background' Formatter::Model::Background.new(comments(o), keyword(o), name(o), description(o), line(o)) when 'scenario' Formatter::Model::Scenario.new(comments(o), tags(o), keyword(o), name(o), description(o), line(o), id(o)) when 'scenario_outline' Formatter::Model::ScenarioOutline.new(comments(o), tags(o), keyword(o), name(o), description(o), line(o), id(o)) end end def step(o) builder = Formatter::Model::Step::Builder.new(comments(o), keyword(o), name(o), line(o)) (o['rows'] || []).each do |row| builder.row comments(row), row['cells'], row['line'], nil end if(o['doc_string']) ds = o['doc_string'] builder.doc_string ds['value'], ds['content_type'].to_s, ds['line'] end builder.build end def match(o) if(m = o['match']) Formatter::Model::Match.new(arguments(m), location(m)).replay(@reporter) end end def result(o) if(r = o['result']) Formatter::Model::Result.new(status(r), duration(r), error_message(r)).replay(@reporter) end end def before(o) m = o['match'] match = Formatter::Model::Match.new([], location(m)) r = o['result'] result = Formatter::Model::Result.new(status(r), duration(r), error_message(r)) @reporter.before(match, result) end def after(o) m = o['match'] match = Formatter::Model::Match.new([], location(m)) r = o['result'] result = Formatter::Model::Result.new(status(r), duration(r), error_message(r)) @reporter.after(match, result) end def embeddings(o) (o['embeddings'] || []).each do |embedding| @reporter.embedding(embedding['mime_type'], Base64::decode64(embedding['data'])) end end def output(o) (o['output'] || []).each do |text| @reporter.write(text) end end def examples_rows(o) o.map{|row| Formatter::Model::ExamplesTableRow.new(comments(row), row['cells'], row['line'], row['id'])} end def comments(o) (o['comments'] || []).map do |comment| Formatter::Model::Comment.new(comment['value'], comment['line']) end end def tags(o) (o['tags'] || []).map do |tag| Formatter::Model::Tag.new(tag['name'], tag['line']) end end def keyword(o) o['keyword'] end def name(o) o['name'] end def description(o) o['description'] end def line(o) o['line'] end def id(o) o['id'] end def arguments(m) m['arguments'].map{|a| Formatter::Argument.new(a['offset'], a['val'])} end def location(m) m['location'] end def status(r) r['status'] end def duration(r) r['duration'] end def error_message(r) r['error_message'] end end end gherkin-2.12.2/lib/gherkin/c_lexer.rb0000644000004100000410000000103712244512574017427 0ustar www-datawww-datarequire 'rbconfig' module Gherkin module CLexer def self.[](i18n_underscored_iso_code) begin prefix = RbConfig::CONFIG['arch'] =~ /mswin|mingw/ ? "#{RbConfig::CONFIG['MAJOR']}.#{RbConfig::CONFIG['MINOR']}/" : '' lib = "#{prefix}gherkin_lexer_#{i18n_underscored_iso_code}" require lib const_get(i18n_underscored_iso_code.capitalize) rescue LoadError => e e.message << %{\nCouldn't load #{lib}\nThe $LOAD_PATH was:\n#{$LOAD_PATH.join("\n")}} raise e end end end end gherkin-2.12.2/lib/gherkin/rubify.rb0000644000004100000410000000153512244512574017311 0ustar www-datawww-datamodule Gherkin module Rubify if defined?(JRUBY_VERSION) # Translate Java objects to Ruby. # This is especially important to convert java.util.List coming # from Java and back to a Ruby Array. def rubify(o) case (o) when Java.java.util.Collection, Array rubified_array = o.map{ |e| rubify(e) } if o.respond_to?(:line) class << rubified_array attr_accessor :line end rubified_array.line = o.line end rubified_array when Java.gherkin.formatter.model.DocString require 'gherkin/formatter/model' Formatter::Model::DocString.new(o.content_type, o.value, o.line) else o end end else def rubify(o) o end end end endgherkin-2.12.2/lib/gherkin/lexer/0000755000004100000410000000000012244512574016577 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin/lexer/en_scouse.rb0000644000004100000410000015166612244512574021126 0ustar www-datawww-data # line 1 "ragel/i18n/en_scouse.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En_scouse #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en_scouse.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en_scouse.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 20, 21, 22, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 97, 102, 109, 114, 115, 116, 117, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 237, 239, 241, 243, 245, 247, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 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, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 947, 953, 956, 958, 964, 983, 985, 987, 989, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 70, 71, 84, 87, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 70, 71, 84, 87, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 110, 117, 104, 101, 105, 117, 110, 32, 121, 111, 117, 115, 101, 32, 103, 111, 116, 116, 97, 115, 32, 105, 115, 32, 119, 104, 97, 116, 32, 119, 101, 110, 116, 32, 100, 111, 119, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 71, 84, 87, 89, 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, 68, 69, 70, 71, 84, 87, 89, 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, 68, 69, 70, 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, 105, 10, 115, 10, 32, 10, 105, 10, 115, 10, 32, 10, 119, 10, 104, 10, 97, 10, 116, 10, 32, 10, 119, 10, 101, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 119, 10, 110, 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, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 104, 10, 97, 10, 114, 10, 114, 10, 105, 10, 109, 10, 101, 10, 97, 10, 110, 105, 118, 117, 104, 101, 32, 116, 104, 105, 110, 103, 32, 111, 102, 32, 105, 116, 32, 105, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 71, 84, 87, 89, 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, 117, 10, 104, 10, 101, 105, 117, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 10, 116, 10, 97, 10, 115, 10, 32, 10, 105, 10, 115, 10, 32, 10, 119, 10, 104, 10, 97, 10, 116, 10, 32, 10, 119, 10, 101, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 119, 10, 110, 10, 58, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 10, 105, 10, 118, 10, 117, 10, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 115, 10, 104, 117, 10, 97, 10, 114, 10, 114, 10, 105, 10, 109, 10, 101, 10, 97, 10, 110, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 107, 10, 110, 10, 111, 10, 119, 10, 32, 10, 108, 119, 10, 105, 10, 107, 10, 101, 10, 32, 10, 119, 10, 104, 10, 101, 10, 104, 10, 101, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 104, 117, 97, 114, 114, 105, 109, 101, 97, 110, 32, 105, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 71, 84, 87, 89, 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, 117, 10, 104, 10, 101, 117, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 10, 116, 10, 97, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 10, 58, 10, 105, 10, 118, 10, 117, 10, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 115, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 107, 10, 110, 10, 111, 10, 119, 10, 32, 10, 108, 119, 10, 105, 10, 107, 10, 101, 10, 32, 10, 119, 10, 104, 10, 101, 10, 104, 10, 101, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 111, 117, 115, 101, 32, 107, 110, 111, 119, 32, 108, 119, 105, 107, 101, 32, 119, 104, 101, 104, 101, 110, 32, 121, 111, 117, 115, 101, 32, 103, 111, 116, 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, 68, 69, 70, 71, 84, 87, 89, 124, 9, 13, 10, 110, 10, 117, 10, 104, 10, 101, 117, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 10, 116, 10, 97, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 10, 58, 10, 105, 10, 118, 10, 117, 10, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 115, 10, 104, 117, 10, 97, 10, 114, 10, 114, 10, 105, 10, 109, 10, 101, 10, 97, 10, 110, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 107, 10, 110, 10, 111, 10, 119, 10, 32, 10, 108, 119, 10, 105, 10, 107, 10, 101, 10, 32, 10, 119, 10, 104, 10, 101, 10, 104, 10, 101, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 18, 1, 1, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 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, 10, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 3, 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, 1, 1, 1, 1, 1, 1, 14, 2, 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, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 17, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 20, 22, 24, 43, 45, 47, 50, 53, 58, 63, 68, 73, 77, 81, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 127, 134, 139, 141, 143, 145, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 326, 329, 332, 335, 338, 341, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 377, 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 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, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1402, 1408, 1412, 1415, 1421, 1440, 1443, 1446, 1449, 1453, 1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489, 1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2, 0, 19, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2, 0, 20, 0, 21, 0, 23, 24, 22, 26, 27, 25, 30, 29, 31, 29, 28, 34, 33, 35, 33, 32, 34, 33, 36, 33, 32, 34, 33, 37, 33, 32, 39, 38, 38, 0, 3, 40, 40, 0, 42, 43, 41, 3, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 60, 61, 59, 63, 64, 62, 0, 0, 0, 0, 65, 66, 67, 66, 66, 69, 68, 65, 3, 70, 8, 70, 0, 71, 0, 72, 0, 71, 0, 73, 74, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 71, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 109, 108, 111, 110, 111, 112, 113, 114, 115, 113, 116, 117, 118, 119, 120, 121, 122, 123, 112, 110, 111, 124, 110, 111, 125, 110, 111, 126, 110, 111, 127, 110, 111, 128, 110, 111, 129, 110, 111, 130, 110, 111, 131, 110, 111, 132, 110, 111, 133, 110, 111, 134, 110, 111, 135, 110, 111, 136, 110, 111, 137, 110, 111, 138, 110, 140, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 139, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 165, 164, 167, 166, 167, 168, 169, 170, 169, 168, 166, 167, 171, 166, 167, 172, 166, 167, 173, 166, 167, 174, 166, 167, 175, 166, 167, 176, 166, 167, 177, 166, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 186, 185, 188, 187, 188, 189, 190, 191, 190, 192, 193, 194, 195, 196, 189, 187, 188, 197, 187, 188, 198, 187, 188, 199, 187, 188, 200, 187, 188, 201, 187, 188, 202, 187, 188, 203, 187, 188, 204, 187, 188, 205, 187, 188, 206, 187, 188, 207, 187, 188, 208, 187, 188, 209, 187, 188, 210, 187, 188, 211, 187, 188, 212, 187, 188, 213, 187, 188, 214, 187, 188, 215, 187, 188, 216, 187, 188, 217, 187, 188, 218, 187, 188, 219, 187, 188, 220, 187, 188, 221, 187, 188, 222, 187, 188, 223, 187, 188, 224, 187, 188, 225, 187, 188, 226, 187, 188, 227, 187, 188, 228, 187, 188, 229, 187, 188, 230, 187, 188, 231, 187, 188, 232, 187, 188, 233, 187, 188, 234, 187, 188, 235, 187, 188, 236, 187, 188, 237, 187, 188, 230, 187, 188, 238, 187, 188, 239, 187, 188, 240, 187, 188, 241, 187, 188, 242, 187, 188, 230, 187, 188, 243, 187, 188, 244, 187, 188, 245, 187, 188, 246, 187, 188, 247, 187, 188, 248, 187, 188, 249, 187, 188, 250, 187, 188, 251, 187, 188, 252, 187, 188, 253, 187, 188, 254, 187, 188, 255, 187, 188, 256, 187, 188, 257, 187, 188, 237, 187, 188, 258, 187, 188, 259, 187, 188, 260, 187, 188, 261, 187, 188, 262, 187, 188, 263, 187, 188, 264, 187, 188, 265, 187, 188, 256, 187, 266, 0, 267, 0, 75, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 287, 286, 289, 288, 289, 290, 291, 292, 293, 291, 294, 295, 296, 297, 298, 299, 300, 301, 290, 288, 289, 302, 288, 289, 303, 288, 289, 304, 288, 289, 305, 288, 289, 306, 288, 289, 307, 288, 289, 308, 288, 289, 309, 288, 289, 310, 288, 289, 311, 288, 289, 312, 288, 289, 313, 288, 289, 314, 288, 289, 315, 288, 289, 316, 288, 289, 317, 288, 289, 318, 288, 289, 317, 288, 289, 319, 320, 321, 288, 289, 322, 288, 289, 323, 288, 289, 324, 288, 289, 325, 288, 289, 326, 288, 289, 327, 288, 289, 328, 288, 289, 329, 288, 289, 330, 288, 289, 331, 288, 289, 332, 288, 289, 333, 288, 289, 317, 288, 289, 334, 288, 289, 335, 288, 289, 336, 288, 289, 337, 288, 289, 338, 288, 289, 339, 288, 289, 340, 288, 289, 341, 288, 289, 342, 288, 289, 343, 288, 289, 344, 288, 289, 345, 288, 289, 346, 288, 289, 347, 288, 289, 348, 288, 289, 349, 288, 289, 350, 288, 289, 351, 288, 289, 352, 288, 289, 316, 288, 289, 353, 288, 289, 354, 288, 289, 355, 288, 289, 356, 288, 289, 357, 288, 289, 352, 288, 289, 358, 288, 289, 359, 288, 289, 321, 288, 289, 360, 288, 289, 361, 288, 289, 362, 288, 289, 363, 288, 289, 364, 288, 289, 365, 288, 289, 366, 288, 289, 367, 288, 289, 368, 288, 289, 369, 288, 289, 370, 288, 289, 371, 288, 289, 372, 288, 289, 373, 288, 289, 374, 288, 289, 375, 288, 289, 352, 288, 289, 376, 321, 288, 289, 377, 288, 289, 378, 288, 289, 379, 288, 289, 380, 288, 289, 381, 288, 289, 382, 288, 289, 383, 288, 289, 373, 288, 289, 384, 288, 289, 385, 288, 289, 386, 288, 289, 387, 288, 289, 388, 288, 289, 389, 288, 289, 390, 288, 289, 391, 288, 289, 392, 288, 289, 393, 288, 289, 394, 395, 288, 289, 396, 288, 289, 397, 288, 289, 398, 288, 289, 399, 288, 289, 400, 288, 289, 401, 288, 289, 321, 288, 289, 402, 288, 289, 403, 288, 289, 404, 288, 289, 405, 288, 289, 406, 288, 289, 407, 288, 289, 408, 288, 289, 409, 288, 289, 410, 288, 289, 411, 288, 289, 412, 288, 289, 413, 288, 289, 317, 288, 414, 75, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 428, 427, 430, 429, 430, 431, 432, 433, 434, 432, 435, 436, 437, 438, 439, 440, 441, 442, 431, 429, 430, 443, 429, 430, 444, 429, 430, 445, 429, 430, 446, 429, 430, 447, 429, 430, 448, 429, 430, 449, 429, 430, 450, 429, 430, 451, 429, 430, 452, 429, 430, 453, 429, 430, 454, 429, 430, 455, 429, 430, 456, 429, 430, 457, 429, 430, 458, 429, 430, 459, 429, 430, 458, 429, 430, 460, 461, 429, 430, 462, 429, 430, 463, 429, 430, 464, 429, 430, 465, 429, 430, 466, 429, 430, 467, 429, 430, 468, 429, 430, 469, 429, 430, 470, 429, 430, 471, 429, 430, 472, 429, 430, 473, 429, 430, 458, 429, 430, 474, 429, 430, 475, 429, 430, 476, 429, 430, 477, 429, 430, 478, 429, 430, 479, 429, 430, 457, 429, 430, 480, 429, 430, 481, 429, 430, 461, 429, 430, 482, 429, 430, 483, 429, 430, 484, 429, 430, 485, 429, 430, 486, 429, 430, 487, 429, 430, 488, 429, 430, 489, 429, 430, 490, 429, 430, 491, 429, 430, 492, 429, 430, 493, 429, 430, 494, 429, 430, 495, 429, 430, 496, 429, 430, 497, 429, 430, 479, 429, 430, 498, 429, 430, 499, 429, 430, 500, 429, 430, 501, 429, 430, 502, 429, 430, 503, 429, 430, 504, 429, 430, 505, 429, 430, 506, 429, 430, 507, 429, 430, 508, 509, 429, 430, 510, 429, 430, 511, 429, 430, 512, 429, 430, 513, 429, 430, 514, 429, 430, 515, 429, 430, 461, 429, 430, 516, 429, 430, 517, 429, 430, 518, 429, 430, 519, 429, 430, 520, 429, 430, 521, 429, 430, 522, 429, 430, 523, 429, 430, 524, 429, 430, 525, 429, 430, 526, 429, 430, 527, 429, 430, 458, 429, 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 75, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 71, 0, 558, 559, 558, 0, 562, 561, 563, 564, 561, 560, 0, 566, 567, 565, 0, 566, 565, 562, 568, 566, 567, 568, 565, 562, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 569, 0, 111, 585, 110, 111, 586, 110, 111, 585, 110, 111, 587, 588, 110, 111, 589, 110, 111, 590, 110, 111, 591, 110, 111, 592, 110, 111, 593, 110, 111, 594, 110, 111, 595, 110, 111, 596, 110, 111, 597, 110, 111, 598, 110, 111, 599, 110, 111, 600, 110, 111, 585, 110, 111, 601, 110, 111, 602, 110, 111, 603, 110, 111, 604, 110, 111, 605, 110, 111, 606, 110, 111, 138, 110, 111, 607, 110, 111, 608, 110, 111, 588, 110, 111, 609, 110, 111, 610, 110, 111, 611, 110, 111, 612, 110, 111, 613, 110, 111, 614, 110, 111, 615, 110, 111, 616, 110, 111, 617, 110, 111, 618, 110, 111, 619, 110, 111, 620, 110, 111, 621, 110, 111, 622, 110, 111, 623, 110, 111, 624, 110, 111, 606, 110, 111, 625, 588, 110, 111, 626, 110, 111, 627, 110, 111, 628, 110, 111, 629, 110, 111, 630, 110, 111, 631, 110, 111, 632, 110, 111, 622, 110, 111, 633, 110, 111, 634, 110, 111, 635, 110, 111, 636, 110, 111, 637, 110, 111, 638, 110, 111, 639, 110, 111, 640, 110, 111, 641, 110, 111, 642, 110, 111, 643, 644, 110, 111, 645, 110, 111, 646, 110, 111, 647, 110, 111, 648, 110, 111, 649, 110, 111, 650, 110, 111, 588, 110, 111, 651, 110, 111, 652, 110, 111, 653, 110, 111, 654, 110, 111, 655, 110, 111, 656, 110, 111, 657, 110, 111, 658, 110, 111, 659, 110, 111, 660, 110, 111, 661, 110, 111, 662, 110, 111, 585, 110, 663, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 563, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 31, 39, 41, 54, 37, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 75, 76, 76, 4, 77, 91, 479, 480, 482, 496, 503, 506, 523, 532, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 4, 92, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 102, 103, 103, 4, 104, 105, 106, 107, 108, 109, 110, 92, 112, 113, 114, 115, 116, 117, 118, 119, 120, 119, 120, 120, 4, 121, 135, 156, 163, 169, 185, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 4, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 92, 157, 158, 159, 160, 161, 162, 164, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 186, 187, 188, 189, 190, 191, 192, 193, 195, 196, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 216, 217, 217, 4, 218, 232, 233, 234, 236, 270, 276, 279, 296, 305, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 4, 92, 232, 235, 237, 250, 233, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 277, 278, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 323, 317, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 350, 351, 351, 4, 352, 366, 367, 368, 370, 384, 391, 394, 393, 411, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 4, 92, 366, 369, 371, 367, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 392, 393, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 429, 423, 424, 425, 426, 427, 428, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 460, 454, 455, 456, 457, 458, 459, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 477, 478, 476, 474, 475, 476, 474, 477, 478, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 91, 481, 483, 479, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 497, 498, 499, 500, 501, 502, 504, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 524, 525, 526, 527, 528, 529, 530, 531, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 550, 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 563; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en_scouse.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1021 "lib/gherkin/lexer/en_scouse.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en_scouse.rb.rl" # line 1030 "lib/gherkin/lexer/en_scouse.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en_scouse.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en_scouse.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en_scouse.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en_scouse.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en_scouse.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en_scouse.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en_scouse.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en_scouse.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en_scouse.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en_scouse.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en_scouse.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en_scouse.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en_scouse.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en_scouse.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en_scouse.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en_scouse.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en_scouse.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en_scouse.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en_scouse.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en_scouse.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en_scouse.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en_scouse.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en_scouse.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en_scouse.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1274 "lib/gherkin/lexer/en_scouse.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en_scouse.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1313 "lib/gherkin/lexer/en_scouse.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en_scouse.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/i18n_lexer.rb0000644000004100000410000000214312244512574021102 0ustar www-datawww-data#encoding: utf-8 require 'gherkin/i18n' require 'gherkin/native' module Gherkin module Lexer LexingError = Class.new(StandardError) # The main entry point to lexing Gherkin source. class I18nLexer native_impl('gherkin') COMMENT_OR_EMPTY_LINE_PATTERN = /^(\xEF\xBB\xBF)?\s*#|^\s*$/ LANGUAGE_PATTERN = /^(\xEF\xBB\xBF)?\s*#\s*language\s*:\s*([a-zA-Z\-]+)/ #:nodoc: attr_reader :i18n_language def initialize(listener, force_ruby=false, iso_code='en') @listener = listener @force_ruby = force_ruby @iso_code = iso_code end def scan(source) create_delegate(source).scan(source) end private def create_delegate(source) @i18n_language = lang(source) @i18n_language.lexer(@listener, @force_ruby) end def lang(source) key = @iso_code source.each_line do |line| break unless COMMENT_OR_EMPTY_LINE_PATTERN =~ line if LANGUAGE_PATTERN =~ line key = $2 break end end I18n.get(key) end end end end gherkin-2.12.2/lib/gherkin/lexer/tr.rb0000644000004100000410000012145312244512574017557 0ustar www-datawww-data # line 1 "ragel/i18n/tr.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Tr #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/tr.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/tr.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 39, 41, 43, 45, 47, 49, 51, 53, 55, 74, 93, 94, 95, 97, 99, 104, 109, 114, 119, 123, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 149, 154, 161, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 495, 496, 513, 515, 517, 519, 521, 523, 525, 527, 529, 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, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 659, 663, 669, 672, 674, 680, 699, 700, 701, 702, 703, 704, 705, 706, 707, 717, 719, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 822, 823 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, -106, 114, 122, 110, 101, 107, 108, 101, 114, 58, 10, 10, -61, 10, 32, 35, 124, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 109, 97, 105, 121, 101, 108, 105, 109, 32, 107, 105, -60, -97, 101, 114, 97, 107, 97, 116, 101, -61, -89, 109, 105, -59, -97, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 79, 83, 86, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, 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, 109, 10, 97, 10, 105, 10, 121, 10, 101, 10, 108, 10, 105, 10, 109, 10, 32, 10, 107, 10, 105, -60, 10, -97, 10, 10, 101, 10, 114, 10, 97, 10, 107, 10, 97, 10, 116, 10, 32, 10, 122, 10, 97, 10, 109, 10, 97, 10, 110, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 32, 58, 10, 116, 10, 97, 10, 115, 10, 108, 10, 97, -60, 10, -97, 10, -60, 10, -79, 10, 10, 101, 32, 122, 97, 109, 97, 110, 101, 110, 97, 114, 121, 111, 32, 58, 116, 97, 115, 108, 97, -60, -97, -60, -79, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 79, 83, 86, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, 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, 109, 10, 97, 10, 105, 10, 121, 10, 101, 10, 108, 10, 105, 10, 109, 10, 32, 10, 107, 10, 105, -60, 10, -97, 10, 10, 101, 10, 114, 10, 97, 10, 107, 10, 97, 10, 116, 10, 32, 10, 122, 10, 97, 10, 109, 10, 97, 10, 110, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 101, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, 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, 109, 10, 97, 10, 105, 10, 121, 10, 101, 10, 108, 10, 105, 10, 109, 10, 32, 10, 107, 10, 105, -60, 10, -97, 10, 10, 101, 10, 114, 10, 97, 10, 107, 10, 97, 10, 116, 10, 101, -61, 10, -89, 10, 10, 109, 10, 105, -59, 10, -97, 10, 10, 32, 10, 122, 10, 97, 10, 109, 10, 97, 10, 110, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 32, 58, 10, 116, 10, 97, 10, 115, 10, 108, 10, 97, -60, 10, -97, 10, -60, 10, -79, 10, 10, 101, 101, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, 101, 108, 108, 105, 107, 58, 10, 10, -61, 10, 32, 35, 37, 64, 71, 83, 9, 13, -106, 10, 10, 114, 122, 10, 110, 10, 101, 10, 107, 10, 108, 10, 101, 10, 114, 10, 58, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 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, 101, -61, 10, -89, 10, 10, 109, 10, 105, -59, 10, -97, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 32, 58, 10, 116, 10, 97, 10, 115, 10, 108, 10, 97, -60, 10, -97, 10, -60, 10, -79, 10, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 18, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 15, 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, 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, 1, 2, 4, 3, 2, 4, 17, 1, 1, 1, 1, 1, 1, 1, 1, 8, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 20, 22, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 50, 53, 56, 59, 62, 65, 68, 71, 74, 93, 112, 114, 116, 119, 122, 127, 132, 137, 142, 146, 150, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 188, 191, 196, 203, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 712, 714, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 950, 954, 960, 964, 967, 973, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1018, 1021, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1175, 1177 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3, 0, 19, 0, 20, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 30, 29, 32, 31, 33, 32, 34, 35, 35, 34, 31, 36, 32, 31, 32, 37, 31, 32, 38, 31, 32, 39, 31, 32, 40, 31, 32, 41, 31, 32, 42, 31, 32, 43, 31, 44, 46, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 45, 0, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 3, 0, 61, 0, 62, 0, 64, 65, 63, 67, 68, 66, 71, 70, 72, 70, 69, 75, 74, 76, 74, 73, 75, 74, 77, 74, 73, 75, 74, 78, 74, 73, 80, 79, 79, 0, 4, 81, 81, 0, 83, 84, 82, 4, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 101, 102, 100, 104, 105, 103, 0, 0, 0, 0, 106, 107, 108, 107, 107, 110, 109, 106, 4, 111, 9, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 113, 0, 122, 0, 123, 0, 124, 0, 119, 0, 125, 0, 126, 0, 127, 0, 113, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 137, 136, 139, 138, 140, 139, 141, 142, 143, 144, 142, 145, 146, 147, 148, 149, 150, 151, 141, 138, 152, 139, 138, 139, 153, 138, 139, 154, 138, 139, 155, 138, 139, 156, 138, 139, 157, 138, 139, 158, 138, 139, 159, 138, 139, 160, 138, 139, 161, 138, 139, 162, 138, 139, 163, 138, 139, 164, 138, 139, 165, 138, 139, 166, 138, 139, 167, 138, 139, 168, 138, 139, 169, 138, 139, 170, 138, 139, 171, 138, 139, 172, 138, 139, 173, 138, 139, 159, 138, 139, 174, 138, 139, 175, 138, 139, 176, 138, 139, 177, 138, 139, 178, 138, 139, 179, 138, 139, 180, 138, 139, 181, 138, 139, 182, 138, 139, 183, 138, 139, 175, 138, 184, 139, 138, 185, 139, 138, 139, 186, 138, 139, 181, 138, 139, 187, 138, 139, 188, 138, 139, 189, 138, 139, 175, 138, 139, 190, 138, 139, 191, 138, 139, 192, 138, 139, 193, 138, 139, 194, 138, 139, 175, 138, 139, 195, 138, 139, 196, 138, 139, 197, 138, 139, 198, 138, 139, 199, 138, 139, 200, 138, 139, 201, 159, 138, 139, 202, 138, 139, 203, 138, 139, 204, 138, 139, 205, 138, 139, 206, 138, 207, 139, 138, 208, 139, 138, 209, 139, 138, 158, 139, 138, 139, 175, 138, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 113, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 234, 233, 236, 235, 237, 236, 238, 239, 240, 241, 239, 242, 243, 244, 245, 246, 247, 248, 238, 235, 249, 236, 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, 265, 235, 236, 266, 235, 236, 267, 235, 236, 268, 235, 236, 269, 235, 236, 270, 235, 236, 256, 235, 236, 271, 235, 236, 272, 235, 236, 273, 235, 236, 274, 235, 236, 275, 235, 236, 276, 235, 236, 277, 235, 236, 278, 235, 236, 279, 235, 236, 280, 235, 236, 272, 235, 281, 236, 235, 282, 236, 235, 236, 283, 235, 236, 278, 235, 236, 284, 235, 236, 285, 235, 236, 286, 235, 236, 272, 235, 236, 287, 235, 236, 288, 235, 236, 289, 235, 236, 290, 235, 236, 291, 235, 236, 272, 235, 236, 292, 235, 236, 293, 235, 236, 294, 235, 236, 295, 235, 236, 296, 235, 236, 255, 235, 236, 272, 235, 298, 297, 300, 299, 301, 300, 302, 303, 304, 305, 303, 306, 307, 308, 309, 310, 311, 312, 313, 302, 299, 314, 300, 299, 300, 315, 299, 300, 316, 299, 300, 317, 299, 300, 318, 299, 300, 319, 299, 300, 320, 299, 300, 321, 299, 300, 322, 299, 300, 323, 299, 300, 324, 299, 300, 325, 299, 300, 326, 299, 300, 327, 299, 300, 328, 299, 300, 329, 299, 300, 330, 299, 300, 331, 299, 300, 332, 299, 300, 333, 299, 300, 334, 299, 300, 335, 299, 300, 321, 299, 300, 336, 299, 300, 337, 299, 300, 338, 299, 300, 339, 299, 300, 340, 299, 300, 341, 299, 300, 342, 299, 300, 343, 299, 300, 344, 299, 300, 345, 299, 300, 337, 299, 346, 300, 299, 347, 300, 299, 300, 348, 299, 300, 343, 299, 300, 349, 299, 300, 350, 299, 300, 351, 299, 300, 337, 299, 300, 352, 299, 353, 300, 299, 354, 300, 299, 300, 355, 299, 300, 356, 299, 357, 300, 299, 320, 300, 299, 300, 358, 299, 300, 359, 299, 300, 360, 299, 300, 361, 299, 300, 362, 299, 300, 337, 299, 300, 363, 299, 300, 364, 299, 300, 365, 299, 300, 366, 299, 300, 367, 299, 300, 368, 299, 300, 369, 321, 299, 300, 370, 299, 300, 371, 299, 300, 372, 299, 300, 373, 299, 300, 374, 299, 375, 300, 299, 376, 300, 299, 377, 300, 299, 320, 300, 299, 300, 337, 299, 113, 0, 378, 379, 378, 0, 382, 381, 383, 384, 381, 380, 0, 386, 387, 385, 0, 386, 385, 382, 388, 386, 387, 388, 385, 389, 382, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 390, 0, 405, 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 412, 411, 414, 413, 415, 414, 416, 417, 418, 417, 419, 420, 416, 413, 421, 414, 413, 414, 422, 423, 413, 414, 424, 413, 414, 425, 413, 414, 426, 413, 414, 427, 413, 414, 428, 413, 414, 429, 413, 414, 430, 413, 414, 431, 413, 414, 432, 413, 414, 433, 413, 414, 434, 413, 414, 429, 413, 414, 435, 413, 414, 436, 413, 414, 437, 413, 414, 438, 413, 414, 439, 413, 414, 440, 413, 414, 441, 413, 414, 442, 413, 414, 443, 413, 414, 444, 413, 414, 445, 413, 414, 446, 413, 414, 447, 413, 414, 448, 413, 414, 449, 413, 450, 414, 413, 451, 414, 413, 414, 452, 413, 414, 453, 413, 454, 414, 413, 429, 414, 413, 414, 455, 413, 414, 456, 413, 414, 457, 413, 414, 458, 413, 414, 459, 413, 414, 460, 413, 414, 461, 430, 413, 414, 462, 413, 414, 463, 413, 414, 464, 413, 414, 465, 413, 414, 466, 413, 467, 414, 413, 468, 414, 413, 469, 414, 413, 429, 414, 413, 470, 0, 3, 0, 471, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 374, 23, 23, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 3, 4, 314, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 13, 14, 13, 23, 15, 16, 17, 18, 19, 20, 21, 22, 2, 23, 23, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 25, 26, 27, 28, 27, 27, 28, 27, 29, 29, 29, 30, 29, 29, 29, 30, 31, 32, 33, 23, 33, 34, 23, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 376, 51, 52, 23, 35, 52, 23, 35, 54, 55, 23, 54, 53, 55, 57, 50, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 84, 85, 86, 85, 23, 94, 108, 109, 111, 120, 124, 128, 134, 150, 87, 88, 89, 90, 91, 92, 93, 22, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 23, 110, 108, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 125, 126, 127, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 232, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 175, 176, 177, 176, 23, 185, 199, 200, 202, 211, 215, 219, 225, 231, 178, 179, 180, 181, 182, 183, 184, 22, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 23, 201, 199, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 216, 217, 218, 220, 221, 222, 223, 224, 226, 227, 228, 229, 230, 233, 234, 233, 234, 235, 234, 23, 243, 257, 258, 260, 269, 273, 277, 284, 290, 306, 236, 237, 238, 239, 240, 241, 242, 22, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 23, 259, 257, 261, 262, 263, 264, 265, 266, 267, 268, 270, 271, 272, 274, 275, 276, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 308, 309, 310, 312, 313, 311, 309, 310, 311, 309, 312, 2, 313, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 315, 316, 317, 318, 319, 320, 321, 322, 321, 322, 323, 322, 23, 337, 351, 358, 324, 325, 332, 326, 327, 328, 329, 330, 331, 22, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 23, 352, 353, 354, 355, 356, 357, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 375, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 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, 57, 144, 0, 54, 84, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 376; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/tr.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 751 "lib/gherkin/lexer/tr.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/tr.rb.rl" # line 760 "lib/gherkin/lexer/tr.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/tr.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/tr.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/tr.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/tr.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/tr.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/tr.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/tr.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/tr.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/tr.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/tr.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/tr.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/tr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/tr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/tr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/tr.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/tr.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/tr.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/tr.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/tr.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/tr.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/tr.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/tr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/tr.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/tr.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1004 "lib/gherkin/lexer/tr.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/tr.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1043 "lib/gherkin/lexer/tr.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/tr.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/pl.rb0000644000004100000410000016143712244512574017553 0ustar www-datawww-data # line 1 "ragel/i18n/pl.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Pl #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/pl.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/pl.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 23, 24, 25, 47, 48, 49, 51, 53, 58, 63, 68, 73, 77, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 108, 115, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1102, 1103, 1104, 1105, 1109, 1115, 1118, 1120, 1126, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 115, 101, 112, 101, 107, 116, 58, 10, 10, 10, 32, 35, 37, 64, 65, 70, 80, 83, 87, 90, 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, 115, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, 117, 110, 107, 99, 106, 97, 100, 121, 101, -59, -101, -68, 108, 105, 101, 105, 101, 97, 106, -60, -123, 99, 114, 97, 122, 111, 114, 116, 114, 122, 101, 98, 97, 32, 98, 105, 122, 110, 101, 115, 111, 119, 122, 121, 107, -59, -126, 97, 100, 121, 58, 10, 10, 10, 32, 35, 65, 70, 80, 87, 124, 9, 13, 10, 115, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, -59, 10, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 99, 122, 101, 110, 97, 114, 105, 117, 115, 122, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 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, 108, 115, 10, 101, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 100, 10, 121, 10, 101, -59, 10, -101, -68, 10, 10, 108, 10, 105, 10, 101, 10, 105, 10, 101, 10, 97, 10, 106, -60, 10, -123, 10, 10, 99, 10, 114, 10, 97, 10, 122, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 99, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, 116, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, -59, 10, 107, -126, 10, 10, 111, -59, 10, -68, 10, 10, 101, 10, 110, 10, 105, -59, 10, -126, 10, 10, 97, 10, 100, 97, 98, 108, 111, 110, 32, 115, 99, 101, 110, 97, 114, 105, 117, 115, 122, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 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, 108, 115, 10, 101, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 100, 10, 121, 10, 101, -59, 10, -101, -68, 10, 10, 108, 10, 105, 10, 101, 10, 105, 10, 101, 10, 97, 10, 106, -60, 10, -123, 10, 10, 99, 10, 114, 10, 97, 10, 122, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, 116, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, 10, 107, -59, 10, -126, 10, 10, 97, 10, 100, -59, 116, -126, 97, -59, -101, 99, 105, 119, 111, -59, -101, -60, -121, 97, -59, 107, -126, 111, -59, -68, 101, 110, 105, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 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, 108, 115, 10, 101, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 100, 10, 121, 10, 101, -59, 10, -101, -68, 10, 10, 108, 10, 105, 10, 101, 10, 105, 10, 101, 10, 97, 10, 106, -60, 10, -123, 10, 10, 99, 10, 114, 10, 97, 10, 122, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 99, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, 116, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, 10, 107, -59, 10, -126, 10, 10, 97, 10, 100, -59, -126, 97, 100, 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, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 111, 114, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 122, 10, 121, 10, 107, -59, 10, -126, 10, 10, 97, 10, 100, 10, 121, 10, 99, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, -59, 10, -126, 10, 10, 111, -59, 10, -68, 10, 10, 101, 10, 110, 10, 105, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 21, 1, 1, 20, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 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, 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, 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, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 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, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 4, 3, 2, 4, 20, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 23, 25, 27, 49, 51, 53, 56, 59, 64, 69, 74, 79, 83, 87, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 125, 128, 133, 140, 145, 148, 150, 152, 154, 156, 158, 160, 162, 164, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1616, 1618, 1620, 1622, 1626, 1632, 1636, 1639, 1645, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2, 0, 21, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2, 0, 22, 0, 23, 0, 25, 26, 24, 28, 29, 27, 32, 31, 33, 31, 30, 36, 35, 37, 35, 34, 36, 35, 38, 35, 34, 36, 35, 39, 35, 34, 41, 40, 40, 0, 3, 42, 42, 0, 44, 45, 43, 3, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 62, 63, 61, 65, 66, 64, 0, 0, 0, 0, 67, 68, 69, 68, 68, 71, 70, 67, 3, 72, 8, 72, 0, 73, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 82, 81, 84, 83, 84, 85, 86, 87, 86, 88, 89, 90, 91, 92, 93, 85, 83, 84, 94, 83, 84, 95, 83, 84, 96, 83, 84, 97, 83, 84, 98, 83, 84, 99, 83, 84, 100, 83, 84, 101, 83, 84, 102, 83, 84, 103, 83, 84, 104, 83, 84, 105, 83, 84, 106, 83, 84, 107, 83, 84, 108, 83, 84, 109, 83, 84, 110, 83, 84, 111, 83, 84, 112, 83, 84, 113, 83, 115, 114, 116, 117, 118, 119, 120, 121, 122, 123, 119, 124, 125, 126, 127, 128, 129, 130, 131, 132, 114, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 79, 0, 138, 0, 75, 0, 139, 0, 140, 0, 141, 142, 0, 143, 0, 75, 0, 141, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 75, 0, 150, 0, 151, 0, 75, 0, 152, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 137, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 178, 177, 180, 179, 180, 181, 182, 183, 184, 185, 186, 182, 181, 179, 180, 187, 179, 180, 188, 179, 180, 189, 179, 180, 190, 179, 180, 191, 179, 180, 192, 179, 180, 193, 179, 180, 194, 179, 180, 195, 179, 180, 196, 179, 180, 197, 179, 180, 191, 179, 180, 198, 179, 180, 199, 179, 180, 200, 179, 180, 201, 179, 180, 202, 179, 180, 203, 179, 180, 204, 179, 180, 205, 179, 180, 206, 179, 180, 207, 179, 180, 208, 179, 180, 209, 179, 180, 210, 179, 180, 211, 179, 180, 212, 179, 180, 197, 179, 213, 180, 179, 214, 180, 179, 180, 215, 179, 216, 180, 179, 217, 180, 179, 180, 218, 179, 180, 219, 179, 180, 220, 179, 180, 221, 179, 222, 180, 179, 223, 180, 179, 224, 180, 179, 191, 180, 179, 225, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 237, 236, 239, 238, 239, 240, 241, 242, 243, 241, 244, 245, 246, 243, 247, 248, 249, 250, 251, 252, 253, 254, 240, 238, 239, 255, 238, 239, 256, 238, 239, 257, 238, 239, 258, 238, 239, 259, 238, 239, 260, 238, 239, 261, 238, 239, 262, 238, 239, 263, 238, 239, 264, 238, 239, 265, 238, 239, 266, 238, 239, 267, 238, 239, 268, 238, 239, 269, 238, 239, 270, 271, 238, 239, 272, 238, 239, 273, 238, 239, 274, 238, 239, 275, 238, 239, 276, 238, 239, 269, 238, 239, 277, 238, 239, 278, 238, 239, 279, 238, 239, 280, 238, 239, 281, 238, 239, 276, 238, 239, 282, 238, 239, 272, 238, 239, 283, 238, 284, 239, 238, 285, 286, 239, 238, 239, 287, 238, 239, 272, 238, 239, 285, 238, 239, 288, 238, 239, 289, 238, 239, 290, 238, 239, 291, 238, 292, 239, 238, 293, 239, 238, 239, 272, 238, 239, 294, 238, 239, 295, 238, 239, 272, 238, 239, 296, 238, 239, 297, 238, 239, 298, 238, 239, 299, 238, 239, 300, 238, 239, 301, 238, 239, 302, 238, 239, 303, 238, 239, 304, 238, 239, 305, 238, 239, 306, 238, 239, 307, 238, 239, 308, 238, 239, 309, 238, 239, 310, 238, 239, 281, 238, 239, 311, 312, 238, 239, 313, 238, 239, 314, 238, 239, 315, 238, 239, 316, 238, 239, 317, 238, 239, 318, 238, 239, 319, 238, 239, 276, 238, 239, 320, 238, 239, 321, 238, 239, 322, 238, 239, 323, 238, 239, 324, 238, 239, 325, 238, 239, 326, 238, 239, 327, 238, 239, 328, 238, 239, 329, 238, 239, 330, 238, 239, 331, 238, 239, 332, 238, 239, 333, 238, 239, 334, 238, 239, 281, 238, 335, 239, 288, 238, 336, 239, 238, 239, 337, 238, 338, 239, 238, 339, 239, 238, 239, 340, 238, 239, 341, 238, 239, 342, 238, 239, 343, 238, 344, 239, 238, 345, 239, 238, 346, 239, 238, 276, 239, 238, 239, 347, 238, 348, 239, 349, 238, 350, 239, 238, 239, 351, 238, 352, 239, 238, 353, 239, 238, 239, 354, 238, 239, 355, 238, 239, 281, 238, 356, 239, 238, 357, 239, 238, 239, 358, 238, 239, 359, 238, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 379, 378, 381, 380, 381, 382, 383, 384, 385, 383, 386, 387, 388, 385, 389, 390, 391, 392, 393, 394, 395, 396, 382, 380, 381, 397, 380, 381, 398, 380, 381, 399, 380, 381, 400, 380, 381, 401, 380, 381, 402, 380, 381, 403, 380, 381, 404, 380, 381, 405, 380, 381, 406, 380, 381, 407, 380, 381, 408, 380, 381, 409, 380, 381, 410, 380, 381, 411, 380, 381, 412, 413, 380, 381, 414, 380, 381, 415, 380, 381, 416, 380, 381, 417, 380, 381, 418, 380, 381, 411, 380, 381, 419, 380, 381, 420, 380, 381, 421, 380, 381, 422, 380, 381, 423, 380, 381, 418, 380, 381, 424, 380, 381, 414, 380, 381, 425, 380, 426, 381, 380, 427, 428, 381, 380, 381, 429, 380, 381, 414, 380, 381, 427, 380, 381, 430, 380, 381, 431, 380, 381, 432, 380, 381, 433, 380, 434, 381, 380, 435, 381, 380, 381, 414, 380, 381, 436, 380, 381, 437, 380, 381, 414, 380, 381, 438, 380, 381, 439, 380, 381, 440, 380, 381, 441, 380, 381, 442, 380, 381, 443, 380, 381, 444, 380, 381, 445, 380, 381, 446, 380, 381, 447, 380, 381, 448, 380, 381, 449, 380, 381, 450, 380, 381, 451, 380, 381, 452, 380, 381, 423, 380, 381, 453, 380, 381, 454, 380, 381, 455, 380, 381, 456, 380, 381, 457, 380, 381, 458, 380, 381, 459, 380, 381, 460, 380, 381, 418, 380, 461, 381, 430, 380, 462, 381, 380, 381, 463, 380, 464, 381, 380, 465, 381, 380, 381, 466, 380, 381, 467, 380, 381, 468, 380, 381, 469, 380, 470, 381, 380, 471, 381, 380, 472, 381, 380, 418, 381, 380, 381, 473, 380, 381, 474, 380, 475, 381, 380, 476, 381, 380, 381, 477, 380, 381, 478, 380, 479, 144, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 79, 0, 491, 0, 492, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 504, 503, 506, 505, 506, 507, 508, 509, 510, 508, 511, 512, 513, 510, 514, 515, 516, 517, 518, 519, 520, 521, 507, 505, 506, 522, 505, 506, 523, 505, 506, 524, 505, 506, 525, 505, 506, 526, 505, 506, 527, 505, 506, 528, 505, 506, 529, 505, 506, 530, 505, 506, 531, 505, 506, 532, 505, 506, 533, 505, 506, 534, 505, 506, 535, 505, 506, 536, 505, 506, 537, 538, 505, 506, 539, 505, 506, 540, 505, 506, 541, 505, 506, 542, 505, 506, 543, 505, 506, 536, 505, 506, 544, 505, 506, 545, 505, 506, 546, 505, 506, 547, 505, 506, 548, 505, 506, 543, 505, 506, 549, 505, 506, 539, 505, 506, 550, 505, 551, 506, 505, 552, 553, 506, 505, 506, 554, 505, 506, 539, 505, 506, 552, 505, 506, 555, 505, 506, 556, 505, 506, 557, 505, 506, 558, 505, 559, 506, 505, 560, 506, 505, 506, 539, 505, 506, 561, 505, 506, 562, 505, 506, 539, 505, 506, 563, 505, 506, 564, 505, 506, 565, 505, 506, 566, 505, 506, 567, 505, 506, 568, 505, 506, 569, 505, 506, 570, 505, 506, 571, 505, 506, 572, 505, 506, 573, 505, 506, 574, 505, 506, 575, 505, 506, 576, 505, 506, 577, 505, 506, 548, 505, 506, 578, 579, 505, 506, 580, 505, 506, 581, 505, 506, 582, 505, 506, 583, 505, 506, 584, 505, 506, 585, 505, 506, 586, 505, 506, 543, 505, 506, 587, 505, 506, 588, 505, 506, 589, 505, 506, 590, 505, 506, 591, 505, 506, 592, 505, 506, 593, 505, 506, 594, 505, 506, 595, 505, 506, 596, 505, 506, 597, 505, 506, 598, 505, 506, 599, 505, 506, 600, 505, 506, 601, 505, 506, 548, 505, 602, 506, 555, 505, 603, 506, 505, 506, 604, 505, 605, 506, 505, 606, 506, 505, 506, 607, 505, 506, 608, 505, 506, 609, 505, 506, 610, 505, 611, 506, 505, 612, 506, 505, 613, 506, 505, 543, 506, 505, 506, 614, 505, 506, 615, 505, 616, 506, 505, 617, 506, 505, 506, 618, 505, 506, 619, 505, 620, 0, 621, 0, 622, 0, 623, 0, 624, 625, 624, 0, 628, 627, 629, 630, 627, 626, 0, 632, 633, 631, 0, 632, 631, 628, 634, 632, 633, 634, 631, 628, 635, 636, 637, 638, 639, 640, 641, 642, 643, 639, 644, 645, 646, 647, 648, 649, 650, 651, 652, 635, 0, 84, 653, 83, 84, 654, 83, 84, 655, 83, 84, 656, 83, 84, 657, 83, 84, 112, 83, 84, 658, 659, 83, 84, 660, 83, 84, 661, 83, 84, 662, 83, 84, 663, 83, 84, 664, 83, 84, 665, 83, 84, 666, 83, 84, 667, 83, 84, 668, 83, 84, 669, 83, 84, 670, 83, 84, 671, 83, 84, 672, 83, 84, 673, 83, 84, 657, 83, 84, 674, 83, 84, 675, 83, 84, 676, 83, 677, 84, 83, 678, 84, 83, 84, 679, 83, 84, 680, 83, 84, 112, 83, 84, 681, 682, 83, 84, 683, 83, 84, 684, 83, 84, 685, 83, 84, 686, 83, 84, 687, 83, 84, 688, 83, 84, 689, 83, 84, 112, 83, 84, 690, 83, 84, 691, 83, 84, 692, 83, 84, 693, 83, 84, 694, 83, 84, 695, 83, 84, 696, 83, 84, 697, 83, 84, 698, 83, 84, 699, 83, 84, 700, 83, 84, 701, 83, 84, 702, 83, 84, 703, 83, 84, 704, 83, 84, 657, 83, 705, 84, 83, 706, 84, 83, 84, 707, 83, 708, 84, 83, 709, 84, 83, 84, 710, 83, 84, 711, 83, 84, 712, 83, 84, 713, 83, 714, 84, 83, 715, 84, 83, 716, 84, 83, 112, 84, 83, 84, 717, 83, 718, 84, 83, 719, 84, 83, 84, 720, 83, 721, 84, 83, 722, 84, 83, 84, 723, 83, 84, 724, 83, 84, 657, 83, 725, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 68, 74, 76, 82, 84, 89, 92, 161, 398, 411, 535, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 618, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 31, 40, 41, 42, 43, 44, 45, 46, 45, 46, 46, 4, 47, 61, 541, 547, 571, 596, 609, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 4, 62, 63, 64, 65, 66, 67, 4, 4, 5, 15, 17, 31, 34, 37, 68, 74, 76, 82, 84, 89, 92, 161, 398, 411, 535, 69, 70, 71, 72, 73, 75, 77, 78, 79, 81, 80, 83, 74, 85, 86, 87, 88, 90, 91, 93, 108, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 118, 119, 119, 4, 120, 126, 132, 148, 121, 122, 123, 124, 125, 67, 127, 128, 129, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 287, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 172, 173, 173, 4, 174, 188, 189, 196, 202, 204, 210, 212, 217, 220, 236, 261, 274, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 4, 67, 190, 191, 188, 192, 193, 194, 195, 197, 198, 199, 200, 201, 203, 205, 206, 207, 209, 208, 211, 202, 213, 214, 215, 216, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 237, 245, 238, 239, 240, 241, 242, 243, 244, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 275, 276, 283, 277, 278, 279, 280, 281, 282, 284, 285, 286, 212, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 306, 307, 307, 4, 308, 322, 323, 330, 336, 338, 344, 346, 351, 354, 370, 379, 392, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 4, 67, 324, 325, 322, 326, 327, 328, 329, 331, 332, 333, 334, 335, 337, 339, 340, 341, 343, 342, 345, 336, 347, 348, 349, 350, 352, 353, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 378, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 394, 395, 396, 397, 346, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 412, 413, 531, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 423, 424, 424, 4, 425, 439, 440, 447, 453, 455, 461, 463, 468, 471, 487, 512, 525, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 4, 67, 441, 442, 439, 443, 444, 445, 446, 448, 449, 450, 451, 452, 454, 456, 457, 458, 460, 459, 462, 453, 464, 465, 466, 467, 469, 470, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 488, 496, 489, 490, 491, 492, 493, 494, 495, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 526, 527, 528, 529, 530, 463, 532, 533, 534, 84, 535, 536, 537, 539, 540, 538, 536, 537, 538, 536, 539, 540, 5, 15, 17, 31, 34, 37, 68, 74, 76, 82, 84, 89, 92, 161, 398, 411, 535, 542, 543, 544, 545, 546, 548, 563, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 564, 565, 566, 567, 568, 569, 570, 572, 580, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 610, 611, 612, 613, 614, 615, 616, 617, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 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, 57, 144, 0, 54, 0, 81, 84, 84, 84, 84, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 618; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/pl.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1116 "lib/gherkin/lexer/pl.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/pl.rb.rl" # line 1125 "lib/gherkin/lexer/pl.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/pl.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/pl.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/pl.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/pl.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/pl.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/pl.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/pl.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/pl.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/pl.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/pl.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/pl.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/pl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/pl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/pl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/pl.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/pl.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/pl.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/pl.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/pl.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/pl.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/pl.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/pl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/pl.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/pl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1369 "lib/gherkin/lexer/pl.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/pl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1408 "lib/gherkin/lexer/pl.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/pl.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/lu.rb0000644000004100000410000012511612244512574017552 0ustar www-datawww-data # line 1 "ragel/i18n/lu.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Lu #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/lu.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/lu.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 21, 22, 23, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 111, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 838, 844, 847, 849, 855, 875 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 105, 115, 112, 105, 108, 108, 101, 114, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, 117, 110, 107, 116, 105, 111, 110, 97, 108, 105, 116, -61, -87, 105, 116, 58, 10, 10, 10, 32, 35, 37, 64, 66, 70, 72, 80, 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, 101, 10, 105, 10, 115, 10, 112, 10, 105, 10, 108, 10, 108, 10, 101, 10, 114, 10, 58, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 97, 10, 110, 10, 110, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 108, 10, 97, 10, 110, 10, 103, 10, 32, 10, 118, 10, 117, 10, 109, 10, 32, 10, 83, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 97, 110, 110, 101, 114, 103, 114, 111, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 70, 80, 83, 97, 100, 109, 117, 119, 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, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 108, 10, 97, 10, 110, 10, 103, 10, 32, 10, 118, 10, 117, 10, 109, 10, 32, 10, 83, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 110, 119, 10, 101, 10, 114, 10, 97, 10, 110, 10, 110, -61, 10, -92, 10, 10, 103, 10, 101, 10, 104, 10, 111, 10, 108, 10, 108, 108, 97, 110, 103, 32, 118, 117, 109, 32, 83, 122, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 70, 83, 97, 100, 109, 117, 119, 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, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 110, 119, 10, 101, 10, 114, 10, 97, 10, 110, 10, 110, -61, 10, -92, 10, 10, 103, 10, 101, 10, 104, 10, 111, 10, 108, 10, 108, 122, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 70, 72, 80, 83, 97, 100, 109, 117, 119, 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, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 97, 10, 110, 10, 110, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 108, 10, 97, 10, 110, 10, 103, 10, 32, 10, 118, 10, 117, 10, 109, 10, 32, 10, 83, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 110, 119, 10, 101, 10, 114, 10, 97, 10, 110, 10, 110, -61, 10, -92, 10, 10, 103, 10, 101, 10, 104, 10, 111, 10, 108, 10, 108, 32, 110, 119, 101, 114, 97, 110, 110, -61, -92, 103, 101, 104, 111, 108, 108, 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, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 19, 1, 1, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 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, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 18, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 21, 23, 25, 45, 47, 49, 52, 55, 60, 65, 70, 75, 79, 83, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 121, 124, 129, 136, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1218, 1224, 1228, 1231, 1237, 1257 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 15, 18, 2, 0, 19, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 15, 18, 2, 0, 20, 0, 21, 0, 23, 24, 22, 26, 27, 25, 30, 29, 31, 29, 28, 34, 33, 35, 33, 32, 34, 33, 36, 33, 32, 34, 33, 37, 33, 32, 39, 38, 38, 0, 3, 40, 40, 0, 42, 43, 41, 3, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 60, 61, 59, 63, 64, 62, 0, 0, 0, 0, 65, 66, 67, 66, 66, 69, 68, 65, 3, 70, 8, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 82, 81, 84, 83, 84, 85, 86, 87, 86, 85, 83, 84, 88, 83, 84, 89, 83, 84, 90, 83, 84, 91, 83, 84, 92, 83, 84, 93, 83, 84, 94, 83, 84, 95, 83, 84, 96, 83, 84, 97, 83, 84, 98, 83, 99, 84, 83, 100, 84, 83, 84, 101, 83, 84, 102, 83, 84, 103, 83, 105, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 117, 120, 104, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 138, 137, 140, 139, 140, 141, 142, 143, 142, 144, 145, 146, 147, 148, 141, 139, 140, 149, 139, 140, 150, 139, 140, 151, 139, 140, 152, 139, 140, 153, 139, 140, 154, 139, 140, 155, 139, 140, 156, 139, 140, 157, 139, 140, 158, 139, 140, 159, 139, 140, 160, 139, 140, 161, 139, 140, 162, 139, 140, 163, 139, 140, 164, 139, 140, 165, 139, 140, 166, 139, 140, 167, 139, 140, 168, 139, 140, 169, 139, 140, 170, 139, 140, 171, 139, 140, 172, 139, 140, 173, 139, 140, 174, 139, 140, 175, 139, 140, 176, 139, 140, 177, 139, 140, 178, 139, 140, 179, 139, 140, 180, 139, 140, 181, 139, 140, 182, 139, 140, 183, 139, 184, 140, 139, 185, 140, 139, 140, 186, 139, 140, 171, 139, 140, 187, 139, 140, 188, 139, 140, 189, 139, 140, 190, 139, 140, 191, 139, 140, 192, 139, 140, 193, 139, 140, 194, 139, 140, 195, 139, 140, 171, 139, 140, 196, 139, 140, 197, 139, 140, 198, 139, 140, 199, 139, 140, 200, 139, 140, 201, 139, 140, 202, 139, 140, 203, 139, 140, 204, 139, 140, 205, 139, 140, 206, 139, 140, 207, 139, 140, 208, 139, 140, 209, 139, 140, 210, 139, 140, 211, 139, 140, 171, 139, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 224, 223, 226, 225, 226, 227, 228, 229, 230, 228, 231, 232, 233, 234, 235, 236, 237, 235, 227, 225, 226, 238, 225, 226, 239, 225, 226, 240, 225, 226, 241, 225, 226, 242, 225, 226, 243, 225, 226, 244, 225, 226, 245, 225, 226, 246, 225, 226, 247, 225, 226, 248, 225, 226, 249, 225, 226, 250, 225, 226, 251, 225, 226, 252, 225, 226, 253, 225, 226, 254, 225, 226, 255, 225, 226, 256, 225, 226, 257, 225, 226, 258, 225, 226, 259, 225, 226, 260, 225, 226, 261, 225, 226, 262, 225, 226, 263, 225, 264, 226, 225, 265, 226, 225, 226, 266, 225, 226, 267, 225, 226, 252, 225, 226, 268, 225, 226, 269, 225, 226, 270, 225, 226, 271, 225, 226, 272, 225, 226, 273, 225, 226, 274, 225, 226, 275, 225, 226, 276, 225, 226, 277, 225, 226, 278, 225, 226, 279, 225, 226, 280, 225, 226, 281, 225, 226, 282, 225, 226, 283, 225, 226, 267, 225, 226, 252, 284, 285, 225, 226, 286, 225, 226, 284, 225, 226, 287, 225, 226, 288, 225, 226, 284, 225, 289, 226, 225, 284, 226, 225, 226, 290, 225, 226, 291, 225, 226, 292, 225, 226, 293, 225, 226, 294, 225, 226, 284, 225, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 314, 313, 316, 315, 316, 317, 318, 319, 320, 318, 321, 322, 323, 324, 325, 326, 324, 317, 315, 316, 327, 315, 316, 328, 315, 316, 329, 315, 316, 330, 315, 316, 331, 315, 316, 332, 315, 316, 333, 315, 316, 334, 315, 316, 335, 315, 316, 336, 315, 316, 337, 315, 316, 338, 315, 316, 339, 315, 316, 340, 315, 316, 341, 315, 316, 342, 315, 316, 343, 315, 316, 344, 315, 316, 345, 315, 316, 346, 315, 316, 347, 315, 316, 348, 315, 316, 349, 315, 316, 350, 315, 316, 351, 315, 316, 352, 315, 353, 316, 315, 354, 316, 315, 316, 355, 315, 316, 356, 315, 316, 341, 315, 316, 357, 315, 316, 358, 315, 316, 359, 315, 316, 360, 315, 316, 361, 315, 316, 362, 315, 316, 356, 315, 316, 341, 363, 364, 315, 316, 365, 315, 316, 363, 315, 316, 366, 315, 316, 367, 315, 316, 363, 315, 368, 316, 315, 363, 316, 315, 316, 369, 315, 316, 370, 315, 316, 371, 315, 316, 372, 315, 316, 373, 315, 316, 363, 315, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 383, 382, 385, 384, 385, 386, 387, 388, 389, 387, 390, 391, 392, 393, 394, 395, 396, 397, 395, 386, 384, 385, 398, 384, 385, 399, 384, 385, 400, 384, 385, 401, 384, 385, 402, 384, 385, 403, 384, 385, 404, 384, 385, 405, 384, 385, 406, 384, 385, 407, 384, 385, 408, 384, 385, 409, 384, 385, 410, 384, 385, 411, 384, 385, 412, 384, 385, 413, 384, 385, 414, 384, 385, 415, 384, 385, 416, 384, 385, 417, 384, 385, 418, 384, 385, 419, 384, 385, 420, 384, 385, 421, 384, 385, 422, 384, 385, 423, 384, 424, 385, 384, 425, 385, 384, 385, 426, 384, 385, 427, 384, 385, 412, 384, 385, 428, 384, 385, 429, 384, 385, 430, 384, 385, 431, 384, 385, 432, 384, 385, 433, 384, 385, 434, 384, 385, 435, 384, 385, 436, 384, 385, 427, 384, 385, 437, 384, 385, 438, 384, 385, 439, 384, 385, 440, 384, 385, 441, 384, 385, 442, 384, 385, 443, 384, 385, 444, 384, 385, 445, 384, 385, 446, 384, 385, 447, 384, 385, 448, 384, 385, 449, 384, 385, 450, 384, 385, 451, 384, 385, 452, 384, 385, 427, 384, 385, 412, 453, 454, 384, 385, 455, 384, 385, 453, 384, 385, 456, 384, 385, 457, 384, 385, 453, 384, 458, 385, 384, 453, 385, 384, 385, 459, 384, 385, 460, 384, 385, 461, 384, 385, 462, 384, 385, 463, 384, 385, 453, 384, 58, 464, 465, 0, 466, 0, 464, 0, 467, 0, 468, 0, 464, 0, 469, 0, 464, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 464, 0, 475, 476, 475, 0, 479, 478, 480, 481, 478, 477, 0, 483, 484, 482, 0, 483, 482, 479, 485, 483, 484, 485, 482, 479, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 498, 501, 486, 0, 502, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 398, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 404, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 48, 49, 49, 4, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 4, 4, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 398, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 84, 85, 85, 4, 86, 100, 110, 125, 135, 145, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 4, 101, 102, 103, 104, 105, 106, 107, 108, 109, 66, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 164, 165, 165, 4, 166, 180, 181, 197, 207, 214, 217, 220, 222, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 4, 66, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 180, 215, 216, 218, 219, 221, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 247, 248, 248, 4, 249, 263, 264, 280, 287, 290, 293, 295, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 4, 66, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 263, 288, 289, 291, 292, 294, 296, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 310, 311, 311, 4, 312, 326, 327, 343, 353, 363, 370, 373, 376, 378, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 4, 66, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 326, 371, 372, 374, 375, 377, 379, 380, 381, 382, 383, 31, 385, 386, 388, 389, 391, 393, 394, 395, 396, 397, 398, 399, 400, 402, 403, 401, 399, 400, 401, 399, 402, 403, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 398, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 404; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/lu.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 791 "lib/gherkin/lexer/lu.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/lu.rb.rl" # line 800 "lib/gherkin/lexer/lu.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/lu.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/lu.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/lu.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/lu.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/lu.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/lu.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/lu.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/lu.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/lu.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/lu.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/lu.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/lu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/lu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/lu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/lu.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/lu.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/lu.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/lu.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/lu.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/lu.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/lu.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/lu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/lu.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/lu.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1044 "lib/gherkin/lexer/lu.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/lu.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1083 "lib/gherkin/lexer/lu.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/lu.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/id.rb0000644000004100000410000010613612244512574017527 0ustar www-datawww-data # line 1 "ragel/i18n/id.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Id #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/id.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/id.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 111, 112, 113, 114, 115, 116, 117, 118, 125, 127, 129, 131, 133, 135, 152, 154, 156, 157, 158, 159, 160, 161, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 366, 368, 370, 372, 374, 376, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 500, 501, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 548, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 619, 620, 621, 625, 631, 634, 636, 642, 659 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 111, 110, 116, 111, 104, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 105, 10, 116, 10, 117, 10, 114, 10, 58, 10, 32, 34, 35, 37, 42, 64, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, 97, 101, 110, 115, 97, 114, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 77, 83, 84, 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, 97, 101, 10, 110, 10, 110, 10, 103, 10, 97, 10, 105, 10, 116, 10, 117, 10, 114, 10, 58, 10, 101, 10, 116, 10, 105, 10, 107, 10, 97, 10, 97, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 107, 10, 111, 10, 110, 10, 115, 10, 101, 10, 112, 10, 97, 10, 112, 10, 105, 110, 103, 97, 110, 105, 116, 117, 114, 58, 10, 10, 10, 32, 35, 37, 64, 67, 68, 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, 111, 10, 110, 10, 116, 10, 111, 10, 104, 10, 58, 10, 97, 10, 115, 10, 97, 10, 114, 10, 105, 10, 116, 10, 117, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 107, 10, 111, 10, 110, 10, 115, 10, 101, 10, 112, 101, 116, 105, 107, 97, 97, 107, 101, 110, 97, 114, 105, 111, 32, 58, 107, 111, 110, 115, 101, 112, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 77, 83, 84, 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, 97, 101, 10, 110, 10, 110, 10, 103, 10, 97, 10, 105, 10, 116, 10, 117, 10, 114, 10, 58, 10, 101, 10, 116, 10, 105, 10, 107, 10, 97, 10, 97, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 97, 10, 112, 10, 105, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 77, 83, 84, 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, 97, 101, 10, 110, 115, 10, 97, 10, 114, 10, 58, 10, 110, 10, 103, 10, 97, 10, 110, 10, 105, 10, 116, 10, 117, 10, 101, 10, 116, 10, 105, 10, 107, 10, 97, 10, 97, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 107, 10, 111, 10, 110, 10, 115, 10, 101, 10, 112, 10, 97, 10, 112, 10, 105, 97, 112, 105, 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, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 15, 2, 2, 1, 1, 1, 1, 1, 12, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 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, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 4, 3, 2, 4, 15, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 137, 139, 141, 143, 145, 147, 149, 151, 158, 161, 164, 167, 170, 173, 190, 193, 196, 198, 200, 202, 204, 206, 220, 223, 226, 229, 232, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 269, 272, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 505, 508, 511, 514, 517, 520, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 710, 712, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 775, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 881, 883, 885, 889, 895, 899, 902, 908, 925 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 76, 75, 78, 77, 78, 79, 80, 81, 80, 79, 77, 78, 82, 77, 78, 83, 77, 78, 84, 77, 78, 85, 77, 78, 86, 77, 88, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 87, 0, 102, 103, 0, 104, 105, 0, 106, 0, 107, 0, 108, 0, 110, 109, 112, 111, 112, 113, 114, 115, 116, 114, 117, 118, 119, 120, 121, 122, 113, 111, 112, 123, 111, 112, 124, 111, 112, 125, 111, 112, 126, 111, 112, 127, 111, 112, 128, 111, 112, 129, 111, 112, 130, 111, 112, 131, 111, 112, 132, 111, 112, 133, 111, 112, 134, 111, 112, 135, 111, 112, 136, 111, 112, 137, 111, 112, 138, 139, 111, 112, 140, 111, 112, 141, 111, 112, 142, 111, 112, 138, 111, 112, 143, 111, 112, 144, 111, 112, 145, 111, 112, 146, 111, 112, 137, 111, 112, 147, 111, 112, 148, 111, 112, 149, 111, 112, 150, 111, 112, 140, 111, 112, 149, 111, 112, 151, 111, 112, 152, 111, 112, 153, 111, 112, 154, 111, 112, 155, 111, 112, 156, 111, 112, 157, 111, 112, 158, 137, 111, 112, 159, 111, 112, 160, 111, 112, 161, 111, 112, 162, 111, 112, 163, 111, 112, 146, 111, 112, 164, 111, 112, 165, 111, 112, 140, 111, 166, 0, 167, 0, 168, 0, 104, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 175, 174, 177, 176, 177, 178, 179, 180, 179, 181, 182, 183, 184, 178, 176, 177, 185, 176, 177, 186, 176, 177, 187, 176, 177, 188, 176, 177, 189, 176, 177, 190, 176, 177, 191, 176, 177, 192, 176, 177, 193, 176, 177, 194, 176, 177, 195, 176, 177, 196, 176, 177, 197, 176, 177, 198, 176, 177, 199, 176, 177, 200, 176, 177, 201, 176, 177, 202, 176, 177, 203, 176, 177, 204, 176, 177, 205, 176, 177, 206, 176, 177, 207, 176, 177, 203, 176, 177, 208, 176, 177, 209, 176, 177, 207, 176, 177, 210, 176, 177, 211, 176, 177, 212, 176, 177, 213, 176, 177, 214, 176, 177, 215, 176, 177, 216, 176, 177, 217, 204, 176, 177, 218, 176, 177, 219, 176, 177, 220, 176, 177, 221, 176, 177, 222, 176, 177, 203, 176, 223, 0, 224, 0, 225, 0, 226, 0, 104, 0, 225, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 244, 243, 246, 245, 246, 247, 248, 249, 250, 248, 251, 252, 253, 254, 255, 256, 247, 245, 246, 257, 245, 246, 258, 245, 246, 259, 245, 246, 260, 245, 246, 261, 245, 246, 262, 245, 246, 263, 245, 246, 264, 245, 246, 265, 245, 246, 266, 245, 246, 267, 245, 246, 268, 245, 246, 269, 245, 246, 270, 245, 246, 271, 245, 246, 272, 273, 245, 246, 274, 245, 246, 275, 245, 246, 276, 245, 246, 272, 245, 246, 277, 245, 246, 278, 245, 246, 279, 245, 246, 280, 245, 246, 271, 245, 246, 281, 245, 246, 282, 245, 246, 283, 245, 246, 284, 245, 246, 274, 245, 246, 283, 245, 246, 285, 245, 246, 286, 245, 246, 287, 245, 246, 288, 245, 246, 289, 245, 246, 290, 245, 246, 280, 245, 246, 291, 245, 246, 292, 245, 246, 274, 245, 294, 293, 296, 295, 296, 297, 298, 299, 300, 298, 301, 302, 303, 304, 305, 306, 297, 295, 296, 307, 295, 296, 308, 295, 296, 309, 295, 296, 310, 295, 296, 311, 295, 296, 312, 295, 296, 313, 295, 296, 314, 295, 296, 315, 295, 296, 316, 295, 296, 317, 295, 296, 318, 295, 296, 319, 295, 296, 320, 295, 296, 321, 295, 296, 322, 323, 295, 296, 324, 325, 295, 296, 326, 295, 296, 327, 295, 296, 321, 295, 296, 328, 295, 296, 329, 295, 296, 330, 295, 296, 324, 295, 296, 331, 295, 296, 332, 295, 296, 326, 295, 296, 333, 295, 296, 334, 295, 296, 335, 295, 296, 336, 295, 296, 324, 295, 296, 335, 295, 296, 337, 295, 296, 338, 295, 296, 339, 295, 296, 340, 295, 296, 341, 295, 296, 342, 295, 296, 343, 295, 296, 344, 321, 295, 296, 345, 295, 296, 346, 295, 296, 347, 295, 296, 348, 295, 296, 349, 295, 296, 327, 295, 296, 350, 295, 296, 351, 295, 296, 324, 295, 352, 0, 353, 0, 104, 0, 354, 355, 354, 0, 358, 357, 359, 360, 357, 356, 0, 362, 363, 361, 0, 362, 361, 358, 364, 362, 363, 364, 361, 358, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 365, 0, 379, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 288, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 44, 45, 45, 4, 46, 47, 48, 49, 50, 51, 4, 4, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 53, 108, 31, 54, 55, 56, 57, 58, 59, 58, 59, 59, 4, 60, 74, 75, 80, 85, 90, 91, 105, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 4, 51, 76, 77, 74, 78, 79, 81, 82, 83, 84, 86, 87, 88, 89, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 107, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 118, 119, 119, 4, 120, 134, 140, 144, 147, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 4, 135, 136, 137, 138, 139, 51, 141, 142, 143, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164, 165, 168, 169, 170, 171, 172, 173, 174, 175, 226, 176, 177, 178, 179, 180, 181, 182, 183, 184, 183, 184, 184, 4, 185, 199, 200, 205, 210, 215, 216, 223, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 4, 51, 201, 202, 199, 203, 204, 206, 207, 208, 209, 211, 212, 213, 214, 217, 218, 219, 220, 221, 222, 224, 225, 227, 228, 227, 228, 228, 4, 229, 243, 244, 253, 256, 261, 262, 276, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 4, 51, 245, 249, 243, 246, 247, 248, 250, 251, 252, 254, 255, 257, 258, 259, 260, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 277, 278, 280, 281, 282, 283, 284, 286, 287, 285, 283, 284, 285, 283, 286, 287, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 21, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 288; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/id.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 622 "lib/gherkin/lexer/id.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/id.rb.rl" # line 631 "lib/gherkin/lexer/id.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/id.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/id.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/id.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/id.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/id.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/id.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/id.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/id.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/id.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/id.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/id.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/id.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/id.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/id.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/id.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/id.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/id.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/id.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/id.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/id.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/id.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/id.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/id.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/id.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 875 "lib/gherkin/lexer/id.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/id.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 914 "lib/gherkin/lexer/id.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/id.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/es.rb0000644000004100000410000012544212244512574017543 0ustar www-datawww-data # line 1 "ragel/i18n/es.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Es #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/es.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/es.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 181, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 292, 294, 296, 298, 300, 302, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 342, 343, 344, 345, 346, 347, 349, 351, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 529, 532, 535, 537, 539, 541, 543, 545, 547, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 700, 703, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 737, 738, 742, 748, 751, 753, 759, 775, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 821, 824, 827, 829, 831, 833, 835, 837, 839, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 80, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 80, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 110, 116, 101, 99, 101, 100, 101, 110, 116, 101, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 80, 89, 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, 67, 68, 69, 80, 89, 124, 9, 13, 97, 117, 114, 97, 99, 116, 101, 114, -61, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 65, 67, 69, 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, 110, 10, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 101, 10, 115, 10, 58, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 106, 115, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 32, 10, 101, 10, 115, 10, 99, 97, 110, 100, 111, 97, 100, 97, 111, 32, 115, 106, 110, 115, 101, 109, 112, 108, 111, 115, 58, 10, 10, 10, 32, 35, 67, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 116, 111, 110, 99, 101, 115, 99, 113, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 80, 89, 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, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 101, 10, 115, 10, 58, 10, 97, 117, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 97, 10, 110, 10, 100, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 110, 115, 10, 116, 10, 111, 10, 110, 10, 99, 10, 101, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 114, 117, 101, 109, 97, 32, 100, 101, 108, 32, 101, 115, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 80, 89, 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, 97, 117, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 110, 10, 100, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 110, 115, 10, 116, 10, 111, 10, 110, 10, 99, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 10, 114, 101, 114, 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, 67, 68, 69, 80, 89, 124, 9, 13, 10, 97, 117, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 110, 10, 100, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 110, 115, 10, 116, 10, 111, 10, 110, 10, 99, 10, 101, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 114, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 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, 3, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 4, 3, 2, 4, 14, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 235, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 404, 407, 410, 413, 416, 419, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 479, 481, 483, 485, 487, 489, 492, 495, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 571, 573, 575, 577, 579, 581, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 762, 766, 770, 773, 776, 779, 782, 785, 788, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1020, 1024, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1075, 1077, 1081, 1087, 1091, 1094, 1100, 1116, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1184, 1188, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 7, 14, 2, 0, 15, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 7, 14, 2, 0, 16, 0, 17, 0, 19, 20, 18, 22, 23, 21, 26, 25, 27, 25, 24, 30, 29, 31, 29, 28, 30, 29, 32, 29, 28, 30, 29, 33, 29, 28, 35, 34, 34, 0, 3, 36, 36, 0, 38, 39, 37, 3, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 56, 57, 55, 59, 60, 58, 0, 0, 0, 0, 61, 62, 63, 62, 62, 65, 64, 61, 3, 66, 8, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 80, 79, 82, 81, 82, 83, 84, 85, 86, 84, 87, 88, 89, 90, 86, 83, 81, 82, 91, 81, 82, 92, 81, 82, 93, 81, 82, 94, 81, 82, 95, 81, 82, 96, 81, 82, 97, 81, 82, 98, 81, 82, 99, 81, 82, 100, 81, 82, 101, 81, 82, 102, 81, 82, 103, 81, 82, 104, 81, 82, 105, 81, 107, 106, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 111, 118, 106, 0, 119, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 136, 135, 138, 137, 138, 139, 140, 141, 140, 142, 143, 144, 139, 137, 138, 145, 137, 138, 146, 137, 138, 147, 137, 138, 148, 137, 138, 149, 137, 138, 150, 137, 138, 151, 137, 138, 152, 137, 138, 153, 137, 138, 154, 137, 138, 155, 137, 138, 156, 137, 138, 157, 137, 138, 158, 137, 138, 159, 137, 138, 160, 137, 138, 161, 137, 138, 162, 137, 138, 163, 137, 138, 164, 137, 138, 165, 137, 138, 166, 137, 138, 167, 137, 138, 168, 137, 138, 169, 137, 138, 170, 137, 138, 171, 137, 138, 172, 137, 138, 173, 137, 138, 174, 137, 138, 175, 137, 138, 176, 137, 138, 177, 137, 178, 138, 137, 179, 138, 137, 138, 180, 137, 138, 181, 137, 138, 182, 137, 138, 183, 137, 138, 169, 137, 138, 184, 185, 137, 138, 186, 137, 138, 187, 137, 138, 188, 137, 138, 189, 137, 138, 168, 137, 138, 190, 191, 137, 138, 192, 137, 138, 193, 137, 138, 194, 137, 138, 195, 137, 138, 196, 137, 138, 169, 137, 138, 197, 137, 138, 198, 137, 138, 199, 137, 138, 200, 137, 138, 201, 137, 138, 202, 137, 138, 203, 137, 138, 204, 137, 138, 205, 137, 138, 206, 137, 138, 207, 137, 138, 190, 137, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 214, 0, 54, 211, 0, 215, 216, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 226, 225, 228, 227, 228, 229, 230, 231, 230, 229, 227, 228, 232, 227, 228, 233, 227, 228, 234, 227, 228, 235, 227, 228, 236, 227, 228, 237, 227, 228, 238, 227, 239, 228, 227, 240, 228, 227, 228, 241, 227, 228, 242, 227, 228, 243, 227, 228, 244, 227, 228, 245, 227, 228, 246, 227, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 211, 0, 252, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 262, 261, 264, 263, 264, 265, 266, 267, 268, 266, 269, 270, 271, 272, 273, 268, 265, 263, 264, 274, 263, 264, 275, 263, 264, 276, 263, 264, 277, 263, 264, 278, 263, 264, 279, 263, 264, 280, 263, 264, 281, 263, 264, 282, 263, 264, 283, 263, 264, 284, 263, 264, 285, 263, 264, 286, 263, 264, 287, 263, 264, 288, 263, 264, 289, 263, 264, 290, 263, 264, 291, 263, 264, 292, 263, 264, 293, 263, 264, 294, 263, 264, 295, 263, 264, 296, 263, 264, 297, 263, 264, 298, 263, 264, 299, 263, 264, 288, 263, 264, 300, 301, 263, 264, 302, 263, 264, 303, 263, 264, 304, 263, 264, 305, 263, 264, 306, 263, 264, 307, 263, 308, 264, 263, 309, 264, 263, 264, 310, 263, 264, 311, 263, 264, 312, 263, 264, 313, 263, 264, 299, 263, 264, 314, 263, 264, 315, 263, 264, 316, 263, 264, 317, 263, 264, 318, 263, 264, 319, 263, 264, 320, 320, 263, 264, 288, 317, 263, 264, 321, 322, 263, 264, 323, 263, 264, 324, 263, 264, 325, 263, 264, 326, 263, 264, 327, 263, 264, 317, 263, 264, 328, 329, 263, 264, 330, 263, 264, 331, 263, 264, 332, 263, 264, 333, 263, 264, 334, 263, 264, 299, 263, 264, 335, 263, 264, 336, 263, 264, 337, 263, 264, 338, 263, 264, 339, 263, 264, 340, 263, 264, 341, 263, 264, 342, 263, 264, 343, 263, 264, 344, 263, 264, 345, 263, 264, 328, 263, 264, 346, 263, 264, 316, 263, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 367, 366, 369, 368, 369, 370, 371, 372, 373, 371, 374, 375, 376, 377, 373, 370, 368, 369, 378, 368, 369, 379, 368, 369, 380, 368, 369, 381, 368, 369, 382, 368, 369, 383, 368, 369, 384, 368, 369, 385, 368, 369, 386, 368, 369, 387, 368, 369, 388, 368, 369, 389, 368, 369, 390, 368, 369, 391, 368, 369, 392, 368, 369, 393, 394, 368, 369, 395, 368, 369, 396, 368, 369, 397, 368, 369, 398, 368, 369, 399, 368, 369, 400, 368, 401, 369, 368, 402, 369, 368, 369, 403, 368, 369, 404, 368, 369, 405, 368, 369, 406, 368, 369, 407, 368, 369, 392, 368, 369, 408, 368, 369, 409, 368, 369, 410, 368, 369, 411, 368, 369, 412, 368, 369, 413, 368, 369, 414, 414, 368, 369, 392, 411, 368, 369, 415, 416, 368, 369, 417, 368, 369, 418, 368, 369, 419, 368, 369, 420, 368, 369, 421, 368, 369, 411, 368, 369, 422, 368, 369, 423, 368, 369, 424, 368, 369, 425, 368, 369, 426, 368, 369, 427, 368, 369, 407, 368, 369, 428, 368, 369, 410, 368, 429, 0, 210, 0, 430, 431, 430, 0, 434, 433, 435, 436, 433, 432, 0, 438, 439, 437, 0, 438, 437, 434, 440, 438, 439, 440, 437, 434, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 445, 452, 441, 0, 82, 453, 454, 81, 82, 455, 81, 82, 456, 81, 82, 457, 81, 82, 458, 81, 82, 459, 81, 82, 460, 81, 461, 82, 81, 462, 82, 81, 82, 463, 81, 82, 464, 81, 82, 465, 81, 82, 466, 81, 82, 467, 81, 82, 105, 81, 82, 468, 81, 82, 469, 81, 82, 470, 81, 82, 471, 81, 82, 472, 81, 82, 473, 81, 82, 474, 474, 81, 82, 105, 471, 81, 82, 475, 476, 81, 82, 477, 81, 82, 478, 81, 82, 479, 81, 82, 480, 81, 82, 481, 81, 82, 471, 81, 82, 482, 483, 81, 82, 484, 81, 82, 485, 81, 82, 486, 81, 82, 487, 81, 82, 488, 81, 82, 467, 81, 82, 489, 81, 82, 490, 81, 82, 491, 81, 82, 492, 81, 82, 493, 81, 82, 494, 81, 82, 495, 81, 82, 496, 81, 82, 497, 81, 82, 498, 81, 82, 499, 81, 82, 482, 81, 82, 500, 81, 82, 470, 81, 501, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 357, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 414, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 50, 51, 51, 4, 52, 66, 363, 382, 386, 412, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 4, 67, 4, 4, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 357, 69, 151, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 84, 85, 85, 4, 86, 100, 112, 126, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 4, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 67, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 132, 128, 129, 130, 131, 133, 139, 134, 135, 136, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 152, 153, 154, 31, 156, 157, 158, 160, 185, 191, 161, 162, 163, 164, 165, 166, 167, 168, 169, 168, 169, 169, 4, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 67, 186, 187, 188, 189, 190, 192, 279, 193, 194, 195, 196, 197, 198, 199, 200, 201, 200, 201, 201, 4, 202, 216, 217, 229, 247, 251, 277, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 4, 67, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 230, 243, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 216, 248, 249, 250, 252, 258, 253, 254, 255, 256, 257, 259, 265, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 299, 300, 300, 4, 301, 315, 316, 335, 339, 353, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 4, 67, 317, 331, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 333, 334, 315, 336, 337, 338, 340, 346, 341, 342, 343, 344, 345, 347, 348, 349, 350, 351, 352, 354, 356, 357, 358, 359, 361, 362, 360, 358, 359, 360, 358, 361, 362, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 357, 364, 378, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 379, 380, 381, 66, 383, 384, 385, 387, 393, 388, 389, 390, 391, 392, 394, 400, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 413, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 414; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/es.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 799 "lib/gherkin/lexer/es.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/es.rb.rl" # line 808 "lib/gherkin/lexer/es.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/es.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/es.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/es.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/es.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/es.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/es.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/es.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/es.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/es.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/es.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/es.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/es.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/es.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/es.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/es.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/es.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/es.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/es.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/es.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/es.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/es.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/es.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/es.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/es.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1052 "lib/gherkin/lexer/es.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/es.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1091 "lib/gherkin/lexer/es.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/es.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/sr_cyrl.rb0000644000004100000410000022171112244512574020605 0ustar www-datawww-data # line 1 "ragel/i18n/sr_cyrl.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Sr_cyrl #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/sr_cyrl.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/sr_cyrl.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 21, 22, 23, 24, 25, 26, 28, 30, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 97, 104, 109, 113, 119, 122, 124, 130, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 153, 154, 156, 157, 158, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 186, 196, 198, 200, 202, 204, 206, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 239, 241, 244, 246, 248, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 359, 361, 363, 365, 367, 369, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 540, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 582, 584, 586, 588, 590, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 801, 808, 810, 812, 814, 816, 818, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 942, 944, 947, 949, 951, 953, 955, 957, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1174, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1273, 1274, 1283, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1325, 1327, 1330, 1332, 1334, 1337, 1339, 1341, 1343, 1345, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1438, 1440, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1478, 1480, 1482, 1484, 1486, 1488, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615, 1617, 1619, 1621, 1623, 1625, 1627, 1629, 1631, 1633, 1635, 1637, 1639, 1641, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, -48, -69, -48, -72, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -80, -48, -76, -48, -80, -47, -126, -48, -75, -72, -66, -48, -80, -66, -48, -76, -48, 32, -80, -48, -67, -47, -126, -122, -48, -75, -48, -70, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, 10, -48, 10, -69, 10, -48, 10, -72, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, -72, -66, 10, -48, 10, -80, -66, 10, -48, 10, -76, 10, -48, 10, 32, -80, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -65, 10, -47, 10, -126, 10, 10, 58, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -48, -47, 10, -67, 10, -48, 10, -76, 10, -48, 10, -127, 10, -48, 10, -66, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, -47, 10, -70, 10, -48, 10, -72, 10, -47, 10, -122, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -104, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -66, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -75, -48, -65, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, 10, -48, 10, -69, 10, -48, 10, -72, 10, 10, 32, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, -72, -66, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, 32, -80, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, -47, 10, -67, 10, -48, 10, -76, 10, -48, 10, -127, 10, -48, 10, -66, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -66, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -66, -48, -77, -47, -125, -47, -101, -48, -67, -48, -66, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -102, -100, -98, -97, -95, -92, 10, -48, 10, -66, 10, -48, 10, -67, 10, -47, 10, -126, -122, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, 10, -75, 10, -48, 10, -65, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -48, 10, -67, -66, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, -47, 10, -66, 10, -48, 10, -73, 10, -48, 10, -80, 10, -48, 10, -76, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, 58, -72, 10, -48, -47, 10, -70, 10, -48, 10, -72, 10, -47, 10, -122, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -104, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -104, 10, -48, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -47, -67, -48, -76, -48, -127, -48, -67, -66, -48, -66, -48, -78, -48, -80, -48, -79, -48, -72, -48, -67, -48, -80, -48, -47, -66, -48, -73, -48, -80, -48, -76, -48, -72, -48, -67, -128, -48, -72, -48, -68, -48, -75, -47, -128, -48, 58, -72, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -100, -98, -92, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -47, 10, -127, 10, -48, 10, -66, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, 10, -48, 10, -69, 10, -48, 10, -72, 10, 10, 32, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, -72, -66, 10, -48, 10, -80, -66, 10, -48, 10, -76, 10, -48, 10, 32, -80, 10, -48, 10, -67, 10, -47, 10, -126, -122, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, 10, -75, 10, -48, 10, -65, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, -47, 10, -67, 10, -48, 10, -76, 10, -48, 10, -127, 10, -48, 10, -67, -66, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, -47, 10, -66, 10, -48, 10, -73, 10, -48, 10, -80, 10, -48, 10, -76, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, -47, 10, -70, 10, -48, 10, -72, 10, -47, 10, -122, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -104, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -66, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -47, -70, -48, -72, -47, -122, -48, -80, -126, -122, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -47, -104, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -47, -66, 58, -104, -48, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -66, -48, -67, -48, -80, -48, -69, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 9, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 10, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 3, 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, 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, 3, 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, 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, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 2, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 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, 2, 3, 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, 3, 2, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 5, 4, 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, 2, 2, 2, 1, 1, 7, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 3, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, 3, 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, 3, 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, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 22, 24, 26, 28, 30, 32, 35, 38, 49, 51, 53, 56, 59, 64, 69, 74, 79, 83, 87, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 125, 132, 137, 141, 147, 151, 154, 160, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 193, 195, 198, 200, 202, 205, 207, 209, 211, 213, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 247, 258, 261, 264, 267, 270, 273, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 316, 319, 323, 326, 329, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 494, 497, 500, 503, 506, 509, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 765, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 823, 826, 829, 832, 835, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1156, 1164, 1167, 1170, 1173, 1176, 1179, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1363, 1366, 1370, 1373, 1376, 1379, 1382, 1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1639, 1641, 1643, 1645, 1647, 1649, 1651, 1653, 1655, 1657, 1659, 1661, 1663, 1665, 1667, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1713, 1715, 1717, 1719, 1721, 1728, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1876, 1878, 1887, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1945, 1948, 1952, 1955, 1958, 1962, 1965, 1968, 1971, 1974, 1978, 1981, 1984, 1987, 1990, 1993, 1996, 1999, 2002, 2005, 2008, 2011, 2014, 2017, 2020, 2023, 2026, 2029, 2032, 2035, 2038, 2041, 2044, 2047, 2050, 2053, 2057, 2060, 2063, 2066, 2069, 2072, 2075, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2119, 2122, 2125, 2128, 2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2161, 2164, 2167, 2171, 2174, 2177, 2180, 2183, 2186, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2420, 2422, 2424, 2426, 2428, 2430, 2432, 2435, 2437, 2439, 2441, 2443, 2445, 2447, 2449, 2451, 2453, 2455, 2457, 2459, 2461, 2463, 2465, 2467, 2469, 2471, 2473, 2475, 2477, 2479, 2481, 2483, 2485, 2487, 2489, 2491, 2493, 2495, 2497, 2499, 2501, 2503, 2505, 2507, 2509, 2511, 2513, 2515, 2517, 2520, 2522, 2524, 2526, 2528, 2530, 2532, 2534, 2536, 2538, 2540, 2542, 2544, 2546, 2548, 2550, 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 2568 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 0, 21, 0, 22, 0, 13, 0, 23, 0, 25, 26, 24, 28, 29, 27, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 30, 0, 31, 0, 33, 34, 32, 36, 37, 35, 40, 39, 41, 39, 38, 44, 43, 45, 43, 42, 44, 43, 46, 43, 42, 44, 43, 47, 43, 42, 49, 48, 48, 0, 4, 50, 50, 0, 52, 53, 51, 4, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 0, 0, 0, 0, 68, 69, 70, 69, 69, 72, 71, 68, 4, 73, 9, 73, 0, 74, 75, 74, 0, 78, 77, 79, 80, 77, 76, 0, 82, 83, 81, 0, 82, 81, 78, 84, 82, 83, 84, 81, 85, 78, 86, 87, 88, 89, 90, 91, 92, 86, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 13, 13, 13, 0, 102, 0, 103, 104, 0, 105, 0, 106, 0, 107, 23, 0, 13, 0, 108, 0, 109, 0, 110, 0, 111, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 123, 122, 125, 124, 126, 125, 127, 128, 129, 130, 128, 127, 124, 131, 132, 133, 134, 135, 136, 137, 138, 139, 125, 124, 140, 125, 124, 141, 125, 124, 142, 125, 124, 133, 125, 124, 125, 143, 124, 144, 146, 145, 147, 148, 149, 150, 151, 152, 145, 0, 153, 125, 124, 154, 125, 124, 155, 125, 124, 156, 125, 124, 157, 125, 124, 158, 125, 124, 159, 125, 124, 160, 125, 124, 161, 125, 124, 133, 133, 133, 125, 124, 162, 125, 124, 163, 164, 125, 124, 165, 125, 124, 166, 125, 124, 167, 125, 143, 124, 133, 125, 124, 168, 125, 124, 169, 125, 124, 170, 125, 124, 171, 125, 124, 172, 125, 124, 173, 125, 124, 174, 125, 124, 175, 125, 124, 176, 125, 124, 177, 125, 124, 125, 143, 124, 178, 125, 124, 179, 125, 124, 180, 125, 124, 181, 125, 124, 182, 125, 124, 183, 125, 124, 184, 125, 124, 185, 125, 124, 186, 125, 124, 187, 125, 124, 188, 125, 124, 189, 125, 124, 190, 125, 124, 175, 125, 124, 191, 192, 125, 124, 193, 125, 124, 194, 125, 124, 195, 125, 124, 167, 125, 124, 196, 125, 124, 197, 125, 124, 198, 125, 124, 199, 125, 124, 200, 125, 124, 201, 125, 124, 202, 125, 124, 203, 125, 124, 204, 125, 124, 205, 125, 124, 177, 125, 124, 206, 125, 124, 207, 125, 124, 208, 125, 124, 209, 125, 124, 210, 125, 124, 211, 125, 124, 212, 125, 124, 213, 125, 124, 214, 125, 124, 177, 125, 124, 215, 216, 125, 124, 217, 125, 124, 218, 125, 124, 219, 125, 124, 220, 125, 124, 204, 125, 124, 221, 222, 125, 124, 223, 125, 124, 224, 125, 124, 225, 125, 124, 226, 125, 124, 227, 125, 124, 228, 125, 124, 229, 125, 124, 230, 125, 124, 231, 125, 124, 232, 125, 124, 233, 125, 124, 234, 125, 124, 235, 125, 124, 236, 125, 124, 125, 237, 124, 238, 125, 124, 239, 125, 124, 240, 125, 124, 241, 125, 124, 242, 125, 124, 243, 125, 124, 244, 125, 124, 245, 125, 124, 246, 125, 124, 247, 125, 124, 248, 125, 124, 249, 125, 124, 250, 125, 124, 251, 125, 124, 252, 125, 124, 204, 125, 124, 253, 125, 124, 254, 125, 124, 255, 125, 124, 256, 125, 124, 257, 125, 124, 258, 125, 124, 259, 125, 124, 260, 125, 124, 261, 125, 124, 262, 125, 124, 263, 125, 124, 177, 125, 124, 264, 125, 124, 265, 125, 124, 266, 125, 124, 267, 125, 124, 268, 125, 124, 269, 125, 124, 270, 125, 124, 271, 125, 124, 272, 125, 124, 273, 125, 124, 274, 125, 124, 275, 125, 124, 276, 125, 124, 277, 125, 124, 278, 125, 124, 279, 125, 124, 280, 125, 124, 185, 125, 124, 125, 281, 124, 125, 282, 124, 125, 283, 124, 125, 284, 124, 125, 285, 124, 125, 286, 124, 125, 287, 124, 125, 288, 124, 125, 289, 124, 125, 290, 124, 125, 291, 124, 125, 292, 124, 125, 293, 124, 125, 294, 124, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 303, 302, 305, 304, 306, 305, 307, 308, 309, 310, 308, 307, 304, 311, 312, 313, 314, 315, 316, 317, 318, 319, 305, 304, 320, 305, 304, 321, 305, 304, 322, 305, 304, 313, 305, 304, 305, 323, 304, 324, 305, 304, 325, 305, 304, 326, 305, 304, 327, 305, 304, 328, 305, 304, 329, 305, 304, 330, 305, 304, 331, 305, 304, 332, 305, 304, 313, 313, 313, 305, 304, 333, 305, 304, 334, 305, 304, 335, 305, 304, 336, 305, 304, 337, 305, 323, 304, 313, 305, 304, 338, 305, 304, 339, 305, 304, 340, 305, 304, 341, 305, 304, 342, 305, 304, 343, 305, 304, 344, 305, 304, 345, 305, 304, 346, 305, 304, 347, 305, 304, 348, 305, 304, 349, 305, 304, 350, 305, 304, 351, 305, 304, 352, 305, 304, 353, 305, 304, 305, 323, 304, 354, 355, 305, 304, 356, 305, 304, 357, 305, 304, 358, 305, 304, 337, 305, 304, 359, 305, 304, 360, 305, 304, 361, 305, 304, 362, 305, 304, 363, 305, 304, 364, 305, 304, 365, 305, 304, 366, 305, 304, 367, 305, 304, 368, 305, 304, 353, 305, 304, 369, 305, 304, 370, 305, 304, 371, 305, 304, 372, 305, 304, 373, 305, 304, 374, 305, 304, 375, 305, 304, 376, 305, 304, 377, 305, 304, 353, 305, 304, 378, 305, 304, 379, 305, 304, 380, 305, 304, 381, 305, 304, 382, 305, 304, 383, 305, 304, 384, 305, 304, 385, 305, 304, 386, 305, 304, 387, 305, 304, 388, 305, 304, 389, 305, 304, 390, 305, 304, 353, 305, 304, 391, 305, 304, 392, 305, 304, 393, 305, 304, 394, 305, 304, 395, 305, 304, 396, 305, 304, 397, 305, 304, 398, 305, 304, 399, 305, 304, 400, 305, 304, 401, 305, 304, 402, 305, 304, 403, 305, 304, 404, 305, 304, 405, 305, 304, 406, 305, 304, 407, 305, 304, 345, 305, 304, 305, 408, 304, 305, 409, 304, 305, 410, 304, 305, 411, 304, 305, 412, 304, 305, 413, 304, 305, 414, 304, 305, 415, 304, 305, 416, 304, 305, 417, 304, 305, 418, 304, 305, 419, 304, 305, 420, 304, 305, 421, 304, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 440, 439, 442, 441, 443, 442, 444, 445, 446, 445, 444, 441, 447, 448, 449, 450, 451, 452, 442, 441, 453, 442, 441, 454, 442, 441, 455, 442, 441, 456, 442, 441, 457, 442, 441, 458, 459, 442, 441, 460, 442, 441, 461, 442, 441, 462, 442, 441, 463, 442, 441, 464, 442, 441, 465, 442, 441, 466, 442, 441, 467, 442, 441, 442, 468, 441, 469, 442, 441, 470, 442, 441, 471, 442, 441, 465, 442, 441, 472, 442, 441, 473, 442, 441, 474, 442, 441, 475, 442, 441, 476, 442, 441, 477, 442, 441, 478, 442, 441, 479, 442, 441, 480, 442, 441, 481, 442, 441, 482, 442, 441, 463, 442, 441, 483, 442, 441, 484, 442, 441, 485, 442, 441, 486, 487, 442, 441, 488, 442, 441, 489, 442, 441, 490, 442, 441, 491, 442, 441, 492, 442, 441, 467, 442, 441, 493, 442, 441, 494, 442, 441, 495, 442, 441, 496, 442, 441, 497, 442, 441, 491, 442, 441, 498, 499, 442, 441, 500, 442, 441, 501, 442, 441, 502, 442, 441, 503, 442, 441, 504, 442, 441, 505, 442, 441, 494, 442, 441, 506, 442, 441, 507, 442, 441, 508, 442, 441, 509, 442, 441, 510, 442, 441, 511, 442, 441, 512, 442, 441, 513, 442, 441, 514, 442, 441, 515, 442, 468, 441, 467, 442, 441, 516, 517, 442, 441, 518, 442, 441, 519, 442, 441, 520, 442, 441, 521, 442, 441, 491, 442, 441, 522, 523, 442, 441, 524, 442, 441, 525, 442, 441, 526, 442, 441, 527, 442, 441, 528, 442, 441, 529, 442, 441, 530, 442, 441, 531, 442, 441, 532, 442, 441, 533, 442, 441, 534, 442, 441, 535, 442, 441, 536, 442, 441, 537, 442, 441, 442, 538, 441, 539, 442, 441, 540, 442, 441, 541, 442, 441, 542, 442, 441, 543, 442, 441, 544, 442, 441, 545, 442, 441, 546, 442, 441, 547, 442, 441, 548, 442, 441, 549, 442, 441, 550, 442, 441, 551, 442, 441, 552, 442, 441, 553, 442, 441, 491, 442, 441, 554, 442, 441, 555, 442, 441, 556, 442, 441, 557, 442, 441, 558, 442, 441, 559, 442, 441, 560, 442, 441, 561, 442, 441, 562, 442, 441, 563, 442, 441, 564, 565, 442, 441, 467, 442, 441, 566, 442, 441, 515, 442, 441, 567, 442, 441, 568, 442, 441, 569, 442, 441, 570, 442, 441, 571, 442, 441, 572, 442, 441, 573, 442, 441, 574, 442, 441, 575, 442, 441, 576, 442, 441, 577, 442, 441, 578, 442, 441, 579, 442, 441, 580, 442, 441, 581, 442, 441, 582, 442, 441, 583, 442, 441, 479, 442, 441, 442, 584, 441, 442, 585, 441, 442, 586, 441, 442, 587, 441, 442, 588, 441, 442, 589, 441, 442, 590, 441, 442, 591, 441, 442, 592, 441, 442, 593, 441, 442, 594, 441, 442, 595, 441, 442, 596, 441, 442, 597, 441, 598, 599, 0, 600, 0, 601, 0, 602, 0, 107, 0, 603, 0, 604, 0, 605, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 120, 0, 612, 0, 613, 0, 614, 0, 615, 0, 616, 0, 617, 0, 618, 0, 437, 0, 619, 620, 0, 621, 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 0, 610, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 641, 0, 642, 0, 643, 0, 645, 644, 647, 646, 648, 647, 649, 650, 650, 649, 646, 651, 652, 653, 647, 646, 654, 647, 646, 655, 647, 646, 656, 647, 646, 657, 647, 646, 658, 647, 646, 659, 647, 646, 660, 647, 646, 661, 647, 646, 662, 647, 646, 663, 647, 646, 664, 647, 646, 665, 647, 646, 666, 647, 646, 667, 647, 646, 668, 647, 646, 669, 647, 646, 647, 670, 646, 671, 647, 646, 672, 647, 646, 673, 647, 646, 674, 647, 646, 675, 647, 646, 676, 647, 646, 677, 647, 646, 678, 647, 646, 679, 647, 646, 680, 647, 646, 681, 647, 646, 669, 647, 646, 682, 647, 646, 683, 647, 646, 684, 647, 646, 685, 647, 646, 686, 647, 646, 687, 647, 646, 688, 647, 646, 689, 647, 646, 690, 647, 646, 691, 647, 646, 692, 647, 646, 693, 647, 646, 694, 647, 646, 695, 647, 646, 696, 647, 646, 697, 647, 646, 698, 647, 646, 661, 647, 646, 700, 699, 702, 701, 703, 702, 704, 705, 706, 707, 705, 704, 701, 708, 709, 710, 711, 712, 713, 714, 715, 716, 702, 701, 717, 702, 701, 718, 702, 701, 719, 702, 701, 710, 702, 701, 702, 720, 701, 721, 702, 701, 722, 702, 701, 723, 702, 701, 724, 702, 701, 725, 702, 701, 726, 702, 701, 727, 702, 701, 728, 702, 701, 729, 702, 701, 710, 710, 710, 702, 701, 730, 702, 701, 731, 732, 702, 701, 733, 702, 701, 734, 702, 701, 735, 702, 720, 701, 710, 702, 701, 736, 702, 701, 737, 702, 701, 738, 702, 701, 739, 740, 702, 701, 741, 702, 701, 742, 702, 701, 743, 702, 701, 744, 702, 701, 745, 702, 701, 746, 702, 701, 747, 702, 701, 748, 702, 701, 702, 720, 701, 749, 702, 701, 750, 702, 701, 751, 702, 701, 746, 702, 701, 752, 702, 701, 753, 702, 701, 754, 702, 701, 755, 702, 701, 756, 702, 701, 757, 702, 701, 758, 702, 701, 759, 702, 701, 760, 702, 701, 761, 702, 701, 762, 702, 701, 744, 702, 701, 763, 764, 702, 701, 765, 702, 701, 766, 702, 701, 767, 702, 701, 735, 702, 701, 768, 702, 701, 769, 702, 701, 770, 771, 702, 701, 772, 702, 701, 773, 702, 701, 774, 702, 701, 775, 702, 701, 776, 702, 701, 748, 702, 701, 777, 702, 701, 778, 702, 701, 779, 702, 701, 780, 702, 701, 781, 702, 701, 775, 702, 701, 782, 783, 702, 701, 784, 702, 701, 785, 702, 701, 786, 702, 701, 787, 702, 701, 788, 702, 701, 789, 702, 701, 778, 702, 701, 790, 702, 701, 791, 702, 701, 792, 702, 701, 793, 702, 701, 794, 702, 701, 795, 702, 701, 796, 702, 701, 797, 702, 701, 748, 702, 701, 798, 799, 702, 701, 800, 702, 701, 801, 702, 701, 802, 702, 701, 803, 702, 701, 775, 702, 701, 804, 805, 702, 701, 806, 702, 701, 807, 702, 701, 808, 702, 701, 809, 702, 701, 810, 702, 701, 811, 702, 701, 812, 702, 701, 813, 702, 701, 814, 702, 701, 815, 702, 701, 816, 702, 701, 817, 702, 701, 818, 702, 701, 819, 702, 701, 702, 820, 701, 821, 702, 701, 822, 702, 701, 823, 702, 701, 824, 702, 701, 825, 702, 701, 826, 702, 701, 827, 702, 701, 828, 702, 701, 829, 702, 701, 830, 702, 701, 831, 702, 701, 832, 702, 701, 833, 702, 701, 834, 702, 701, 835, 702, 701, 775, 702, 701, 836, 702, 701, 837, 702, 701, 838, 702, 701, 839, 702, 701, 840, 702, 701, 841, 702, 701, 842, 702, 701, 843, 702, 701, 844, 702, 701, 845, 702, 701, 846, 702, 701, 748, 702, 701, 847, 702, 701, 848, 702, 701, 849, 702, 701, 850, 702, 701, 851, 702, 701, 852, 702, 701, 853, 702, 701, 854, 702, 701, 855, 702, 701, 856, 702, 701, 857, 702, 701, 858, 702, 701, 859, 702, 701, 860, 702, 701, 861, 702, 701, 862, 702, 701, 863, 702, 701, 759, 702, 701, 702, 864, 701, 702, 865, 701, 702, 866, 701, 702, 867, 701, 702, 868, 701, 702, 869, 701, 702, 870, 701, 702, 871, 701, 702, 872, 701, 702, 873, 701, 702, 874, 701, 702, 875, 701, 702, 876, 701, 702, 877, 701, 878, 879, 0, 880, 0, 881, 0, 882, 0, 883, 0, 884, 0, 885, 0, 300, 0, 886, 887, 0, 888, 0, 889, 0, 890, 0, 891, 0, 892, 0, 893, 0, 894, 0, 895, 0, 896, 0, 897, 0, 898, 0, 899, 0, 900, 0, 901, 0, 902, 0, 903, 0, 904, 0, 905, 0, 906, 0, 907, 0, 908, 0, 909, 0, 910, 0, 911, 0, 912, 0, 913, 0, 914, 0, 915, 0, 916, 0, 917, 0, 884, 0, 918, 0, 919, 0, 920, 0, 921, 0, 922, 0, 923, 0, 924, 0, 925, 0, 926, 0, 927, 0, 928, 929, 0, 930, 0, 641, 0, 931, 0, 640, 0, 932, 0, 933, 0, 934, 0, 935, 0, 936, 0, 937, 0, 938, 0, 939, 0, 940, 0, 941, 0, 942, 0, 943, 0, 944, 0, 945, 0, 946, 0, 947, 0, 948, 0, 429, 0, 949, 0, 3, 0, 950, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 869, 10, 10, 11, 21, 23, 7, 37, 40, 3, 46, 7, 56, 355, 526, 548, 796, 851, 4, 5, 6, 8, 9, 10, 22, 9, 10, 22, 12, 13, 14, 15, 14, 14, 15, 14, 16, 16, 16, 17, 16, 16, 16, 17, 18, 19, 20, 10, 20, 21, 10, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 871, 38, 39, 10, 38, 37, 39, 40, 41, 42, 44, 45, 43, 41, 42, 43, 41, 44, 2, 45, 11, 21, 23, 7, 37, 40, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 62, 59, 60, 61, 63, 64, 65, 66, 234, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 76, 77, 78, 77, 10, 220, 83, 79, 85, 83, 95, 112, 126, 142, 152, 202, 80, 81, 82, 84, 2, 10, 10, 11, 21, 23, 7, 37, 40, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 101, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 131, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, 153, 158, 154, 155, 156, 157, 159, 190, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 10, 235, 236, 237, 238, 239, 240, 241, 242, 243, 242, 243, 244, 243, 10, 341, 249, 245, 250, 249, 260, 266, 283, 299, 309, 323, 246, 247, 248, 84, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 284, 288, 285, 286, 287, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 10, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 373, 374, 375, 374, 10, 512, 376, 395, 407, 423, 442, 494, 377, 378, 379, 380, 381, 382, 391, 383, 384, 385, 386, 387, 388, 389, 390, 84, 392, 393, 394, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 417, 412, 413, 414, 415, 416, 418, 419, 420, 421, 422, 424, 431, 425, 426, 427, 428, 429, 430, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 443, 448, 444, 445, 446, 447, 449, 480, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 10, 527, 531, 528, 529, 530, 532, 533, 534, 540, 535, 536, 537, 538, 539, 541, 542, 543, 544, 545, 546, 547, 549, 560, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 623, 571, 572, 573, 574, 573, 574, 575, 574, 10, 576, 593, 605, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 84, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 624, 625, 624, 625, 626, 625, 10, 782, 631, 627, 632, 631, 642, 665, 677, 697, 714, 764, 628, 629, 630, 84, 633, 634, 635, 636, 637, 638, 639, 640, 641, 643, 644, 648, 645, 646, 647, 649, 650, 651, 652, 661, 653, 654, 655, 656, 657, 658, 659, 660, 662, 663, 664, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 678, 682, 679, 680, 681, 683, 684, 685, 691, 686, 687, 688, 689, 690, 692, 693, 694, 695, 696, 698, 705, 699, 700, 701, 702, 703, 704, 706, 707, 708, 709, 710, 711, 712, 713, 715, 720, 716, 717, 718, 719, 721, 752, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 10, 797, 804, 798, 799, 800, 801, 802, 803, 805, 836, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 849, 848, 850, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 870, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 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, 15, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 871; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/sr_cyrl.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1462 "lib/gherkin/lexer/sr_cyrl.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/sr_cyrl.rb.rl" # line 1471 "lib/gherkin/lexer/sr_cyrl.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/sr_cyrl.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/sr_cyrl.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/sr_cyrl.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/sr_cyrl.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/sr_cyrl.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/sr_cyrl.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/sr_cyrl.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/sr_cyrl.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/sr_cyrl.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/sr_cyrl.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/sr_cyrl.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/sr_cyrl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/sr_cyrl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/sr_cyrl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/sr_cyrl.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/sr_cyrl.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/sr_cyrl.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/sr_cyrl.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/sr_cyrl.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/sr_cyrl.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/sr_cyrl.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/sr_cyrl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/sr_cyrl.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/sr_cyrl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1715 "lib/gherkin/lexer/sr_cyrl.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/sr_cyrl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1754 "lib/gherkin/lexer/sr_cyrl.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/sr_cyrl.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/ar.rb0000644000004100000410000013057212244512574017536 0ustar www-datawww-data # line 1 "ragel/i18n/ar.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Ar #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/ar.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/ar.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 13, 19, 21, 22, 23, 24, 25, 26, 27, 29, 31, 43, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 58, 60, 65, 70, 75, 80, 84, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110, 117, 122, 126, 132, 135, 137, 143, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 180, 187, 189, 191, 193, 195, 197, 199, 201, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 417, 421, 423, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 570, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 714, 715, 725, 732, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -40, -39, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -89, -88, -85, -82, -77, -71, -40, -39, -80, -40, -89, -39, -117, 32, 10, 13, 10, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -124, -123, -120, -39, -125, -39, -122, -40, -86, -39, -119, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -124, -123, -40, -82, -39, -124, -39, -127, -39, -118, -40, -87, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -89, -88, -85, -82, -77, -71, 10, -40, 10, -80, 10, -40, 10, -89, 10, -39, 10, -117, 10, 10, 32, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, 10, 32, 58, -39, 10, -123, 10, -40, 10, -82, 10, -40, 10, -73, 10, -40, 10, -73, 10, -39, 10, -122, 10, -40, 10, -81, 10, -39, 10, -123, 10, -40, 10, -89, 10, -124, -123, -120, 10, -39, 10, -125, 10, -39, 10, -122, 10, -40, 10, -86, 10, -39, 10, -119, 10, 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, -40, -85, -39, -124, -40, -87, 58, 10, 10, -40, 10, 32, 35, 124, 9, 13, -82, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, -127, -40, -79, -40, -74, -39, -123, -40, -89, -40, -75, -39, -118, -40, -87, 58, 10, 10, -40, 10, 32, 35, 37, 64, 9, 13, -89, -82, -77, 10, -39, 10, -124, -123, 10, -40, 10, -82, 10, -39, 10, -124, 10, -39, 10, -127, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -40, 10, -85, 10, -39, 10, -124, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, 10, 32, 58, -39, 10, -123, 10, -40, 10, -82, 10, -40, 10, -73, 10, -40, 10, -73, 10, 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, -39, -118, -39, -122, -40, -89, -40, -79, -39, -118, -39, -120, 32, 58, -39, -123, -40, -82, -40, -73, -40, -73, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -89, -88, -85, -82, -77, -71, 10, -40, 10, -80, 10, -40, 10, -89, 10, -39, 10, -117, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, -39, 10, -122, 10, -40, 10, -81, 10, -39, 10, -123, 10, -40, 10, -89, 10, -124, -123, -120, 10, -39, 10, -125, 10, -39, 10, -122, 10, -40, 10, -86, 10, -39, 10, -119, 10, 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, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -89, -88, -85, -82, -77, -71, 10, -40, -39, 10, -80, 10, -40, 10, -89, 10, -39, 10, -117, 10, 10, 32, -124, 10, -40, 10, -82, 10, -39, 10, -124, 10, -39, 10, -127, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, 10, 32, 58, -39, 10, -123, 10, -40, 10, -82, 10, -40, 10, -73, 10, -40, 10, -73, 10, -39, 10, -122, 10, -40, 10, -81, 10, -39, 10, -123, 10, -40, 10, -89, 10, -124, -123, -120, 10, -39, 10, -125, 10, -39, 10, -122, 10, -40, 10, -86, 10, -39, 10, -119, 10, 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, -39, -122, -40, -81, -39, -123, -40, -89, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 11, 6, 2, 1, 1, 1, 1, 1, 1, 2, 2, 10, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 10, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 7, 2, 2, 2, 2, 2, 2, 2, 10, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 4, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 7, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 8, 7, 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, 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, 4, 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, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 13, 20, 23, 25, 27, 29, 31, 33, 35, 38, 41, 53, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 80, 83, 88, 93, 98, 103, 107, 111, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 149, 156, 161, 165, 171, 175, 178, 184, 196, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 235, 243, 246, 249, 252, 255, 258, 261, 264, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 587, 592, 595, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 821, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1034, 1036, 1046, 1054, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11, 4, 0, 12, 13, 14, 15, 16, 17, 0, 18, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 27, 28, 26, 30, 31, 29, 1, 2, 5, 4, 6, 7, 8, 9, 10, 11, 4, 0, 32, 33, 24, 0, 34, 0, 35, 0, 36, 0, 24, 0, 37, 0, 38, 0, 39, 0, 24, 0, 40, 0, 41, 0, 43, 44, 42, 46, 47, 45, 50, 49, 51, 49, 48, 54, 53, 55, 53, 52, 54, 53, 56, 53, 52, 54, 53, 57, 53, 52, 59, 58, 58, 0, 5, 60, 60, 0, 62, 63, 61, 5, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 0, 0, 78, 79, 80, 79, 79, 82, 81, 78, 5, 83, 10, 83, 0, 84, 85, 84, 0, 88, 87, 89, 90, 87, 86, 0, 92, 93, 91, 0, 92, 91, 88, 94, 92, 93, 94, 91, 95, 96, 88, 97, 98, 99, 100, 101, 102, 103, 97, 0, 104, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 118, 117, 120, 119, 121, 122, 120, 123, 124, 125, 126, 124, 123, 119, 127, 128, 129, 130, 131, 132, 120, 119, 133, 120, 119, 134, 120, 119, 135, 120, 119, 136, 120, 119, 137, 120, 119, 138, 120, 119, 120, 139, 119, 140, 141, 143, 142, 144, 145, 146, 147, 148, 149, 142, 0, 150, 120, 119, 151, 120, 119, 152, 120, 119, 153, 120, 119, 154, 120, 119, 138, 120, 119, 155, 120, 119, 138, 120, 119, 156, 120, 119, 157, 120, 119, 158, 120, 119, 159, 120, 119, 160, 120, 119, 161, 120, 119, 162, 120, 119, 163, 120, 119, 120, 139, 119, 164, 120, 119, 165, 120, 119, 166, 120, 119, 167, 120, 119, 168, 120, 119, 169, 120, 119, 170, 120, 119, 171, 120, 119, 172, 120, 119, 173, 120, 119, 174, 120, 119, 175, 120, 119, 120, 176, 139, 119, 177, 120, 119, 178, 120, 119, 179, 120, 119, 180, 120, 119, 181, 120, 119, 182, 120, 119, 183, 120, 119, 163, 120, 119, 184, 120, 119, 185, 120, 119, 186, 120, 119, 187, 120, 119, 188, 120, 119, 189, 120, 119, 190, 120, 119, 138, 120, 119, 191, 192, 138, 120, 119, 193, 120, 119, 194, 120, 119, 195, 120, 119, 138, 120, 119, 196, 120, 119, 197, 120, 119, 198, 120, 119, 138, 120, 119, 120, 199, 119, 120, 200, 119, 120, 201, 119, 120, 202, 119, 120, 203, 119, 120, 204, 119, 120, 205, 119, 120, 206, 119, 120, 207, 119, 120, 208, 119, 120, 209, 119, 120, 210, 119, 120, 211, 119, 120, 212, 119, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 221, 220, 223, 222, 224, 223, 225, 226, 226, 225, 222, 227, 223, 222, 228, 223, 222, 229, 223, 222, 230, 223, 222, 231, 223, 222, 232, 223, 222, 233, 223, 222, 234, 223, 222, 235, 223, 222, 223, 236, 222, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 24, 0, 242, 0, 24, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 253, 252, 255, 254, 256, 255, 257, 258, 259, 258, 257, 254, 260, 261, 262, 255, 254, 263, 255, 254, 264, 265, 255, 254, 266, 255, 254, 267, 255, 254, 268, 255, 254, 269, 255, 254, 270, 255, 254, 271, 255, 254, 272, 255, 254, 273, 255, 254, 274, 255, 254, 275, 255, 254, 255, 276, 254, 277, 255, 254, 278, 255, 254, 279, 255, 254, 273, 255, 254, 280, 255, 254, 281, 255, 254, 282, 255, 254, 271, 255, 254, 283, 255, 254, 284, 255, 254, 285, 255, 254, 286, 255, 254, 287, 255, 254, 288, 255, 254, 289, 255, 254, 290, 255, 254, 291, 255, 254, 292, 255, 254, 293, 255, 254, 294, 255, 254, 255, 295, 276, 254, 296, 255, 254, 297, 255, 254, 298, 255, 254, 299, 255, 254, 300, 255, 254, 301, 255, 254, 302, 255, 254, 275, 255, 254, 255, 303, 254, 255, 304, 254, 255, 305, 254, 255, 306, 254, 255, 307, 254, 255, 308, 254, 255, 309, 254, 255, 310, 254, 255, 311, 254, 255, 312, 254, 255, 313, 254, 255, 314, 254, 255, 315, 254, 255, 316, 254, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 341, 340, 343, 342, 344, 345, 343, 346, 347, 348, 349, 347, 346, 342, 350, 351, 352, 353, 354, 355, 343, 342, 356, 343, 342, 357, 343, 342, 358, 343, 342, 359, 343, 342, 360, 343, 342, 361, 343, 342, 343, 362, 342, 363, 343, 342, 364, 343, 342, 365, 343, 342, 366, 343, 342, 367, 343, 342, 361, 343, 342, 368, 343, 342, 361, 343, 342, 369, 343, 342, 370, 343, 342, 371, 343, 342, 372, 343, 342, 373, 343, 342, 374, 343, 342, 375, 343, 342, 376, 343, 342, 343, 362, 342, 377, 343, 342, 378, 343, 342, 379, 343, 342, 380, 343, 342, 381, 343, 342, 382, 343, 342, 383, 343, 342, 384, 343, 342, 385, 343, 342, 386, 343, 342, 387, 343, 342, 376, 343, 342, 388, 343, 342, 389, 343, 342, 390, 343, 342, 391, 343, 342, 392, 343, 342, 393, 343, 342, 394, 343, 342, 361, 343, 342, 395, 396, 361, 343, 342, 397, 343, 342, 398, 343, 342, 399, 343, 342, 361, 343, 342, 400, 343, 342, 401, 343, 342, 402, 343, 342, 361, 343, 342, 343, 403, 342, 343, 404, 342, 343, 405, 342, 343, 406, 342, 343, 407, 342, 343, 408, 342, 343, 409, 342, 343, 410, 342, 343, 411, 342, 343, 412, 342, 343, 413, 342, 343, 414, 342, 343, 415, 342, 343, 416, 342, 418, 417, 420, 419, 421, 422, 420, 423, 424, 425, 426, 424, 423, 419, 427, 428, 429, 430, 431, 432, 420, 419, 433, 434, 420, 419, 435, 420, 419, 436, 420, 419, 437, 420, 419, 438, 420, 419, 439, 420, 419, 420, 440, 419, 441, 420, 419, 442, 420, 419, 443, 420, 419, 444, 420, 419, 445, 420, 419, 446, 420, 419, 447, 420, 419, 448, 420, 419, 449, 420, 419, 450, 420, 419, 451, 420, 419, 420, 440, 419, 452, 420, 419, 453, 420, 419, 454, 420, 419, 455, 420, 419, 456, 420, 419, 439, 420, 419, 457, 420, 419, 439, 420, 419, 458, 420, 419, 459, 420, 419, 460, 420, 419, 447, 420, 419, 461, 420, 419, 462, 420, 419, 463, 420, 419, 464, 420, 419, 465, 420, 419, 466, 420, 419, 467, 420, 419, 468, 420, 419, 469, 420, 419, 470, 420, 419, 471, 420, 419, 472, 420, 419, 420, 473, 440, 419, 474, 420, 419, 475, 420, 419, 476, 420, 419, 477, 420, 419, 478, 420, 419, 479, 420, 419, 480, 420, 419, 451, 420, 419, 481, 420, 419, 482, 420, 419, 483, 420, 419, 484, 420, 419, 485, 420, 419, 486, 420, 419, 487, 420, 419, 439, 420, 419, 488, 489, 439, 420, 419, 490, 420, 419, 491, 420, 419, 492, 420, 419, 439, 420, 419, 493, 420, 419, 494, 420, 419, 495, 420, 419, 439, 420, 419, 420, 496, 419, 420, 497, 419, 420, 498, 419, 420, 499, 419, 420, 500, 419, 420, 501, 419, 420, 502, 419, 420, 503, 419, 420, 504, 419, 420, 505, 419, 420, 506, 419, 420, 507, 419, 420, 508, 419, 420, 509, 419, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 24, 0, 517, 0, 4, 0, 518, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 13, 435, 12, 12, 22, 32, 34, 9, 48, 51, 3, 170, 176, 178, 247, 427, 4, 57, 5, 6, 7, 8, 9, 10, 11, 12, 33, 11, 12, 33, 14, 18, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 25, 25, 26, 25, 27, 27, 27, 28, 27, 27, 27, 28, 29, 30, 31, 12, 31, 32, 12, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 437, 49, 50, 12, 49, 48, 50, 51, 52, 53, 55, 56, 54, 52, 53, 54, 52, 55, 2, 13, 56, 22, 32, 34, 9, 48, 51, 58, 150, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 70, 71, 72, 127, 71, 12, 136, 79, 73, 81, 87, 89, 98, 119, 74, 75, 76, 77, 78, 79, 80, 2, 13, 12, 12, 22, 32, 34, 9, 48, 51, 82, 83, 84, 85, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 128, 132, 129, 130, 131, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 12, 151, 152, 153, 154, 155, 156, 157, 158, 159, 158, 159, 160, 159, 12, 161, 162, 163, 164, 165, 166, 167, 168, 169, 80, 171, 172, 173, 174, 175, 177, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 188, 189, 190, 189, 12, 233, 191, 208, 212, 192, 193, 204, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 80, 205, 206, 207, 209, 210, 211, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 12, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 340, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 270, 271, 272, 317, 271, 12, 326, 279, 273, 280, 286, 288, 297, 309, 274, 275, 276, 277, 278, 279, 80, 281, 282, 283, 284, 285, 287, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 318, 322, 319, 320, 321, 323, 324, 325, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 12, 341, 342, 341, 342, 343, 404, 342, 12, 413, 350, 344, 363, 369, 371, 375, 396, 345, 351, 346, 347, 348, 349, 350, 80, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 364, 365, 366, 367, 368, 370, 372, 373, 374, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 397, 398, 399, 400, 401, 402, 403, 405, 409, 406, 407, 408, 410, 411, 412, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 12, 428, 429, 430, 431, 432, 433, 434, 436, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 0, 93, 90, 41, 96, 90, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 15, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 57, 144, 0, 54, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 437; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/ar.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 829 "lib/gherkin/lexer/ar.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/ar.rb.rl" # line 838 "lib/gherkin/lexer/ar.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/ar.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/ar.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/ar.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/ar.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/ar.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/ar.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/ar.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/ar.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/ar.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/ar.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/ar.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/ar.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/ar.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/ar.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/ar.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/ar.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/ar.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/ar.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/ar.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/ar.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/ar.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/ar.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/ar.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/ar.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1082 "lib/gherkin/lexer/ar.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/ar.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1121 "lib/gherkin/lexer/ar.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/ar.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/fa.rb0000644000004100000410000013447512244512574017530 0ustar www-datawww-data # line 1 "ragel/i18n/fa.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Fa #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/fa.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/fa.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 13, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 43, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 105, 106, 107, 109, 111, 116, 121, 126, 131, 135, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 161, 168, 173, 177, 183, 186, 188, 194, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 239, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 381, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 415, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 590, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 775, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 955, 956 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -40, -39, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -94, -89, -88, -78, -77, -39, -122, -38, -81, -40, -89, -39, -121, 32, 10, 13, 10, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -122, -121, -120, -39, -123, -39, -120, -39, -122, -39, -121, 32, -39, -121, -40, -89, 58, 10, 10, -39, 10, 32, 35, 124, 9, 13, -120, 10, -39, 10, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 10, 58, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -39, -122, -38, -81, -40, -89, -39, -123, -37, -116, -39, 32, -112, -37, -116, -38, -104, -38, -81, -37, -116, 58, 10, 10, -40, -39, 10, 32, 35, 37, 64, 9, 13, -89, -78, -77, 10, -39, 10, -124, 10, -38, 10, -81, 10, -39, 10, -120, 10, -37, 10, -116, 10, 10, 32, -40, 10, -77, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, -122, 10, -39, 10, -121, 10, -122, -120, 10, -39, 10, -123, 10, -39, 10, -120, 10, -39, 10, -122, 10, -39, 10, -121, 10, 10, 32, -39, 10, -121, 10, -40, 10, -89, 10, -39, 10, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -39, -124, -123, -38, -81, -39, -120, -37, -116, 32, -40, -77, -39, -122, -40, -89, -40, -79, -37, -116, -39, -120, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -94, -89, -88, -77, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -121, 10, 10, 32, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -89, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -121, -120, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, 32, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -40, -89, -40, -89, 32, -39, -127, -40, -79, -40, -74, -39, -123, -37, -116, -39, -122, -39, -121, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -94, -89, -88, -77, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -121, 10, 10, 32, -39, 10, -124, -123, 10, -38, 10, -81, 10, -39, 10, -120, 10, -37, 10, -116, 10, 10, 32, -40, 10, -77, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -40, 10, -89, 10, -40, 10, -89, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -121, -120, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, 32, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -39, -122, -40, -89, -40, -79, -37, -116, -39, -120, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -94, -89, -88, -78, -77, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -121, 10, 10, 32, -39, 10, -124, -123, 10, -38, 10, -81, 10, -39, 10, -120, 10, -37, 10, -116, 10, 10, 32, -40, 10, -77, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -40, 10, -89, 10, -40, 10, -89, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, -122, 10, -39, 10, -121, 10, -121, -120, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, 32, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 11, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 10, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 4, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 5, 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, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 5, 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, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 6, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 13, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 40, 43, 55, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 98, 101, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131, 134, 146, 148, 150, 153, 156, 161, 166, 171, 176, 180, 184, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 222, 229, 234, 238, 244, 248, 251, 257, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 325, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 537, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 594, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 860, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1136, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1403, 1405 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11, 4, 0, 12, 13, 14, 15, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 27, 28, 26, 30, 31, 29, 1, 2, 5, 4, 6, 7, 8, 9, 10, 11, 4, 0, 32, 33, 34, 0, 35, 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, 50, 49, 52, 51, 53, 52, 54, 55, 55, 54, 51, 56, 52, 51, 57, 52, 51, 58, 52, 51, 59, 52, 51, 60, 52, 51, 61, 52, 51, 62, 52, 51, 63, 52, 51, 64, 52, 51, 65, 52, 51, 66, 52, 51, 52, 67, 51, 68, 69, 71, 70, 72, 73, 74, 75, 76, 77, 70, 0, 78, 0, 79, 0, 81, 82, 80, 84, 85, 83, 88, 87, 89, 87, 86, 92, 91, 93, 91, 90, 92, 91, 94, 91, 90, 92, 91, 95, 91, 90, 97, 96, 96, 0, 5, 98, 98, 0, 100, 101, 99, 5, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 0, 0, 0, 0, 116, 117, 118, 117, 117, 120, 119, 116, 5, 121, 10, 121, 0, 122, 123, 122, 0, 126, 125, 127, 128, 125, 124, 0, 130, 131, 129, 0, 130, 129, 126, 132, 130, 131, 132, 129, 133, 134, 126, 135, 136, 137, 138, 139, 140, 141, 135, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 24, 0, 151, 25, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 163, 162, 165, 164, 166, 167, 165, 168, 169, 170, 169, 168, 164, 171, 172, 173, 165, 164, 174, 165, 164, 175, 165, 164, 176, 165, 164, 177, 165, 164, 178, 165, 164, 179, 165, 164, 180, 165, 164, 181, 165, 164, 165, 182, 164, 183, 165, 164, 173, 165, 164, 184, 165, 164, 185, 165, 164, 186, 165, 164, 187, 165, 164, 188, 165, 164, 189, 165, 164, 190, 165, 164, 191, 165, 164, 192, 165, 164, 193, 165, 164, 165, 194, 164, 195, 165, 164, 196, 165, 164, 197, 165, 164, 198, 165, 164, 199, 165, 164, 200, 165, 164, 201, 165, 164, 193, 165, 164, 202, 203, 165, 164, 204, 165, 164, 205, 165, 164, 206, 165, 164, 207, 165, 164, 208, 165, 164, 209, 165, 164, 210, 165, 164, 211, 165, 164, 165, 212, 164, 213, 165, 164, 214, 165, 164, 215, 165, 164, 193, 165, 164, 216, 165, 164, 217, 165, 164, 218, 165, 164, 219, 165, 164, 220, 165, 164, 221, 165, 164, 222, 165, 164, 223, 165, 164, 224, 165, 164, 193, 165, 164, 165, 225, 164, 165, 226, 164, 165, 227, 164, 165, 228, 164, 165, 229, 164, 165, 230, 164, 165, 231, 164, 165, 232, 164, 165, 233, 164, 165, 234, 164, 165, 235, 164, 165, 236, 164, 165, 237, 164, 165, 238, 164, 239, 0, 240, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 263, 262, 265, 264, 266, 267, 265, 268, 269, 270, 271, 269, 268, 264, 272, 273, 274, 275, 265, 264, 276, 265, 264, 277, 265, 264, 278, 265, 264, 279, 265, 264, 280, 265, 264, 281, 265, 264, 282, 265, 264, 283, 265, 264, 265, 284, 264, 285, 265, 264, 286, 265, 264, 287, 265, 264, 283, 265, 264, 288, 265, 264, 289, 265, 264, 265, 290, 264, 291, 265, 264, 292, 265, 264, 293, 265, 264, 294, 265, 264, 295, 265, 264, 283, 265, 264, 296, 265, 264, 297, 265, 264, 298, 265, 264, 299, 265, 264, 300, 265, 264, 301, 265, 264, 302, 265, 264, 303, 265, 264, 304, 265, 264, 305, 265, 264, 265, 284, 264, 306, 307, 265, 264, 308, 265, 264, 309, 265, 264, 310, 265, 264, 311, 265, 264, 312, 265, 264, 313, 265, 264, 314, 265, 264, 315, 265, 264, 316, 265, 264, 283, 265, 264, 317, 265, 284, 264, 318, 265, 264, 319, 265, 264, 320, 265, 264, 321, 265, 264, 322, 265, 264, 323, 265, 264, 324, 265, 264, 325, 265, 264, 305, 265, 264, 265, 326, 264, 265, 327, 264, 265, 328, 264, 265, 329, 264, 265, 330, 264, 265, 331, 264, 265, 332, 264, 265, 333, 264, 265, 334, 264, 265, 335, 264, 265, 336, 264, 265, 337, 264, 265, 338, 264, 265, 339, 264, 340, 0, 24, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 24, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 359, 358, 361, 360, 362, 363, 361, 364, 365, 366, 367, 365, 364, 360, 368, 369, 370, 371, 361, 360, 372, 361, 360, 373, 361, 360, 374, 361, 360, 375, 361, 360, 376, 361, 360, 377, 361, 360, 378, 361, 360, 379, 361, 360, 361, 380, 360, 381, 361, 360, 382, 383, 361, 360, 384, 361, 360, 385, 361, 360, 386, 361, 360, 387, 361, 360, 388, 361, 360, 389, 361, 360, 361, 390, 360, 391, 361, 360, 371, 361, 360, 392, 361, 360, 393, 361, 360, 394, 361, 360, 395, 361, 360, 396, 361, 360, 397, 361, 360, 398, 361, 360, 399, 361, 360, 400, 361, 360, 401, 361, 360, 361, 380, 360, 402, 361, 360, 379, 361, 360, 403, 361, 360, 404, 361, 360, 361, 405, 360, 406, 361, 360, 407, 361, 360, 408, 361, 360, 409, 361, 360, 410, 361, 360, 379, 361, 360, 411, 412, 361, 360, 413, 361, 360, 414, 361, 360, 415, 361, 360, 416, 361, 360, 417, 361, 360, 418, 361, 360, 419, 361, 360, 420, 361, 360, 421, 361, 360, 379, 361, 360, 422, 361, 380, 360, 423, 361, 360, 424, 361, 360, 425, 361, 360, 426, 361, 360, 427, 361, 360, 428, 361, 360, 429, 361, 360, 430, 361, 360, 401, 361, 360, 361, 431, 360, 361, 432, 360, 361, 433, 360, 361, 434, 360, 361, 435, 360, 361, 436, 360, 361, 437, 360, 361, 438, 360, 361, 439, 360, 361, 440, 360, 361, 441, 360, 361, 442, 360, 361, 443, 360, 361, 444, 360, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 457, 456, 459, 458, 460, 461, 459, 462, 463, 464, 465, 463, 462, 458, 466, 467, 468, 469, 470, 459, 458, 471, 459, 458, 472, 459, 458, 473, 459, 458, 474, 459, 458, 475, 459, 458, 476, 459, 458, 477, 459, 458, 478, 459, 458, 459, 479, 458, 480, 459, 458, 481, 482, 459, 458, 483, 459, 458, 484, 459, 458, 485, 459, 458, 486, 459, 458, 487, 459, 458, 488, 459, 458, 459, 489, 458, 490, 459, 458, 470, 459, 458, 491, 459, 458, 492, 459, 458, 493, 459, 458, 494, 459, 458, 495, 459, 458, 496, 459, 458, 497, 459, 458, 498, 459, 458, 499, 459, 458, 500, 459, 458, 459, 479, 458, 501, 459, 458, 478, 459, 458, 502, 459, 458, 503, 459, 458, 459, 504, 458, 505, 459, 458, 506, 459, 458, 507, 459, 458, 508, 459, 458, 509, 459, 458, 478, 459, 458, 510, 459, 458, 511, 459, 458, 512, 459, 458, 513, 459, 458, 514, 459, 458, 515, 459, 458, 516, 459, 458, 500, 459, 458, 517, 518, 459, 458, 519, 459, 458, 520, 459, 458, 521, 459, 458, 522, 459, 458, 523, 459, 458, 524, 459, 458, 525, 459, 458, 526, 459, 458, 527, 459, 458, 478, 459, 458, 528, 459, 479, 458, 529, 459, 458, 530, 459, 458, 531, 459, 458, 532, 459, 458, 533, 459, 458, 534, 459, 458, 535, 459, 458, 536, 459, 458, 500, 459, 458, 459, 537, 458, 459, 538, 458, 459, 539, 458, 459, 540, 458, 459, 541, 458, 459, 542, 458, 459, 543, 458, 459, 544, 458, 459, 545, 458, 459, 546, 458, 459, 547, 458, 459, 548, 458, 459, 549, 458, 459, 550, 458, 551, 0, 4, 0, 552, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 15, 469, 14, 14, 46, 56, 58, 11, 72, 75, 3, 174, 270, 279, 369, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 57, 13, 14, 57, 16, 81, 91, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 31, 32, 33, 32, 14, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 2, 15, 14, 14, 46, 56, 58, 11, 72, 75, 47, 48, 49, 50, 49, 49, 50, 49, 51, 51, 51, 52, 51, 51, 51, 52, 53, 54, 55, 14, 55, 56, 14, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 471, 73, 74, 14, 73, 72, 74, 75, 76, 77, 79, 80, 78, 76, 77, 78, 76, 79, 2, 15, 80, 46, 56, 58, 11, 72, 75, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 103, 104, 105, 136, 104, 14, 160, 106, 128, 117, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 45, 129, 130, 131, 132, 133, 134, 135, 137, 150, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 14, 175, 176, 268, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 197, 198, 199, 233, 198, 14, 254, 208, 200, 209, 213, 222, 201, 202, 203, 204, 205, 206, 207, 208, 45, 210, 211, 212, 214, 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 234, 244, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 14, 269, 271, 272, 273, 274, 275, 276, 277, 278, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 289, 290, 291, 334, 290, 14, 355, 300, 292, 301, 325, 312, 293, 294, 295, 296, 297, 298, 299, 300, 45, 302, 303, 323, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 324, 326, 327, 328, 329, 330, 331, 332, 333, 335, 345, 336, 337, 338, 339, 340, 341, 342, 343, 344, 346, 347, 348, 349, 350, 351, 352, 353, 354, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 14, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 381, 382, 383, 434, 382, 14, 455, 392, 384, 393, 417, 426, 404, 385, 386, 387, 388, 389, 390, 391, 392, 45, 394, 395, 415, 396, 397, 398, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 416, 418, 419, 420, 421, 422, 423, 424, 425, 427, 428, 429, 430, 431, 432, 433, 435, 445, 436, 437, 438, 439, 440, 441, 442, 443, 444, 446, 447, 448, 449, 450, 451, 452, 453, 454, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 14, 470, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 0, 93, 90, 41, 96, 90, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 17, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 471; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/fa.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 873 "lib/gherkin/lexer/fa.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/fa.rb.rl" # line 882 "lib/gherkin/lexer/fa.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/fa.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/fa.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/fa.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/fa.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/fa.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/fa.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/fa.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/fa.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/fa.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/fa.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/fa.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/fa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/fa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/fa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/fa.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/fa.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/fa.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/fa.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/fa.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/fa.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/fa.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/fa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/fa.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/fa.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1126 "lib/gherkin/lexer/fa.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/fa.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1165 "lib/gherkin/lexer/fa.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/fa.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/pa.rb0000644000004100000410000022522212244512574017531 0ustar www-datawww-data # line 1 "ragel/i18n/pa.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Pa #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/pa.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/pa.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 13, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 99, 106, 111, 115, 121, 124, 126, 132, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 174, 176, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 335, 337, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 491, 493, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 641, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 715, 716, 717, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 743, 745, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 804, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1031, 1033, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1092, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1232, 1234, 1236, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1407, 1409, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1468, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1586, 1588, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604, 1607, 1609, 1611, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -88, -123, -119, -106, -100, -92, -88, -86, -82, -32, -88, -92, -32, -87, -121, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -88, -90, -32, -88, -66, -32, -88, -71, -32, -88, -80, -32, -88, -88, -32, -88, -66, -32, -88, -126, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -88, 10, -106, -88, -82, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -66, 10, -32, -88, -66, -32, -88, -72, -32, -87, -128, -32, -88, -123, -32, -88, -92, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -88, 10, -119, -106, -88, -86, -82, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -88, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, 10, 58, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -65, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, 10, 32, 58, -32, 10, -88, 10, -94, -80, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -102, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -126, 10, -32, 10, -88, 10, -86, 10, 10, 32, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -106, 10, -32, 10, -88, 10, -101, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -107, 10, -32, 10, -87, 10, -100, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -88, -87, -90, -65, -32, -87, -117, -32, -88, -126, -32, -88, -75, -32, -87, -121, -32, -88, -126, 32, -32, -88, -107, -32, -88, -65, -121, -32, -88, -107, -32, -88, -80, -32, -88, -90, -32, -88, -107, -32, -88, -74, 32, -32, -88, -88, -32, -87, -127, -32, -88, -71, -32, -88, -66, -32, -88, -80, -32, -88, -97, -80, -65, -32, -88, -107, -32, -88, -91, -32, -88, -66, 32, 58, -32, -88, -94, -80, -32, -88, -66, -32, -88, -126, -32, -88, -102, -32, -88, -66, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -88, 10, -123, -106, -100, -92, -88, -86, -82, 10, -32, 10, -88, 10, -92, 10, -32, 10, -87, 10, -121, 10, 10, 32, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, -88, -87, 10, -90, -65, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -75, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -126, 10, 10, 32, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -65, 10, -121, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -80, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -87, -126, -32, -88, -86, 32, -32, -88, -80, -32, -87, -121, -32, -88, -106, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -88, 10, -123, -106, -100, -92, -88, -86, -82, 10, -32, 10, -88, 10, -92, 10, -32, 10, -87, 10, -121, 10, 10, 32, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, -88, -87, 10, -90, -65, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -75, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -126, 10, 10, 32, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -65, 10, -121, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -80, -65, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, 10, 32, 58, -32, 10, -88, 10, -94, -80, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -102, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -126, 10, -32, 10, -88, 10, -86, 10, 10, 32, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -106, 10, -32, 10, -88, 10, -101, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -107, 10, -32, 10, -87, 10, -100, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -88, -101, -32, -87, -117, -32, -88, -107, -32, -87, -100, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -88, 10, -123, -106, -100, -92, -88, -86, -82, 10, -32, 10, -88, 10, -92, 10, -32, 10, -87, 10, -121, 10, 10, 32, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, -88, -87, 10, -90, -65, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -75, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -126, 10, 10, 32, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -65, 10, -121, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -80, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, 10, 32, 58, -32, 10, -88, 10, -94, -80, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -102, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -126, 10, -32, 10, -88, 10, -86, 10, 10, 32, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -106, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -87, -127, -32, -88, -71, -32, -88, -66, -32, -88, -126, -32, -88, -90, -32, -88, -80, -32, -88, -66, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 6, 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, 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, 3, 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, 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, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 14, 23, 25, 27, 29, 31, 33, 35, 37, 40, 43, 54, 56, 58, 61, 64, 69, 74, 79, 84, 88, 92, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 130, 137, 142, 146, 152, 156, 159, 165, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 231, 234, 239, 242, 245, 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, 281, 284, 287, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 471, 474, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 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, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 699, 702, 705, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 927, 930, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1070, 1072, 1074, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1116, 1119, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1204, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1548, 1551, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1636, 1640, 1643, 1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1844, 1847, 1850, 1854, 1857, 1860, 1863, 1866, 1869, 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, 1899, 1902, 1905, 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929, 1932, 1935, 1938, 1941, 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965, 1968, 1971, 1974, 1977, 1980, 1983, 1986, 1989, 1992, 1995, 1998, 2001, 2004, 2007, 2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2072, 2074, 2076, 2078, 2080, 2082, 2084, 2086, 2088, 2090, 2092, 2094, 2096, 2098, 2100, 2109, 2112, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2197, 2201, 2204, 2207, 2210, 2213, 2216, 2219, 2222, 2225, 2228, 2231, 2234, 2237, 2240, 2243, 2246, 2249, 2252, 2255, 2258, 2261, 2264, 2267, 2270, 2273, 2276, 2279, 2282, 2285, 2288, 2291, 2294, 2297, 2300, 2303, 2306, 2309, 2312, 2315, 2318, 2321, 2324, 2327, 2330, 2333, 2336, 2339, 2342, 2345, 2348, 2351, 2354, 2357, 2360, 2363, 2366, 2369, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2404, 2407, 2410, 2414, 2417, 2420, 2423, 2426, 2429, 2432, 2435, 2438, 2441, 2444, 2447, 2450, 2453, 2456, 2459, 2462, 2465, 2468, 2471, 2474, 2477, 2480, 2483, 2486, 2489, 2492, 2495, 2498, 2501, 2504, 2507, 2510, 2513, 2516, 2519, 2522, 2525, 2528, 2531, 2534, 2537, 2540, 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570, 2573, 2576, 2579, 2582, 2585, 2588, 2591, 2594, 2596, 2598, 2600, 2602, 2604, 2606, 2608, 2610, 2612, 2614, 2616, 2618, 2620, 2622, 2624, 2626, 2628, 2630, 2632, 2634, 2636, 2638, 2640 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 28, 29, 27, 31, 32, 30, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 33, 0, 34, 0, 36, 37, 35, 39, 40, 38, 43, 42, 44, 42, 41, 47, 46, 48, 46, 45, 47, 46, 49, 46, 45, 47, 46, 50, 46, 45, 52, 51, 51, 0, 4, 53, 53, 0, 55, 56, 54, 4, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 0, 0, 0, 0, 71, 72, 73, 72, 72, 75, 74, 71, 4, 76, 9, 76, 0, 77, 78, 77, 0, 81, 80, 82, 83, 80, 79, 0, 85, 86, 84, 0, 85, 84, 81, 87, 85, 86, 87, 84, 88, 81, 89, 90, 91, 92, 93, 94, 95, 89, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 119, 118, 121, 120, 122, 121, 123, 124, 124, 123, 120, 125, 121, 120, 126, 127, 128, 121, 120, 129, 121, 120, 130, 121, 120, 131, 121, 120, 132, 121, 120, 133, 121, 120, 134, 121, 120, 135, 121, 120, 136, 121, 120, 137, 121, 120, 138, 121, 120, 139, 121, 120, 140, 121, 120, 141, 121, 120, 142, 121, 120, 143, 121, 120, 121, 144, 120, 145, 147, 146, 148, 149, 150, 151, 152, 153, 146, 0, 154, 121, 120, 155, 121, 120, 156, 121, 120, 157, 121, 120, 158, 121, 120, 159, 121, 120, 121, 160, 120, 161, 121, 120, 162, 121, 120, 163, 121, 120, 164, 121, 120, 165, 121, 120, 166, 121, 120, 167, 121, 120, 168, 121, 120, 169, 121, 120, 170, 121, 120, 171, 121, 120, 172, 121, 120, 173, 121, 120, 174, 121, 120, 143, 121, 120, 175, 121, 120, 176, 121, 120, 177, 121, 120, 178, 121, 120, 179, 121, 120, 180, 121, 120, 181, 121, 120, 182, 121, 120, 183, 121, 120, 184, 121, 120, 185, 121, 120, 186, 121, 120, 187, 121, 120, 188, 121, 120, 189, 121, 120, 190, 121, 120, 191, 121, 120, 192, 121, 120, 193, 121, 120, 194, 121, 120, 143, 121, 120, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 212, 211, 214, 213, 215, 214, 216, 217, 218, 217, 216, 213, 219, 214, 213, 220, 221, 222, 223, 224, 214, 213, 225, 214, 213, 226, 214, 213, 227, 214, 213, 228, 214, 213, 229, 214, 213, 230, 214, 213, 231, 214, 213, 232, 214, 213, 233, 214, 213, 234, 214, 213, 235, 214, 213, 236, 214, 213, 237, 214, 213, 238, 214, 213, 239, 214, 213, 240, 214, 213, 241, 214, 213, 242, 214, 213, 243, 214, 213, 244, 214, 213, 245, 214, 213, 214, 246, 213, 247, 214, 213, 248, 214, 213, 249, 214, 213, 250, 214, 213, 251, 214, 213, 252, 214, 213, 253, 214, 213, 254, 214, 213, 255, 214, 213, 256, 214, 213, 257, 214, 213, 258, 214, 213, 259, 214, 213, 260, 214, 213, 245, 214, 213, 261, 214, 213, 262, 214, 213, 263, 214, 213, 264, 214, 213, 265, 214, 213, 266, 214, 213, 214, 267, 213, 268, 214, 213, 269, 214, 213, 270, 214, 213, 271, 214, 213, 272, 214, 213, 273, 214, 213, 274, 214, 213, 275, 214, 213, 276, 214, 213, 277, 214, 213, 278, 214, 213, 279, 214, 213, 280, 214, 213, 281, 214, 213, 245, 214, 213, 282, 214, 213, 283, 214, 213, 284, 285, 214, 213, 286, 214, 213, 287, 214, 213, 288, 214, 213, 289, 214, 213, 290, 214, 213, 291, 214, 213, 292, 214, 213, 293, 214, 213, 294, 214, 213, 214, 295, 246, 213, 296, 214, 213, 297, 214, 213, 298, 299, 214, 213, 300, 214, 213, 301, 214, 213, 302, 214, 213, 303, 214, 213, 304, 214, 213, 305, 214, 213, 306, 214, 213, 307, 214, 213, 308, 214, 213, 309, 214, 213, 310, 214, 213, 245, 214, 213, 311, 214, 213, 312, 214, 213, 313, 214, 213, 314, 214, 213, 315, 214, 213, 316, 214, 213, 214, 317, 213, 318, 214, 213, 319, 214, 213, 320, 214, 213, 321, 214, 213, 322, 214, 213, 323, 214, 213, 324, 214, 213, 325, 214, 213, 308, 214, 213, 326, 214, 213, 327, 214, 213, 328, 214, 213, 329, 214, 213, 330, 214, 213, 331, 214, 213, 332, 214, 213, 333, 214, 213, 334, 214, 213, 335, 214, 213, 336, 214, 213, 245, 214, 213, 337, 214, 213, 338, 214, 213, 339, 214, 213, 340, 214, 213, 341, 214, 213, 342, 214, 213, 343, 214, 213, 344, 214, 213, 345, 214, 213, 346, 214, 213, 347, 214, 213, 348, 214, 213, 349, 214, 213, 350, 214, 213, 351, 214, 213, 352, 214, 213, 353, 214, 213, 308, 214, 213, 214, 354, 213, 214, 355, 213, 214, 356, 213, 214, 357, 213, 214, 358, 213, 214, 359, 213, 214, 360, 213, 214, 361, 213, 214, 362, 213, 214, 363, 213, 214, 364, 213, 214, 365, 213, 214, 366, 213, 214, 367, 213, 368, 0, 369, 370, 0, 371, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 25, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 25, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 25, 0, 399, 0, 400, 0, 25, 0, 401, 0, 402, 0, 403, 0, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 209, 0, 422, 0, 423, 0, 424, 25, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 436, 0, 437, 0, 438, 0, 439, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 455, 454, 457, 456, 458, 457, 459, 460, 461, 462, 460, 459, 456, 463, 457, 456, 464, 465, 466, 467, 468, 469, 470, 457, 456, 471, 457, 456, 472, 457, 456, 473, 457, 456, 474, 457, 456, 475, 457, 456, 476, 457, 456, 457, 477, 456, 478, 457, 456, 479, 457, 456, 480, 457, 456, 481, 457, 456, 482, 457, 456, 483, 457, 456, 484, 457, 456, 485, 457, 456, 486, 457, 456, 487, 457, 456, 488, 457, 456, 489, 457, 456, 490, 457, 456, 491, 457, 456, 492, 457, 456, 457, 477, 456, 493, 457, 456, 494, 495, 457, 456, 496, 497, 457, 456, 498, 457, 456, 499, 457, 456, 500, 457, 456, 501, 457, 456, 502, 457, 456, 476, 457, 456, 503, 457, 456, 504, 457, 456, 505, 457, 456, 506, 457, 456, 507, 457, 456, 508, 457, 456, 509, 457, 456, 510, 457, 456, 511, 457, 456, 457, 512, 456, 513, 457, 456, 514, 457, 456, 515, 457, 456, 516, 457, 456, 517, 457, 456, 476, 457, 456, 518, 457, 456, 519, 457, 456, 520, 457, 456, 521, 457, 456, 522, 457, 456, 523, 457, 456, 476, 457, 456, 524, 457, 456, 525, 457, 456, 476, 457, 456, 526, 457, 456, 527, 457, 456, 528, 457, 456, 529, 457, 456, 530, 457, 456, 531, 457, 456, 457, 532, 456, 533, 457, 456, 534, 457, 456, 535, 457, 456, 536, 457, 456, 537, 457, 456, 538, 457, 456, 539, 457, 456, 540, 457, 456, 541, 457, 456, 542, 457, 456, 543, 457, 456, 544, 457, 456, 545, 457, 456, 546, 457, 456, 492, 457, 456, 547, 457, 456, 548, 457, 456, 549, 476, 457, 456, 550, 457, 456, 551, 457, 456, 552, 457, 456, 553, 457, 456, 554, 457, 456, 555, 457, 456, 556, 457, 456, 557, 457, 456, 492, 457, 456, 558, 457, 456, 559, 457, 456, 560, 457, 456, 561, 457, 456, 562, 457, 456, 563, 457, 456, 564, 457, 456, 565, 457, 456, 566, 457, 456, 567, 457, 456, 568, 457, 456, 569, 457, 456, 570, 457, 456, 571, 457, 456, 572, 457, 456, 573, 457, 456, 574, 457, 456, 555, 457, 456, 457, 575, 456, 457, 576, 456, 457, 577, 456, 457, 578, 456, 457, 579, 456, 457, 580, 456, 457, 581, 456, 457, 582, 456, 457, 583, 456, 457, 584, 456, 457, 585, 456, 457, 586, 456, 457, 587, 456, 457, 588, 456, 589, 0, 590, 0, 591, 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 449, 0, 605, 604, 607, 606, 608, 607, 609, 610, 611, 612, 610, 609, 606, 613, 607, 606, 614, 615, 616, 617, 618, 619, 620, 607, 606, 621, 607, 606, 622, 607, 606, 623, 607, 606, 624, 607, 606, 625, 607, 606, 626, 607, 606, 607, 627, 606, 628, 607, 606, 629, 607, 606, 630, 607, 606, 631, 607, 606, 632, 607, 606, 633, 607, 606, 634, 607, 606, 635, 607, 606, 636, 607, 606, 637, 607, 606, 638, 607, 606, 639, 607, 606, 640, 607, 606, 641, 607, 606, 642, 607, 606, 607, 627, 606, 643, 607, 606, 644, 645, 607, 606, 646, 647, 607, 606, 648, 607, 606, 649, 607, 606, 650, 607, 606, 651, 607, 606, 652, 607, 606, 626, 607, 606, 653, 607, 606, 654, 607, 606, 655, 607, 606, 656, 607, 606, 657, 607, 606, 658, 607, 606, 659, 607, 606, 660, 607, 606, 661, 607, 606, 607, 662, 606, 663, 607, 606, 664, 607, 606, 665, 607, 606, 666, 607, 606, 667, 607, 606, 626, 607, 606, 668, 607, 606, 669, 607, 606, 670, 607, 606, 671, 607, 606, 672, 607, 606, 673, 607, 606, 626, 607, 606, 674, 607, 606, 675, 607, 606, 626, 607, 606, 676, 607, 606, 677, 607, 606, 678, 607, 606, 679, 607, 606, 680, 607, 606, 681, 607, 606, 607, 682, 606, 683, 607, 606, 684, 607, 606, 685, 607, 606, 686, 607, 606, 687, 607, 606, 688, 607, 606, 689, 607, 606, 690, 607, 606, 691, 607, 606, 692, 607, 606, 693, 607, 606, 694, 607, 606, 695, 607, 606, 696, 607, 606, 642, 607, 606, 697, 607, 606, 698, 607, 606, 699, 626, 700, 607, 606, 701, 607, 606, 702, 607, 606, 703, 607, 606, 704, 607, 606, 705, 607, 606, 706, 607, 606, 707, 607, 606, 708, 607, 606, 709, 607, 606, 607, 710, 627, 606, 711, 607, 606, 712, 607, 606, 713, 714, 607, 606, 715, 607, 606, 716, 607, 606, 717, 607, 606, 718, 607, 606, 719, 607, 606, 720, 607, 606, 721, 607, 606, 722, 607, 606, 723, 607, 606, 724, 607, 606, 725, 607, 606, 642, 607, 606, 726, 607, 606, 727, 607, 606, 728, 607, 606, 729, 607, 606, 730, 607, 606, 731, 607, 606, 607, 732, 606, 733, 607, 606, 734, 607, 606, 735, 607, 606, 736, 607, 606, 737, 607, 606, 738, 607, 606, 739, 607, 606, 740, 607, 606, 723, 607, 606, 741, 607, 606, 742, 607, 606, 743, 607, 606, 744, 607, 606, 745, 607, 606, 746, 607, 606, 747, 607, 606, 748, 607, 606, 749, 607, 606, 750, 607, 606, 751, 607, 606, 642, 607, 606, 752, 607, 606, 753, 607, 606, 754, 607, 606, 755, 607, 606, 756, 607, 606, 757, 607, 606, 758, 607, 606, 759, 607, 606, 760, 607, 606, 761, 607, 606, 762, 607, 606, 763, 607, 606, 764, 607, 606, 765, 607, 606, 766, 607, 606, 767, 607, 606, 768, 607, 606, 723, 607, 606, 607, 769, 606, 607, 770, 606, 607, 771, 606, 607, 772, 606, 607, 773, 606, 607, 774, 606, 607, 775, 606, 607, 776, 606, 607, 777, 606, 607, 778, 606, 607, 779, 606, 607, 780, 606, 607, 781, 606, 607, 782, 606, 783, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 0, 789, 0, 790, 0, 791, 0, 792, 0, 793, 0, 794, 0, 795, 0, 797, 796, 799, 798, 800, 799, 801, 802, 803, 804, 802, 801, 798, 805, 799, 798, 806, 807, 808, 809, 810, 811, 812, 799, 798, 813, 799, 798, 814, 799, 798, 815, 799, 798, 816, 799, 798, 817, 799, 798, 818, 799, 798, 799, 819, 798, 820, 799, 798, 821, 799, 798, 822, 799, 798, 823, 799, 798, 824, 799, 798, 825, 799, 798, 826, 799, 798, 827, 799, 798, 828, 799, 798, 829, 799, 798, 830, 799, 798, 831, 799, 798, 832, 799, 798, 833, 799, 798, 834, 799, 798, 799, 819, 798, 835, 799, 798, 836, 837, 799, 798, 838, 839, 799, 798, 840, 799, 798, 841, 799, 798, 842, 799, 798, 843, 799, 798, 844, 799, 798, 818, 799, 798, 845, 799, 798, 846, 799, 798, 847, 799, 798, 848, 799, 798, 849, 799, 798, 850, 799, 798, 851, 799, 798, 852, 799, 798, 853, 799, 798, 799, 854, 798, 855, 799, 798, 856, 799, 798, 857, 799, 798, 858, 799, 798, 859, 799, 798, 818, 799, 798, 860, 799, 798, 861, 799, 798, 862, 799, 798, 863, 799, 798, 864, 799, 798, 865, 799, 798, 818, 799, 798, 866, 799, 798, 867, 799, 798, 818, 799, 798, 868, 799, 798, 869, 799, 798, 870, 799, 798, 871, 799, 798, 872, 799, 798, 873, 799, 798, 799, 874, 798, 875, 799, 798, 876, 799, 798, 877, 799, 798, 878, 799, 798, 879, 799, 798, 880, 799, 798, 881, 799, 798, 882, 799, 798, 883, 799, 798, 884, 799, 798, 885, 799, 798, 886, 799, 798, 887, 799, 798, 888, 799, 798, 834, 799, 798, 889, 799, 798, 890, 799, 798, 891, 818, 799, 798, 892, 799, 798, 893, 799, 798, 894, 799, 798, 895, 799, 798, 896, 799, 798, 897, 799, 798, 898, 799, 798, 899, 799, 798, 900, 799, 798, 799, 901, 819, 798, 902, 799, 798, 903, 799, 798, 904, 905, 799, 798, 906, 799, 798, 907, 799, 798, 908, 799, 798, 909, 799, 798, 910, 799, 798, 911, 799, 798, 912, 799, 798, 913, 799, 798, 914, 799, 798, 915, 799, 798, 916, 799, 798, 834, 799, 798, 917, 799, 798, 918, 799, 798, 919, 799, 798, 920, 799, 798, 921, 799, 798, 922, 799, 798, 799, 923, 798, 924, 799, 798, 925, 799, 798, 926, 799, 798, 927, 799, 798, 928, 799, 798, 929, 799, 798, 930, 799, 798, 931, 799, 798, 914, 799, 798, 932, 799, 798, 933, 799, 798, 934, 799, 798, 935, 799, 798, 936, 799, 798, 937, 799, 798, 938, 799, 798, 939, 799, 798, 940, 799, 798, 941, 799, 798, 942, 799, 798, 943, 799, 798, 944, 799, 798, 945, 799, 798, 946, 799, 798, 947, 799, 798, 948, 799, 798, 914, 799, 798, 799, 949, 798, 799, 950, 798, 799, 951, 798, 799, 952, 798, 799, 953, 798, 799, 954, 798, 799, 955, 798, 799, 956, 798, 799, 957, 798, 799, 958, 798, 799, 959, 798, 799, 960, 798, 799, 961, 798, 799, 962, 798, 963, 0, 964, 0, 965, 0, 966, 0, 967, 0, 968, 0, 969, 0, 970, 0, 971, 0, 972, 0, 973, 0, 974, 0, 975, 0, 976, 0, 977, 0, 978, 0, 979, 0, 980, 0, 981, 0, 982, 0, 209, 0, 983, 0, 3, 0, 984, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 903, 13, 13, 14, 24, 26, 10, 40, 43, 3, 4, 49, 136, 304, 336, 339, 361, 882, 5, 6, 7, 8, 9, 10, 11, 12, 13, 25, 12, 13, 25, 15, 16, 17, 18, 17, 17, 18, 17, 19, 19, 19, 20, 19, 19, 19, 20, 21, 22, 23, 13, 23, 24, 13, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 905, 41, 42, 13, 41, 40, 42, 43, 44, 45, 47, 48, 46, 44, 45, 46, 44, 47, 2, 48, 14, 24, 26, 10, 40, 43, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 72, 73, 74, 73, 13, 75, 76, 93, 115, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 2, 13, 13, 14, 24, 26, 10, 40, 43, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 153, 154, 155, 154, 13, 290, 156, 157, 179, 194, 216, 272, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 92, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 260, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 244, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 13, 305, 306, 329, 307, 313, 308, 309, 310, 311, 312, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 332, 333, 334, 335, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 708, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 535, 375, 376, 377, 519, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 391, 392, 393, 392, 13, 505, 401, 394, 395, 402, 418, 450, 453, 475, 487, 396, 397, 398, 399, 400, 401, 92, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 419, 420, 443, 421, 427, 422, 423, 424, 425, 426, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 451, 452, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 13, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 536, 537, 536, 537, 538, 537, 13, 694, 546, 539, 540, 547, 563, 595, 598, 620, 676, 541, 542, 543, 544, 545, 546, 92, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 564, 565, 588, 566, 572, 567, 568, 569, 570, 571, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 596, 597, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 621, 622, 623, 664, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 648, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 13, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 722, 723, 724, 723, 13, 868, 732, 725, 726, 733, 749, 781, 784, 806, 850, 727, 728, 729, 730, 731, 732, 92, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 750, 751, 774, 752, 758, 753, 754, 755, 756, 757, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 775, 776, 777, 778, 779, 780, 782, 783, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 834, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 13, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 904, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 57, 144, 0, 54, 84, 0, 69, 33, 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, 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, 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, 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, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 905; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/pa.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1511 "lib/gherkin/lexer/pa.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/pa.rb.rl" # line 1520 "lib/gherkin/lexer/pa.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/pa.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/pa.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/pa.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/pa.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/pa.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/pa.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/pa.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/pa.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/pa.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/pa.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/pa.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/pa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/pa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/pa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/pa.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/pa.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/pa.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/pa.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/pa.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/pa.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/pa.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/pa.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/pa.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/pa.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1764 "lib/gherkin/lexer/pa.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/pa.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1803 "lib/gherkin/lexer/pa.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/pa.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/ro.rb0000644000004100000410000012752412244512574017557 0ustar www-datawww-data # line 1 "ragel/i18n/ro.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Ro #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/ro.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/ro.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 22, 24, 26, 44, 45, 46, 47, 49, 51, 56, 61, 66, 71, 75, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 101, 108, 113, 114, 115, 116, 117, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 146, 148, 150, 152, 170, 171, 175, 176, 177, 178, 179, 180, 181, 182, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 201, 203, 205, 207, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 238, 239, 240, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 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, 328, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 384, 386, 388, 390, 392, 393, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 493, 495, 497, 499, 501, 503, 505, 507, 511, 513, 515, 517, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 576, 578, 580, 582, 584, 585, 586, 587, 588, 589, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 667, 669, 671, 673, 675, 680, 682, 684, 686, 688, 690, 692, 694, 698, 700, 702, 704, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 737, 739, 741, 743, 745, 747, 749, 753, 759, 762, 764, 770, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 829, 831, 833, 835, 837, 842, 844, 846, 848, 850, 852, 854, 856, 860, 862, 864, 866, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 927, 929, 931, 933, 935, 936, 937 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -59, -56, -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, -98, 105, 32, 10, 13, 10, 13, -59, -56, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, -104, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 116, 117, 110, 99, -61, 97, 111, -94, 110, 100, 110, 116, 101, 120, 116, 58, 10, 10, -59, -56, 10, 32, 35, 37, 42, 64, 65, 67, 68, 70, 83, 9, 13, -98, 10, 10, 105, 10, 32, -59, -56, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, 97, -59, -56, 114, 116, -93, 105, 32, 102, 105, 105, -101, 32, 101, 105, 120, 101, 109, 112, 108, 101, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 58, -101, 10, 117, 110, 99, -59, -56, 116, -93, 105, 111, 110, 97, 108, 105, 116, 97, 116, 101, 58, 10, 10, 10, 32, 35, 37, 64, 67, 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, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, 10, 120, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, -101, 10, 10, 99, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 114, 10, 117, 10, 99, 10, 116, 10, 117, 10, 114, -60, 10, 97, -125, 10, 10, 32, 10, 115, 10, 99, -101, 99, 105, 116, 101, 110, 97, 114, 105, 117, 58, 10, 10, -59, -56, 10, 32, 35, 37, 42, 64, 65, 67, 68, 70, 83, 9, 13, -98, 10, 10, 105, 10, 32, -104, 10, 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, 116, 10, 117, 10, 110, 10, 99, -61, 10, 97, 111, -94, 10, 10, 110, 10, 100, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, 10, 97, -59, -56, 10, 114, 116, -93, 10, 10, 105, 10, 32, 10, 102, 10, 105, 10, 105, -101, 10, 10, 32, 101, 105, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, -101, 10, 10, 99, 105, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 114, 10, 117, 10, 99, 10, 116, 10, 117, 10, 114, -60, 10, 97, -125, 10, 10, 32, 10, 115, 10, 99, 114, 117, 99, 116, 117, 114, -60, 97, -125, 32, 115, 99, 101, 110, 97, 114, 105, 117, 58, 10, 10, -59, -56, 10, 32, 35, 37, 42, 64, 65, 67, 68, 70, 83, 9, 13, -98, 10, 10, 105, 10, 32, -104, 10, 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, 116, 10, 117, 10, 110, 10, 99, -61, 10, 97, -94, 10, 10, 110, 10, 100, 10, 97, -59, -56, 10, 114, 116, -93, 10, 10, 105, 10, 32, 10, 102, 10, 105, 10, 105, -101, 10, 10, 32, 101, 105, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 58, -101, 10, 10, 99, 105, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -59, -56, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, -104, 10, 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, 116, 10, 117, 10, 110, 10, 99, -61, 10, 97, -94, 10, 10, 110, 10, 100, 10, 97, -59, -56, 10, 114, 116, -93, 10, 10, 105, 10, 32, 10, 102, 10, 105, 10, 105, -101, 10, 10, 32, 101, 105, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 58, -101, 10, 10, 99, 105, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 114, 10, 117, 10, 99, 10, 116, 10, 117, 10, 114, -60, 10, 97, -125, 10, 10, 32, 10, 115, 10, 99, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 1, 2, 2, 16, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 2, 2, 16, 1, 4, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 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, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 3, 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, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 1, 0, 0, 0, 1, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 25, 28, 31, 49, 51, 53, 55, 58, 61, 66, 71, 76, 81, 85, 89, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 127, 134, 139, 141, 143, 145, 147, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 188, 191, 194, 197, 215, 217, 222, 224, 226, 228, 230, 232, 234, 236, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 265, 268, 271, 274, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 320, 322, 324, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 539, 542, 545, 548, 551, 553, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 697, 700, 703, 706, 709, 712, 715, 718, 723, 726, 729, 732, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 818, 821, 824, 827, 830, 832, 834, 836, 838, 840, 842, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 956, 959, 962, 965, 968, 974, 977, 980, 983, 986, 989, 992, 995, 1000, 1003, 1006, 1009, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1079, 1085, 1089, 1092, 1098, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1177, 1180, 1183, 1186, 1189, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1221, 1224, 1227, 1230, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1319, 1322, 1325, 1328, 1331, 1333, 1335 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 4, 0, 18, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 1, 2, 5, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 4, 0, 18, 0, 27, 0, 28, 0, 30, 31, 29, 33, 34, 32, 37, 36, 38, 36, 35, 41, 40, 42, 40, 39, 41, 40, 43, 40, 39, 41, 40, 44, 40, 39, 46, 45, 45, 0, 5, 47, 47, 0, 49, 50, 48, 5, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 0, 0, 0, 0, 65, 66, 67, 66, 66, 69, 68, 65, 5, 70, 10, 70, 0, 71, 0, 72, 0, 73, 0, 18, 0, 74, 75, 76, 0, 75, 0, 77, 0, 19, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 85, 84, 87, 86, 88, 89, 87, 90, 91, 92, 93, 91, 94, 95, 96, 97, 98, 90, 86, 99, 87, 86, 87, 100, 86, 87, 101, 86, 102, 103, 105, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 104, 0, 118, 0, 119, 120, 19, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 75, 0, 122, 0, 124, 123, 123, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 135, 134, 137, 136, 137, 138, 139, 140, 139, 138, 136, 137, 141, 136, 137, 142, 136, 137, 143, 136, 144, 145, 137, 146, 136, 146, 137, 136, 137, 147, 136, 137, 148, 136, 137, 149, 136, 137, 150, 136, 137, 151, 136, 137, 152, 136, 137, 153, 136, 137, 154, 136, 137, 155, 136, 137, 156, 136, 137, 157, 136, 146, 137, 136, 158, 0, 159, 0, 160, 0, 161, 162, 163, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 176, 175, 178, 177, 178, 179, 180, 181, 180, 182, 183, 184, 185, 179, 177, 178, 186, 177, 178, 187, 177, 178, 188, 177, 178, 189, 177, 178, 190, 177, 178, 191, 177, 178, 192, 177, 178, 193, 177, 178, 194, 177, 178, 195, 177, 178, 196, 177, 178, 197, 177, 178, 198, 177, 178, 199, 177, 178, 200, 177, 178, 201, 177, 178, 202, 177, 178, 203, 177, 178, 204, 177, 178, 205, 177, 178, 206, 177, 178, 207, 177, 178, 208, 177, 178, 209, 177, 178, 210, 177, 178, 211, 177, 178, 205, 177, 178, 212, 177, 178, 213, 177, 178, 214, 177, 215, 216, 178, 217, 177, 217, 178, 177, 178, 218, 177, 178, 219, 177, 178, 220, 177, 178, 221, 177, 178, 222, 177, 178, 223, 177, 178, 224, 177, 178, 225, 177, 178, 211, 177, 217, 178, 177, 178, 226, 227, 177, 178, 228, 177, 178, 229, 177, 178, 230, 177, 178, 231, 177, 178, 232, 177, 178, 205, 177, 178, 233, 177, 178, 234, 177, 178, 235, 177, 178, 236, 177, 178, 237, 177, 178, 238, 177, 239, 178, 240, 177, 240, 178, 177, 178, 241, 177, 178, 242, 177, 178, 226, 177, 163, 0, 243, 19, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 253, 252, 255, 254, 256, 257, 255, 258, 259, 260, 261, 259, 262, 263, 264, 265, 266, 258, 254, 267, 255, 254, 255, 268, 254, 255, 269, 254, 267, 255, 254, 255, 270, 254, 255, 271, 254, 255, 272, 254, 255, 273, 254, 255, 274, 254, 255, 275, 254, 255, 276, 254, 255, 277, 254, 255, 278, 254, 255, 279, 254, 255, 280, 254, 255, 281, 254, 255, 282, 254, 255, 283, 254, 255, 284, 254, 255, 285, 254, 255, 286, 254, 255, 267, 254, 287, 255, 288, 289, 254, 288, 255, 254, 255, 290, 254, 255, 268, 254, 255, 291, 254, 255, 292, 254, 255, 293, 254, 255, 294, 254, 255, 295, 254, 255, 269, 254, 255, 296, 254, 297, 298, 255, 268, 299, 254, 300, 255, 254, 255, 301, 254, 255, 302, 254, 255, 303, 254, 255, 304, 254, 255, 288, 254, 300, 255, 254, 255, 302, 301, 301, 254, 255, 305, 254, 255, 306, 254, 255, 307, 254, 308, 309, 255, 310, 254, 310, 255, 254, 255, 311, 254, 255, 312, 254, 255, 313, 254, 255, 314, 254, 255, 315, 254, 255, 316, 254, 255, 317, 254, 255, 318, 254, 255, 319, 254, 255, 295, 254, 310, 255, 254, 255, 320, 268, 321, 254, 255, 322, 254, 255, 323, 254, 255, 324, 254, 255, 325, 254, 255, 326, 254, 255, 295, 254, 255, 327, 254, 255, 328, 254, 255, 329, 254, 255, 330, 254, 255, 331, 254, 255, 332, 254, 333, 255, 334, 254, 334, 255, 254, 255, 335, 254, 255, 336, 254, 255, 320, 254, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 344, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 356, 355, 358, 357, 359, 360, 358, 361, 362, 363, 364, 362, 365, 366, 367, 368, 369, 361, 357, 370, 358, 357, 358, 371, 357, 358, 372, 357, 370, 358, 357, 358, 373, 357, 358, 374, 357, 358, 375, 357, 358, 376, 357, 358, 377, 357, 358, 378, 357, 358, 379, 357, 358, 380, 357, 358, 381, 357, 358, 382, 357, 358, 383, 357, 358, 384, 357, 358, 385, 357, 358, 386, 357, 358, 387, 357, 358, 388, 357, 358, 389, 357, 358, 370, 357, 390, 358, 391, 357, 391, 358, 357, 358, 392, 357, 358, 371, 357, 358, 393, 357, 394, 395, 358, 371, 396, 357, 397, 358, 357, 358, 398, 357, 358, 399, 357, 358, 400, 357, 358, 401, 357, 358, 391, 357, 397, 358, 357, 358, 399, 398, 398, 357, 358, 402, 357, 358, 403, 357, 358, 404, 357, 405, 406, 358, 407, 357, 407, 358, 357, 358, 408, 357, 358, 409, 357, 358, 410, 357, 358, 411, 357, 358, 412, 357, 358, 413, 357, 358, 414, 357, 358, 415, 357, 358, 416, 357, 358, 417, 357, 358, 372, 357, 407, 358, 357, 358, 418, 371, 357, 358, 419, 357, 358, 420, 357, 358, 421, 357, 358, 422, 357, 358, 423, 357, 358, 417, 357, 424, 425, 424, 0, 428, 427, 429, 430, 427, 426, 0, 432, 433, 431, 0, 432, 431, 428, 434, 432, 433, 434, 431, 435, 436, 428, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 437, 0, 99, 87, 86, 87, 450, 86, 87, 451, 86, 87, 452, 86, 87, 453, 86, 87, 454, 86, 87, 455, 86, 87, 456, 86, 87, 457, 86, 87, 458, 86, 87, 459, 86, 87, 460, 86, 87, 461, 86, 87, 462, 86, 87, 463, 86, 87, 464, 86, 87, 465, 86, 87, 466, 86, 87, 99, 86, 467, 87, 468, 86, 468, 87, 86, 87, 469, 86, 87, 100, 86, 87, 470, 86, 471, 472, 87, 100, 473, 86, 474, 87, 86, 87, 475, 86, 87, 476, 86, 87, 477, 86, 87, 478, 86, 87, 468, 86, 474, 87, 86, 87, 476, 475, 475, 86, 87, 479, 86, 87, 480, 86, 87, 481, 86, 482, 483, 87, 484, 86, 484, 87, 86, 87, 485, 86, 87, 486, 86, 87, 487, 86, 87, 488, 86, 87, 489, 86, 87, 490, 86, 87, 491, 86, 87, 492, 86, 87, 493, 86, 87, 494, 86, 87, 101, 86, 484, 87, 86, 87, 495, 100, 496, 86, 87, 497, 86, 87, 498, 86, 87, 499, 86, 87, 500, 86, 87, 501, 86, 87, 494, 86, 87, 502, 86, 87, 503, 86, 87, 504, 86, 87, 505, 86, 87, 506, 86, 87, 507, 86, 508, 87, 509, 86, 509, 87, 86, 87, 510, 86, 87, 511, 86, 87, 495, 86, 512, 0, 4, 0, 513, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 8, 418, 7, 7, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 3, 4, 5, 6, 7, 20, 6, 7, 20, 10, 11, 12, 13, 12, 12, 13, 12, 14, 14, 14, 15, 14, 14, 14, 15, 16, 17, 18, 7, 18, 19, 7, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 420, 36, 37, 7, 36, 35, 37, 39, 40, 41, 43, 44, 46, 45, 47, 48, 49, 50, 51, 52, 53, 54, 53, 54, 55, 350, 54, 7, 351, 57, 365, 369, 373, 383, 400, 56, 57, 58, 2, 8, 7, 7, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 60, 61, 67, 68, 62, 63, 64, 65, 66, 70, 71, 72, 73, 74, 75, 76, 77, 78, 77, 78, 78, 7, 79, 80, 81, 82, 83, 95, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 58, 97, 98, 99, 100, 175, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 113, 114, 114, 7, 115, 129, 136, 142, 157, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 7, 130, 131, 132, 133, 134, 135, 58, 137, 138, 139, 140, 141, 143, 144, 145, 146, 156, 147, 148, 149, 150, 151, 152, 153, 154, 155, 158, 164, 159, 160, 161, 162, 163, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 177, 263, 178, 179, 180, 181, 182, 183, 184, 185, 186, 185, 186, 187, 190, 186, 7, 191, 189, 205, 209, 219, 229, 245, 188, 189, 58, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 7, 206, 207, 208, 210, 211, 213, 212, 214, 215, 216, 217, 218, 220, 221, 227, 228, 222, 223, 224, 225, 226, 230, 231, 232, 233, 244, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 246, 252, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 282, 283, 284, 287, 283, 7, 288, 286, 302, 306, 310, 320, 337, 285, 286, 58, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 7, 303, 304, 305, 307, 308, 309, 311, 312, 318, 319, 313, 314, 315, 316, 317, 321, 322, 323, 324, 336, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 338, 339, 340, 341, 342, 343, 344, 345, 346, 348, 349, 347, 345, 346, 347, 345, 348, 2, 8, 349, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 7, 366, 367, 368, 370, 371, 372, 374, 375, 381, 382, 376, 377, 378, 379, 380, 384, 385, 386, 387, 399, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 401, 407, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 419, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 72, 33, 84, 84, 84, 84, 84, 84, 0, 0, 15, 63, 63, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 75, 33, 84, 84, 84, 84, 84, 84, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 57, 144, 0, 54, 84, 84, 0, 78, 33, 84, 84, 84, 84, 84, 84, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 420; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/ro.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 823 "lib/gherkin/lexer/ro.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/ro.rb.rl" # line 832 "lib/gherkin/lexer/ro.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/ro.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/ro.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/ro.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/ro.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/ro.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/ro.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/ro.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/ro.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/ro.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/ro.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/ro.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/ro.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/ro.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/ro.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/ro.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/ro.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/ro.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/ro.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/ro.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/ro.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/ro.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/ro.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/ro.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/ro.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1076 "lib/gherkin/lexer/ro.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/ro.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1115 "lib/gherkin/lexer/ro.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/ro.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/no.rb0000644000004100000410000011645212244512574017551 0ustar www-datawww-data # line 1 "ragel/i18n/no.rb.rl" require 'gherkin/native' module Gherkin module Lexer class No #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/no.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/no.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 317, 319, 321, 323, 325, 327, 329, 331, 334, 336, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 482, 484, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 503, 505, 507, 509, 511, 513, 515, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 530, 531, 532, 533, 534, 535, 536, 537, 539, 540, 541, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 670, 672, 674, 676, 678, 680, 682, 684, 687, 689, 691, 692, 693, 697, 703, 706, 708, 714, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 769, 771, 773, 775, 777, 779, 781, 783 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 115, 116, 114, 97, 107, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 71, 77, 78, 79, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 97, 107, 103, 114, 117, 110, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 116, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 103, 107, 101, 110, 115, 107, 97, 112, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 69, 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, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 103, 107, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 115, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 114, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 115, 101, 109, 112, 108, 101, 114, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 105, 116, 116, 101, 110, -61, -91, 114, 103, -61, 99, -91, 101, 110, 97, 114, 105, 111, 58, 109, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 116, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 97, 108, 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, 71, 77, 78, 79, 83, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 10, 105, 10, 116, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 2, 4, 3, 2, 4, 16, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 287, 290, 293, 296, 299, 302, 305, 308, 311, 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, 435, 438, 441, 444, 447, 450, 453, 456, 460, 463, 466, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 680, 683, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 713, 716, 719, 722, 725, 728, 731, 734, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 758, 760, 762, 764, 766, 768, 770, 772, 775, 777, 779, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 964, 967, 970, 973, 976, 979, 982, 985, 989, 992, 995, 997, 999, 1003, 1009, 1013, 1016, 1022, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 88, 87, 90, 89, 90, 91, 92, 93, 94, 92, 95, 96, 97, 98, 99, 100, 91, 89, 90, 101, 89, 90, 102, 89, 90, 103, 89, 90, 104, 89, 90, 105, 89, 90, 106, 89, 90, 107, 89, 90, 108, 89, 90, 109, 89, 90, 110, 89, 90, 111, 89, 90, 112, 89, 90, 113, 89, 90, 114, 89, 90, 115, 89, 117, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 116, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 141, 140, 143, 142, 143, 144, 145, 146, 147, 145, 148, 149, 150, 151, 152, 153, 154, 144, 142, 143, 155, 142, 143, 156, 142, 143, 157, 142, 143, 158, 142, 143, 159, 142, 143, 160, 142, 143, 161, 142, 143, 162, 142, 143, 163, 142, 143, 164, 142, 143, 165, 142, 143, 166, 142, 143, 167, 142, 143, 168, 142, 143, 169, 142, 143, 170, 142, 143, 171, 142, 143, 172, 142, 143, 173, 142, 143, 174, 142, 143, 175, 142, 143, 176, 142, 143, 177, 142, 143, 178, 142, 143, 179, 142, 143, 180, 142, 143, 181, 142, 143, 182, 142, 143, 183, 142, 143, 184, 142, 143, 185, 142, 143, 169, 142, 143, 186, 142, 143, 187, 142, 143, 188, 142, 143, 189, 142, 143, 190, 142, 143, 191, 142, 143, 185, 142, 143, 192, 142, 143, 193, 142, 143, 194, 142, 143, 195, 142, 143, 194, 142, 196, 143, 142, 197, 143, 142, 143, 194, 142, 143, 194, 142, 198, 143, 199, 142, 194, 143, 142, 143, 200, 142, 143, 201, 142, 143, 202, 142, 143, 203, 142, 143, 204, 142, 143, 205, 142, 143, 169, 206, 142, 143, 207, 142, 143, 185, 142, 208, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 218, 217, 220, 219, 220, 221, 222, 223, 222, 224, 225, 226, 227, 221, 219, 220, 228, 219, 220, 229, 219, 220, 230, 219, 220, 231, 219, 220, 232, 219, 220, 233, 219, 220, 234, 219, 220, 235, 219, 220, 236, 219, 220, 237, 219, 220, 238, 219, 220, 239, 219, 220, 240, 219, 220, 241, 219, 220, 242, 219, 220, 243, 219, 220, 244, 219, 220, 245, 219, 220, 246, 219, 220, 247, 219, 220, 248, 219, 220, 249, 219, 220, 250, 219, 220, 251, 219, 220, 252, 219, 220, 253, 219, 220, 254, 219, 220, 255, 219, 220, 256, 219, 220, 257, 219, 220, 258, 219, 220, 259, 219, 220, 260, 219, 220, 261, 219, 220, 262, 219, 220, 263, 219, 220, 264, 219, 220, 257, 219, 220, 265, 266, 219, 220, 267, 219, 220, 268, 219, 220, 269, 219, 220, 270, 219, 220, 271, 219, 220, 257, 219, 220, 272, 219, 220, 273, 219, 220, 274, 219, 220, 275, 219, 220, 276, 219, 220, 277, 219, 220, 257, 219, 220, 278, 219, 220, 279, 219, 220, 280, 219, 220, 281, 219, 220, 282, 219, 220, 283, 219, 220, 284, 219, 220, 258, 285, 219, 220, 286, 219, 220, 257, 219, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 296, 295, 298, 297, 298, 299, 300, 301, 300, 299, 297, 298, 302, 297, 298, 303, 297, 298, 304, 297, 298, 305, 297, 298, 306, 297, 298, 307, 297, 298, 308, 297, 298, 309, 297, 310, 0, 311, 0, 312, 0, 313, 0, 312, 0, 314, 0, 315, 0, 312, 0, 312, 0, 316, 317, 0, 312, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 325, 0, 327, 326, 329, 328, 329, 330, 331, 332, 333, 331, 334, 335, 336, 337, 338, 339, 340, 341, 330, 328, 329, 342, 328, 329, 343, 328, 329, 344, 328, 329, 345, 328, 329, 346, 328, 329, 347, 328, 329, 348, 328, 329, 349, 328, 329, 350, 328, 329, 351, 328, 329, 352, 328, 329, 353, 328, 329, 354, 328, 329, 355, 328, 329, 356, 328, 329, 357, 328, 329, 358, 328, 329, 359, 328, 329, 360, 328, 329, 361, 328, 329, 362, 328, 329, 363, 328, 329, 364, 328, 329, 365, 328, 329, 366, 328, 329, 367, 328, 329, 368, 328, 329, 369, 328, 329, 370, 328, 329, 371, 328, 329, 372, 328, 329, 356, 328, 329, 373, 328, 329, 374, 328, 329, 375, 328, 329, 376, 328, 329, 377, 328, 329, 378, 328, 329, 372, 328, 329, 379, 328, 329, 380, 328, 329, 381, 328, 329, 382, 328, 329, 383, 328, 329, 384, 328, 329, 372, 328, 329, 385, 328, 329, 386, 328, 329, 387, 328, 329, 388, 328, 329, 387, 328, 389, 329, 328, 390, 329, 328, 329, 387, 328, 329, 387, 328, 391, 329, 392, 328, 387, 329, 328, 329, 393, 328, 329, 394, 328, 329, 395, 328, 329, 396, 328, 329, 397, 328, 329, 398, 328, 329, 356, 399, 328, 329, 400, 328, 329, 372, 328, 401, 0, 85, 0, 402, 403, 402, 0, 406, 405, 407, 408, 405, 404, 0, 410, 411, 409, 0, 410, 409, 406, 412, 410, 411, 412, 409, 406, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 413, 0, 90, 428, 89, 90, 429, 89, 90, 430, 89, 90, 431, 89, 90, 432, 89, 90, 433, 89, 90, 434, 89, 90, 115, 89, 90, 435, 89, 90, 436, 89, 90, 437, 89, 90, 438, 89, 90, 437, 89, 439, 90, 89, 440, 90, 89, 90, 437, 89, 90, 437, 89, 441, 90, 442, 89, 437, 90, 89, 90, 443, 89, 90, 444, 89, 90, 445, 89, 90, 446, 89, 90, 447, 89, 90, 434, 89, 448, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 355, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 55, 56, 56, 4, 57, 71, 330, 338, 341, 343, 346, 347, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 4, 72, 4, 4, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 82, 83, 83, 4, 84, 98, 99, 116, 123, 126, 128, 131, 132, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 4, 72, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 117, 118, 119, 120, 121, 122, 124, 125, 98, 127, 129, 130, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 216, 145, 146, 147, 148, 149, 150, 151, 152, 153, 152, 153, 153, 4, 154, 168, 185, 192, 206, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 4, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 72, 186, 187, 188, 189, 190, 191, 193, 199, 194, 195, 196, 197, 198, 200, 201, 202, 203, 204, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 225, 226, 226, 4, 227, 228, 229, 230, 231, 232, 233, 234, 72, 236, 237, 31, 239, 241, 242, 245, 246, 247, 248, 249, 250, 251, 252, 253, 322, 254, 255, 254, 255, 255, 4, 256, 270, 271, 288, 295, 302, 305, 307, 310, 311, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 4, 72, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 289, 290, 291, 292, 293, 294, 296, 297, 298, 299, 300, 301, 303, 304, 270, 306, 308, 309, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 323, 324, 325, 326, 328, 329, 327, 325, 326, 327, 325, 328, 329, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 331, 332, 333, 334, 335, 336, 337, 339, 340, 71, 342, 344, 345, 348, 349, 350, 351, 352, 353, 354, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 355; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/no.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 719 "lib/gherkin/lexer/no.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/no.rb.rl" # line 728 "lib/gherkin/lexer/no.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/no.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/no.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/no.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/no.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/no.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/no.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/no.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/no.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/no.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/no.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/no.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/no.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/no.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/no.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/no.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/no.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/no.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/no.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/no.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/no.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/no.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/no.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/no.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/no.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 972 "lib/gherkin/lexer/no.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/no.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1011 "lib/gherkin/lexer/no.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/no.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/is.rb0000644000004100000410000012373112244512574017546 0ustar www-datawww-data # line 1 "ragel/i18n/is.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Is #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/is.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/is.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 19, 21, 22, 23, 25, 27, 44, 45, 46, 48, 50, 55, 60, 65, 70, 74, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 125, 126, 127, 141, 143, 146, 148, 150, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 192, 194, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 333, 334, 335, 336, 337, 338, 339, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 539, 540, 541, 542, 543, 544, 545, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 575, 577, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 665, 666, 667, 668, 669, 673, 679, 682, 684, 690, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 855, 856, 857, 858, 859, 860 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, -98, -61, 101, -95, 32, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 116, 98, 117, 114, -61, -80, 97, 114, -61, -95, 115, 58, 105, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 66, 69, 76, 79, 9, 13, -98, 10, -61, 10, 101, -95, 10, 10, 32, -61, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, 97, 107, 103, 114, 117, 110, 110, 117, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 76, 79, 9, 13, -98, 10, -61, 10, 101, -95, 10, 10, 32, 10, 103, 10, 97, 10, 114, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 10, 102, 105, 110, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, -61, 10, -67, 10, 10, 115, 10, 105, 10, 110, 10, 103, 10, 32, 10, 65, 68, 10, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 97, 10, 114, -61, 10, -90, 10, 10, 109, 10, 97, 10, 103, -61, -90, 109, 105, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 105, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, 10, 58, 102, 105, 110, 103, 105, 110, 108, 101, 105, 107, 105, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 68, 69, 76, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 105, 10, 114, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 117, -61, 10, -90, 10, 10, 109, 10, 105, 10, 105, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, -61, 10, -67, 10, 10, 115, 10, 105, 10, 110, 10, 103, 10, 32, 10, 65, 68, 10, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 97, -61, 10, -90, 10, 10, 109, 10, 97, -61, -67, 115, 105, 110, 103, 32, 65, 68, 116, 98, 117, 114, -61, -80, 97, 114, -61, -95, 115, 97, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 79, 9, 13, -98, 10, -61, 10, 101, -95, 10, 10, 32, 10, 103, 10, 97, 10, 114, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 10, 102, 105, 110, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, 10, 103, -61, -90, 109, 97, 103, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, 10, 103, 10, 97, 10, 114, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 117, 10, 114, 10, 102, 105, 110, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, -61, 10, -67, 10, 10, 115, 10, 105, 10, 110, 10, 103, 10, 32, 10, 65, 68, 10, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 97, -61, 10, -90, 10, 10, 109, 10, 97, 10, 103, 114, 103, 97, 114, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 1, 2, 1, 1, 2, 2, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 12, 2, 3, 2, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 2, 2, 2, 2, 4, 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, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 15, 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, 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, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 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, 1, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 20, 23, 25, 27, 30, 33, 50, 52, 54, 57, 60, 65, 70, 75, 80, 84, 88, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 126, 133, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 163, 165, 167, 181, 184, 188, 191, 194, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 248, 251, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 353, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 458, 460, 462, 464, 466, 468, 470, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 765, 767, 769, 771, 773, 775, 777, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 824, 827, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 958, 960, 962, 964, 966, 970, 976, 980, 983, 989, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1227, 1229, 1231, 1233, 1235, 1237 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3, 0, 17, 0, 18, 19, 0, 20, 0, 21, 0, 23, 24, 22, 26, 27, 25, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 3, 0, 28, 0, 29, 0, 31, 32, 30, 34, 35, 33, 38, 37, 39, 37, 36, 42, 41, 43, 41, 40, 42, 41, 44, 41, 40, 42, 41, 45, 41, 40, 47, 46, 46, 0, 4, 48, 48, 0, 50, 51, 49, 4, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 66, 67, 68, 67, 67, 70, 69, 66, 4, 71, 9, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 84, 0, 86, 85, 88, 87, 89, 88, 90, 91, 92, 93, 91, 94, 95, 96, 97, 98, 90, 87, 99, 88, 87, 100, 88, 101, 87, 102, 88, 87, 88, 103, 87, 104, 106, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 105, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 130, 129, 132, 131, 133, 132, 134, 135, 136, 137, 135, 138, 139, 140, 141, 134, 131, 142, 132, 131, 143, 132, 144, 131, 145, 132, 131, 132, 146, 131, 132, 147, 131, 132, 148, 131, 132, 145, 131, 132, 149, 131, 132, 150, 131, 132, 151, 131, 132, 152, 131, 132, 153, 131, 132, 154, 131, 132, 155, 131, 132, 156, 131, 132, 157, 131, 132, 158, 131, 132, 159, 131, 132, 160, 131, 132, 161, 131, 132, 162, 131, 132, 163, 131, 132, 164, 131, 132, 165, 131, 132, 166, 131, 167, 132, 131, 168, 132, 131, 132, 169, 131, 132, 170, 131, 171, 132, 131, 172, 132, 131, 132, 173, 131, 132, 146, 131, 132, 145, 174, 145, 131, 132, 175, 131, 132, 176, 131, 132, 177, 131, 132, 178, 131, 132, 179, 131, 132, 180, 131, 132, 181, 131, 132, 173, 131, 182, 132, 131, 183, 132, 131, 132, 184, 131, 132, 185, 131, 132, 186, 131, 132, 187, 131, 132, 188, 131, 132, 189, 190, 131, 132, 191, 131, 132, 192, 131, 132, 193, 131, 132, 194, 131, 195, 132, 131, 196, 132, 131, 132, 197, 131, 132, 198, 131, 199, 132, 131, 200, 132, 131, 132, 201, 131, 132, 202, 131, 132, 173, 131, 203, 132, 131, 204, 132, 131, 132, 205, 131, 132, 173, 131, 132, 145, 131, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 212, 211, 214, 213, 214, 215, 216, 217, 216, 215, 213, 214, 218, 213, 214, 219, 213, 214, 220, 213, 214, 221, 213, 214, 222, 213, 214, 223, 213, 214, 224, 213, 214, 225, 213, 214, 226, 213, 214, 227, 213, 20, 228, 20, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 239, 238, 241, 240, 241, 242, 243, 244, 243, 245, 246, 247, 248, 249, 242, 240, 241, 250, 240, 241, 251, 240, 241, 252, 240, 241, 253, 240, 241, 254, 240, 241, 255, 240, 241, 256, 240, 241, 257, 240, 241, 258, 240, 241, 259, 240, 241, 260, 240, 241, 261, 240, 241, 262, 240, 241, 263, 240, 241, 264, 240, 241, 265, 240, 241, 266, 240, 241, 267, 240, 268, 241, 240, 269, 241, 240, 241, 270, 240, 241, 271, 240, 272, 241, 240, 273, 241, 240, 241, 274, 240, 241, 275, 276, 240, 241, 277, 240, 241, 275, 240, 241, 278, 240, 241, 279, 240, 241, 280, 240, 241, 281, 240, 241, 282, 240, 241, 283, 240, 241, 284, 240, 241, 276, 240, 285, 241, 240, 286, 241, 240, 241, 287, 240, 241, 277, 240, 241, 288, 240, 241, 289, 240, 241, 290, 240, 241, 291, 240, 241, 292, 240, 241, 293, 240, 241, 294, 240, 241, 287, 240, 295, 241, 240, 296, 241, 240, 241, 297, 240, 241, 298, 240, 241, 299, 240, 241, 300, 240, 241, 301, 240, 241, 302, 303, 240, 241, 304, 240, 241, 305, 240, 241, 306, 240, 241, 307, 240, 308, 241, 240, 309, 241, 240, 241, 310, 240, 241, 311, 240, 312, 241, 240, 313, 241, 240, 241, 314, 240, 241, 276, 240, 315, 241, 240, 316, 241, 240, 241, 317, 240, 241, 277, 240, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 342, 341, 344, 343, 345, 344, 346, 347, 348, 349, 347, 350, 351, 352, 346, 343, 353, 344, 343, 354, 344, 355, 343, 356, 344, 343, 344, 357, 343, 344, 358, 343, 344, 359, 343, 344, 356, 343, 344, 360, 343, 344, 361, 343, 344, 362, 343, 344, 363, 343, 344, 364, 343, 344, 365, 343, 344, 366, 343, 344, 367, 343, 344, 368, 343, 344, 369, 343, 344, 370, 343, 344, 371, 343, 344, 372, 343, 344, 373, 343, 344, 374, 343, 344, 375, 343, 344, 376, 343, 344, 377, 343, 378, 344, 343, 379, 344, 343, 344, 380, 343, 344, 381, 343, 382, 344, 343, 383, 344, 343, 344, 384, 343, 344, 357, 343, 344, 356, 385, 356, 343, 344, 386, 343, 344, 387, 343, 344, 388, 343, 344, 389, 343, 344, 390, 343, 344, 391, 343, 344, 392, 343, 344, 384, 343, 344, 356, 343, 393, 0, 394, 0, 395, 0, 339, 0, 20, 0, 396, 397, 396, 0, 400, 399, 401, 402, 399, 398, 0, 404, 405, 403, 0, 404, 403, 400, 406, 404, 405, 406, 403, 407, 400, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 408, 0, 88, 421, 87, 88, 422, 87, 88, 102, 87, 88, 423, 87, 88, 424, 87, 88, 425, 87, 88, 426, 87, 88, 427, 87, 88, 428, 87, 88, 429, 87, 88, 430, 87, 88, 431, 87, 88, 432, 87, 88, 433, 87, 88, 434, 87, 88, 435, 87, 88, 436, 87, 88, 437, 87, 88, 438, 87, 88, 439, 87, 88, 440, 87, 441, 88, 87, 442, 88, 87, 88, 443, 87, 88, 444, 87, 445, 88, 87, 446, 88, 87, 88, 447, 87, 88, 103, 87, 88, 448, 87, 88, 449, 87, 88, 450, 87, 88, 451, 87, 88, 452, 87, 88, 453, 87, 88, 454, 87, 88, 455, 87, 88, 447, 87, 88, 102, 456, 102, 87, 88, 457, 87, 88, 458, 87, 88, 459, 87, 88, 460, 87, 88, 461, 87, 88, 462, 87, 88, 463, 87, 88, 447, 87, 464, 88, 87, 465, 88, 87, 88, 466, 87, 88, 467, 87, 88, 468, 87, 88, 469, 87, 88, 470, 87, 88, 471, 472, 87, 88, 473, 87, 88, 474, 87, 88, 475, 87, 88, 476, 87, 477, 88, 87, 478, 88, 87, 88, 479, 87, 88, 480, 87, 481, 88, 87, 482, 88, 87, 88, 483, 87, 88, 455, 87, 484, 88, 87, 485, 88, 87, 88, 486, 87, 88, 447, 87, 88, 102, 87, 209, 0, 487, 0, 488, 0, 20, 0, 489, 0, 3, 0, 490, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 397, 8, 8, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 3, 4, 394, 5, 6, 7, 8, 20, 7, 8, 20, 10, 11, 12, 13, 12, 12, 13, 12, 14, 14, 14, 15, 14, 14, 14, 15, 16, 17, 18, 8, 18, 19, 8, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 399, 36, 37, 8, 36, 35, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 393, 51, 52, 51, 52, 53, 52, 8, 324, 56, 338, 350, 359, 368, 392, 54, 55, 321, 56, 57, 2, 8, 8, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 69, 70, 71, 70, 8, 78, 74, 92, 104, 113, 138, 72, 73, 75, 74, 57, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 8, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 134, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 140, 141, 142, 143, 144, 145, 146, 145, 146, 146, 8, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 57, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 168, 169, 169, 8, 170, 184, 198, 206, 210, 218, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 8, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 57, 196, 197, 199, 200, 201, 202, 203, 204, 205, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 238, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 310, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 265, 266, 267, 266, 8, 274, 270, 288, 300, 309, 268, 269, 271, 270, 57, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 8, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 301, 302, 303, 304, 305, 306, 307, 308, 311, 312, 313, 315, 316, 317, 319, 320, 318, 316, 317, 318, 316, 319, 2, 320, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 322, 323, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 8, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 358, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 388, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 389, 390, 391, 395, 396, 398, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 17, 63, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 78, 33, 84, 84, 84, 84, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 399; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/is.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 779 "lib/gherkin/lexer/is.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/is.rb.rl" # line 788 "lib/gherkin/lexer/is.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/is.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/is.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/is.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/is.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/is.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/is.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/is.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/is.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/is.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/is.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/is.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/is.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/is.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/is.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/is.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/is.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/is.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/is.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/is.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/is.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/is.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/is.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/is.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/is.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1032 "lib/gherkin/lexer/is.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/is.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1071 "lib/gherkin/lexer/is.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/is.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/zh_tw.rb0000644000004100000410000011623612244512574020270 0ustar www-datawww-data # line 1 "ragel/i18n/zh_tw.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Zh_tw #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/zh_tw.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/zh_tw.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 16, 19, 20, 21, 22, 23, 25, 27, 42, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 83, 86, 88, 90, 92, 94, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 134, 137, 139, 141, 143, 145, 147, 149, 151, 153, 158, 160, 163, 166, 168, 170, 172, 174, 177, 179, 181, 183, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 267, 268, 269, 270, 271, 272, 273, 275, 277, 282, 287, 292, 297, 301, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 328, 335, 340, 344, 350, 353, 355, 361, 376, 378, 380, 382, 384, 389, 391, 394, 397, 399, 401, 403, 405, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 485, 486, 499, 502, 504, 506, 508, 510, 512, 514, 516, 518, 523, 525, 528, 531, 533, 535, 537, 539, 542, 544, 546, 548, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 641, 642, 643, 644, 645, 646, 656, 658, 660, 662, 664, 666, 668, 671, 674, 676, 678, 680, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 770, 772, 774, 776, 778, 780, 782, 783, 784 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -28, -27, -25, -24, -23, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -72, -67, -66, -90, -28, -72, -108, 10, 13, 10, 13, -28, -27, -25, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -118, -112, -96, -121, -27, -24, -90, -82, -126, -102, -88, -83, -121, -97, -26, -100, -84, -27, 58, -92, -89, -25, -74, -79, 58, 10, 10, -28, -27, -25, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -72, -67, 10, -90, 10, -28, 10, -72, 10, -108, 10, -28, -27, -25, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -107, -74, -128, -125, -116, -116, -26, -103, -81, 58, 10, 10, -28, -27, -25, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -72, -67, 10, -90, 10, -28, 10, -72, 10, -108, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -118, -112, -96, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -88, 10, -83, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -74, 10, -79, 10, 10, 58, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -103, 10, -76, 10, -26, 10, -103, 10, -81, 10, -107, 10, -74, 10, -128, 10, -116, 10, -126, 10, -93, 10, -23, 10, -70, 10, -68, 10, 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, -126, -93, -23, -70, -68, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -28, -27, -25, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -122, 10, -26, 10, -104, 10, -81, 10, -127, -118, -112, -96, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -88, 10, -83, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, 10, 58, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -103, 10, -76, 10, -26, 10, -103, 10, -81, 10, -107, 10, -74, 10, -128, 10, -116, 10, -126, 10, -93, 10, -23, 10, -70, 10, -68, 10, 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, 10, -28, -27, -25, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -72, -67, 10, -90, 10, -28, 10, -72, 10, -108, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -118, -112, -96, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -88, 10, -83, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -74, 10, -79, 10, 10, 58, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -103, 10, -76, 10, -26, 10, -103, 10, -81, 10, -107, 10, -74, 10, -128, -125, 10, -116, 10, -116, 10, -26, 10, -103, 10, -81, 10, -126, 10, -93, 10, -23, 10, -70, 10, -68, 10, 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, -24, -125, -67, 58, 10, 10, -28, -27, -24, 10, 32, 35, 37, 64, 9, 13, -66, 10, -117, 10, -27, 10, -83, 10, -112, 10, 10, 58, -118, -96, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -74, 10, -79, 10, -24, 10, -125, 10, -67, 10, -76, 10, -26, 10, -103, 10, -81, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -116, -26, -103, -76, -26, -103, -81, -122, -26, -104, -81, -117, -27, -83, -112, 58, 10, 10, -27, 10, 32, 35, 124, 9, 13, -118, 10, -97, 10, -24, 10, -125, 10, -67, 10, 10, 58, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 14, 3, 1, 1, 1, 1, 2, 2, 13, 4, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 3, 2, 2, 2, 2, 13, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 3, 3, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 13, 2, 2, 2, 2, 5, 2, 3, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 11, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 3, 3, 2, 2, 2, 2, 3, 2, 2, 2, 3, 2, 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, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 2, 2, 2, 3, 3, 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, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 16, 20, 22, 24, 26, 28, 31, 34, 49, 54, 56, 59, 62, 64, 66, 68, 70, 73, 75, 77, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 111, 115, 118, 121, 124, 127, 142, 144, 146, 149, 151, 153, 155, 157, 159, 161, 163, 165, 178, 182, 185, 188, 191, 194, 197, 200, 203, 206, 212, 215, 219, 223, 226, 229, 232, 235, 239, 242, 245, 248, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 374, 376, 378, 380, 382, 384, 386, 389, 392, 397, 402, 407, 412, 416, 420, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 460, 467, 472, 476, 482, 486, 489, 495, 510, 513, 516, 519, 522, 528, 531, 535, 539, 542, 545, 548, 551, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 671, 673, 686, 690, 693, 696, 699, 702, 705, 708, 711, 714, 720, 723, 727, 731, 734, 737, 740, 743, 747, 750, 753, 756, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 895, 897, 899, 901, 903, 905, 915, 918, 921, 924, 927, 930, 933, 937, 941, 944, 947, 950, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1110, 1112 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 7, 0, 15, 16, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 23, 24, 22, 26, 27, 25, 1, 2, 3, 4, 5, 8, 7, 9, 10, 11, 12, 13, 14, 7, 0, 28, 29, 30, 31, 0, 32, 0, 33, 34, 0, 35, 36, 0, 21, 0, 21, 0, 37, 0, 21, 0, 38, 39, 0, 40, 0, 41, 0, 42, 0, 43, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 52, 51, 54, 53, 55, 56, 57, 58, 59, 54, 60, 61, 62, 63, 61, 60, 53, 64, 65, 54, 53, 66, 54, 53, 67, 54, 53, 68, 54, 53, 69, 54, 53, 70, 71, 72, 73, 74, 76, 75, 77, 78, 79, 80, 81, 82, 75, 0, 83, 0, 21, 0, 84, 85, 0, 18, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 92, 91, 94, 93, 95, 96, 97, 98, 99, 94, 100, 101, 102, 103, 101, 100, 93, 104, 105, 94, 93, 106, 94, 93, 107, 94, 93, 108, 94, 93, 109, 94, 93, 110, 94, 93, 111, 94, 93, 112, 94, 93, 109, 94, 93, 113, 114, 115, 116, 94, 93, 117, 94, 93, 118, 119, 94, 93, 120, 121, 94, 93, 109, 94, 93, 109, 94, 93, 122, 94, 93, 109, 94, 93, 123, 124, 94, 93, 125, 94, 93, 126, 94, 93, 127, 94, 93, 128, 94, 109, 93, 129, 94, 93, 130, 94, 93, 131, 94, 93, 132, 94, 93, 133, 94, 93, 94, 109, 93, 134, 94, 93, 135, 94, 93, 133, 94, 93, 136, 94, 93, 137, 94, 93, 120, 94, 93, 138, 94, 93, 139, 94, 93, 140, 94, 93, 127, 94, 93, 141, 94, 93, 109, 94, 93, 142, 94, 93, 106, 94, 93, 143, 94, 93, 144, 94, 93, 145, 94, 93, 146, 94, 93, 109, 94, 93, 94, 147, 93, 94, 148, 93, 94, 149, 93, 94, 150, 93, 94, 151, 93, 94, 152, 93, 94, 153, 93, 94, 154, 93, 94, 155, 93, 94, 156, 93, 94, 157, 93, 94, 158, 93, 94, 159, 93, 94, 160, 93, 94, 109, 93, 161, 0, 162, 0, 163, 0, 164, 0, 21, 0, 165, 0, 166, 0, 168, 169, 167, 171, 172, 170, 175, 174, 176, 174, 173, 179, 178, 180, 178, 177, 179, 178, 181, 178, 177, 179, 178, 182, 178, 177, 184, 183, 183, 0, 8, 185, 185, 0, 187, 188, 186, 8, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 21, 0, 0, 0, 0, 0, 203, 204, 205, 204, 204, 207, 206, 203, 8, 208, 13, 208, 0, 209, 210, 209, 0, 213, 212, 214, 215, 212, 211, 0, 217, 218, 216, 0, 217, 216, 213, 219, 217, 218, 219, 216, 220, 221, 222, 223, 224, 213, 225, 226, 227, 228, 229, 230, 231, 225, 0, 232, 54, 53, 233, 54, 53, 234, 54, 53, 69, 54, 53, 235, 236, 237, 238, 54, 53, 239, 54, 53, 240, 241, 54, 53, 242, 243, 54, 53, 69, 54, 53, 69, 54, 53, 244, 54, 53, 69, 54, 53, 245, 246, 54, 53, 247, 54, 53, 248, 54, 53, 249, 54, 53, 54, 69, 53, 250, 54, 53, 251, 54, 53, 249, 54, 53, 252, 54, 53, 253, 54, 53, 242, 54, 53, 254, 54, 53, 255, 54, 53, 256, 54, 53, 249, 54, 53, 257, 54, 53, 69, 54, 53, 258, 54, 53, 66, 54, 53, 259, 54, 53, 260, 54, 53, 261, 54, 53, 262, 54, 53, 69, 54, 53, 54, 263, 53, 54, 264, 53, 54, 265, 53, 54, 266, 53, 54, 267, 53, 54, 268, 53, 54, 269, 53, 54, 270, 53, 54, 271, 53, 54, 272, 53, 54, 273, 53, 54, 274, 53, 54, 275, 53, 54, 276, 53, 54, 69, 53, 278, 277, 280, 279, 281, 282, 283, 284, 285, 280, 286, 287, 288, 289, 287, 286, 279, 290, 291, 280, 279, 292, 280, 279, 293, 280, 279, 294, 280, 279, 295, 280, 279, 296, 280, 279, 297, 280, 279, 298, 280, 279, 295, 280, 279, 299, 300, 301, 302, 280, 279, 303, 280, 279, 304, 305, 280, 279, 306, 307, 280, 279, 295, 280, 279, 295, 280, 279, 308, 280, 279, 295, 280, 279, 309, 310, 280, 279, 311, 280, 279, 312, 280, 279, 313, 280, 279, 314, 280, 295, 279, 315, 280, 279, 316, 280, 279, 317, 280, 279, 318, 280, 279, 319, 280, 279, 280, 295, 279, 320, 280, 279, 321, 280, 279, 319, 280, 279, 322, 280, 279, 323, 280, 279, 306, 280, 279, 324, 280, 279, 325, 280, 279, 326, 280, 279, 313, 280, 279, 327, 280, 279, 295, 280, 279, 328, 329, 280, 279, 292, 280, 279, 330, 280, 279, 331, 280, 279, 332, 280, 279, 319, 280, 279, 333, 280, 279, 334, 280, 279, 335, 280, 279, 336, 280, 279, 295, 280, 279, 280, 337, 279, 280, 338, 279, 280, 339, 279, 280, 340, 279, 280, 341, 279, 280, 342, 279, 280, 343, 279, 280, 344, 279, 280, 345, 279, 280, 346, 279, 280, 347, 279, 280, 348, 279, 280, 349, 279, 280, 350, 279, 280, 295, 279, 351, 0, 352, 0, 353, 0, 354, 0, 356, 355, 358, 357, 359, 360, 361, 358, 362, 363, 364, 363, 362, 357, 365, 358, 357, 366, 358, 357, 367, 358, 357, 368, 358, 357, 369, 358, 357, 358, 370, 357, 371, 372, 358, 357, 373, 374, 358, 357, 375, 358, 357, 376, 358, 357, 377, 358, 357, 378, 358, 370, 357, 379, 358, 357, 380, 358, 357, 381, 358, 357, 382, 358, 357, 369, 358, 357, 383, 358, 357, 384, 358, 357, 369, 358, 357, 385, 358, 357, 386, 358, 357, 387, 358, 357, 377, 358, 357, 388, 358, 357, 389, 358, 357, 390, 358, 357, 391, 358, 357, 369, 358, 357, 358, 392, 357, 358, 393, 357, 358, 394, 357, 358, 395, 357, 358, 396, 357, 358, 397, 357, 358, 398, 357, 358, 399, 357, 358, 400, 357, 358, 401, 357, 358, 402, 357, 358, 403, 357, 358, 404, 357, 358, 405, 357, 406, 0, 407, 0, 35, 0, 408, 0, 409, 0, 410, 0, 42, 0, 411, 0, 412, 0, 413, 0, 21, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 420, 419, 422, 421, 423, 422, 424, 425, 425, 424, 421, 426, 422, 421, 427, 422, 421, 428, 422, 421, 429, 422, 421, 430, 422, 421, 422, 431, 421, 432, 0, 7, 0, 433, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 10, 38, 40, 112, 348, 9, 9, 117, 127, 129, 143, 144, 147, 3, 330, 334, 4, 5, 6, 7, 8, 9, 128, 8, 9, 128, 11, 18, 323, 326, 12, 13, 16, 14, 15, 17, 19, 273, 20, 21, 22, 23, 204, 24, 25, 26, 27, 28, 29, 30, 31, 30, 31, 32, 157, 180, 182, 184, 31, 9, 189, 203, 33, 153, 34, 35, 36, 37, 2, 10, 38, 40, 112, 9, 9, 117, 127, 129, 143, 144, 147, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 48, 49, 50, 59, 88, 90, 92, 49, 9, 97, 111, 51, 55, 52, 53, 54, 37, 56, 57, 58, 60, 67, 81, 84, 61, 62, 65, 63, 64, 66, 68, 78, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 82, 83, 85, 86, 87, 89, 91, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 9, 113, 114, 115, 116, 118, 119, 120, 121, 120, 120, 121, 120, 122, 122, 122, 123, 122, 122, 122, 123, 124, 125, 126, 9, 126, 127, 9, 128, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 350, 145, 146, 9, 145, 144, 146, 147, 148, 149, 151, 152, 150, 148, 149, 150, 148, 151, 2, 10, 38, 40, 112, 152, 117, 127, 129, 143, 144, 147, 154, 155, 156, 158, 165, 173, 176, 159, 160, 163, 161, 162, 164, 166, 170, 167, 168, 169, 171, 172, 174, 175, 177, 178, 179, 181, 183, 185, 186, 187, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 9, 205, 206, 205, 206, 207, 216, 245, 247, 253, 206, 9, 258, 272, 208, 212, 209, 210, 211, 37, 213, 214, 215, 217, 224, 238, 241, 218, 219, 222, 220, 221, 223, 225, 235, 226, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 239, 240, 242, 243, 244, 246, 248, 249, 250, 251, 252, 254, 255, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 9, 274, 275, 276, 277, 278, 279, 278, 279, 280, 286, 304, 279, 9, 309, 281, 282, 283, 284, 285, 37, 287, 300, 288, 297, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 301, 302, 303, 305, 306, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 9, 324, 325, 327, 328, 329, 331, 332, 333, 335, 336, 337, 338, 339, 340, 341, 340, 341, 342, 341, 9, 343, 344, 345, 346, 347, 37, 349, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 29, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 19, 63, 63, 63, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 15, 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, 15, 0, 0, 0, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 96, 96, 96, 0, 93, 90, 41, 96, 90, 99, 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, 19, 57, 144, 0, 54, 84, 84, 84, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 17, 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, 17, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 0, 69, 33, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 21, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 350; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/zh_tw.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 711 "lib/gherkin/lexer/zh_tw.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/zh_tw.rb.rl" # line 720 "lib/gherkin/lexer/zh_tw.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/zh_tw.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/zh_tw.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/zh_tw.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/zh_tw.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/zh_tw.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/zh_tw.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/zh_tw.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/zh_tw.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/zh_tw.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/zh_tw.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/zh_tw.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/zh_tw.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/zh_tw.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/zh_tw.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/zh_tw.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/zh_tw.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/zh_tw.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/zh_tw.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/zh_tw.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/zh_tw.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/zh_tw.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/zh_tw.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/zh_tw.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/zh_tw.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 964 "lib/gherkin/lexer/zh_tw.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/zh_tw.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1003 "lib/gherkin/lexer/zh_tw.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/zh_tw.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/en_old.rb0000644000004100000410000011475412244512574020400 0ustar www-datawww-data # line 1 "ragel/i18n/en_old.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En_old #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en_old.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en_old.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 21, 22, 23, 24, 25, 40, 43, 46, 48, 65, 69, 71, 72, 75, 77, 94, 95, 96, 98, 100, 105, 110, 115, 120, 124, 128, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 153, 160, 165, 167, 168, 170, 171, 172, 173, 174, 175, 186, 188, 190, 192, 209, 210, 211, 213, 214, 216, 218, 219, 220, 221, 222, 229, 231, 234, 236, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 274, 277, 280, 282, 299, 303, 305, 306, 309, 312, 315, 318, 319, 320, 321, 322, 323, 325, 326, 329, 332, 336, 342, 345, 347, 353, 370, 372, 374, 376, 379, 381, 398, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 458, 460, 478, 479, 480, 481, 482, 497, 501, 503, 505, 508, 510, 527, 531, 532, 533, 535, 537, 539, 542, 544, 561, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 596, 598, 601, 603, 605, 607, 609, 611, 613, 615, 618, 620, 622, 625, 627, 629, 631, 633, 635, 637, 639, 641, 644, 646, 664, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 700, 702, 704, 706, 709, 711, 714, 717, 719, 721, 723, 726, 728, 730, 733, 735, 737, 739, 741, 743, 745, 747, 748, 751, 752, 753, 755, 757, 759, 762, 764, 781, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 820, 822, 824, 826, 828, 830, 832, 834, 836, 839, 841, 843, 846, 848, 850, 852, 854, 856, 858, 860, 862, 865, 867, 885, 886, 887, 888 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -61, -17, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 9, 13, -112, -98, 10, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -80, 97, 117, 32, -61, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 99, 101, 119, -61, 97, -90, 116, 58, 10, 10, -61, 10, 32, 35, 37, 64, 65, 72, 83, 9, 13, -122, 10, 10, 114, 10, 58, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, 110, 100, 101, 119, 32, -61, 116, -80, -66, 101, 58, 10, 10, 10, 32, 35, 72, 124, 9, 13, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 58, 10, 101, 104, 97, 32, 58, 104, 119, -61, 97, -90, 114, 32, 115, 119, 97, 58, 10, 10, -61, 10, 32, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 9, 13, -112, -98, 10, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -80, 97, 117, 32, -61, 10, 13, -66, 10, 13, 10, 13, 101, 10, 13, 32, 114, 104, 101, 32, 104, 97, 117, 32, 10, 13, 116, 10, 13, 104, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, 10, 114, 10, 104, 10, 32, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -66, 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, 99, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 58, 10, 101, 10, 110, 10, 100, 10, 119, 10, 97, 10, 104, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 116, 124, 9, 13, 104, 101, 10, 10, -61, 10, 32, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 9, 13, -122, -112, -98, 10, 10, 114, 10, 58, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -80, 101, 32, 10, 114, 10, 104, 10, 32, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -66, 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, 99, 101, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 101, 10, 110, 10, 100, 10, 119, 10, 97, 10, 32, 58, 10, 104, 10, 119, -61, 10, 97, -90, 10, 10, 114, 10, 32, 10, 115, 10, 119, 10, 97, 10, 101, 10, 104, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 116, 124, 9, 13, 104, 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, 101, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 101, 10, 101, 119, 10, 32, -61, 10, 116, -80, -66, 10, 10, 101, 10, 104, 10, 97, 10, 32, 58, 10, 104, 10, 119, -61, 10, 97, -90, 10, 10, 114, 10, 32, 10, 115, 10, 119, 10, 97, 10, 101, 101, -80, 10, 13, 101, 32, 10, 114, 10, 104, 10, 32, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -66, 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, 99, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 58, 10, 101, 10, 110, 10, 100, 10, 119, 10, 97, 10, 32, 58, 10, 104, 10, 119, -61, 10, 97, -90, 10, 10, 114, 10, 32, 10, 115, 10, 119, 10, 97, 10, 101, 10, 104, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 116, 124, 9, 13, 104, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 3, 1, 1, 1, 1, 13, 3, 3, 2, 15, 4, 2, 1, 3, 2, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 5, 3, 2, 1, 2, 1, 1, 1, 1, 1, 9, 2, 2, 2, 15, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 5, 2, 3, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 3, 3, 2, 15, 4, 2, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 1, 3, 3, 2, 4, 3, 2, 4, 15, 2, 2, 2, 3, 2, 15, 4, 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, 3, 2, 16, 1, 1, 1, 1, 13, 4, 2, 2, 3, 2, 15, 4, 1, 1, 2, 2, 2, 3, 2, 15, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 16, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 2, 3, 3, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 1, 2, 2, 2, 3, 2, 15, 4, 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, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 16, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 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, 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, 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, 1, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 22, 24, 26, 28, 30, 45, 49, 53, 56, 73, 78, 81, 83, 87, 90, 107, 109, 111, 114, 117, 122, 127, 132, 137, 141, 145, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 183, 188, 195, 200, 203, 205, 208, 210, 212, 214, 216, 218, 229, 232, 235, 238, 255, 257, 259, 262, 264, 267, 270, 272, 274, 276, 278, 285, 288, 292, 295, 298, 301, 304, 306, 308, 311, 313, 315, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 351, 355, 359, 362, 379, 384, 387, 389, 393, 397, 401, 405, 407, 409, 411, 413, 415, 418, 420, 424, 428, 432, 438, 442, 445, 451, 468, 471, 474, 477, 481, 484, 501, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 589, 592, 610, 612, 614, 616, 618, 633, 638, 641, 644, 648, 651, 668, 673, 675, 677, 680, 683, 686, 690, 693, 710, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 761, 764, 768, 771, 774, 777, 780, 783, 786, 789, 793, 796, 799, 803, 806, 809, 812, 815, 818, 821, 824, 827, 831, 834, 852, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 906, 909, 912, 915, 919, 922, 926, 930, 933, 936, 939, 943, 946, 949, 953, 956, 959, 962, 965, 968, 971, 974, 976, 980, 982, 984, 987, 990, 993, 997, 1000, 1017, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1102, 1105, 1108, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1140, 1143, 1161, 1163, 1165, 1167 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 3, 0, 16, 17, 18, 0, 19, 0, 20, 0, 22, 21, 24, 23, 25, 24, 26, 27, 28, 29, 29, 27, 30, 31, 32, 33, 34, 26, 23, 35, 36, 24, 23, 24, 37, 38, 23, 24, 39, 23, 40, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 16, 17, 18, 54, 0, 55, 56, 0, 57, 0, 59, 60, 61, 58, 63, 64, 62, 1, 4, 3, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 3, 0, 65, 0, 66, 0, 68, 69, 67, 71, 72, 70, 75, 74, 76, 74, 73, 79, 78, 80, 78, 77, 79, 78, 81, 78, 77, 79, 78, 82, 78, 77, 84, 83, 83, 0, 4, 85, 85, 0, 87, 88, 86, 4, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 60, 61, 58, 0, 0, 0, 0, 104, 105, 106, 105, 105, 108, 107, 104, 4, 109, 9, 109, 0, 110, 16, 0, 111, 0, 112, 113, 0, 114, 0, 115, 0, 116, 0, 118, 117, 120, 119, 121, 120, 122, 123, 124, 123, 125, 126, 127, 122, 119, 128, 120, 119, 120, 129, 119, 120, 130, 119, 131, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 132, 0, 110, 0, 133, 134, 0, 135, 0, 136, 137, 0, 138, 138, 0, 139, 0, 140, 0, 142, 141, 144, 143, 144, 145, 146, 147, 146, 145, 143, 144, 148, 143, 149, 144, 150, 143, 151, 144, 143, 144, 152, 143, 144, 153, 143, 144, 151, 143, 138, 0, 154, 0, 155, 156, 0, 157, 0, 158, 0, 159, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 169, 168, 171, 170, 172, 171, 173, 174, 175, 176, 176, 174, 177, 178, 179, 180, 181, 173, 170, 182, 183, 171, 170, 171, 184, 185, 170, 171, 186, 170, 187, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 16, 17, 18, 188, 0, 189, 56, 0, 190, 0, 191, 60, 61, 58, 192, 63, 64, 62, 63, 64, 193, 62, 63, 64, 103, 62, 194, 0, 110, 0, 195, 0, 196, 0, 197, 0, 198, 56, 0, 199, 0, 60, 61, 200, 58, 63, 64, 192, 62, 201, 202, 201, 0, 205, 204, 206, 207, 204, 203, 0, 209, 210, 208, 0, 209, 208, 205, 211, 209, 210, 211, 208, 212, 205, 213, 214, 215, 216, 217, 217, 218, 219, 220, 221, 222, 223, 224, 213, 0, 171, 225, 170, 171, 226, 170, 171, 196, 170, 171, 227, 185, 170, 171, 228, 170, 229, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 16, 17, 18, 188, 0, 171, 230, 170, 171, 231, 170, 171, 232, 170, 171, 233, 170, 171, 234, 170, 171, 235, 170, 171, 236, 170, 171, 237, 170, 171, 238, 170, 171, 239, 170, 171, 240, 170, 171, 241, 170, 171, 242, 170, 171, 243, 170, 171, 226, 170, 171, 244, 170, 245, 171, 246, 170, 247, 171, 170, 171, 248, 170, 171, 196, 170, 171, 247, 170, 171, 249, 170, 171, 226, 170, 171, 250, 170, 171, 248, 170, 171, 251, 170, 171, 252, 185, 170, 171, 253, 170, 131, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 254, 53, 41, 0, 188, 0, 161, 0, 256, 255, 258, 257, 259, 258, 260, 261, 262, 263, 263, 261, 264, 265, 266, 267, 268, 260, 257, 269, 270, 271, 258, 257, 258, 272, 257, 258, 273, 257, 258, 274, 275, 257, 258, 276, 257, 277, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 16, 17, 18, 278, 0, 279, 0, 273, 0, 258, 280, 257, 258, 281, 257, 258, 273, 257, 258, 282, 275, 257, 258, 283, 257, 284, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 16, 17, 18, 278, 0, 258, 285, 257, 258, 286, 257, 258, 287, 257, 258, 288, 257, 258, 289, 257, 258, 290, 257, 258, 291, 257, 258, 292, 257, 258, 293, 257, 258, 294, 257, 258, 295, 257, 258, 296, 257, 258, 297, 257, 258, 298, 257, 258, 281, 269, 257, 258, 299, 257, 300, 258, 301, 257, 302, 258, 257, 258, 272, 257, 258, 302, 257, 258, 303, 257, 258, 281, 257, 258, 304, 257, 258, 305, 257, 258, 306, 273, 257, 258, 307, 257, 258, 308, 257, 309, 258, 310, 257, 311, 258, 257, 258, 312, 257, 258, 313, 257, 258, 314, 257, 258, 315, 257, 258, 272, 257, 258, 311, 257, 258, 316, 257, 258, 317, 275, 257, 258, 318, 257, 131, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 319, 53, 41, 0, 278, 0, 120, 320, 119, 120, 321, 119, 120, 322, 119, 120, 323, 119, 120, 324, 119, 120, 325, 119, 120, 326, 119, 120, 327, 119, 120, 328, 119, 120, 329, 119, 120, 330, 119, 120, 331, 119, 120, 332, 119, 120, 333, 119, 120, 128, 119, 120, 334, 119, 335, 120, 336, 119, 337, 120, 119, 120, 129, 119, 120, 337, 119, 120, 338, 339, 119, 120, 340, 119, 341, 120, 342, 119, 343, 343, 120, 119, 120, 129, 119, 120, 343, 119, 120, 344, 119, 120, 345, 130, 119, 120, 346, 119, 120, 347, 119, 348, 120, 349, 119, 350, 120, 119, 120, 351, 119, 120, 352, 119, 120, 353, 119, 120, 354, 119, 120, 129, 119, 120, 350, 119, 114, 0, 192, 63, 64, 62, 355, 0, 356, 0, 24, 357, 23, 24, 358, 23, 24, 356, 23, 24, 359, 38, 23, 24, 360, 23, 361, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 41, 0, 16, 17, 18, 54, 0, 24, 362, 23, 24, 363, 23, 24, 364, 23, 24, 365, 23, 24, 366, 23, 24, 367, 23, 24, 368, 23, 24, 369, 23, 24, 370, 23, 24, 371, 23, 24, 372, 23, 24, 373, 23, 24, 374, 23, 24, 375, 23, 24, 358, 23, 24, 376, 23, 377, 24, 378, 23, 379, 24, 23, 24, 380, 23, 24, 356, 23, 24, 379, 23, 24, 381, 23, 24, 358, 23, 24, 382, 23, 24, 383, 23, 24, 384, 356, 23, 24, 385, 23, 24, 386, 23, 387, 24, 388, 23, 389, 24, 23, 24, 390, 23, 24, 391, 23, 24, 392, 23, 24, 393, 23, 24, 380, 23, 24, 389, 23, 24, 394, 23, 24, 395, 38, 23, 24, 396, 23, 131, 42, 41, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 397, 53, 41, 0, 54, 0, 398, 0, 3, 0, 399, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 308, 17, 17, 18, 28, 30, 44, 46, 49, 50, 62, 64, 110, 115, 3, 13, 100, 4, 5, 6, 7, 6, 7, 8, 7, 17, 267, 262, 281, 282, 288, 290, 303, 9, 263, 10, 260, 11, 12, 17, 17, 18, 28, 30, 44, 46, 49, 50, 62, 64, 110, 115, 258, 14, 106, 15, 16, 257, 17, 29, 16, 17, 29, 19, 20, 21, 22, 21, 21, 22, 21, 23, 23, 23, 24, 23, 23, 23, 24, 25, 26, 27, 17, 27, 28, 17, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 310, 45, 47, 48, 17, 47, 46, 48, 44, 51, 52, 256, 53, 54, 55, 56, 57, 56, 57, 58, 57, 17, 218, 232, 233, 238, 59, 60, 61, 2, 63, 65, 80, 66, 67, 79, 68, 69, 70, 71, 72, 71, 72, 72, 17, 73, 74, 75, 78, 76, 77, 61, 81, 82, 159, 83, 84, 85, 158, 86, 87, 88, 89, 90, 91, 92, 93, 94, 93, 94, 95, 94, 17, 128, 123, 142, 143, 149, 151, 153, 96, 124, 97, 121, 98, 99, 108, 101, 102, 103, 104, 105, 107, 109, 61, 111, 112, 113, 114, 115, 116, 117, 119, 120, 118, 116, 117, 118, 116, 119, 2, 120, 18, 28, 30, 44, 46, 49, 50, 62, 64, 110, 115, 122, 123, 125, 126, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 17, 144, 145, 148, 146, 147, 150, 152, 154, 155, 156, 157, 160, 161, 160, 161, 162, 161, 17, 178, 173, 192, 193, 198, 200, 213, 163, 165, 174, 164, 61, 166, 171, 167, 168, 169, 170, 172, 173, 175, 176, 177, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 17, 194, 195, 197, 196, 199, 201, 202, 203, 204, 205, 206, 212, 207, 208, 209, 210, 211, 214, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 17, 234, 235, 237, 236, 239, 244, 240, 241, 243, 242, 245, 246, 247, 248, 249, 255, 250, 251, 252, 253, 254, 259, 61, 261, 262, 264, 265, 266, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 17, 283, 284, 287, 285, 286, 289, 291, 292, 293, 294, 295, 296, 302, 297, 298, 299, 300, 301, 304, 305, 306, 307, 309, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 35, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 15, 63, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 57, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 84, 84, 84, 0, 0, 13, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 78, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 19, 63, 0, 0, 0, 57, 0, 0, 0, 0, 19, 0, 0, 0, 57, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 99, 0, 0, 0, 19, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 17, 0, 0, 17, 63, 0, 0, 0, 0, 0, 17, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 15, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 310; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en_old.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 696 "lib/gherkin/lexer/en_old.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en_old.rb.rl" # line 705 "lib/gherkin/lexer/en_old.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en_old.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en_old.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en_old.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en_old.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en_old.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en_old.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en_old.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en_old.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en_old.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en_old.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en_old.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en_old.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en_old.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en_old.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en_old.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en_old.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en_old.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en_old.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en_old.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en_old.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en_old.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en_old.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en_old.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en_old.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 949 "lib/gherkin/lexer/en_old.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en_old.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 988 "lib/gherkin/lexer/en_old.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en_old.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/ko.rb0000644000004100000410000012250712244512574017544 0ustar www-datawww-data # line 1 "ragel/i18n/ko.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Ko #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/ko.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/ko.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 29, 43, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 77, 80, 82, 84, 87, 89, 91, 93, 95, 109, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 145, 148, 150, 152, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 185, 187, 189, 191, 194, 196, 198, 200, 202, 204, 206, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 282, 283, 295, 298, 300, 302, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 336, 338, 340, 342, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 391, 393, 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, 456, 457, 458, 459, 466, 468, 470, 472, 474, 476, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 493, 495, 500, 505, 510, 515, 519, 523, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 546, 553, 558, 562, 568, 571, 573, 579, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 615, 617, 619, 621, 624, 626, 628, 630, 632, 634, 636, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 838, 839 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -22, -21, -20, -19, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -73, -72, -72, -21, -97, -90, -84, -21, -87, -76, 10, 13, 10, 13, -22, -21, -20, -19, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -117, -89, -88, -80, -88, -116, -20, -107, -99, -67, -68, -68, -20, -96, -128, -80, -22, -78, -67, 58, 10, 10, -22, -21, -20, -19, 10, 32, 35, 37, 42, 64, 9, 13, -73, -72, 10, -72, 10, -21, 10, -97, -90, 10, -84, 10, -21, 10, -87, 10, -76, 10, -22, -21, -20, -19, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -117, -104, -95, -100, -21, -126, -104, -21, -90, -84, -20, -104, -92, 32, 58, -22, -80, -100, -20, -102, -108, 58, 10, 10, -22, -21, -20, -19, 10, 32, 35, 37, 42, 64, 9, 13, -73, -72, 10, -72, 10, -21, 10, -97, -90, 10, -84, 10, -21, 10, -87, 10, -76, 10, -84, 10, -22, 10, -77, 10, -96, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -117, -89, -88, 10, -88, 10, -116, 10, -20, 10, -107, -99, 10, -67, 10, -68, 10, -68, 10, -20, 10, -96, 10, -128, 10, -117, -95, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, -80, 10, -22, 10, -79, 10, -107, 10, -104, 10, -20, 10, -89, 10, -128, 10, -21, 10, -89, 10, -116, 10, 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, 10, -22, -21, -20, -19, 10, 32, 35, 37, 42, 64, 9, 13, -73, -72, 10, -72, 10, -21, 10, -97, -90, 10, -84, 10, -21, 10, -87, 10, -76, 10, -84, 10, -22, 10, -77, 10, -96, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -117, -89, -88, -80, 10, -88, 10, -116, 10, -20, 10, -107, -99, 10, -67, 10, -68, 10, -68, 10, -20, 10, -96, 10, -128, 10, -80, 10, -22, 10, -78, 10, -67, 10, -117, -95, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, 10, 32, 58, -22, 10, -80, 10, -100, 10, -20, 10, -102, 10, -108, 10, -80, 10, -22, 10, -79, 10, -107, 10, -104, 10, -20, 10, -89, 10, -128, 10, -21, 10, -89, 10, -116, 10, 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, -120, 58, 10, 10, -22, 10, 32, 35, 124, 9, 13, -72, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -80, -22, -79, -107, -104, -20, -89, -128, -21, -89, -116, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -22, -21, -20, -19, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -84, 10, -22, 10, -77, 10, -96, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -117, -89, -88, 10, -88, 10, -116, 10, -20, 10, -107, -99, 10, -67, 10, -68, 10, -68, 10, -20, 10, -96, 10, -128, 10, -117, -95, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, 10, 32, 58, -22, 10, -80, 10, -100, 10, -20, 10, -102, 10, -108, 10, -80, 10, -22, 10, -79, 10, -107, 10, -104, 10, -20, 10, -89, 10, -128, 10, -21, 10, -89, 10, -116, 10, 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, -84, -22, -77, -96, -80, -21, -118, -91, 58, 10, 10, -22, -21, -20, 10, 32, 35, 37, 64, 9, 13, -72, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -80, 10, -80, 10, -22, 10, -78, 10, -67, 10, -117, -104, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, 10, 32, 58, -22, 10, -80, 10, -100, 10, -20, 10, -102, 10, -108, 10, -120, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 13, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 12, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 3, 2, 2, 3, 2, 2, 2, 2, 12, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 10, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 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, 0, 0, 1, 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, 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, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 15, 18, 20, 22, 25, 27, 29, 31, 33, 36, 39, 53, 58, 60, 62, 64, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 105, 109, 112, 115, 119, 122, 125, 128, 131, 145, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 202, 206, 209, 212, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 260, 263, 266, 269, 273, 276, 279, 282, 285, 288, 291, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 405, 407, 419, 423, 426, 429, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 478, 481, 484, 487, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 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, 657, 659, 661, 663, 670, 673, 676, 679, 682, 685, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 717, 720, 725, 730, 735, 740, 744, 748, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 788, 795, 800, 804, 810, 814, 817, 823, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 869, 872, 875, 878, 882, 885, 888, 891, 894, 897, 900, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1202, 1204 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 4, 5, 7, 6, 8, 9, 10, 11, 12, 13, 6, 0, 14, 15, 0, 16, 0, 17, 0, 18, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 25, 26, 24, 28, 29, 27, 1, 2, 3, 4, 7, 6, 8, 9, 10, 11, 12, 13, 6, 0, 30, 31, 32, 33, 0, 23, 0, 34, 0, 35, 0, 36, 37, 0, 23, 0, 23, 0, 38, 0, 39, 0, 40, 0, 23, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 47, 46, 49, 48, 50, 51, 52, 53, 49, 54, 55, 56, 57, 55, 54, 48, 58, 59, 49, 48, 60, 49, 48, 61, 49, 48, 62, 63, 49, 48, 64, 49, 48, 65, 49, 48, 66, 49, 48, 67, 49, 48, 68, 69, 70, 71, 73, 72, 74, 75, 76, 77, 78, 79, 72, 0, 80, 81, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 103, 102, 105, 104, 106, 107, 108, 109, 105, 110, 111, 112, 113, 111, 110, 104, 114, 115, 105, 104, 116, 105, 104, 117, 105, 104, 118, 119, 105, 104, 120, 105, 104, 121, 105, 104, 122, 105, 104, 123, 105, 104, 124, 105, 104, 125, 105, 104, 126, 105, 104, 123, 105, 104, 127, 105, 104, 128, 105, 104, 129, 105, 104, 130, 105, 104, 105, 123, 104, 131, 132, 133, 105, 104, 123, 105, 104, 134, 105, 104, 135, 105, 104, 136, 137, 105, 104, 123, 105, 104, 123, 105, 104, 138, 105, 104, 139, 105, 104, 140, 105, 104, 123, 105, 104, 141, 142, 105, 104, 143, 105, 104, 144, 105, 104, 145, 105, 104, 146, 105, 104, 147, 105, 104, 148, 105, 104, 149, 105, 104, 150, 105, 104, 151, 105, 104, 130, 105, 104, 152, 105, 104, 153, 105, 104, 122, 105, 104, 154, 105, 104, 155, 105, 104, 156, 105, 104, 157, 105, 104, 158, 105, 104, 159, 105, 104, 160, 105, 104, 123, 105, 104, 105, 161, 104, 105, 162, 104, 105, 163, 104, 105, 164, 104, 105, 165, 104, 105, 166, 104, 105, 167, 104, 105, 168, 104, 105, 169, 104, 105, 170, 104, 105, 171, 104, 105, 172, 104, 105, 173, 104, 105, 174, 104, 105, 123, 104, 176, 175, 178, 177, 179, 180, 181, 182, 178, 183, 184, 185, 186, 184, 183, 177, 187, 188, 178, 177, 189, 178, 177, 190, 178, 177, 191, 192, 178, 177, 193, 178, 177, 194, 178, 177, 195, 178, 177, 196, 178, 177, 197, 178, 177, 198, 178, 177, 199, 178, 177, 196, 178, 177, 200, 178, 177, 201, 178, 177, 202, 178, 177, 203, 178, 177, 178, 196, 177, 204, 205, 206, 207, 178, 177, 196, 178, 177, 208, 178, 177, 209, 178, 177, 210, 211, 178, 177, 196, 178, 177, 196, 178, 177, 212, 178, 177, 213, 178, 177, 214, 178, 177, 196, 178, 177, 215, 178, 177, 216, 178, 177, 217, 178, 177, 203, 178, 177, 218, 219, 178, 177, 220, 178, 177, 221, 178, 177, 222, 178, 177, 223, 178, 177, 224, 178, 177, 225, 178, 177, 226, 178, 177, 227, 178, 177, 228, 178, 177, 229, 178, 177, 178, 230, 196, 177, 231, 178, 177, 232, 178, 177, 233, 178, 177, 234, 178, 177, 235, 178, 177, 203, 178, 177, 236, 178, 177, 237, 178, 177, 195, 178, 177, 238, 178, 177, 239, 178, 177, 240, 178, 177, 241, 178, 177, 242, 178, 177, 243, 178, 177, 244, 178, 177, 196, 178, 177, 178, 245, 177, 178, 246, 177, 178, 247, 177, 178, 248, 177, 178, 249, 177, 178, 250, 177, 178, 251, 177, 178, 252, 177, 178, 253, 177, 178, 254, 177, 178, 255, 177, 178, 256, 177, 178, 257, 177, 178, 258, 177, 178, 196, 177, 259, 0, 260, 0, 262, 261, 264, 263, 265, 264, 266, 267, 267, 266, 263, 268, 264, 263, 269, 264, 263, 270, 264, 263, 271, 264, 263, 272, 264, 263, 264, 273, 263, 274, 0, 275, 0, 22, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 23, 0, 283, 0, 284, 0, 286, 287, 285, 289, 290, 288, 293, 292, 294, 292, 291, 297, 296, 298, 296, 295, 297, 296, 299, 296, 295, 297, 296, 300, 296, 295, 302, 301, 301, 0, 7, 303, 303, 0, 305, 306, 304, 7, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 23, 0, 0, 0, 0, 0, 321, 322, 323, 322, 322, 325, 324, 321, 7, 326, 12, 326, 0, 327, 328, 327, 0, 331, 330, 332, 333, 330, 329, 0, 335, 336, 334, 0, 335, 334, 331, 337, 335, 336, 337, 334, 338, 339, 340, 341, 331, 342, 343, 344, 345, 346, 347, 348, 342, 0, 349, 49, 48, 350, 49, 48, 351, 49, 48, 67, 49, 48, 352, 49, 48, 353, 49, 48, 354, 49, 48, 355, 49, 48, 49, 67, 48, 356, 357, 358, 49, 48, 67, 49, 48, 359, 49, 48, 360, 49, 48, 361, 362, 49, 48, 67, 49, 48, 67, 49, 48, 363, 49, 48, 364, 49, 48, 365, 49, 48, 67, 49, 48, 366, 367, 49, 48, 368, 49, 48, 369, 49, 48, 370, 49, 48, 371, 49, 48, 372, 49, 48, 373, 49, 48, 374, 49, 48, 375, 49, 48, 376, 49, 48, 377, 49, 48, 49, 378, 67, 48, 379, 49, 48, 380, 49, 48, 381, 49, 48, 382, 49, 48, 383, 49, 48, 355, 49, 48, 384, 49, 48, 385, 49, 48, 66, 49, 48, 386, 49, 48, 387, 49, 48, 388, 49, 48, 389, 49, 48, 390, 49, 48, 391, 49, 48, 392, 49, 48, 67, 49, 48, 49, 393, 48, 49, 394, 48, 49, 395, 48, 49, 396, 48, 49, 397, 48, 49, 398, 48, 49, 399, 48, 49, 400, 48, 49, 401, 48, 49, 402, 48, 49, 403, 48, 49, 404, 48, 49, 405, 48, 49, 406, 48, 49, 67, 48, 407, 0, 408, 0, 409, 0, 23, 0, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 416, 415, 418, 417, 419, 420, 421, 418, 422, 423, 424, 423, 422, 417, 425, 418, 417, 426, 418, 417, 427, 418, 417, 428, 418, 417, 429, 418, 417, 418, 430, 417, 431, 418, 417, 432, 418, 417, 433, 418, 417, 434, 418, 417, 429, 418, 417, 435, 436, 418, 417, 437, 418, 417, 438, 418, 417, 439, 418, 417, 440, 418, 417, 441, 418, 417, 442, 418, 417, 443, 418, 417, 444, 418, 417, 445, 418, 417, 446, 418, 417, 418, 447, 430, 417, 448, 418, 417, 449, 418, 417, 450, 418, 417, 451, 418, 417, 452, 418, 417, 429, 418, 417, 429, 418, 417, 418, 453, 417, 418, 454, 417, 418, 455, 417, 418, 456, 417, 418, 457, 417, 418, 458, 417, 418, 459, 417, 418, 460, 417, 418, 461, 417, 418, 462, 417, 418, 463, 417, 418, 464, 417, 418, 465, 417, 418, 466, 417, 467, 0, 6, 0, 468, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 13, 41, 221, 385, 12, 12, 229, 239, 241, 255, 256, 259, 3, 333, 4, 5, 6, 329, 7, 8, 9, 10, 11, 12, 240, 11, 12, 240, 14, 15, 20, 24, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 30, 31, 32, 274, 285, 306, 31, 12, 314, 328, 33, 269, 34, 35, 36, 265, 37, 38, 39, 40, 2, 13, 41, 221, 12, 12, 229, 239, 241, 255, 256, 259, 42, 207, 218, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 128, 54, 55, 56, 57, 58, 59, 60, 61, 62, 61, 62, 63, 80, 91, 105, 62, 12, 113, 127, 64, 75, 65, 66, 67, 71, 68, 69, 70, 40, 72, 73, 74, 76, 77, 78, 79, 81, 82, 87, 83, 84, 85, 86, 88, 89, 90, 92, 102, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 12, 129, 130, 129, 130, 131, 148, 163, 184, 130, 12, 192, 206, 132, 143, 133, 134, 135, 139, 136, 137, 138, 40, 140, 141, 142, 144, 145, 146, 147, 149, 150, 155, 159, 151, 152, 153, 154, 156, 157, 158, 160, 161, 162, 164, 181, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 182, 183, 185, 186, 187, 188, 189, 190, 191, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 12, 208, 209, 210, 211, 210, 211, 212, 211, 12, 213, 214, 215, 216, 217, 40, 219, 220, 222, 223, 224, 225, 226, 227, 228, 230, 231, 232, 233, 232, 232, 233, 232, 234, 234, 234, 235, 234, 234, 234, 235, 236, 237, 238, 12, 238, 239, 12, 240, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 387, 257, 258, 12, 257, 256, 258, 259, 260, 261, 263, 264, 262, 260, 261, 262, 260, 263, 2, 13, 41, 221, 264, 229, 239, 241, 255, 256, 259, 266, 267, 268, 270, 271, 272, 273, 275, 276, 281, 277, 278, 279, 280, 282, 283, 284, 286, 303, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 304, 305, 307, 308, 309, 310, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 12, 330, 331, 332, 334, 335, 336, 337, 338, 339, 340, 339, 340, 341, 347, 352, 340, 12, 371, 342, 343, 344, 345, 346, 40, 348, 349, 350, 351, 353, 370, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 12, 386, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 63, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 57, 144, 0, 54, 84, 84, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 17, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 96, 96, 0, 93, 90, 41, 96, 90, 99, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 0, 69, 33, 0, 0, 0, 0, 0, 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, 13, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 387; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/ko.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 761 "lib/gherkin/lexer/ko.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/ko.rb.rl" # line 770 "lib/gherkin/lexer/ko.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/ko.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/ko.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/ko.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/ko.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/ko.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/ko.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/ko.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/ko.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/ko.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/ko.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/ko.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/ko.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/ko.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/ko.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/ko.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/ko.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/ko.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/ko.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/ko.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/ko.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/ko.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/ko.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/ko.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/ko.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1014 "lib/gherkin/lexer/ko.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/ko.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1053 "lib/gherkin/lexer/ko.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/ko.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/lt.rb0000644000004100000410000011513412244512574017550 0ustar www-datawww-data # line 1 "ragel/i18n/lt.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Lt #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/lt.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/lt.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 215, 217, 219, 221, 223, 225, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 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, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 346, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 380, 381, 382, 383, 384, 385, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 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, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 501, 502, 503, 504, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 638, 639, 640, 641, 642, 643, 644, 645, 649, 655, 658, 660, 666, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 116, 117, 111, 116, 97, 114, 97, 111, 105, 110, 116, 101, 107, 115, 116, 97, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 68, 73, 75, 83, 84, 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, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, 97, 118, 121, 122, 100, -59, -66, 105, 97, 105, 58, 10, 10, 10, 32, 35, 83, 124, 9, 13, 10, 97, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 58, 97, 99, 118, 121, 98, -60, -105, 58, 10, 10, 10, 32, 35, 37, 64, 75, 80, 83, 86, 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, 111, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 97, 10, 115, 10, 58, 10, 97, 10, 118, 10, 121, 10, 122, 10, 100, -59, 10, -66, 10, 10, 105, 10, 97, 10, 105, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 117, 10, 105, 117, 10, 115, 10, 32, -59, 10, -95, 10, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 97, 10, 114, 10, 105, 10, 97, 10, 110, 10, 116, 101, 110, 97, 114, 105, 106, 97, 117, 105, 117, 115, 32, -59, -95, 97, 98, 108, 111, 110, 97, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 68, 73, 75, 83, 84, 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, 101, 10, 116, 10, 117, 10, 111, 10, 116, 10, 97, 10, 114, 10, 97, 10, 105, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 58, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 117, 10, 115, 10, 97, 10, 100, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 68, 73, 75, 83, 84, 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, 101, 10, 116, 10, 117, 10, 111, 10, 116, 10, 97, 10, 114, 10, 97, 111, 10, 105, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 97, 10, 115, 10, 58, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 117, 10, 117, 10, 115, 10, 32, -59, 10, -95, 10, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 97, 10, 100, 97, 100, 97, 114, 105, 97, 110, 116, 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, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, 10, 101, 10, 116, 10, 117, 10, 111, 10, 116, 10, 97, 10, 114, 10, 97, 10, 105, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 58, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 117, 10, 117, 10, 115, 10, 32, -59, 10, -95, 10, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 97, 10, 115, 10, 97, 10, 100, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 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, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 288, 291, 294, 297, 300, 303, 306, 309, 312, 314, 316, 318, 320, 322, 324, 326, 328, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 533, 535, 537, 539, 541, 543, 546, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 717, 719, 721, 723, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 916, 918, 920, 922, 924, 926, 928, 930, 934, 940, 944, 947, 953, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 71, 0, 71, 0, 75, 76, 0, 71, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 89, 88, 89, 90, 91, 92, 93, 91, 94, 95, 96, 97, 98, 99, 90, 88, 89, 100, 88, 89, 101, 88, 89, 102, 88, 89, 103, 88, 89, 104, 88, 89, 105, 88, 89, 106, 88, 89, 107, 88, 89, 108, 88, 89, 109, 88, 89, 110, 88, 89, 111, 88, 89, 112, 88, 89, 113, 88, 89, 114, 88, 116, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 115, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 143, 142, 145, 144, 145, 146, 147, 148, 147, 146, 144, 145, 149, 144, 145, 150, 144, 145, 151, 144, 145, 152, 144, 153, 145, 144, 154, 145, 144, 145, 155, 144, 156, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 165, 164, 167, 166, 167, 168, 169, 170, 169, 171, 172, 173, 174, 168, 166, 167, 175, 166, 167, 176, 166, 167, 177, 166, 167, 178, 166, 167, 179, 166, 167, 180, 166, 167, 181, 166, 167, 182, 166, 167, 183, 166, 167, 184, 166, 167, 185, 166, 167, 186, 166, 167, 187, 166, 167, 188, 166, 167, 189, 166, 167, 190, 166, 167, 191, 166, 167, 192, 166, 167, 193, 166, 167, 194, 166, 167, 195, 166, 167, 196, 166, 167, 197, 166, 167, 198, 166, 167, 199, 166, 167, 200, 166, 167, 201, 166, 167, 202, 166, 167, 203, 166, 204, 167, 166, 205, 167, 166, 167, 206, 166, 167, 207, 166, 167, 197, 166, 167, 208, 209, 166, 167, 210, 166, 167, 211, 166, 167, 212, 166, 213, 167, 166, 197, 167, 166, 167, 214, 166, 167, 215, 166, 167, 216, 166, 167, 217, 166, 167, 218, 166, 167, 219, 166, 167, 220, 196, 166, 167, 197, 221, 166, 167, 222, 166, 167, 223, 166, 224, 167, 166, 225, 167, 166, 167, 226, 166, 167, 227, 166, 167, 228, 166, 167, 229, 166, 167, 195, 166, 167, 230, 166, 167, 231, 166, 167, 232, 166, 167, 233, 166, 167, 234, 166, 167, 206, 166, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 242, 0, 140, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 257, 256, 259, 258, 259, 260, 261, 262, 263, 261, 264, 265, 266, 267, 268, 269, 260, 258, 259, 270, 258, 259, 271, 258, 259, 272, 258, 259, 273, 258, 259, 274, 258, 259, 275, 258, 259, 276, 258, 259, 277, 258, 259, 278, 258, 259, 279, 258, 259, 280, 258, 259, 281, 258, 259, 282, 258, 259, 283, 258, 259, 284, 258, 259, 285, 258, 259, 286, 258, 259, 287, 258, 259, 288, 258, 259, 289, 258, 259, 286, 258, 259, 286, 258, 259, 290, 258, 259, 286, 258, 259, 291, 292, 258, 259, 293, 258, 259, 294, 258, 259, 295, 258, 296, 259, 258, 297, 259, 258, 259, 284, 258, 259, 298, 258, 259, 299, 258, 259, 300, 258, 259, 301, 258, 259, 302, 258, 259, 303, 258, 259, 304, 258, 259, 297, 258, 259, 305, 258, 259, 289, 258, 306, 0, 307, 0, 309, 308, 311, 310, 311, 312, 313, 314, 315, 313, 316, 317, 318, 319, 320, 321, 312, 310, 311, 322, 310, 311, 323, 310, 311, 324, 310, 311, 325, 310, 311, 326, 310, 311, 327, 310, 311, 328, 310, 311, 329, 310, 311, 330, 310, 311, 331, 310, 311, 332, 310, 311, 333, 310, 311, 334, 310, 311, 335, 310, 311, 336, 310, 311, 337, 310, 311, 338, 310, 311, 339, 310, 311, 340, 310, 311, 341, 310, 311, 338, 310, 311, 338, 310, 311, 342, 343, 310, 311, 338, 310, 311, 344, 310, 311, 345, 310, 311, 346, 310, 311, 347, 310, 311, 348, 310, 311, 349, 310, 311, 350, 310, 311, 351, 310, 311, 336, 310, 311, 352, 353, 310, 311, 354, 310, 311, 355, 310, 311, 356, 310, 357, 311, 310, 351, 311, 310, 311, 358, 310, 311, 359, 310, 311, 360, 310, 311, 361, 310, 311, 362, 310, 311, 363, 310, 311, 364, 350, 310, 311, 365, 310, 311, 366, 310, 311, 367, 310, 368, 311, 310, 369, 311, 310, 311, 370, 310, 311, 371, 310, 311, 372, 310, 311, 373, 310, 311, 349, 310, 311, 374, 310, 311, 341, 310, 375, 0, 74, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 138, 0, 381, 382, 381, 0, 385, 384, 386, 387, 384, 383, 0, 389, 390, 388, 0, 389, 388, 385, 391, 389, 390, 391, 388, 385, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 392, 0, 89, 407, 88, 89, 408, 88, 89, 409, 88, 89, 410, 88, 89, 411, 88, 89, 408, 88, 89, 408, 88, 89, 412, 88, 89, 408, 88, 89, 413, 414, 88, 89, 415, 88, 89, 416, 88, 89, 417, 88, 418, 89, 88, 419, 89, 88, 89, 114, 88, 89, 420, 88, 89, 421, 88, 89, 422, 88, 89, 423, 88, 89, 424, 88, 89, 425, 88, 89, 426, 427, 88, 89, 428, 88, 89, 429, 88, 89, 430, 88, 431, 89, 88, 432, 89, 88, 89, 433, 88, 89, 434, 88, 89, 435, 88, 89, 436, 88, 89, 437, 88, 89, 427, 88, 89, 419, 88, 89, 438, 88, 89, 411, 88, 439, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 346, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 31, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 56, 57, 57, 4, 58, 72, 309, 311, 315, 316, 318, 344, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 4, 73, 4, 4, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 86, 87, 87, 4, 88, 89, 90, 91, 92, 93, 94, 73, 96, 168, 97, 98, 99, 100, 101, 102, 103, 104, 103, 104, 104, 4, 105, 119, 129, 139, 162, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 4, 120, 121, 122, 123, 124, 125, 126, 127, 128, 73, 130, 131, 132, 133, 134, 135, 136, 137, 138, 140, 145, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 232, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 189, 190, 190, 4, 191, 205, 206, 208, 212, 213, 215, 230, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 4, 73, 207, 205, 209, 210, 211, 214, 216, 222, 217, 218, 219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 231, 233, 234, 235, 236, 235, 236, 236, 4, 237, 251, 252, 254, 258, 259, 270, 293, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 4, 73, 253, 251, 255, 256, 257, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 276, 272, 273, 274, 275, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 296, 298, 299, 300, 301, 302, 303, 304, 305, 307, 308, 306, 304, 305, 306, 304, 307, 308, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 310, 72, 312, 313, 314, 317, 319, 325, 320, 321, 322, 323, 324, 326, 327, 328, 329, 330, 331, 332, 343, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 345, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 346; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/lt.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 704 "lib/gherkin/lexer/lt.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/lt.rb.rl" # line 713 "lib/gherkin/lexer/lt.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/lt.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/lt.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/lt.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/lt.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/lt.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/lt.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/lt.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/lt.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/lt.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/lt.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/lt.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/lt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/lt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/lt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/lt.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/lt.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/lt.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/lt.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/lt.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/lt.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/lt.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/lt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/lt.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/lt.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 957 "lib/gherkin/lexer/lt.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/lt.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 996 "lib/gherkin/lexer/lt.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/lt.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/ru.rb0000644000004100000410000021577212244512574017570 0ustar www-datawww-data # line 1 "ragel/i18n/ru.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Ru #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/ru.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/ru.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 22, 23, 25, 27, 38, 39, 40, 42, 44, 49, 54, 59, 64, 68, 72, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 94, 101, 106, 110, 116, 119, 121, 127, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 195, 206, 208, 219, 221, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 452, 454, 456, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 540, 541, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 577, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 633, 635, 637, 639, 641, 643, 645, 647, 649, 650, 651, 652, 653, 654, 655, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 681, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 989, 1000, 1002, 1004, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1172, 1174, 1176, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1270, 1281, 1283, 1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1335, 1337, 1339, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, 1472, 1474, 1476, 1478, 1480, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1562, 1564, 1566, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1637, 1639, 1640, 1641, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -80, -66, -48, -67, -48, -66, -48, -65, -47, -125, -47, -127, -47, -126, -48, -72, -48, -68, -47, -127, -48, -69, -48, -72, -48, 32, -66, -48, -77, -67, -48, -76, -48, -80, -47, -126, -48, -75, -48, -70, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, -80, -66, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -47, 10, -127, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, 32, -66, 10, -48, 10, -77, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -66, 10, -48, 10, -68, 10, -47, 10, -125, 10, 10, 32, -48, 10, -74, 10, -48, 10, -75, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -116, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, 10, 58, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, -70, 10, -48, 10, 32, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -47, -126, -48, -66, -48, -68, -47, -125, 32, -48, -74, -48, -75, -47, -128, -125, -48, -75, -72, -48, -76, -47, -117, -47, -127, -47, -126, -48, -66, -47, -128, -48, -72, -47, -113, -48, -68, -48, -75, -47, -128, -47, -117, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -95, -92, 10, -48, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, 10, 58, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -113, 10, -47, -127, -47, -126, -47, -116, -48, -47, -78, -48, -66, -48, -71, -47, -127, -47, -126, -48, -78, -48, -66, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -102, -97, -95, -92, 10, -48, 10, -66, 10, -48, 10, -67, 10, -47, 10, -126, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -47, 10, -128, 10, -48, 10, -75, -72, 10, -48, 10, -76, 10, -47, 10, -117, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -47, 10, -117, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -126, -122, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -47, -113, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 10, 10, 32, -48, 10, -80, -66, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -47, 10, -127, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, 32, -66, 10, -48, 10, -77, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -66, 10, -48, 10, -68, 10, -47, 10, -125, 10, 10, 32, -48, 10, -74, 10, -48, 10, -75, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -116, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, 10, 58, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, -70, 10, -48, 10, 32, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -113, 10, 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, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 10, 10, 32, -48, 10, -80, -66, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -47, 10, -127, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, 32, -66, 10, -48, 10, -77, -67, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -47, 10, -126, 10, -48, 10, -66, 10, -48, 10, -68, 10, -47, 10, -125, 10, 10, 32, -48, 10, -74, 10, -48, 10, -75, 10, -47, 10, -128, -125, 10, -48, 10, -75, 10, -48, 10, -76, 10, -47, 10, -117, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -116, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, -70, 10, -48, 10, 32, -77, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -80, -66, -48, -70, -48, 32, -77, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -47, -66, -48, -67, -48, -80, -48, -69, -113, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 10, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 2, 9, 2, 3, 2, 2, 2, 2, 2, 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, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 5, 2, 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, 3, 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, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 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, 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, 2, 3, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 3, 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, 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, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 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, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 23, 25, 28, 31, 42, 44, 46, 49, 52, 57, 62, 67, 72, 76, 80, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 118, 125, 130, 134, 140, 144, 147, 153, 164, 166, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 216, 218, 220, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 266, 278, 281, 292, 295, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 350, 353, 356, 359, 362, 365, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 639, 642, 645, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 777, 779, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 843, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 926, 929, 932, 935, 938, 941, 944, 947, 950, 952, 954, 956, 958, 960, 962, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 1005, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 1396, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1476, 1488, 1491, 1494, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1744, 1747, 1750, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1788, 1791, 1794, 1797, 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 1839, 1842, 1845, 1848, 1851, 1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, 1882, 1884, 1893, 1905, 1908, 1911, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1985, 1988, 1991, 1995, 1998, 2001, 2004, 2007, 2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2086, 2089, 2092, 2095, 2098, 2101, 2104, 2107, 2110, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2162, 2165, 2168, 2171, 2174, 2177, 2180, 2183, 2186, 2189, 2192, 2195, 2198, 2201, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2323, 2326, 2329, 2333, 2336, 2339, 2342, 2345, 2348, 2351, 2354, 2357, 2360, 2363, 2366, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, 2424, 2427, 2430, 2433, 2435, 2438, 2440, 2442, 2445, 2447, 2449, 2451, 2453, 2455, 2457, 2459, 2461, 2463, 2465, 2467, 2470, 2472, 2474, 2476, 2478, 2480, 2482, 2484, 2486, 2488, 2490 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 11, 14, 15, 16, 17, 18, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 27, 0, 28, 0, 30, 31, 29, 33, 34, 32, 37, 36, 38, 36, 35, 41, 40, 42, 40, 39, 41, 40, 43, 40, 39, 41, 40, 44, 40, 39, 46, 45, 45, 0, 4, 47, 47, 0, 49, 50, 48, 4, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 0, 0, 0, 0, 65, 66, 67, 66, 66, 69, 68, 65, 4, 70, 9, 70, 0, 71, 72, 71, 0, 75, 74, 76, 77, 74, 73, 0, 79, 80, 78, 0, 79, 78, 75, 81, 79, 80, 81, 78, 82, 75, 83, 84, 85, 86, 87, 88, 89, 83, 0, 90, 0, 91, 92, 0, 93, 0, 15, 0, 94, 0, 11, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 11, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 11, 0, 111, 112, 0, 113, 0, 114, 0, 115, 116, 0, 117, 0, 118, 0, 119, 0, 11, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 132, 131, 134, 133, 135, 134, 136, 137, 138, 139, 137, 136, 133, 140, 141, 142, 140, 143, 144, 145, 146, 147, 148, 134, 133, 134, 149, 133, 150, 152, 151, 153, 154, 155, 156, 157, 158, 151, 0, 159, 134, 133, 160, 161, 134, 133, 162, 134, 133, 144, 134, 133, 163, 134, 133, 140, 134, 133, 164, 134, 133, 165, 134, 133, 166, 134, 133, 167, 134, 133, 168, 134, 133, 169, 134, 133, 170, 134, 133, 171, 134, 133, 172, 134, 133, 173, 134, 133, 174, 134, 133, 140, 134, 133, 175, 134, 133, 176, 134, 133, 177, 134, 133, 178, 134, 133, 179, 134, 133, 140, 134, 133, 180, 134, 181, 133, 182, 134, 133, 183, 134, 133, 184, 134, 133, 185, 134, 133, 186, 134, 133, 187, 134, 133, 140, 134, 133, 188, 134, 133, 189, 134, 133, 190, 134, 133, 191, 134, 133, 192, 134, 133, 193, 134, 133, 194, 134, 133, 195, 134, 133, 134, 196, 133, 197, 134, 133, 198, 134, 133, 199, 134, 133, 140, 134, 133, 200, 134, 133, 201, 134, 133, 202, 134, 133, 203, 134, 133, 204, 134, 133, 205, 134, 133, 206, 134, 133, 140, 134, 133, 207, 208, 134, 133, 209, 134, 133, 210, 134, 133, 211, 134, 133, 212, 134, 133, 213, 134, 133, 214, 134, 133, 215, 134, 133, 216, 134, 133, 217, 134, 133, 218, 134, 133, 219, 134, 133, 220, 134, 133, 221, 134, 133, 134, 149, 133, 222, 223, 134, 133, 224, 134, 133, 225, 134, 133, 226, 134, 133, 227, 134, 133, 228, 134, 133, 229, 134, 133, 230, 134, 133, 231, 134, 133, 232, 134, 133, 233, 134, 133, 234, 134, 133, 235, 134, 133, 236, 134, 133, 237, 134, 133, 134, 238, 133, 239, 134, 133, 240, 134, 133, 241, 134, 133, 242, 134, 133, 243, 134, 133, 244, 134, 133, 245, 134, 133, 246, 134, 133, 247, 134, 133, 248, 134, 133, 249, 134, 133, 250, 134, 133, 251, 134, 133, 252, 134, 133, 253, 134, 133, 221, 134, 133, 254, 134, 133, 255, 134, 133, 256, 134, 133, 257, 134, 133, 258, 134, 133, 259, 134, 133, 260, 134, 133, 261, 134, 133, 262, 134, 133, 263, 134, 133, 264, 134, 133, 221, 134, 133, 265, 134, 133, 266, 267, 134, 133, 268, 134, 133, 196, 134, 133, 183, 134, 149, 133, 269, 134, 133, 270, 134, 133, 271, 134, 133, 272, 134, 133, 273, 134, 133, 274, 134, 133, 275, 134, 133, 276, 134, 133, 277, 134, 133, 278, 134, 133, 279, 253, 134, 133, 280, 134, 133, 281, 134, 133, 282, 134, 133, 283, 134, 133, 284, 134, 133, 285, 134, 133, 221, 134, 133, 134, 286, 133, 134, 287, 133, 134, 288, 133, 134, 289, 133, 134, 290, 133, 134, 291, 133, 134, 292, 133, 134, 293, 133, 134, 294, 133, 134, 295, 133, 134, 296, 133, 134, 297, 133, 134, 298, 133, 134, 299, 133, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 11, 0, 312, 0, 313, 314, 0, 315, 0, 316, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 129, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 343, 342, 345, 344, 346, 345, 347, 348, 348, 347, 344, 349, 350, 345, 344, 351, 345, 344, 352, 345, 344, 353, 345, 344, 354, 345, 344, 355, 345, 344, 356, 345, 344, 357, 345, 344, 358, 345, 344, 359, 345, 344, 360, 345, 344, 361, 345, 344, 362, 345, 344, 363, 345, 344, 364, 345, 344, 345, 365, 344, 366, 345, 344, 367, 345, 344, 368, 345, 344, 369, 345, 344, 370, 345, 344, 371, 345, 344, 372, 345, 344, 373, 345, 344, 374, 345, 344, 375, 345, 344, 376, 377, 345, 344, 378, 345, 344, 379, 345, 344, 380, 345, 344, 381, 345, 344, 382, 345, 344, 383, 345, 344, 364, 345, 344, 364, 345, 344, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 11, 0, 389, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0, 406, 405, 408, 407, 409, 408, 410, 411, 412, 411, 410, 407, 413, 414, 415, 416, 408, 407, 417, 408, 407, 418, 408, 407, 419, 408, 407, 420, 408, 407, 421, 408, 407, 422, 408, 407, 423, 408, 407, 424, 408, 407, 425, 408, 407, 426, 408, 407, 427, 408, 407, 428, 408, 407, 429, 408, 407, 430, 408, 407, 408, 431, 407, 432, 408, 407, 433, 408, 407, 434, 408, 407, 435, 436, 408, 407, 437, 408, 407, 438, 408, 407, 439, 408, 407, 440, 408, 407, 441, 408, 407, 442, 408, 407, 443, 408, 407, 444, 408, 407, 445, 408, 407, 446, 408, 407, 447, 408, 407, 448, 408, 407, 449, 408, 407, 450, 408, 407, 451, 408, 407, 430, 408, 407, 452, 408, 407, 453, 408, 407, 454, 408, 407, 455, 408, 407, 456, 408, 407, 457, 408, 407, 458, 408, 407, 430, 408, 407, 459, 460, 408, 407, 461, 408, 407, 462, 408, 407, 463, 408, 407, 464, 408, 407, 465, 408, 407, 466, 408, 407, 467, 408, 407, 468, 408, 407, 469, 408, 407, 470, 408, 407, 471, 408, 407, 472, 408, 407, 430, 408, 407, 473, 474, 408, 407, 475, 408, 407, 476, 408, 407, 477, 408, 407, 478, 408, 407, 479, 408, 407, 480, 408, 407, 481, 408, 407, 482, 408, 407, 483, 408, 407, 484, 408, 407, 485, 408, 407, 486, 408, 407, 487, 408, 407, 488, 408, 407, 408, 489, 407, 490, 408, 407, 491, 408, 407, 492, 408, 407, 493, 408, 407, 494, 408, 407, 495, 408, 407, 496, 408, 407, 497, 408, 407, 498, 408, 407, 446, 408, 407, 499, 408, 407, 500, 408, 407, 501, 408, 407, 502, 408, 407, 503, 408, 407, 504, 408, 407, 505, 408, 407, 506, 408, 407, 507, 408, 407, 508, 408, 407, 509, 408, 407, 430, 408, 407, 510, 408, 407, 511, 408, 407, 512, 408, 407, 513, 408, 407, 514, 408, 407, 515, 408, 407, 516, 408, 407, 517, 408, 407, 518, 408, 407, 519, 408, 407, 520, 451, 408, 407, 521, 408, 407, 522, 408, 407, 523, 408, 407, 524, 408, 407, 525, 408, 407, 526, 408, 407, 430, 408, 407, 408, 527, 407, 408, 528, 407, 408, 529, 407, 408, 530, 407, 408, 531, 407, 408, 532, 407, 408, 533, 407, 408, 534, 407, 408, 535, 407, 408, 536, 407, 408, 537, 407, 408, 538, 407, 408, 539, 407, 408, 540, 407, 541, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 576, 575, 578, 577, 579, 578, 580, 581, 582, 583, 581, 580, 577, 584, 585, 586, 584, 587, 588, 589, 590, 591, 592, 578, 577, 578, 593, 577, 594, 578, 577, 595, 596, 578, 577, 597, 578, 577, 588, 578, 577, 598, 578, 577, 584, 578, 577, 599, 578, 577, 600, 578, 577, 601, 578, 577, 602, 578, 577, 603, 578, 577, 604, 578, 577, 605, 578, 577, 606, 578, 577, 607, 578, 577, 608, 578, 577, 609, 578, 577, 584, 578, 577, 610, 578, 577, 611, 578, 577, 612, 578, 577, 613, 578, 577, 614, 578, 577, 584, 578, 577, 615, 578, 616, 577, 617, 578, 577, 618, 578, 577, 619, 578, 577, 620, 578, 577, 621, 578, 577, 622, 578, 577, 584, 578, 577, 623, 578, 577, 624, 578, 577, 625, 578, 577, 626, 578, 577, 627, 578, 577, 628, 578, 577, 629, 578, 577, 630, 578, 577, 578, 631, 577, 632, 578, 577, 633, 578, 577, 634, 578, 577, 584, 578, 577, 635, 578, 577, 636, 578, 577, 637, 578, 577, 638, 578, 577, 639, 578, 577, 640, 578, 577, 641, 578, 577, 584, 578, 577, 642, 643, 578, 577, 644, 578, 577, 645, 578, 577, 646, 578, 577, 647, 578, 577, 648, 578, 577, 649, 578, 577, 650, 578, 577, 651, 578, 577, 652, 578, 577, 653, 578, 577, 654, 578, 577, 655, 578, 577, 656, 578, 577, 578, 593, 577, 657, 578, 577, 658, 578, 577, 659, 578, 577, 660, 578, 577, 661, 578, 577, 662, 578, 577, 663, 578, 577, 664, 578, 577, 665, 578, 577, 666, 578, 577, 667, 578, 577, 668, 578, 577, 656, 578, 577, 669, 578, 577, 670, 671, 578, 577, 672, 578, 577, 631, 578, 577, 618, 578, 593, 577, 673, 578, 577, 674, 578, 577, 675, 578, 577, 676, 578, 577, 677, 578, 577, 678, 578, 577, 679, 578, 577, 680, 578, 577, 681, 578, 577, 682, 578, 577, 683, 684, 578, 577, 685, 578, 577, 686, 578, 577, 687, 578, 577, 688, 578, 577, 689, 578, 577, 690, 578, 577, 656, 578, 577, 656, 578, 577, 578, 691, 577, 578, 692, 577, 578, 693, 577, 578, 694, 577, 578, 695, 577, 578, 696, 577, 578, 697, 577, 578, 698, 577, 578, 699, 577, 578, 700, 577, 578, 701, 577, 578, 702, 577, 578, 703, 577, 578, 704, 577, 705, 0, 706, 0, 707, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 719, 718, 721, 720, 722, 721, 723, 724, 725, 726, 724, 723, 720, 727, 728, 729, 727, 730, 731, 732, 733, 734, 735, 721, 720, 721, 736, 720, 737, 721, 720, 738, 739, 721, 720, 740, 721, 720, 731, 721, 720, 741, 721, 720, 727, 721, 720, 742, 721, 720, 743, 721, 720, 744, 721, 720, 745, 721, 720, 746, 721, 720, 747, 721, 720, 748, 721, 720, 749, 721, 720, 750, 721, 720, 751, 721, 720, 752, 721, 720, 727, 721, 720, 753, 721, 720, 754, 721, 720, 755, 721, 720, 756, 721, 720, 757, 721, 720, 727, 721, 720, 758, 721, 759, 720, 760, 721, 720, 761, 721, 720, 762, 763, 721, 720, 764, 721, 720, 765, 721, 720, 766, 721, 720, 727, 721, 720, 767, 721, 720, 768, 721, 720, 769, 721, 720, 770, 721, 720, 771, 721, 720, 772, 721, 720, 773, 721, 720, 774, 721, 720, 775, 721, 720, 776, 721, 720, 721, 736, 720, 777, 721, 720, 778, 721, 720, 779, 721, 720, 780, 721, 720, 781, 721, 720, 782, 721, 720, 783, 721, 720, 784, 721, 720, 721, 785, 720, 786, 721, 720, 787, 721, 720, 788, 721, 720, 727, 721, 720, 789, 721, 720, 790, 791, 721, 720, 792, 721, 720, 793, 721, 720, 794, 721, 720, 795, 721, 720, 796, 721, 720, 797, 721, 720, 798, 721, 720, 799, 721, 720, 800, 721, 720, 801, 721, 720, 802, 721, 720, 803, 721, 720, 804, 721, 720, 805, 721, 720, 806, 721, 720, 807, 721, 720, 808, 721, 720, 776, 721, 720, 809, 721, 720, 810, 721, 720, 811, 721, 720, 812, 721, 720, 813, 721, 720, 727, 721, 720, 814, 815, 721, 720, 816, 721, 720, 817, 721, 720, 818, 721, 720, 819, 721, 720, 820, 721, 720, 821, 721, 720, 822, 721, 720, 823, 721, 720, 824, 721, 720, 825, 721, 720, 826, 721, 720, 827, 721, 720, 776, 721, 720, 828, 829, 721, 720, 830, 721, 720, 831, 721, 720, 832, 721, 720, 833, 721, 720, 834, 721, 720, 835, 721, 720, 836, 721, 720, 837, 721, 720, 838, 721, 720, 839, 721, 720, 840, 721, 720, 841, 721, 720, 842, 721, 720, 843, 721, 720, 721, 844, 720, 845, 721, 720, 846, 721, 720, 847, 721, 720, 848, 721, 720, 849, 721, 720, 850, 721, 720, 851, 721, 720, 852, 721, 720, 853, 721, 720, 803, 721, 720, 854, 721, 720, 855, 721, 720, 856, 721, 720, 857, 721, 720, 858, 721, 720, 859, 721, 720, 860, 721, 720, 861, 721, 720, 862, 721, 720, 863, 721, 720, 864, 721, 720, 776, 721, 720, 865, 721, 720, 866, 867, 721, 720, 868, 721, 720, 785, 721, 720, 869, 721, 736, 720, 762, 721, 720, 870, 721, 720, 871, 721, 720, 872, 721, 720, 873, 721, 720, 874, 721, 720, 875, 721, 720, 876, 721, 720, 877, 721, 720, 878, 721, 720, 879, 721, 720, 880, 808, 721, 720, 881, 721, 720, 882, 721, 720, 883, 721, 720, 884, 721, 720, 885, 721, 720, 886, 721, 720, 776, 721, 720, 721, 887, 720, 721, 888, 720, 721, 889, 720, 721, 890, 720, 721, 891, 720, 721, 892, 720, 721, 893, 720, 721, 894, 720, 721, 895, 720, 721, 896, 720, 721, 897, 720, 721, 898, 720, 721, 899, 720, 721, 900, 720, 901, 0, 902, 903, 0, 904, 0, 308, 0, 905, 20, 0, 115, 0, 906, 0, 907, 0, 908, 0, 909, 0, 910, 0, 911, 0, 912, 0, 913, 0, 914, 0, 915, 0, 916, 917, 0, 918, 0, 919, 0, 920, 0, 921, 0, 922, 0, 923, 0, 403, 0, 403, 0, 924, 0, 3, 0, 925, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 844, 6, 6, 7, 17, 19, 3, 33, 36, 3, 42, 60, 66, 46, 253, 326, 819, 825, 4, 5, 6, 18, 5, 6, 18, 8, 9, 10, 11, 10, 10, 11, 10, 12, 12, 12, 13, 12, 12, 12, 13, 14, 15, 16, 6, 16, 17, 6, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 846, 34, 35, 6, 34, 33, 35, 36, 37, 38, 40, 41, 39, 37, 38, 39, 37, 40, 2, 41, 7, 17, 19, 3, 33, 36, 43, 44, 48, 45, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 67, 240, 68, 69, 70, 74, 71, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 86, 87, 88, 87, 6, 226, 89, 89, 91, 109, 115, 95, 136, 144, 203, 208, 90, 2, 6, 6, 7, 17, 19, 3, 33, 36, 92, 93, 97, 94, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 116, 123, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 145, 159, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 191, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 207, 206, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 6, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 320, 256, 257, 273, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 283, 284, 285, 284, 6, 286, 301, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 90, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 319, 313, 314, 315, 316, 317, 318, 321, 322, 323, 324, 325, 327, 472, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 342, 343, 344, 343, 6, 458, 345, 360, 388, 440, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 90, 361, 362, 363, 364, 380, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 389, 402, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 403, 428, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 6, 473, 629, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 506, 507, 508, 507, 6, 615, 509, 509, 510, 528, 534, 514, 555, 563, 591, 596, 90, 511, 512, 516, 513, 515, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 529, 530, 531, 532, 533, 535, 542, 536, 537, 538, 539, 540, 541, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 556, 557, 558, 559, 560, 561, 562, 564, 578, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 592, 593, 595, 594, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 614, 608, 609, 610, 611, 612, 613, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 6, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 643, 644, 645, 644, 6, 805, 646, 646, 647, 665, 671, 651, 703, 729, 781, 787, 90, 648, 649, 653, 650, 652, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 666, 667, 668, 669, 670, 672, 690, 673, 674, 675, 679, 676, 677, 678, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 704, 705, 723, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 724, 725, 726, 727, 728, 730, 743, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 744, 769, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 782, 783, 785, 784, 786, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 6, 820, 821, 823, 822, 824, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 843, 837, 838, 839, 840, 841, 842, 845, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 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, 15, 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, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 0, 0, 0, 0, 0, 17, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 846; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/ru.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1425 "lib/gherkin/lexer/ru.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/ru.rb.rl" # line 1434 "lib/gherkin/lexer/ru.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/ru.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/ru.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/ru.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/ru.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/ru.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/ru.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/ru.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/ru.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/ru.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/ru.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/ru.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/ru.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/ru.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/ru.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/ru.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/ru.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/ru.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/ru.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/ru.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/ru.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/ru.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/ru.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/ru.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/ru.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1678 "lib/gherkin/lexer/ru.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/ru.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1717 "lib/gherkin/lexer/ru.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/ru.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/bm.rb0000644000004100000410000013721612244512574017534 0ustar www-datawww-data # line 1 "ragel/i18n/bm.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Bm #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/bm.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/bm.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 21, 22, 23, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 111, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 140, 142, 144, 146, 148, 150, 152, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 354, 355, 357, 358, 359, 360, 361, 362, 363, 364, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 543, 545, 547, 549, 552, 554, 557, 559, 561, 563, 565, 567, 569, 572, 574, 576, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 690, 692, 694, 696, 698, 700, 702, 704, 706, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 750, 752, 754, 756, 759, 761, 764, 766, 768, 770, 772, 774, 776, 779, 781, 783, 785, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 924, 926, 928, 930, 932, 934, 936, 938, 940, 943, 945, 947, 949, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 962, 963, 965, 966, 967, 968, 969, 970, 971, 973, 974, 975, 976, 977, 978, 979, 981, 982, 983, 984, 985, 986, 990, 996, 999, 1001, 1007, 1027 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 112, 97, 98, 105, 108, 97, 97, 103, 105, 111, 110, 116, 111, 104, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, 97, 105, 110, 98, 101, 114, 117, 110, 103, 115, 105, 58, 10, 10, 10, 32, 35, 37, 64, 67, 70, 75, 76, 77, 83, 84, 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, 111, 10, 110, 10, 116, 10, 111, 10, 104, 10, 58, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 101, 10, 97, 10, 100, 10, 97, 10, 97, 10, 110, 10, 97, 10, 116, 10, 97, 10, 114, 10, 32, 10, 66, 10, 101, 10, 108, 10, 97, 10, 107, 10, 97, 10, 110, 10, 103, 10, 101, 10, 110, 10, 103, 10, 103, 10, 97, 10, 114, 10, 105, 10, 115, 10, 107, 10, 97, 10, 110, 10, 32, 10, 83, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 105, 10, 116, 10, 117, 10, 97, 10, 101, 10, 109, 10, 112, 10, 108, 10, 97, 10, 116, 10, 101, 10, 32, 10, 75, 83, 101, 97, 109, 100, 97, 97, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 75, 76, 77, 83, 84, 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, 112, 10, 97, 10, 98, 10, 105, 10, 108, 10, 97, 10, 97, 10, 103, 10, 105, 10, 97, 105, 10, 110, 10, 98, 10, 101, 10, 114, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 101, 10, 97, 109, 10, 100, 10, 97, 10, 97, 10, 110, 10, 117, 10, 100, 10, 105, 10, 97, 10, 97, 10, 116, 10, 97, 10, 114, 10, 32, 10, 66, 10, 101, 10, 108, 10, 97, 10, 107, 10, 97, 10, 110, 10, 103, 10, 97, 101, 10, 107, 10, 110, 10, 103, 10, 103, 10, 97, 10, 114, 10, 105, 10, 115, 10, 107, 10, 97, 10, 110, 10, 32, 10, 83, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 105, 10, 116, 10, 117, 10, 97, 10, 97, 101, 10, 112, 10, 109, 116, 10, 112, 10, 108, 10, 97, 10, 116, 10, 101, 10, 32, 10, 75, 83, 10, 101, 10, 97, 10, 97, 117, 100, 105, 97, 97, 116, 97, 114, 32, 66, 101, 108, 97, 107, 97, 110, 103, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 75, 77, 83, 84, 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, 112, 10, 97, 10, 98, 10, 105, 10, 108, 10, 97, 10, 97, 10, 103, 10, 105, 10, 97, 105, 10, 110, 10, 98, 10, 101, 10, 114, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 101, 10, 97, 109, 10, 100, 10, 97, 10, 97, 10, 110, 10, 117, 10, 100, 10, 105, 10, 97, 10, 97, 101, 10, 107, 10, 110, 10, 103, 10, 103, 10, 97, 10, 114, 10, 105, 10, 115, 10, 107, 10, 97, 10, 110, 10, 32, 10, 83, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 105, 10, 116, 10, 117, 10, 97, 10, 97, 101, 10, 112, 10, 109, 116, 10, 112, 10, 108, 10, 97, 10, 116, 10, 101, 10, 32, 10, 75, 83, 10, 101, 10, 97, 10, 97, 97, 101, 107, 110, 103, 103, 97, 114, 105, 115, 107, 97, 110, 32, 83, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 75, 77, 83, 84, 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, 112, 10, 97, 10, 98, 10, 105, 10, 108, 10, 97, 10, 97, 10, 103, 10, 105, 10, 97, 105, 10, 110, 10, 98, 10, 101, 10, 114, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 101, 10, 97, 109, 10, 100, 10, 97, 10, 97, 10, 110, 10, 117, 10, 100, 10, 105, 10, 97, 10, 97, 10, 107, 10, 101, 105, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 116, 10, 117, 10, 97, 10, 97, 101, 10, 112, 10, 116, 10, 97, 101, 105, 110, 97, 114, 105, 111, 116, 117, 97, 105, 97, 101, 112, 109, 116, 112, 108, 97, 116, 101, 32, 75, 83, 101, 97, 100, 97, 97, 110, 101, 105, 116, 117, 97, 105, 97, 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, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 19, 1, 1, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 18, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 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, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 15, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 18, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 21, 23, 25, 45, 47, 49, 52, 55, 60, 65, 70, 75, 79, 83, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 121, 124, 129, 136, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 182, 185, 188, 191, 194, 197, 200, 220, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 491, 493, 496, 498, 500, 502, 504, 506, 508, 510, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 768, 771, 774, 777, 781, 784, 788, 791, 794, 797, 800, 803, 806, 810, 813, 816, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1077, 1080, 1083, 1086, 1090, 1093, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1119, 1122, 1125, 1128, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1366, 1369, 1372, 1375, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1399, 1401, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1434, 1436, 1438, 1440, 1442, 1444, 1448, 1454, 1458, 1461, 1467, 1487 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 0, 20, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 0, 21, 0, 22, 0, 24, 25, 23, 27, 28, 26, 31, 30, 32, 30, 29, 35, 34, 36, 34, 33, 35, 34, 37, 34, 33, 35, 34, 38, 34, 33, 40, 39, 39, 0, 3, 41, 41, 0, 43, 44, 42, 3, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 61, 62, 60, 64, 65, 63, 0, 0, 0, 0, 66, 67, 68, 67, 67, 70, 69, 66, 3, 71, 8, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 77, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 89, 88, 89, 90, 91, 92, 91, 90, 88, 89, 93, 88, 89, 94, 88, 89, 95, 88, 89, 96, 88, 89, 97, 88, 89, 98, 88, 100, 99, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 99, 0, 117, 118, 0, 77, 0, 119, 0, 120, 0, 79, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 128, 127, 130, 129, 130, 131, 132, 133, 132, 134, 135, 136, 137, 138, 139, 140, 131, 129, 130, 141, 129, 130, 142, 129, 130, 143, 129, 130, 144, 129, 130, 145, 129, 130, 146, 129, 130, 147, 129, 130, 148, 129, 130, 149, 129, 130, 150, 129, 130, 151, 129, 130, 152, 129, 130, 153, 129, 130, 154, 129, 130, 155, 129, 130, 156, 129, 130, 157, 129, 130, 158, 129, 130, 159, 129, 130, 160, 129, 130, 161, 129, 130, 162, 129, 130, 163, 129, 130, 164, 129, 130, 159, 129, 130, 165, 129, 130, 166, 129, 130, 167, 129, 130, 168, 129, 130, 169, 129, 130, 159, 129, 130, 170, 129, 130, 171, 129, 130, 172, 129, 130, 173, 129, 130, 174, 129, 130, 175, 129, 130, 176, 129, 130, 177, 129, 130, 178, 129, 130, 179, 129, 130, 180, 129, 130, 181, 129, 130, 159, 129, 130, 182, 129, 130, 183, 129, 130, 184, 129, 130, 185, 129, 130, 186, 129, 130, 187, 129, 130, 188, 129, 130, 189, 129, 130, 190, 129, 130, 191, 129, 130, 192, 129, 130, 193, 129, 130, 194, 129, 130, 195, 129, 130, 196, 129, 130, 197, 129, 130, 198, 129, 130, 199, 129, 130, 159, 129, 130, 195, 200, 129, 130, 201, 129, 130, 202, 129, 130, 164, 129, 130, 203, 129, 130, 204, 129, 130, 205, 129, 130, 206, 129, 130, 207, 129, 130, 208, 129, 130, 209, 129, 130, 210, 129, 130, 211, 212, 129, 213, 0, 214, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 222, 221, 224, 223, 224, 225, 226, 227, 228, 226, 229, 230, 231, 232, 233, 234, 235, 236, 237, 225, 223, 224, 238, 223, 224, 239, 223, 224, 240, 223, 224, 241, 223, 224, 242, 223, 224, 243, 223, 224, 244, 223, 224, 245, 223, 224, 246, 223, 224, 247, 223, 224, 248, 223, 224, 249, 223, 224, 250, 223, 224, 251, 223, 224, 252, 223, 224, 253, 223, 224, 254, 223, 224, 255, 223, 224, 256, 223, 224, 257, 223, 224, 258, 223, 224, 259, 223, 224, 260, 223, 224, 258, 223, 224, 261, 262, 223, 224, 258, 223, 224, 263, 223, 224, 264, 223, 224, 260, 223, 224, 265, 223, 224, 266, 223, 224, 267, 223, 224, 268, 223, 224, 269, 223, 224, 252, 223, 224, 270, 223, 224, 271, 272, 223, 224, 273, 223, 224, 274, 223, 224, 275, 223, 224, 269, 223, 224, 276, 223, 224, 277, 223, 224, 278, 223, 224, 261, 223, 224, 279, 223, 224, 280, 223, 224, 281, 223, 224, 282, 223, 224, 283, 223, 224, 284, 223, 224, 285, 223, 224, 286, 223, 224, 287, 223, 224, 288, 223, 224, 289, 223, 224, 290, 223, 224, 269, 223, 224, 291, 292, 223, 224, 257, 223, 224, 293, 223, 224, 294, 223, 224, 295, 223, 224, 296, 223, 224, 297, 223, 224, 298, 223, 224, 299, 223, 224, 300, 223, 224, 301, 223, 224, 302, 223, 224, 303, 223, 224, 304, 223, 224, 305, 223, 224, 306, 223, 224, 307, 223, 224, 308, 223, 224, 309, 223, 224, 269, 223, 224, 305, 310, 223, 224, 311, 223, 224, 312, 223, 224, 268, 223, 224, 313, 314, 223, 224, 260, 223, 224, 315, 316, 223, 224, 317, 223, 224, 318, 223, 224, 319, 223, 224, 320, 223, 224, 321, 223, 224, 322, 223, 224, 323, 324, 223, 224, 325, 223, 224, 271, 223, 224, 313, 223, 326, 0, 327, 0, 328, 0, 117, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 344, 343, 346, 345, 346, 347, 348, 349, 350, 348, 351, 352, 353, 354, 355, 356, 357, 358, 347, 345, 346, 359, 345, 346, 360, 345, 346, 361, 345, 346, 362, 345, 346, 363, 345, 346, 364, 345, 346, 365, 345, 346, 366, 345, 346, 367, 345, 346, 368, 345, 346, 369, 345, 346, 370, 345, 346, 371, 345, 346, 372, 345, 346, 373, 345, 346, 374, 345, 346, 375, 345, 346, 376, 345, 346, 377, 345, 346, 378, 345, 346, 379, 345, 346, 380, 345, 346, 381, 345, 346, 379, 345, 346, 382, 383, 345, 346, 379, 345, 346, 384, 345, 346, 385, 345, 346, 381, 345, 346, 386, 345, 346, 387, 345, 346, 388, 345, 346, 389, 345, 346, 390, 345, 346, 373, 345, 346, 391, 345, 346, 392, 393, 345, 346, 394, 345, 346, 395, 345, 346, 396, 345, 346, 390, 345, 346, 397, 345, 346, 398, 345, 346, 399, 345, 346, 382, 345, 346, 400, 401, 345, 346, 378, 345, 346, 402, 345, 346, 403, 345, 346, 404, 345, 346, 405, 345, 346, 406, 345, 346, 407, 345, 346, 408, 345, 346, 409, 345, 346, 410, 345, 346, 411, 345, 346, 412, 345, 346, 413, 345, 346, 414, 345, 346, 415, 345, 346, 416, 345, 346, 417, 345, 346, 418, 345, 346, 390, 345, 346, 414, 419, 345, 346, 420, 345, 346, 421, 345, 346, 389, 345, 346, 422, 423, 345, 346, 381, 345, 346, 424, 425, 345, 346, 426, 345, 346, 427, 345, 346, 428, 345, 346, 429, 345, 346, 430, 345, 346, 431, 345, 346, 432, 433, 345, 346, 434, 345, 346, 392, 345, 346, 422, 345, 435, 436, 0, 76, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 457, 456, 459, 458, 459, 460, 461, 462, 463, 461, 464, 465, 466, 467, 468, 469, 470, 471, 460, 458, 459, 472, 458, 459, 473, 458, 459, 474, 458, 459, 475, 458, 459, 476, 458, 459, 477, 458, 459, 478, 458, 459, 479, 458, 459, 480, 458, 459, 481, 458, 459, 482, 458, 459, 483, 458, 459, 484, 458, 459, 485, 458, 459, 486, 458, 459, 487, 458, 459, 488, 458, 459, 489, 458, 459, 490, 458, 459, 491, 458, 459, 492, 458, 459, 493, 458, 459, 494, 458, 459, 492, 458, 459, 495, 496, 458, 459, 492, 458, 459, 497, 458, 459, 498, 458, 459, 494, 458, 459, 499, 458, 459, 500, 458, 459, 501, 458, 459, 502, 458, 459, 503, 458, 459, 486, 458, 459, 504, 458, 459, 505, 506, 458, 459, 507, 458, 459, 508, 458, 459, 509, 458, 459, 503, 458, 459, 510, 458, 459, 511, 458, 459, 512, 458, 459, 495, 458, 459, 513, 458, 459, 491, 458, 459, 514, 515, 458, 459, 516, 458, 459, 517, 458, 459, 518, 458, 459, 519, 458, 459, 503, 458, 459, 520, 458, 459, 521, 458, 459, 502, 458, 459, 522, 523, 458, 459, 494, 458, 459, 524, 458, 459, 522, 458, 525, 526, 0, 527, 0, 528, 0, 529, 0, 530, 0, 219, 0, 531, 0, 532, 0, 533, 0, 219, 0, 534, 535, 0, 79, 0, 536, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 454, 0, 449, 551, 0, 552, 0, 553, 0, 554, 0, 454, 0, 534, 0, 555, 556, 555, 0, 559, 558, 560, 561, 558, 557, 0, 563, 564, 562, 0, 563, 562, 559, 565, 563, 564, 565, 562, 559, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 566, 0, 583, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 482, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 31, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 53, 54, 54, 4, 55, 56, 57, 58, 59, 60, 61, 4, 4, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 74, 75, 75, 4, 76, 90, 96, 101, 107, 120, 139, 143, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 4, 91, 92, 93, 94, 95, 61, 97, 98, 99, 100, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, 101, 139, 153, 154, 257, 155, 156, 157, 158, 159, 160, 161, 160, 161, 161, 4, 162, 176, 177, 183, 186, 191, 197, 207, 220, 240, 244, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 4, 61, 178, 179, 180, 181, 182, 176, 184, 185, 187, 188, 189, 190, 192, 193, 194, 195, 196, 198, 199, 203, 200, 201, 202, 204, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 245, 246, 247, 256, 248, 249, 250, 251, 252, 253, 254, 240, 255, 258, 259, 260, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 276, 277, 277, 4, 278, 292, 293, 299, 302, 307, 313, 323, 343, 347, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 4, 61, 294, 295, 296, 297, 298, 292, 300, 301, 303, 304, 305, 306, 308, 309, 310, 311, 312, 314, 315, 319, 316, 317, 318, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 348, 349, 350, 359, 351, 352, 353, 354, 355, 356, 357, 343, 358, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 382, 383, 383, 4, 384, 398, 399, 405, 408, 413, 419, 429, 431, 440, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 4, 61, 400, 401, 402, 403, 404, 398, 406, 407, 409, 410, 411, 412, 414, 415, 416, 417, 418, 420, 421, 425, 422, 423, 424, 426, 427, 428, 430, 432, 437, 433, 434, 435, 436, 438, 439, 441, 442, 443, 445, 450, 446, 447, 448, 449, 451, 452, 453, 455, 456, 457, 475, 458, 459, 460, 461, 462, 463, 464, 470, 465, 466, 467, 468, 469, 471, 472, 473, 474, 476, 477, 478, 480, 481, 479, 477, 478, 479, 477, 480, 481, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 21, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 482; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/bm.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 909 "lib/gherkin/lexer/bm.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/bm.rb.rl" # line 918 "lib/gherkin/lexer/bm.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/bm.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/bm.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/bm.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/bm.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/bm.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/bm.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/bm.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/bm.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/bm.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/bm.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/bm.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/bm.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/bm.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/bm.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/bm.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/bm.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/bm.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/bm.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/bm.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/bm.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/bm.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/bm.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/bm.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/bm.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1162 "lib/gherkin/lexer/bm.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/bm.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1201 "lib/gherkin/lexer/bm.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/bm.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/sr_latn.rb0000644000004100000410000014344412244512574020600 0ustar www-datawww-data # line 1 "ragel/i18n/sr_latn.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Sr_latn #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/sr_latn.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/sr_latn.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 20, 21, 22, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 97, 102, 109, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 220, 222, 223, 225, 226, 228, 229, 230, 231, 232, 233, 234, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 320, 322, 324, 326, 329, 331, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 377, 379, 381, 384, 386, 388, 389, 390, 391, 392, 393, 394, 395, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 477, 479, 482, 484, 486, 488, 490, 492, 494, 496, 499, 501, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 585, 587, 589, 592, 594, 596, 597, 598, 599, 601, 602, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 628, 629, 630, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 712, 714, 717, 719, 722, 724, 726, 728, 730, 732, 734, 736, 739, 741, 744, 746, 748, 751, 753, 755, 757, 759, 761, 763, 766, 768, 770, 772, 774, 776, 778, 780, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 837, 839, 841, 844, 846, 848, 849, 850, 851, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 897, 899, 901, 903, 905, 907, 909, 911, 914, 915, 916, 917, 918, 919, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 945, 946, 947, 949, 950, 951, 955, 961, 964, 966, 972, 991, 993, 995, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1015, 1017, 1019, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1054, 1058, 1060, 1062, 1064, 1066, 1068, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 105, 117, 110, 107, 99, 105, 111, 110, 97, 108, 110, 111, 115, 116, 58, 10, 10, 10, 32, 35, 37, 64, 70, 75, 77, 79, 80, 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, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 97, 111, 100, 32, 97, 110, 99, 116, 101, 112, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 97, 10, 100, 10, 32, 97, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 114, 10, 105, 10, 109, 10, 101, 10, 114, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 97, 10, 100, 116, 10, 97, 10, 116, 10, 101, 111, 10, 97, 10, 116, 101, 107, 115, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 10, 101, 10, 112, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 114, 10, 105, 10, 109, 10, 101, 10, 114, 10, 99, 107, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 105, 10, 99, 10, 114, 10, 117, 10, 107, 10, 116, 10, 117, 10, 114, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 10, 100, 116, 10, 97, 10, 116, 10, 101, 111, 10, 97, 10, 116, 111, 103, 117, -60, 99, -121, 110, 115, 100, 97, 110, 111, 111, 118, 97, 98, 105, 110, 97, 111, 114, 122, 97, 100, 105, 110, 105, 109, 101, 114, 58, 105, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 116, 10, 101, 10, 112, 10, 101, 10, 107, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 115, 10, 100, 10, 97, 10, 110, 111, 10, 111, 10, 118, 10, 97, 10, 98, 10, 105, 10, 110, 10, 111, 114, 10, 122, 10, 97, 10, 100, 10, 105, 10, 109, 10, 101, 10, 114, 10, 99, 107, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 105, 10, 99, 10, 114, 10, 117, 10, 107, 10, 116, 10, 117, 10, 114, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 10, 100, 116, 10, 97, 10, 116, 10, 101, 111, 10, 97, 10, 116, 58, 10, 10, 10, 32, 35, 70, 77, 79, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 115, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 99, 107, 116, 101, 110, 97, 114, 105, 106, 111, 105, 58, 105, 99, 97, 114, 117, 107, 116, 117, 114, 97, 32, 115, 99, 101, 110, 97, 114, 105, 106, 97, 100, 116, 97, 116, 101, 111, 97, 116, 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, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 10, 111, 10, 110, 10, 99, 116, 10, 101, 10, 112, 10, 101, 10, 107, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 115, 10, 110, 111, 10, 111, 10, 118, 10, 97, 10, 98, 10, 105, 10, 110, 10, 111, 114, 10, 122, 10, 97, 10, 100, 10, 105, 10, 109, 10, 101, 10, 114, 10, 58, 105, 10, 99, 107, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 111, 10, 105, 10, 105, 10, 99, 10, 114, 10, 117, 10, 107, 10, 116, 10, 117, 10, 114, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 18, 1, 1, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 17, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 15, 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, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 15, 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, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 3, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 15, 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, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 3, 2, 2, 1, 1, 1, 7, 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, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 4, 3, 2, 4, 17, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 4, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 20, 22, 24, 43, 45, 47, 50, 53, 58, 63, 68, 73, 77, 81, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 127, 134, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 188, 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 230, 233, 236, 239, 242, 245, 248, 251, 254, 257, 260, 263, 266, 269, 272, 291, 294, 296, 299, 301, 304, 306, 308, 310, 312, 314, 316, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 436, 439, 442, 445, 449, 452, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 520, 523, 526, 530, 533, 536, 538, 540, 542, 544, 546, 548, 550, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 664, 667, 671, 674, 677, 680, 683, 686, 689, 692, 696, 699, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 823, 826, 829, 833, 836, 839, 841, 843, 845, 848, 850, 853, 855, 857, 860, 862, 864, 866, 868, 870, 872, 874, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 898, 900, 902, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1016, 1019, 1023, 1026, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1055, 1058, 1062, 1065, 1068, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1199, 1202, 1205, 1209, 1212, 1215, 1217, 1219, 1221, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1310, 1312, 1314, 1316, 1318, 1320, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1370, 1372, 1374, 1377, 1379, 1381, 1385, 1391, 1395, 1398, 1404, 1423, 1426, 1429, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1458, 1461, 1464, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1515, 1520, 1523, 1526, 1529, 1532, 1535, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 7, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 7, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 89, 88, 89, 90, 91, 92, 91, 93, 94, 95, 96, 97, 98, 90, 88, 89, 99, 88, 89, 100, 88, 89, 101, 88, 89, 102, 88, 89, 103, 88, 89, 104, 88, 89, 105, 88, 89, 106, 88, 89, 107, 88, 89, 108, 88, 89, 109, 88, 89, 110, 88, 89, 111, 88, 89, 112, 88, 89, 113, 88, 89, 114, 88, 89, 115, 88, 89, 116, 88, 89, 117, 88, 89, 118, 88, 89, 119, 88, 89, 120, 88, 89, 121, 88, 89, 122, 88, 89, 123, 88, 89, 124, 88, 89, 125, 88, 89, 126, 88, 128, 127, 129, 130, 131, 132, 133, 134, 135, 132, 136, 137, 138, 139, 140, 141, 142, 127, 0, 143, 144, 0, 145, 0, 57, 71, 0, 146, 0, 147, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 154, 153, 156, 155, 156, 157, 158, 159, 160, 158, 161, 162, 160, 163, 164, 165, 166, 167, 168, 157, 155, 156, 169, 155, 156, 170, 155, 156, 171, 155, 156, 172, 155, 156, 173, 155, 156, 174, 155, 156, 175, 155, 156, 176, 155, 156, 177, 155, 156, 178, 155, 156, 179, 155, 156, 180, 155, 156, 181, 155, 156, 182, 155, 156, 183, 155, 156, 184, 155, 156, 185, 155, 156, 186, 155, 156, 187, 155, 156, 188, 155, 156, 189, 155, 156, 190, 155, 156, 191, 155, 156, 192, 155, 156, 193, 155, 156, 194, 155, 156, 195, 155, 156, 196, 155, 156, 197, 155, 156, 198, 155, 156, 183, 155, 156, 199, 155, 156, 200, 155, 156, 183, 185, 155, 156, 201, 155, 156, 202, 155, 156, 203, 155, 204, 156, 194, 155, 194, 156, 155, 156, 205, 206, 155, 156, 207, 155, 156, 185, 155, 156, 208, 155, 156, 209, 155, 156, 210, 155, 156, 211, 155, 156, 198, 155, 156, 212, 155, 156, 213, 155, 156, 214, 155, 156, 215, 155, 156, 198, 155, 156, 216, 155, 156, 217, 155, 156, 218, 155, 156, 219, 155, 156, 220, 155, 156, 221, 155, 156, 198, 155, 156, 222, 155, 156, 223, 224, 155, 156, 225, 155, 156, 226, 155, 156, 185, 185, 155, 156, 227, 155, 156, 184, 155, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 234, 233, 236, 235, 236, 237, 238, 239, 240, 238, 241, 242, 240, 243, 244, 245, 246, 247, 248, 237, 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, 265, 235, 236, 266, 235, 236, 267, 235, 236, 268, 235, 236, 269, 235, 236, 270, 235, 236, 271, 235, 236, 272, 235, 236, 273, 235, 236, 274, 235, 236, 275, 235, 236, 276, 235, 236, 277, 235, 236, 278, 235, 236, 263, 235, 236, 279, 280, 235, 236, 281, 235, 236, 263, 265, 235, 236, 282, 235, 236, 283, 235, 236, 284, 235, 236, 277, 235, 236, 285, 235, 236, 286, 235, 236, 287, 235, 288, 236, 274, 235, 274, 236, 235, 236, 289, 290, 235, 236, 291, 235, 236, 265, 235, 236, 292, 235, 236, 293, 235, 236, 294, 235, 236, 295, 235, 236, 278, 235, 236, 296, 235, 236, 297, 235, 236, 298, 235, 236, 299, 235, 236, 278, 235, 236, 300, 301, 302, 235, 236, 303, 235, 236, 304, 235, 236, 305, 235, 236, 306, 235, 236, 307, 235, 236, 278, 235, 236, 308, 235, 236, 295, 235, 236, 309, 235, 236, 310, 235, 236, 311, 235, 236, 312, 235, 236, 313, 235, 236, 314, 235, 236, 315, 235, 236, 316, 235, 236, 317, 235, 236, 318, 235, 236, 319, 235, 236, 320, 235, 236, 321, 235, 236, 322, 235, 236, 323, 235, 236, 295, 235, 236, 324, 235, 236, 325, 326, 235, 236, 327, 235, 236, 328, 235, 236, 265, 265, 235, 236, 329, 235, 236, 264, 235, 330, 0, 331, 0, 332, 0, 333, 80, 0, 80, 0, 334, 335, 0, 336, 0, 71, 0, 337, 338, 0, 339, 0, 340, 0, 231, 0, 341, 0, 342, 0, 343, 0, 84, 0, 344, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 340, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 355, 0, 357, 356, 359, 358, 359, 360, 361, 362, 363, 361, 364, 365, 363, 366, 367, 368, 369, 370, 371, 360, 358, 359, 372, 358, 359, 373, 358, 359, 374, 358, 359, 375, 358, 359, 376, 358, 359, 377, 358, 359, 378, 358, 359, 379, 358, 359, 380, 358, 359, 381, 358, 359, 382, 358, 359, 383, 358, 359, 384, 358, 359, 385, 358, 359, 386, 358, 359, 387, 358, 359, 388, 358, 359, 389, 358, 359, 390, 358, 359, 391, 358, 359, 392, 358, 359, 393, 358, 359, 394, 358, 359, 395, 358, 359, 396, 358, 359, 397, 358, 359, 398, 358, 359, 399, 358, 359, 400, 358, 359, 401, 358, 359, 386, 358, 359, 402, 403, 358, 359, 404, 358, 359, 386, 388, 358, 359, 405, 358, 359, 406, 407, 358, 359, 408, 358, 359, 400, 358, 359, 409, 358, 359, 399, 358, 359, 410, 358, 359, 411, 358, 359, 412, 358, 413, 359, 397, 358, 397, 359, 358, 359, 414, 415, 358, 359, 416, 358, 359, 388, 358, 359, 417, 418, 358, 359, 419, 358, 359, 420, 358, 359, 401, 358, 359, 421, 358, 359, 422, 358, 359, 420, 358, 359, 423, 424, 358, 359, 425, 358, 359, 426, 358, 359, 421, 358, 359, 427, 358, 359, 428, 358, 359, 429, 358, 359, 401, 358, 359, 430, 431, 432, 358, 359, 433, 358, 359, 434, 358, 359, 435, 358, 359, 436, 358, 359, 437, 358, 359, 401, 358, 359, 438, 358, 359, 420, 358, 359, 439, 358, 359, 440, 358, 359, 441, 358, 359, 442, 358, 359, 443, 358, 359, 444, 358, 359, 445, 358, 359, 446, 358, 359, 447, 358, 359, 448, 358, 359, 449, 358, 359, 450, 358, 359, 451, 358, 359, 452, 358, 359, 453, 358, 359, 420, 358, 359, 454, 358, 359, 455, 456, 358, 359, 457, 358, 359, 458, 358, 359, 388, 388, 358, 359, 459, 358, 359, 387, 358, 460, 0, 462, 461, 464, 463, 464, 465, 466, 467, 468, 469, 466, 465, 463, 464, 470, 463, 464, 471, 463, 464, 472, 463, 464, 473, 463, 464, 474, 463, 464, 475, 463, 464, 476, 463, 464, 477, 463, 464, 478, 463, 464, 479, 463, 464, 480, 463, 464, 481, 463, 464, 482, 463, 464, 483, 463, 464, 484, 463, 464, 485, 463, 464, 486, 463, 487, 464, 478, 463, 478, 464, 463, 464, 488, 463, 464, 489, 463, 464, 490, 463, 464, 491, 463, 464, 492, 463, 464, 482, 463, 493, 494, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 502, 0, 355, 0, 354, 0, 503, 0, 504, 0, 151, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 504, 0, 520, 0, 521, 522, 0, 523, 0, 524, 0, 71, 71, 0, 525, 0, 70, 0, 526, 527, 526, 0, 530, 529, 531, 532, 529, 528, 0, 534, 535, 533, 0, 534, 533, 530, 536, 534, 535, 536, 533, 530, 537, 538, 539, 540, 541, 542, 543, 544, 541, 545, 546, 547, 548, 549, 550, 551, 537, 0, 89, 552, 88, 89, 553, 88, 89, 554, 555, 88, 89, 556, 88, 89, 124, 88, 89, 557, 88, 89, 123, 88, 89, 558, 88, 89, 559, 88, 89, 560, 88, 561, 89, 121, 88, 121, 89, 88, 89, 562, 88, 89, 563, 564, 88, 89, 565, 88, 89, 566, 88, 89, 125, 88, 89, 567, 88, 89, 568, 88, 89, 566, 88, 89, 569, 570, 88, 89, 571, 88, 89, 572, 88, 89, 567, 88, 89, 573, 88, 89, 574, 88, 89, 575, 88, 89, 576, 88, 89, 126, 125, 88, 89, 577, 578, 579, 88, 89, 580, 88, 89, 581, 88, 89, 582, 88, 89, 583, 88, 89, 584, 88, 89, 585, 125, 88, 89, 125, 88, 89, 586, 88, 89, 566, 88, 89, 587, 88, 89, 588, 88, 89, 589, 88, 89, 590, 88, 89, 591, 88, 89, 592, 88, 89, 593, 88, 89, 594, 88, 89, 595, 88, 89, 596, 88, 89, 597, 88, 89, 598, 88, 89, 599, 88, 89, 600, 88, 89, 601, 88, 89, 566, 88, 602, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 85, 259, 264, 275, 413, 441, 448, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 509, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 31, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 54, 55, 55, 4, 56, 70, 454, 461, 466, 474, 483, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 4, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 4, 4, 5, 15, 17, 31, 34, 37, 39, 85, 259, 264, 275, 413, 441, 448, 86, 88, 87, 89, 90, 163, 91, 92, 93, 94, 95, 96, 95, 96, 96, 4, 97, 111, 112, 114, 128, 131, 136, 144, 149, 156, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 4, 84, 113, 111, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 132, 133, 134, 135, 137, 139, 138, 140, 141, 142, 143, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 157, 158, 161, 159, 160, 162, 164, 165, 166, 167, 168, 169, 170, 169, 170, 170, 4, 171, 185, 186, 188, 202, 209, 214, 222, 227, 252, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 4, 84, 187, 185, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, 204, 206, 207, 208, 210, 211, 212, 213, 215, 217, 216, 218, 219, 220, 221, 223, 224, 225, 226, 228, 234, 236, 229, 230, 231, 232, 233, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 257, 255, 256, 258, 260, 261, 262, 263, 265, 267, 266, 268, 271, 269, 270, 272, 273, 274, 276, 281, 277, 278, 279, 280, 282, 283, 284, 285, 286, 384, 287, 288, 287, 288, 288, 4, 289, 303, 304, 306, 320, 329, 334, 344, 352, 377, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 4, 84, 305, 303, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 321, 323, 322, 324, 325, 327, 326, 328, 330, 331, 332, 333, 335, 337, 336, 338, 341, 339, 340, 342, 343, 345, 348, 346, 347, 349, 350, 351, 353, 359, 361, 354, 355, 356, 357, 358, 360, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 378, 379, 382, 380, 381, 383, 385, 386, 387, 386, 387, 387, 4, 388, 402, 407, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 84, 403, 404, 405, 406, 408, 409, 410, 411, 412, 414, 422, 425, 415, 416, 417, 418, 419, 420, 421, 423, 424, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 442, 443, 446, 444, 445, 447, 448, 449, 450, 452, 453, 451, 449, 450, 451, 449, 452, 453, 5, 15, 17, 31, 34, 37, 39, 85, 259, 264, 275, 413, 441, 448, 455, 456, 457, 459, 458, 460, 462, 463, 464, 465, 467, 468, 471, 469, 470, 472, 473, 475, 478, 476, 477, 479, 480, 481, 482, 484, 491, 493, 485, 486, 487, 488, 489, 490, 492, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 81, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 509; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/sr_latn.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 953 "lib/gherkin/lexer/sr_latn.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/sr_latn.rb.rl" # line 962 "lib/gherkin/lexer/sr_latn.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/sr_latn.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/sr_latn.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/sr_latn.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/sr_latn.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/sr_latn.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/sr_latn.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/sr_latn.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/sr_latn.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/sr_latn.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/sr_latn.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/sr_latn.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/sr_latn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/sr_latn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/sr_latn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/sr_latn.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/sr_latn.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/sr_latn.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/sr_latn.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/sr_latn.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/sr_latn.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/sr_latn.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/sr_latn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/sr_latn.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/sr_latn.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1206 "lib/gherkin/lexer/sr_latn.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/sr_latn.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1245 "lib/gherkin/lexer/sr_latn.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/sr_latn.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/eo.rb0000644000004100000410000011066312244512574017536 0ustar www-datawww-data # line 1 "ragel/i18n/eo.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Eo #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/eo.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/eo.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 135, 137, 139, 141, 143, 145, 147, 163, 164, 165, 166, 167, 168, 169, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 216, 218, 220, 222, 224, 226, 228, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 276, 279, 281, 283, 285, 287, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 359, 361, 363, 365, 367, 369, 371, 373, 375, 378, 380, 382, 384, 386, 388, 390, 393, 395, 397, 399, 401, 403, 404, 405, 406, 407, 408, 409, 410, 411, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 523, 526, 528, 530, 532, 534, 536, 537, 538, 539, 540, 541, 542, 543, 544, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 658, 664, 667, 669, 675, 691 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 68, 69, 70, 75, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 68, 69, 70, 75, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 111, 32, 110, 105, 116, 97, -60, -75, 111, 107, 122, 101, 109, 112, 108, 111, 106, 58, 10, 10, 10, 32, 35, 84, 124, 9, 13, 10, 114, 10, 97, 10, 106, 10, 116, 10, 111, 10, 58, 10, 32, 34, 35, 37, 42, 64, 68, 69, 70, 75, 83, 84, 124, 9, 13, 111, 110, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 75, 83, 84, 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, 111, 10, 32, 110, 10, 105, 10, 116, 10, 97, -60, 10, -75, 10, 10, 111, 10, 97, 111, 10, 106, 10, 110, 10, 116, 10, 117, 10, 114, 10, 111, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 111, 10, 58, 10, 99, 101, 10, 32, 100, 10, 114, 10, 97, 10, 106, 10, 116, 97, 111, 106, 110, 116, 117, 114, 111, 32, 100, 101, 32, 108, 97, 32, 115, 99, 101, 110, 97, 114, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 75, 83, 84, 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, 111, 10, 32, 110, 10, 105, 10, 116, 10, 97, -60, 10, -75, 10, 10, 111, 10, 97, 10, 106, 10, 99, 101, 10, 101, 10, 110, 10, 97, 10, 114, 10, 111, 10, 58, 10, 32, 100, 10, 114, 10, 97, 10, 106, 10, 116, 99, 101, 101, 110, 97, 114, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 83, 84, 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, 111, 10, 32, 110, 10, 105, 10, 116, 10, 97, -60, 10, -75, 10, 10, 111, 10, 111, 10, 110, 10, 111, 10, 58, 10, 97, 111, 10, 106, 10, 110, 10, 116, 10, 117, 10, 114, 10, 111, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 99, 101, 10, 32, 100, 10, 114, 10, 97, 10, 106, 10, 116, 32, 100, 114, 97, 106, 116, 111, 58, 10, 10, 10, 32, 35, 37, 64, 69, 70, 75, 83, 84, 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, 107, 10, 122, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 106, 10, 58, 10, 111, 10, 110, 10, 111, 10, 111, 10, 110, 10, 116, 10, 117, 10, 114, 10, 111, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 114, 10, 97, 10, 106, 10, 116, 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, 68, 69, 70, 75, 83, 84, 124, 9, 13, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 14, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 135, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 179, 182, 185, 188, 191, 194, 197, 213, 215, 217, 219, 221, 223, 225, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 289, 292, 295, 298, 301, 304, 307, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 350, 353, 356, 359, 362, 365, 368, 371, 374, 378, 382, 385, 388, 391, 394, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 507, 510, 513, 516, 519, 522, 525, 528, 531, 535, 538, 541, 544, 547, 550, 553, 557, 560, 563, 566, 569, 572, 574, 576, 578, 580, 582, 584, 586, 588, 601, 604, 607, 610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 748, 752, 755, 758, 761, 764, 767, 769, 771, 773, 775, 777, 779, 781, 783, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 946, 952, 956, 959, 965, 981 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 16, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 17, 0, 18, 0, 20, 21, 19, 23, 24, 22, 27, 26, 28, 26, 25, 31, 30, 32, 30, 29, 31, 30, 33, 30, 29, 31, 30, 34, 30, 29, 36, 35, 35, 0, 3, 37, 37, 0, 39, 40, 38, 3, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 58, 56, 60, 61, 59, 0, 0, 0, 0, 62, 63, 64, 63, 63, 66, 65, 62, 3, 67, 8, 67, 0, 68, 0, 55, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 86, 85, 88, 87, 88, 89, 90, 91, 90, 89, 87, 88, 92, 87, 88, 93, 87, 88, 94, 87, 88, 95, 87, 88, 96, 87, 88, 97, 87, 99, 98, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 98, 0, 112, 0, 113, 0, 114, 0, 115, 0, 117, 116, 119, 118, 119, 120, 121, 122, 123, 121, 124, 125, 126, 127, 120, 118, 119, 128, 118, 119, 129, 118, 119, 130, 118, 119, 131, 118, 119, 132, 118, 119, 133, 118, 119, 134, 118, 119, 135, 118, 119, 136, 118, 119, 137, 118, 119, 138, 118, 119, 139, 118, 119, 140, 118, 119, 141, 118, 119, 142, 118, 119, 143, 118, 119, 142, 144, 118, 119, 145, 118, 119, 146, 118, 119, 147, 118, 148, 119, 118, 149, 119, 118, 119, 150, 118, 119, 151, 152, 118, 119, 150, 118, 119, 153, 118, 119, 154, 118, 119, 155, 118, 119, 156, 118, 119, 157, 118, 119, 158, 118, 119, 159, 118, 119, 160, 118, 119, 161, 118, 119, 162, 118, 119, 163, 118, 119, 164, 118, 119, 165, 118, 119, 166, 118, 119, 167, 118, 119, 168, 118, 119, 169, 118, 119, 170, 118, 119, 171, 118, 119, 142, 118, 119, 166, 172, 118, 119, 142, 150, 118, 119, 173, 118, 119, 174, 118, 119, 175, 118, 119, 170, 118, 176, 177, 0, 75, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 199, 198, 201, 200, 201, 202, 203, 204, 205, 203, 206, 207, 208, 209, 202, 200, 201, 210, 200, 201, 211, 200, 201, 212, 200, 201, 213, 200, 201, 214, 200, 201, 215, 200, 201, 216, 200, 201, 217, 200, 201, 218, 200, 201, 219, 200, 201, 220, 200, 201, 221, 200, 201, 222, 200, 201, 223, 200, 201, 224, 200, 201, 225, 200, 201, 224, 226, 200, 201, 227, 200, 201, 228, 200, 201, 229, 200, 230, 201, 200, 231, 201, 200, 201, 232, 200, 201, 233, 200, 201, 232, 200, 201, 234, 235, 200, 201, 236, 200, 201, 237, 200, 201, 238, 200, 201, 239, 200, 201, 240, 200, 201, 224, 200, 201, 224, 232, 200, 201, 241, 200, 201, 242, 200, 201, 243, 200, 201, 239, 200, 244, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 253, 252, 255, 254, 255, 256, 257, 258, 259, 257, 260, 261, 262, 263, 264, 256, 254, 255, 265, 254, 255, 266, 254, 255, 267, 254, 255, 268, 254, 255, 269, 254, 255, 270, 254, 255, 271, 254, 255, 272, 254, 255, 273, 254, 255, 274, 254, 255, 275, 254, 255, 276, 254, 255, 277, 254, 255, 278, 254, 255, 279, 254, 255, 280, 254, 255, 279, 281, 254, 255, 282, 254, 255, 283, 254, 255, 284, 254, 285, 255, 254, 286, 255, 254, 255, 287, 254, 255, 288, 254, 255, 289, 254, 255, 290, 254, 255, 279, 254, 255, 291, 292, 254, 255, 287, 254, 255, 293, 254, 255, 294, 254, 255, 295, 254, 255, 296, 254, 255, 297, 254, 255, 298, 254, 255, 299, 254, 255, 300, 254, 255, 301, 254, 255, 302, 254, 255, 303, 254, 255, 304, 254, 255, 305, 254, 255, 306, 254, 255, 307, 254, 255, 308, 254, 255, 309, 254, 255, 289, 254, 255, 306, 310, 254, 255, 279, 287, 254, 255, 311, 254, 255, 312, 254, 255, 313, 254, 255, 289, 254, 55, 75, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 321, 320, 323, 322, 323, 324, 325, 326, 325, 327, 328, 329, 330, 331, 324, 322, 323, 332, 322, 323, 333, 322, 323, 334, 322, 323, 335, 322, 323, 336, 322, 323, 337, 322, 323, 338, 322, 323, 339, 322, 323, 340, 322, 323, 341, 322, 323, 342, 322, 323, 343, 322, 323, 344, 322, 323, 345, 322, 323, 346, 322, 323, 347, 322, 323, 348, 322, 323, 349, 322, 323, 350, 322, 323, 351, 322, 323, 352, 322, 323, 353, 322, 323, 354, 322, 323, 355, 322, 323, 356, 322, 323, 353, 322, 323, 357, 322, 323, 358, 322, 323, 359, 322, 323, 360, 322, 323, 361, 322, 323, 362, 322, 323, 363, 322, 323, 364, 322, 323, 365, 322, 323, 366, 322, 323, 367, 322, 323, 368, 322, 323, 369, 322, 323, 370, 322, 323, 371, 322, 323, 372, 322, 323, 373, 322, 323, 374, 322, 323, 356, 322, 323, 375, 322, 323, 376, 322, 323, 377, 322, 323, 356, 322, 378, 379, 378, 0, 382, 381, 383, 384, 381, 380, 0, 386, 387, 385, 0, 386, 385, 382, 388, 386, 387, 388, 385, 382, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 389, 0, 402, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 312, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 55, 56, 56, 4, 57, 58, 59, 60, 61, 62, 63, 4, 4, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 65, 66, 67, 68, 69, 70, 69, 70, 70, 4, 71, 85, 86, 94, 116, 118, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 4, 63, 87, 88, 89, 90, 91, 92, 93, 85, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 117, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 145, 146, 146, 4, 147, 161, 162, 170, 172, 180, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 4, 63, 163, 164, 165, 166, 167, 168, 169, 161, 171, 173, 179, 174, 175, 176, 177, 178, 181, 182, 183, 185, 247, 186, 187, 188, 189, 190, 191, 192, 193, 192, 193, 193, 4, 194, 208, 209, 217, 221, 241, 243, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 4, 63, 210, 211, 212, 213, 214, 215, 216, 208, 218, 219, 220, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 244, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 255, 256, 256, 4, 257, 271, 280, 283, 297, 302, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 4, 272, 273, 274, 275, 276, 277, 278, 279, 63, 281, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 303, 304, 305, 306, 307, 308, 310, 311, 309, 307, 308, 309, 307, 310, 311, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 21, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 312; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/eo.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 654 "lib/gherkin/lexer/eo.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/eo.rb.rl" # line 663 "lib/gherkin/lexer/eo.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/eo.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/eo.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/eo.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/eo.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/eo.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/eo.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/eo.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/eo.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/eo.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/eo.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/eo.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/eo.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/eo.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/eo.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/eo.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/eo.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/eo.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/eo.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/eo.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/eo.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/eo.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/eo.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/eo.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/eo.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 907 "lib/gherkin/lexer/eo.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/eo.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 946 "lib/gherkin/lexer/eo.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/eo.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/he.rb0000644000004100000410000012400512244512574017522 0ustar www-datawww-data # line 1 "ragel/i18n/he.rb.rl" require 'gherkin/native' module Gherkin module Lexer class He #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/he.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/he.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 19, 20, 22, 23, 24, 25, 27, 29, 40, 41, 42, 44, 46, 51, 56, 61, 66, 70, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 96, 103, 108, 112, 118, 121, 123, 129, 140, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 232, 238, 240, 243, 245, 247, 249, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 377, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 409, 415, 417, 420, 422, 424, 426, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 547, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 683, 690, 692, 695, 697, 699, 701, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 837, 838 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -41, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -111, -109, -107, -101, -88, -86, -41, -111, -106, -41, -100, 32, 10, 13, 10, 13, -41, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -41, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -41, 32, -103, -41, -108, -41, -103, -41, -96, -41, -86, -41, -97, -41, -107, -41, -110, -41, -98, -41, -112, -41, -107, -41, -86, 58, 10, 10, -41, 10, 32, 35, 124, 9, 13, -86, 10, -41, 10, -101, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 10, 58, -41, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -41, -110, -41, -99, -41, -112, -41, -87, -41, -88, -41, -89, -41, -94, 58, 10, 10, -41, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -107, -101, -86, 10, -41, 10, -111, -106, 10, -41, 10, -100, 10, 10, 32, -41, 10, 32, -103, 10, -41, 10, -108, 10, -41, 10, -103, 10, -41, 10, -96, 10, -41, 10, -86, 10, -41, 10, -97, 10, -41, 10, -110, 10, -41, 10, -99, 10, -41, 10, -112, 10, -41, 10, -87, 10, -41, 10, -88, 10, -41, 10, -111, -101, -88, 10, -41, 10, -96, 10, -41, 10, -103, 10, -41, 10, -86, 10, 10, 32, -41, 10, -86, 10, -41, 10, -88, 10, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, 10, 58, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 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, -41, -111, -101, -88, -41, -96, -41, -103, -41, -86, 32, -41, -86, -41, -88, -41, -105, -41, -103, -41, -87, 58, 10, 10, -41, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -107, -101, -86, 10, -41, 10, -111, -106, 10, -41, 10, -100, 10, 10, 32, -41, 10, 32, -103, 10, -41, 10, -108, 10, -41, 10, -103, 10, -41, 10, -96, 10, -41, 10, -86, 10, -41, 10, -97, 10, -41, 10, -110, 10, -41, 10, -99, 10, -41, 10, -112, 10, -41, 10, -87, 10, -41, 10, -88, 10, -41, 10, -101, -88, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 10, 58, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, 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, -41, -107, -41, -96, -41, -108, 58, 10, 10, -41, 10, 32, 35, 37, 64, 9, 13, -109, -88, -86, 10, -41, 10, -107, 10, -41, 10, -110, 10, -41, 10, -98, 10, -41, 10, -112, 10, -41, 10, -107, 10, -41, 10, -86, 10, 10, 58, -41, 10, -89, 10, -41, 10, -94, 10, -41, 10, -111, -101, -88, 10, -41, 10, -96, 10, -41, 10, -103, 10, -41, 10, -86, 10, 10, 32, -41, 10, -86, 10, -41, 10, -88, 10, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 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, -41, -105, -41, -103, -41, -87, 58, 10, 10, -41, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -107, -101, -88, -86, 10, -41, 10, -111, -106, 10, -41, 10, -100, 10, 10, 32, -41, 10, 32, -103, 10, -41, 10, -108, 10, -41, 10, -103, 10, -41, 10, -96, 10, -41, 10, -86, 10, -41, 10, -97, 10, -41, 10, -110, 10, -41, 10, -99, 10, -41, 10, -112, 10, -41, 10, -87, 10, -41, 10, -88, 10, -41, 10, -89, 10, -41, 10, -94, 10, 10, 58, -41, 10, -111, -101, -88, 10, -41, 10, -96, 10, -41, 10, -103, 10, -41, 10, -86, 10, 10, 32, -41, 10, -86, 10, -41, 10, -88, 10, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 7, 1, 2, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 6, 2, 3, 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, 4, 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, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 6, 2, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 1, 7, 7, 2, 3, 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, 4, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 20, 22, 25, 27, 29, 31, 34, 37, 48, 50, 52, 55, 58, 63, 68, 73, 78, 82, 86, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 124, 131, 136, 140, 146, 150, 153, 159, 170, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 232, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 316, 323, 326, 330, 333, 336, 339, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 530, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 583, 590, 593, 597, 600, 603, 606, 610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 787, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 989, 997, 1000, 1004, 1007, 1010, 1013, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1216, 1218 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 14, 15, 16, 17, 0, 18, 0, 19, 20, 0, 21, 0, 22, 0, 23, 0, 25, 26, 24, 28, 29, 27, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 30, 0, 31, 0, 33, 34, 32, 36, 37, 35, 40, 39, 41, 39, 38, 44, 43, 45, 43, 42, 44, 43, 46, 43, 42, 44, 43, 47, 43, 42, 49, 48, 48, 0, 4, 50, 50, 0, 52, 53, 51, 4, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 0, 0, 0, 0, 68, 69, 70, 69, 69, 72, 71, 68, 4, 73, 9, 73, 0, 74, 75, 74, 0, 78, 77, 79, 80, 77, 76, 0, 82, 83, 81, 0, 82, 81, 78, 84, 82, 83, 84, 81, 85, 78, 86, 87, 88, 89, 90, 91, 92, 86, 0, 93, 23, 0, 22, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 22, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 117, 116, 119, 118, 120, 119, 121, 122, 122, 121, 118, 123, 119, 118, 124, 119, 118, 125, 119, 118, 126, 119, 118, 127, 119, 118, 128, 119, 118, 129, 119, 118, 130, 119, 118, 131, 119, 118, 119, 132, 118, 133, 135, 134, 136, 137, 138, 139, 140, 141, 134, 0, 142, 0, 143, 0, 144, 0, 22, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 22, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 156, 155, 158, 157, 159, 158, 160, 161, 162, 163, 161, 160, 157, 164, 165, 166, 167, 168, 158, 157, 169, 158, 157, 170, 171, 158, 157, 172, 158, 157, 173, 158, 157, 158, 174, 157, 175, 158, 174, 157, 173, 158, 157, 176, 158, 157, 177, 158, 157, 178, 158, 157, 179, 158, 157, 180, 158, 157, 181, 158, 157, 182, 158, 157, 183, 158, 157, 184, 158, 157, 173, 158, 157, 185, 158, 157, 186, 158, 157, 187, 158, 157, 173, 158, 157, 188, 158, 157, 189, 158, 157, 190, 158, 157, 191, 158, 157, 192, 158, 157, 173, 158, 157, 193, 158, 157, 194, 195, 196, 158, 157, 197, 158, 157, 198, 158, 157, 199, 158, 157, 200, 158, 157, 201, 158, 157, 202, 158, 157, 158, 203, 157, 204, 158, 157, 205, 158, 157, 206, 158, 157, 196, 158, 157, 207, 158, 157, 208, 158, 157, 209, 158, 157, 210, 158, 157, 211, 158, 157, 212, 158, 157, 158, 174, 157, 213, 158, 157, 214, 158, 157, 215, 158, 157, 216, 158, 157, 217, 158, 157, 212, 158, 157, 158, 218, 157, 158, 219, 157, 158, 220, 157, 158, 221, 157, 158, 222, 157, 158, 223, 157, 158, 224, 157, 158, 225, 157, 158, 226, 157, 158, 227, 157, 158, 228, 157, 158, 229, 157, 158, 230, 157, 158, 231, 157, 232, 0, 233, 234, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 255, 254, 257, 256, 258, 257, 259, 260, 261, 262, 260, 259, 256, 263, 264, 265, 266, 267, 257, 256, 268, 257, 256, 269, 270, 257, 256, 271, 257, 256, 272, 257, 256, 257, 273, 256, 274, 257, 273, 256, 272, 257, 256, 275, 257, 256, 276, 257, 256, 277, 257, 256, 278, 257, 256, 279, 257, 256, 280, 257, 256, 281, 257, 256, 282, 257, 256, 283, 257, 256, 272, 257, 256, 284, 257, 256, 285, 257, 256, 286, 257, 256, 272, 257, 256, 287, 257, 256, 288, 257, 256, 289, 257, 256, 290, 257, 256, 291, 257, 256, 272, 257, 256, 292, 257, 256, 293, 294, 257, 256, 295, 257, 256, 296, 257, 256, 297, 257, 256, 298, 257, 256, 299, 257, 256, 300, 257, 256, 257, 273, 256, 301, 257, 256, 302, 257, 256, 303, 257, 256, 304, 257, 256, 305, 257, 256, 300, 257, 256, 257, 306, 256, 257, 307, 256, 257, 308, 256, 257, 309, 256, 257, 310, 256, 257, 311, 256, 257, 312, 256, 257, 313, 256, 257, 314, 256, 257, 315, 256, 257, 316, 256, 257, 317, 256, 257, 318, 256, 257, 319, 256, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 328, 327, 330, 329, 331, 330, 332, 333, 334, 333, 332, 329, 335, 336, 337, 330, 329, 338, 330, 329, 339, 330, 329, 340, 330, 329, 341, 330, 329, 342, 330, 329, 343, 330, 329, 344, 330, 329, 345, 330, 329, 346, 330, 329, 347, 330, 329, 348, 330, 329, 349, 330, 329, 330, 350, 329, 351, 330, 329, 352, 330, 329, 353, 330, 329, 349, 330, 329, 354, 330, 329, 355, 356, 357, 330, 329, 358, 330, 329, 359, 330, 329, 360, 330, 329, 361, 330, 329, 362, 330, 329, 363, 330, 329, 330, 364, 329, 365, 330, 329, 366, 330, 329, 367, 330, 329, 357, 330, 329, 368, 330, 329, 369, 330, 329, 370, 330, 329, 371, 330, 329, 372, 330, 329, 349, 330, 329, 373, 330, 329, 374, 330, 329, 375, 330, 329, 376, 330, 329, 377, 330, 329, 349, 330, 329, 330, 378, 329, 330, 379, 329, 330, 380, 329, 330, 381, 329, 330, 382, 329, 330, 383, 329, 330, 384, 329, 330, 385, 329, 330, 386, 329, 330, 387, 329, 330, 388, 329, 330, 389, 329, 330, 390, 329, 330, 391, 329, 392, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 400, 399, 402, 401, 403, 402, 404, 405, 406, 407, 405, 404, 401, 408, 409, 410, 411, 412, 413, 402, 401, 414, 402, 401, 415, 416, 402, 401, 417, 402, 401, 418, 402, 401, 402, 419, 401, 420, 402, 419, 401, 418, 402, 401, 421, 402, 401, 422, 402, 401, 423, 402, 401, 424, 402, 401, 425, 402, 401, 426, 402, 401, 427, 402, 401, 428, 402, 401, 429, 402, 401, 418, 402, 401, 430, 402, 401, 431, 402, 401, 432, 402, 401, 418, 402, 401, 433, 402, 401, 434, 402, 401, 435, 402, 401, 436, 402, 401, 437, 402, 401, 418, 402, 401, 438, 402, 401, 439, 402, 401, 440, 402, 401, 441, 402, 401, 402, 419, 401, 442, 402, 401, 443, 444, 445, 402, 401, 446, 402, 401, 447, 402, 401, 448, 402, 401, 449, 402, 401, 450, 402, 401, 451, 402, 401, 402, 452, 401, 453, 402, 401, 454, 402, 401, 455, 402, 401, 445, 402, 401, 456, 402, 401, 457, 402, 401, 458, 402, 401, 459, 402, 401, 460, 402, 401, 441, 402, 401, 461, 402, 401, 462, 402, 401, 463, 402, 401, 464, 402, 401, 465, 402, 401, 441, 402, 401, 402, 466, 401, 402, 467, 401, 402, 468, 401, 402, 469, 401, 402, 470, 401, 402, 471, 401, 402, 472, 401, 402, 473, 401, 402, 474, 401, 402, 475, 401, 402, 476, 401, 402, 477, 401, 402, 478, 401, 402, 479, 401, 480, 0, 3, 0, 481, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 400, 10, 10, 11, 21, 23, 7, 37, 40, 3, 48, 58, 85, 89, 95, 171, 4, 5, 46, 6, 7, 8, 9, 10, 22, 9, 10, 22, 12, 13, 14, 15, 14, 14, 15, 14, 16, 16, 16, 17, 16, 16, 16, 17, 18, 19, 20, 10, 20, 21, 10, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 402, 38, 39, 10, 38, 37, 39, 40, 41, 42, 44, 45, 43, 41, 42, 43, 41, 44, 2, 45, 11, 21, 23, 7, 37, 40, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 72, 73, 74, 73, 10, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 2, 10, 10, 11, 21, 23, 7, 37, 40, 86, 87, 88, 90, 91, 92, 93, 94, 96, 97, 98, 99, 100, 101, 102, 101, 102, 103, 102, 10, 157, 108, 104, 111, 121, 125, 131, 105, 106, 109, 107, 108, 84, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 126, 127, 128, 129, 130, 132, 133, 151, 144, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 10, 172, 173, 251, 318, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 192, 193, 194, 193, 10, 237, 199, 195, 202, 212, 216, 222, 196, 197, 200, 198, 199, 84, 201, 203, 204, 205, 206, 207, 208, 209, 210, 211, 213, 214, 215, 217, 218, 219, 220, 221, 223, 224, 231, 225, 226, 227, 228, 229, 230, 232, 233, 234, 235, 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 10, 252, 253, 254, 255, 256, 257, 258, 259, 260, 259, 260, 261, 260, 10, 304, 262, 275, 279, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 84, 276, 277, 278, 280, 281, 298, 292, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 293, 294, 295, 296, 297, 299, 300, 301, 302, 303, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 10, 319, 320, 321, 322, 323, 324, 325, 326, 327, 326, 327, 328, 327, 10, 386, 333, 329, 336, 346, 350, 356, 361, 330, 331, 334, 332, 333, 84, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 347, 348, 349, 351, 352, 353, 354, 355, 357, 358, 359, 360, 362, 363, 380, 374, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 10, 401, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 17, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 402; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/he.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 777 "lib/gherkin/lexer/he.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/he.rb.rl" # line 786 "lib/gherkin/lexer/he.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/he.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/he.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/he.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/he.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/he.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/he.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/he.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/he.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/he.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/he.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/he.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/he.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/he.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/he.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/he.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/he.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/he.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/he.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/he.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/he.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/he.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/he.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/he.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/he.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1030 "lib/gherkin/lexer/he.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/he.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1069 "lib/gherkin/lexer/he.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/he.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/cy_gb.rb0000644000004100000410000011424212244512574020213 0ustar www-datawww-data # line 1 "ragel/i18n/cy_gb.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Cy_gb #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/cy_gb.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/cy_gb.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 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, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 353, 355, 357, 359, 361, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 493, 494, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 632, 636, 642, 645, 647, 653, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 79, 80, 83, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 79, 80, 83, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 110, 114, 114, 104, 101, 103, 101, 100, 105, 103, 32, 97, 119, 101, 100, 100, 58, 10, 10, 10, 32, 35, 37, 64, 65, 67, 69, 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, 114, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 79, 80, 83, 89, 124, 9, 13, 101, 102, 110, 100, 105, 114, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 79, 80, 83, 89, 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, 110, 114, 10, 114, 10, 104, 10, 101, 10, 103, 10, 101, 10, 100, 10, 105, 10, 103, 10, 32, 10, 97, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 110, 10, 100, 10, 114, 10, 121, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 65, 10, 109, 10, 108, 10, 105, 10, 110, 10, 101, 10, 108, 10, 108, 10, 111, 10, 108, 10, 110, 110, 103, 104, 114, 101, 105, 102, 102, 116, 105, 97, 117, 58, 10, 10, 10, 32, 35, 65, 124, 9, 13, 10, 114, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 110, 100, 114, 121, 99, 101, 110, 97, 114, 105, 111, 32, 58, 65, 109, 108, 105, 110, 101, 108, 108, 111, 108, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 79, 80, 83, 89, 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, 110, 114, 10, 114, 10, 104, 10, 101, 10, 103, 10, 101, 10, 100, 10, 105, 10, 103, 10, 32, 10, 97, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 110, 10, 100, 10, 114, 10, 121, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 110, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 79, 80, 83, 89, 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, 110, 114, 10, 114, 10, 104, 10, 101, 10, 103, 10, 101, 10, 100, 10, 105, 10, 103, 10, 32, 10, 97, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 101, 10, 102, 10, 110, 10, 100, 10, 105, 10, 114, 10, 110, 10, 100, 10, 114, 10, 121, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 65, 10, 109, 10, 108, 10, 105, 10, 110, 10, 101, 10, 108, 10, 108, 10, 111, 10, 108, 10, 110, 110, 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, 67, 69, 79, 80, 83, 89, 124, 9, 13, 10, 101, 10, 102, 10, 110, 10, 100, 10, 105, 10, 114, 10, 110, 10, 103, 10, 104, 10, 114, 10, 101, 10, 105, 10, 102, 10, 102, 10, 116, 10, 105, 10, 97, 10, 117, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 65, 10, 109, 10, 108, 10, 105, 10, 110, 10, 101, 10, 108, 10, 108, 10, 111, 10, 108, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 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, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 4, 3, 2, 4, 15, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 235, 238, 241, 244, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 494, 497, 500, 503, 506, 509, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 709, 711, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 910, 914, 920, 924, 927, 933, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 56, 69, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 89, 88, 89, 90, 91, 92, 91, 93, 94, 95, 96, 90, 88, 89, 97, 88, 89, 98, 88, 89, 99, 88, 89, 100, 88, 89, 101, 88, 89, 102, 88, 89, 103, 88, 89, 104, 88, 89, 105, 88, 89, 106, 88, 89, 107, 88, 89, 108, 88, 89, 109, 88, 89, 110, 88, 89, 111, 88, 89, 112, 88, 89, 113, 88, 89, 114, 88, 89, 115, 88, 89, 116, 88, 118, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 117, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 140, 139, 142, 141, 142, 143, 144, 145, 146, 144, 147, 148, 149, 150, 151, 143, 141, 142, 152, 141, 142, 153, 141, 142, 154, 141, 142, 155, 141, 142, 156, 141, 142, 157, 141, 142, 158, 141, 142, 159, 141, 142, 160, 141, 142, 161, 141, 142, 162, 141, 142, 163, 141, 142, 164, 141, 142, 165, 141, 142, 166, 141, 142, 166, 167, 168, 141, 142, 169, 141, 142, 170, 141, 142, 171, 141, 142, 172, 141, 142, 173, 141, 142, 174, 141, 142, 175, 141, 142, 176, 141, 142, 177, 141, 142, 178, 141, 142, 179, 141, 142, 180, 141, 142, 181, 141, 142, 182, 141, 142, 166, 141, 142, 183, 141, 142, 178, 141, 142, 184, 141, 142, 183, 141, 142, 185, 141, 142, 186, 141, 142, 187, 141, 142, 188, 141, 142, 189, 141, 142, 190, 141, 142, 191, 141, 142, 192, 166, 141, 142, 193, 141, 142, 194, 141, 142, 195, 141, 142, 196, 141, 142, 197, 141, 142, 198, 141, 142, 199, 141, 142, 200, 141, 142, 201, 141, 142, 182, 141, 142, 177, 141, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 216, 215, 218, 217, 218, 219, 220, 221, 220, 219, 217, 218, 222, 217, 218, 223, 217, 218, 224, 217, 218, 225, 217, 218, 226, 217, 218, 227, 217, 228, 0, 80, 0, 229, 0, 228, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 251, 250, 253, 252, 253, 254, 255, 256, 257, 255, 258, 259, 260, 261, 262, 254, 252, 253, 263, 252, 253, 264, 252, 253, 265, 252, 253, 266, 252, 253, 267, 252, 253, 268, 252, 253, 269, 252, 253, 270, 252, 253, 271, 252, 253, 272, 252, 253, 273, 252, 253, 274, 252, 253, 275, 252, 253, 276, 252, 253, 277, 252, 253, 277, 278, 279, 252, 253, 280, 252, 253, 281, 252, 253, 282, 252, 253, 283, 252, 253, 284, 252, 253, 285, 252, 253, 286, 252, 253, 287, 252, 253, 288, 252, 253, 289, 252, 253, 290, 252, 253, 291, 252, 253, 292, 252, 253, 293, 252, 253, 277, 252, 253, 294, 252, 253, 289, 252, 253, 295, 252, 253, 294, 252, 253, 296, 252, 253, 297, 252, 253, 298, 252, 253, 299, 252, 253, 300, 252, 253, 301, 252, 253, 293, 252, 253, 288, 252, 303, 302, 305, 304, 305, 306, 307, 308, 309, 307, 310, 311, 312, 313, 314, 315, 306, 304, 305, 316, 304, 305, 317, 304, 305, 318, 304, 305, 319, 304, 305, 320, 304, 305, 321, 304, 305, 322, 304, 305, 323, 304, 305, 324, 304, 305, 325, 304, 305, 326, 304, 305, 327, 304, 305, 328, 304, 305, 329, 304, 305, 330, 304, 305, 330, 331, 332, 304, 305, 333, 304, 305, 334, 304, 305, 335, 304, 305, 336, 304, 305, 337, 304, 305, 338, 304, 305, 339, 304, 305, 340, 304, 305, 341, 304, 305, 342, 304, 305, 343, 304, 305, 344, 304, 305, 345, 304, 305, 346, 304, 305, 330, 304, 305, 347, 304, 305, 348, 304, 305, 349, 304, 305, 350, 304, 305, 351, 304, 305, 346, 304, 305, 352, 304, 305, 342, 304, 305, 353, 304, 305, 352, 304, 305, 354, 304, 305, 355, 304, 305, 356, 304, 305, 357, 304, 305, 358, 304, 305, 359, 304, 305, 360, 304, 305, 361, 330, 304, 305, 362, 304, 305, 363, 304, 305, 364, 304, 305, 365, 304, 305, 366, 304, 305, 367, 304, 305, 368, 304, 305, 369, 304, 305, 370, 304, 305, 346, 304, 305, 341, 304, 79, 0, 371, 372, 371, 0, 375, 374, 376, 377, 374, 373, 0, 379, 380, 378, 0, 379, 378, 375, 381, 379, 380, 381, 378, 375, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 382, 0, 89, 396, 88, 89, 397, 88, 89, 398, 88, 89, 399, 88, 89, 400, 88, 89, 115, 88, 89, 401, 88, 89, 402, 88, 89, 403, 88, 89, 404, 88, 89, 405, 88, 89, 406, 88, 89, 407, 88, 89, 408, 88, 89, 409, 88, 89, 410, 88, 89, 411, 88, 89, 115, 88, 89, 412, 88, 89, 413, 88, 89, 414, 88, 89, 415, 88, 89, 416, 88, 89, 417, 88, 89, 418, 88, 89, 419, 116, 88, 89, 420, 88, 89, 421, 88, 89, 422, 88, 89, 423, 88, 89, 424, 88, 89, 425, 88, 89, 426, 88, 89, 427, 88, 89, 428, 88, 89, 115, 88, 429, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 338, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 48, 39, 40, 41, 42, 43, 44, 45, 46, 47, 31, 49, 50, 51, 52, 53, 54, 55, 54, 55, 55, 4, 56, 70, 302, 308, 320, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 4, 71, 72, 73, 74, 75, 76, 4, 4, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 78, 79, 80, 81, 82, 83, 84, 85, 86, 85, 86, 86, 4, 87, 101, 102, 118, 120, 122, 140, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 4, 76, 103, 113, 104, 105, 106, 107, 108, 109, 110, 111, 112, 101, 114, 115, 116, 117, 119, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 155, 156, 156, 4, 157, 158, 159, 160, 161, 162, 76, 164, 166, 168, 169, 170, 171, 172, 173, 174, 175, 232, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 187, 188, 188, 4, 189, 203, 204, 220, 222, 224, 231, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 4, 76, 205, 215, 206, 207, 208, 209, 210, 211, 212, 213, 214, 203, 216, 217, 218, 219, 221, 223, 225, 226, 227, 228, 229, 230, 233, 234, 233, 234, 234, 4, 235, 249, 250, 266, 272, 274, 276, 294, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 4, 76, 251, 261, 252, 253, 254, 255, 256, 257, 258, 259, 260, 249, 262, 263, 264, 265, 267, 268, 269, 270, 271, 273, 275, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 296, 297, 298, 300, 301, 299, 297, 298, 299, 297, 300, 301, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 303, 304, 305, 306, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 338; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/cy_gb.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 691 "lib/gherkin/lexer/cy_gb.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/cy_gb.rb.rl" # line 700 "lib/gherkin/lexer/cy_gb.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/cy_gb.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/cy_gb.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/cy_gb.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/cy_gb.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/cy_gb.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/cy_gb.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/cy_gb.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/cy_gb.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/cy_gb.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/cy_gb.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/cy_gb.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/cy_gb.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/cy_gb.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/cy_gb.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/cy_gb.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/cy_gb.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/cy_gb.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/cy_gb.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/cy_gb.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/cy_gb.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/cy_gb.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/cy_gb.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/cy_gb.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/cy_gb.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 944 "lib/gherkin/lexer/cy_gb.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/cy_gb.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 983 "lib/gherkin/lexer/cy_gb.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/cy_gb.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/fr.rb0000644000004100000410000013506512244512574017545 0ustar www-datawww-data # line 1 "ragel/i18n/fr.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Fr #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/fr.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/fr.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 38, 40, 60, 61, 62, 64, 66, 71, 76, 81, 86, 90, 94, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 117, 124, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 188, 208, 210, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 390, 392, 394, 396, 398, 400, 402, 404, 406, 407, 408, 409, 410, 411, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 479, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 568, 570, 572, 574, 576, 578, 580, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 602, 603, 604, 605, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 663, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 814, 816, 818, 819, 820, 824, 830, 833, 835, 841, 861, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 998, 1000, 1002, 1004, 1005, 1006 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, -119, 116, 97, 110, 116, 32, 100, 111, 110, 110, -61, -87, 32, 101, 115, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 111, 114, 115, 111, 110, 116, 101, 120, 116, 101, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 70, 76, 77, 80, 81, 83, 9, 13, -119, 10, 10, 116, 10, 97, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 110, 10, 110, -61, 10, -87, 10, 10, 32, 101, 115, -61, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, 116, 120, 32, 97, 101, 109, 112, 108, 101, 115, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 58, 111, 110, 99, 116, 105, 111, 110, 110, 97, 108, 105, 116, -61, -87, 58, 10, 10, 10, 32, 35, 37, 64, 67, 69, 70, 80, 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, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 101, 10, 58, 10, 120, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 115, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 108, 10, 97, 10, 110, 10, 32, 10, 100, 10, 117, 10, 32, 10, 83, 115, 10, 99, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 111, 114, 115, 113, 117, 39, 101, 97, 105, 108, 97, 110, 32, 100, 117, 32, 83, 115, 99, -61, -87, 110, 97, 114, 105, 111, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 70, 76, 77, 81, 83, 9, 13, -119, 10, 10, 116, 10, 97, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 110, 10, 110, -61, 10, -87, 10, 10, 32, 101, 115, 10, 32, 115, 10, 32, 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, 108, 10, 111, 10, 114, 10, 115, 10, 116, 10, 32, 97, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 58, 10, 111, 10, 114, 10, 115, 10, 113, 10, 117, 10, 39, 101, 10, 97, 10, 105, 10, 117, 10, 97, 10, 110, 10, 100, 10, 99, 111, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 105, 10, 116, 117, 97, 110, 100, 99, 111, -61, -87, 110, 97, 114, 105, 111, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 9, 13, -119, 10, 10, 116, 10, 97, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 110, 10, 110, -61, 10, -87, 10, 10, 32, 101, 115, 10, 32, 115, 10, 32, 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, 108, 10, 111, 10, 114, 10, 115, 10, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 101, 10, 58, 10, 116, 10, 32, 97, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 111, 10, 114, 10, 115, 10, 113, 10, 117, 10, 39, 101, 10, 97, 10, 105, 10, 108, 10, 97, 10, 110, 10, 32, 10, 100, 10, 117, 10, 32, 10, 83, 115, 10, 99, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 97, 10, 110, 10, 100, 10, 99, 111, 10, 105, 10, 116, 105, 116, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, 10, 32, 115, 10, 32, 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, 108, 10, 111, 10, 114, 10, 115, 10, 116, 10, 32, 97, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 58, 10, 111, 10, 114, 10, 115, 10, 113, 10, 117, 10, 39, 101, 10, 97, 10, 105, 10, 108, 10, 97, 10, 110, 10, 32, 10, 100, 10, 117, 10, 32, 10, 83, 115, 10, 99, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 97, 10, 110, 10, 100, 10, 99, 111, 10, 105, 10, 116, 32, 115, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 18, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 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, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 2, 4, 3, 2, 4, 18, 3, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 49, 52, 55, 75, 77, 79, 82, 85, 90, 95, 100, 105, 109, 113, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 153, 160, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 251, 271, 274, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 547, 550, 553, 556, 559, 562, 565, 568, 571, 573, 575, 577, 579, 581, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 684, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 816, 819, 822, 825, 828, 831, 834, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 867, 869, 871, 873, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 955, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1179, 1182, 1185, 1187, 1189, 1193, 1199, 1203, 1206, 1212, 1232, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1435, 1438, 1441, 1444, 1446, 1448 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 33, 34, 0, 36, 37, 35, 39, 40, 38, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 3, 0, 41, 0, 42, 0, 44, 45, 43, 47, 48, 46, 51, 50, 52, 50, 49, 55, 54, 56, 54, 53, 55, 54, 57, 54, 53, 55, 54, 58, 54, 53, 60, 59, 59, 0, 4, 61, 61, 0, 63, 64, 62, 4, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 32, 0, 0, 0, 0, 0, 79, 80, 81, 80, 80, 83, 82, 79, 4, 84, 9, 84, 0, 85, 0, 86, 0, 87, 0, 34, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 97, 96, 99, 98, 100, 99, 101, 102, 103, 104, 102, 105, 106, 107, 108, 109, 110, 111, 112, 101, 98, 113, 99, 98, 99, 114, 98, 99, 115, 98, 99, 116, 98, 99, 117, 98, 99, 118, 98, 99, 119, 98, 99, 120, 98, 99, 121, 98, 99, 122, 98, 123, 99, 98, 124, 99, 98, 99, 125, 126, 127, 98, 128, 130, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 129, 0, 146, 147, 0, 32, 22, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 156, 155, 158, 157, 158, 159, 160, 161, 160, 159, 157, 158, 162, 157, 158, 163, 157, 158, 164, 157, 158, 165, 157, 158, 166, 157, 158, 167, 157, 158, 168, 157, 158, 169, 157, 158, 170, 157, 158, 171, 157, 158, 172, 157, 158, 173, 157, 174, 158, 157, 175, 158, 157, 158, 176, 157, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 193, 192, 195, 194, 195, 196, 197, 198, 197, 199, 200, 201, 202, 203, 196, 194, 195, 204, 194, 195, 205, 194, 195, 206, 194, 195, 207, 194, 195, 208, 194, 195, 209, 194, 195, 210, 194, 195, 211, 194, 195, 212, 194, 195, 213, 194, 195, 214, 194, 195, 215, 194, 195, 216, 194, 195, 217, 194, 195, 218, 194, 195, 219, 194, 195, 220, 194, 195, 221, 194, 195, 222, 194, 195, 223, 194, 195, 224, 194, 195, 225, 194, 195, 226, 194, 195, 227, 194, 195, 228, 194, 195, 229, 194, 195, 230, 194, 195, 231, 194, 195, 224, 194, 195, 232, 194, 195, 233, 194, 195, 234, 194, 195, 235, 194, 195, 236, 194, 195, 237, 194, 195, 238, 194, 195, 239, 194, 195, 240, 194, 195, 241, 194, 195, 242, 194, 195, 243, 194, 244, 195, 194, 224, 195, 194, 195, 245, 194, 195, 246, 194, 195, 247, 194, 195, 248, 194, 195, 249, 194, 195, 250, 194, 195, 251, 194, 195, 252, 252, 194, 195, 253, 194, 254, 195, 194, 255, 195, 194, 195, 256, 194, 195, 257, 194, 195, 258, 194, 195, 259, 194, 195, 224, 194, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 32, 34, 0, 265, 0, 87, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 284, 283, 286, 285, 287, 286, 288, 289, 290, 291, 289, 292, 293, 294, 295, 296, 297, 298, 288, 285, 299, 286, 285, 286, 300, 285, 286, 301, 285, 286, 302, 285, 286, 303, 285, 286, 304, 285, 286, 305, 285, 286, 306, 285, 286, 307, 285, 286, 308, 285, 309, 286, 285, 310, 286, 285, 286, 311, 312, 313, 285, 286, 311, 313, 285, 286, 311, 285, 286, 314, 285, 286, 315, 285, 286, 316, 285, 286, 317, 285, 286, 318, 285, 286, 319, 285, 286, 320, 285, 286, 321, 285, 286, 322, 285, 286, 323, 285, 286, 324, 285, 286, 325, 285, 286, 326, 285, 286, 327, 285, 286, 328, 285, 286, 329, 285, 286, 330, 285, 286, 313, 285, 286, 331, 285, 286, 311, 301, 285, 286, 332, 285, 286, 333, 285, 286, 334, 285, 286, 335, 285, 286, 336, 285, 286, 337, 285, 286, 338, 285, 286, 339, 285, 286, 340, 285, 286, 341, 285, 286, 342, 285, 286, 343, 285, 344, 286, 285, 345, 286, 285, 286, 311, 285, 286, 346, 285, 286, 347, 285, 286, 348, 285, 286, 349, 285, 286, 350, 285, 286, 311, 313, 285, 286, 351, 285, 286, 330, 285, 286, 352, 285, 286, 353, 285, 286, 354, 285, 286, 313, 285, 286, 355, 356, 285, 357, 286, 285, 358, 286, 285, 286, 359, 285, 286, 360, 285, 286, 361, 285, 286, 362, 285, 286, 345, 285, 286, 363, 285, 286, 313, 285, 364, 0, 365, 0, 366, 0, 34, 0, 367, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 378, 377, 380, 379, 381, 380, 382, 383, 384, 385, 383, 386, 387, 388, 389, 390, 391, 392, 393, 394, 382, 379, 395, 380, 379, 380, 396, 379, 380, 397, 379, 380, 398, 379, 380, 399, 379, 380, 400, 379, 380, 401, 379, 380, 402, 379, 380, 403, 379, 380, 404, 379, 405, 380, 379, 406, 380, 379, 380, 407, 408, 409, 379, 380, 407, 409, 379, 380, 407, 379, 380, 410, 379, 380, 411, 379, 380, 412, 379, 380, 413, 379, 380, 414, 379, 380, 415, 379, 380, 416, 379, 380, 417, 379, 380, 418, 379, 380, 419, 379, 380, 420, 379, 380, 421, 379, 380, 422, 379, 380, 423, 379, 380, 424, 379, 380, 425, 379, 380, 426, 379, 380, 409, 379, 380, 427, 379, 380, 428, 379, 380, 429, 379, 380, 430, 379, 380, 431, 379, 380, 432, 379, 380, 433, 379, 380, 407, 379, 380, 434, 379, 380, 407, 397, 379, 380, 435, 379, 380, 436, 379, 380, 437, 379, 380, 438, 379, 380, 439, 379, 380, 440, 379, 380, 441, 379, 380, 442, 379, 380, 443, 379, 380, 444, 379, 380, 445, 379, 380, 446, 379, 447, 380, 379, 433, 380, 379, 380, 448, 379, 380, 449, 379, 380, 450, 379, 380, 451, 379, 380, 452, 379, 380, 407, 409, 379, 380, 453, 379, 380, 426, 379, 380, 454, 379, 380, 455, 379, 380, 456, 379, 380, 457, 379, 380, 458, 379, 380, 459, 379, 380, 460, 379, 380, 461, 461, 379, 380, 462, 379, 463, 380, 379, 464, 380, 379, 380, 465, 379, 380, 466, 379, 380, 467, 379, 380, 468, 379, 380, 433, 379, 380, 469, 379, 380, 470, 379, 380, 471, 379, 380, 409, 379, 380, 462, 472, 379, 380, 473, 379, 380, 409, 379, 474, 0, 34, 0, 475, 476, 475, 0, 479, 478, 480, 481, 478, 477, 0, 483, 484, 482, 0, 483, 482, 479, 485, 483, 484, 485, 482, 486, 479, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 487, 0, 99, 125, 127, 98, 99, 125, 98, 99, 503, 98, 99, 504, 98, 99, 505, 98, 99, 506, 98, 99, 507, 98, 99, 508, 98, 99, 509, 98, 99, 510, 98, 99, 511, 98, 99, 512, 98, 99, 513, 98, 99, 514, 98, 99, 515, 98, 99, 516, 98, 99, 517, 98, 99, 518, 98, 99, 519, 98, 99, 127, 98, 99, 520, 98, 99, 125, 115, 98, 99, 521, 98, 99, 522, 98, 99, 523, 98, 99, 524, 98, 99, 525, 98, 99, 526, 98, 99, 527, 98, 99, 528, 98, 99, 529, 98, 99, 530, 98, 99, 531, 98, 99, 532, 98, 533, 99, 98, 534, 99, 98, 99, 125, 98, 99, 535, 98, 99, 536, 98, 99, 537, 98, 99, 538, 98, 99, 539, 98, 99, 125, 127, 98, 99, 540, 98, 99, 519, 98, 99, 541, 98, 99, 542, 98, 99, 543, 98, 99, 544, 98, 99, 545, 98, 99, 546, 98, 99, 547, 98, 99, 548, 548, 98, 99, 549, 98, 550, 99, 98, 551, 99, 98, 99, 552, 98, 99, 553, 98, 99, 554, 98, 99, 555, 98, 99, 534, 98, 99, 556, 98, 99, 557, 98, 99, 558, 98, 99, 127, 98, 99, 549, 559, 98, 99, 560, 98, 99, 127, 98, 32, 34, 0, 561, 0, 3, 0, 562, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 462, 17, 17, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 461, 44, 16, 17, 29, 16, 17, 29, 19, 20, 21, 22, 21, 21, 22, 21, 23, 23, 23, 24, 23, 23, 23, 24, 25, 26, 27, 17, 27, 28, 17, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 464, 46, 47, 17, 46, 45, 47, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 61, 62, 63, 62, 17, 395, 394, 409, 413, 415, 430, 436, 438, 454, 458, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 393, 394, 2, 17, 17, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 87, 88, 88, 17, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 76, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 120, 121, 121, 17, 122, 136, 144, 151, 165, 173, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 17, 137, 138, 139, 140, 141, 142, 143, 76, 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 182, 183, 184, 185, 186, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 207, 208, 209, 208, 17, 224, 223, 238, 242, 244, 259, 265, 267, 271, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 76, 222, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 17, 239, 240, 241, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 260, 261, 262, 263, 264, 266, 268, 269, 270, 272, 279, 273, 274, 275, 276, 277, 278, 280, 282, 283, 284, 286, 385, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 295, 296, 297, 296, 17, 312, 311, 326, 330, 338, 340, 354, 360, 362, 378, 382, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 76, 310, 311, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 17, 327, 328, 329, 331, 332, 333, 334, 335, 336, 337, 339, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 357, 358, 359, 361, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 379, 380, 381, 383, 384, 386, 387, 388, 389, 391, 392, 390, 388, 389, 390, 388, 391, 2, 392, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 17, 410, 411, 412, 414, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 437, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 455, 456, 457, 459, 460, 463, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 63, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 464; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/fr.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 887 "lib/gherkin/lexer/fr.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/fr.rb.rl" # line 896 "lib/gherkin/lexer/fr.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/fr.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/fr.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/fr.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/fr.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/fr.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/fr.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/fr.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/fr.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/fr.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/fr.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/fr.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/fr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/fr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/fr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/fr.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/fr.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/fr.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/fr.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/fr.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/fr.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/fr.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/fr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/fr.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/fr.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1140 "lib/gherkin/lexer/fr.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/fr.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1179 "lib/gherkin/lexer/fr.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/fr.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/bg.rb0000644000004100000410000015323312244512574017523 0ustar www-datawww-data # line 1 "ragel/i18n/bg.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Bg #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/bg.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/bg.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 47, 48, 49, 51, 53, 58, 63, 68, 73, 77, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 103, 110, 115, 119, 125, 128, 130, 136, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 188, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 230, 232, 234, 236, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 504, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 686, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 953, 958, 960, 962, 964, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1158, 1159 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -108, -104, -102, -99, -97, -96, -95, -94, -92, -48, -80, -48, -76, -48, -75, -48, -67, -48, -66, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -66, -48, -77, -48, -80, -47, -126, -47, -128, -48, -75, -72, -48, -76, -48, -72, -47, -127, -47, -126, -48, -66, -47, -128, -48, -72, -47, -113, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -108, -104, -102, -99, -96, -95, -94, -92, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -66, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, -66, 10, -48, 10, -77, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -80, 10, 10, 32, -48, 10, -67, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 58, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -48, -68, -48, -75, -47, -128, -48, -72, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -92, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, -80, -48, -68, -48, -70, -48, -80, 32, -48, -67, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -108, -104, -102, -99, -95, -94, -92, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -66, 10, 10, 32, -48, 10, -66, 10, -48, 10, -77, 10, -48, 10, -80, 10, -47, 10, -126, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 58, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -108, -104, -102, -99, -97, -96, -95, -94, -92, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -66, 10, 10, 32, -48, 10, -66, 10, -48, 10, -77, 10, -48, 10, -80, 10, -47, 10, -126, 10, -47, 10, -128, 10, -48, 10, -75, 10, -48, 10, -76, 10, -48, 10, -72, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, 10, 58, -48, 10, -80, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -80, 10, 10, 32, -48, 10, -67, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -66, -48, -67, -48, -80, -48, -69, -48, -67, -48, -66, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -97, -96, -95, -92, 10, -47, 10, -128, 10, -48, 10, -75, -72, 10, -48, 10, -76, 10, -48, 10, -72, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, 10, 58, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -80, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -80, 10, 10, 32, -48, 10, -67, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 1, 1, 1, 5, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 10, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 5, 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, 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, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 47, 50, 61, 63, 65, 68, 71, 76, 81, 86, 91, 95, 99, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 137, 144, 149, 153, 159, 163, 166, 172, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 255, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 734, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1008, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1415, 1421, 1424, 1427, 1430, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1721, 1723 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 14, 15, 16, 17, 14, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 14, 0, 26, 0, 12, 0, 27, 0, 29, 30, 28, 32, 33, 31, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 34, 0, 35, 0, 37, 38, 36, 40, 41, 39, 44, 43, 45, 43, 42, 48, 47, 49, 47, 46, 48, 47, 50, 47, 46, 48, 47, 51, 47, 46, 53, 52, 52, 0, 4, 54, 54, 0, 56, 57, 55, 4, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 72, 73, 74, 73, 73, 76, 75, 72, 4, 77, 9, 77, 0, 78, 79, 78, 0, 82, 81, 83, 84, 81, 80, 0, 86, 87, 85, 0, 86, 85, 82, 88, 86, 87, 88, 85, 89, 82, 90, 91, 92, 93, 94, 95, 96, 90, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 14, 0, 104, 0, 105, 0, 106, 0, 107, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 127, 126, 129, 128, 130, 129, 131, 132, 133, 134, 132, 131, 128, 135, 136, 137, 138, 139, 140, 138, 141, 129, 128, 142, 129, 128, 143, 129, 128, 144, 129, 128, 145, 129, 128, 146, 129, 128, 147, 129, 128, 148, 129, 128, 138, 129, 128, 149, 129, 128, 136, 129, 128, 129, 150, 128, 151, 153, 152, 154, 155, 156, 157, 158, 159, 152, 0, 160, 129, 128, 161, 129, 128, 162, 129, 128, 163, 129, 128, 164, 129, 128, 165, 129, 128, 166, 129, 128, 138, 129, 128, 167, 129, 128, 168, 129, 128, 169, 129, 128, 170, 129, 128, 171, 129, 128, 172, 129, 128, 173, 129, 128, 174, 129, 128, 129, 175, 128, 176, 129, 128, 177, 129, 128, 178, 129, 128, 179, 129, 128, 129, 180, 128, 181, 129, 128, 140, 129, 128, 182, 129, 128, 183, 129, 128, 184, 129, 128, 185, 129, 128, 186, 129, 128, 187, 129, 128, 188, 129, 128, 189, 129, 128, 190, 129, 128, 191, 129, 128, 192, 129, 128, 193, 129, 128, 194, 129, 128, 195, 129, 128, 129, 150, 128, 196, 129, 128, 197, 129, 128, 198, 129, 128, 199, 129, 128, 200, 129, 128, 201, 129, 128, 202, 129, 128, 203, 129, 128, 204, 129, 128, 205, 129, 128, 206, 129, 128, 207, 129, 128, 208, 129, 128, 209, 129, 128, 210, 129, 128, 211, 129, 128, 212, 129, 128, 213, 129, 128, 214, 129, 128, 215, 129, 128, 216, 129, 128, 217, 129, 128, 218, 129, 128, 219, 129, 128, 220, 129, 128, 195, 129, 128, 129, 221, 128, 129, 222, 128, 129, 223, 128, 129, 224, 128, 129, 225, 128, 129, 226, 128, 129, 227, 128, 129, 228, 128, 129, 229, 128, 129, 230, 128, 129, 231, 128, 129, 232, 128, 129, 233, 128, 129, 234, 128, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 245, 244, 247, 246, 248, 247, 249, 250, 250, 249, 246, 251, 247, 246, 252, 247, 246, 253, 247, 246, 254, 247, 246, 255, 247, 246, 256, 247, 246, 257, 247, 246, 258, 247, 246, 259, 247, 246, 260, 247, 246, 261, 247, 246, 262, 247, 246, 263, 247, 246, 264, 247, 246, 265, 247, 246, 266, 247, 246, 267, 247, 246, 268, 247, 246, 269, 247, 246, 270, 247, 246, 271, 247, 246, 272, 247, 246, 273, 247, 246, 274, 247, 246, 275, 247, 246, 276, 247, 246, 277, 247, 246, 247, 278, 246, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 311, 310, 313, 312, 314, 313, 315, 316, 317, 318, 316, 315, 312, 319, 320, 321, 322, 323, 322, 324, 313, 312, 325, 313, 312, 326, 313, 312, 327, 313, 312, 328, 313, 312, 329, 313, 312, 330, 313, 312, 331, 313, 312, 322, 313, 312, 332, 313, 312, 320, 313, 312, 313, 333, 312, 334, 313, 312, 335, 313, 312, 336, 313, 312, 337, 313, 312, 338, 313, 312, 339, 313, 312, 340, 313, 312, 322, 313, 312, 341, 313, 312, 342, 313, 312, 343, 313, 312, 344, 313, 312, 345, 313, 312, 346, 313, 312, 347, 313, 312, 348, 313, 312, 349, 313, 312, 350, 313, 312, 351, 313, 312, 352, 313, 312, 353, 313, 312, 354, 313, 312, 313, 333, 312, 355, 313, 312, 356, 313, 312, 357, 313, 312, 358, 313, 312, 359, 313, 312, 360, 313, 312, 361, 313, 312, 362, 313, 312, 363, 313, 312, 364, 313, 312, 365, 313, 312, 366, 313, 312, 367, 313, 312, 368, 313, 312, 369, 313, 312, 370, 313, 312, 371, 313, 312, 372, 313, 312, 373, 313, 312, 374, 313, 312, 375, 313, 312, 376, 313, 312, 377, 313, 312, 378, 313, 312, 379, 313, 312, 354, 313, 312, 313, 380, 312, 313, 381, 312, 313, 382, 312, 313, 383, 312, 313, 384, 312, 313, 385, 312, 313, 386, 312, 313, 387, 312, 313, 388, 312, 313, 389, 312, 313, 390, 312, 313, 391, 312, 313, 392, 312, 313, 393, 312, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 410, 409, 412, 411, 413, 412, 414, 415, 416, 417, 415, 414, 411, 418, 419, 420, 421, 422, 423, 424, 421, 425, 412, 411, 426, 412, 411, 427, 412, 411, 428, 412, 411, 429, 412, 411, 430, 412, 411, 431, 412, 411, 432, 412, 411, 421, 412, 411, 433, 412, 411, 419, 412, 411, 412, 434, 411, 435, 412, 411, 436, 412, 411, 437, 412, 411, 438, 412, 411, 439, 412, 411, 440, 412, 411, 441, 412, 411, 421, 412, 411, 442, 412, 411, 443, 412, 411, 444, 412, 411, 445, 412, 411, 446, 412, 411, 447, 412, 411, 448, 412, 411, 449, 412, 411, 450, 412, 411, 451, 412, 411, 452, 412, 411, 453, 412, 411, 454, 412, 411, 455, 412, 411, 456, 412, 411, 457, 412, 411, 458, 412, 411, 459, 412, 411, 460, 412, 411, 461, 412, 411, 412, 434, 411, 462, 412, 411, 463, 412, 411, 464, 412, 411, 465, 412, 411, 466, 412, 411, 467, 412, 411, 468, 412, 411, 469, 412, 411, 412, 470, 411, 471, 412, 411, 472, 412, 411, 473, 412, 411, 474, 412, 411, 412, 475, 411, 476, 412, 411, 424, 412, 411, 477, 412, 411, 478, 412, 411, 479, 412, 411, 480, 412, 411, 481, 412, 411, 482, 412, 411, 483, 412, 411, 484, 412, 411, 485, 412, 411, 486, 412, 411, 487, 412, 411, 488, 412, 411, 489, 412, 411, 461, 412, 411, 490, 412, 411, 491, 412, 411, 492, 412, 411, 493, 412, 411, 494, 412, 411, 495, 412, 411, 496, 412, 411, 497, 412, 411, 498, 412, 411, 499, 412, 411, 500, 412, 411, 501, 412, 411, 502, 412, 411, 503, 412, 411, 504, 412, 411, 505, 412, 411, 506, 412, 411, 507, 412, 411, 508, 412, 411, 509, 412, 411, 510, 412, 411, 511, 412, 411, 512, 412, 411, 513, 412, 411, 514, 412, 411, 461, 412, 411, 412, 515, 411, 412, 516, 411, 412, 517, 411, 412, 518, 411, 412, 519, 411, 412, 520, 411, 412, 521, 411, 412, 522, 411, 412, 523, 411, 412, 524, 411, 412, 525, 411, 412, 526, 411, 412, 527, 411, 412, 528, 411, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 557, 556, 559, 558, 560, 559, 561, 562, 563, 562, 561, 558, 564, 565, 566, 567, 559, 558, 568, 559, 558, 569, 559, 558, 570, 559, 558, 571, 572, 559, 558, 573, 559, 558, 574, 559, 558, 575, 559, 558, 576, 559, 558, 577, 559, 558, 578, 559, 558, 579, 559, 558, 580, 559, 558, 581, 559, 558, 582, 559, 558, 583, 559, 558, 584, 559, 558, 585, 559, 558, 586, 559, 558, 587, 559, 558, 588, 559, 558, 559, 589, 558, 590, 559, 558, 591, 559, 558, 592, 559, 558, 593, 559, 558, 594, 559, 558, 595, 559, 558, 596, 559, 558, 588, 559, 558, 597, 559, 558, 598, 559, 558, 599, 559, 558, 600, 559, 558, 601, 559, 558, 602, 559, 558, 603, 559, 558, 604, 559, 558, 559, 605, 558, 606, 559, 558, 607, 559, 558, 608, 559, 558, 609, 559, 558, 559, 610, 558, 611, 559, 558, 566, 559, 558, 612, 559, 558, 613, 559, 558, 614, 559, 558, 615, 559, 558, 616, 559, 558, 617, 559, 558, 618, 559, 558, 619, 559, 558, 620, 559, 558, 621, 559, 558, 622, 559, 558, 623, 559, 558, 624, 559, 558, 588, 559, 558, 625, 559, 558, 626, 559, 558, 627, 559, 558, 628, 559, 558, 629, 559, 558, 630, 559, 558, 631, 559, 558, 632, 559, 558, 633, 559, 558, 634, 559, 558, 635, 559, 558, 636, 559, 558, 637, 559, 558, 638, 559, 558, 639, 559, 558, 640, 559, 558, 641, 559, 558, 642, 559, 558, 643, 559, 558, 644, 559, 558, 645, 559, 558, 646, 559, 558, 647, 559, 558, 648, 559, 558, 649, 559, 558, 588, 559, 558, 559, 650, 558, 559, 651, 558, 559, 652, 558, 559, 653, 558, 559, 654, 558, 559, 655, 558, 559, 656, 558, 559, 657, 558, 559, 658, 558, 559, 659, 558, 559, 660, 558, 559, 661, 558, 559, 662, 558, 559, 663, 558, 664, 0, 3, 0, 665, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 584, 16, 16, 17, 27, 29, 13, 43, 46, 3, 13, 52, 11, 60, 216, 325, 454, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 28, 15, 16, 28, 18, 19, 20, 21, 20, 20, 21, 20, 22, 22, 22, 23, 22, 22, 22, 23, 24, 25, 26, 16, 26, 27, 16, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 586, 44, 45, 16, 44, 43, 45, 46, 47, 48, 50, 51, 49, 47, 48, 49, 47, 50, 2, 51, 17, 27, 29, 13, 43, 46, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 176, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 82, 83, 84, 83, 16, 162, 95, 85, 95, 97, 93, 105, 121, 136, 86, 87, 88, 89, 90, 91, 92, 94, 96, 2, 16, 16, 17, 27, 29, 13, 43, 46, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 16, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 186, 187, 188, 187, 16, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 96, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 248, 249, 250, 249, 16, 311, 261, 251, 261, 262, 259, 270, 285, 252, 253, 254, 255, 256, 257, 258, 260, 96, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 16, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 341, 342, 343, 342, 16, 440, 354, 344, 354, 355, 352, 363, 384, 400, 414, 345, 346, 347, 348, 349, 350, 351, 353, 96, 356, 357, 358, 359, 360, 361, 362, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 16, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 482, 483, 484, 483, 16, 570, 485, 514, 530, 544, 486, 487, 488, 489, 506, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 96, 507, 508, 509, 510, 511, 512, 513, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 16, 585, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 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, 21, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 57, 144, 0, 54, 84, 0, 69, 33, 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, 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, 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, 13, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 586; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/bg.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1041 "lib/gherkin/lexer/bg.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/bg.rb.rl" # line 1050 "lib/gherkin/lexer/bg.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/bg.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/bg.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/bg.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/bg.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/bg.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/bg.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/bg.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/bg.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/bg.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/bg.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/bg.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/bg.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/bg.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/bg.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/bg.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/bg.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/bg.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/bg.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/bg.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/bg.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/bg.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/bg.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/bg.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/bg.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1294 "lib/gherkin/lexer/bg.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/bg.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1333 "lib/gherkin/lexer/bg.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/bg.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/hu.rb0000644000004100000410000012370512244512574017550 0ustar www-datawww-data # line 1 "ragel/i18n/hu.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Hu #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/hu.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/hu.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 22, 24, 26, 44, 45, 46, 48, 50, 55, 60, 65, 70, 74, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 100, 107, 112, 115, 116, 117, 118, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 171, 173, 175, 177, 195, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 259, 261, 263, 265, 267, 269, 271, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 540, 546, 549, 551, 557, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 607, 609, 611, 613, 615, 617, 619, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 691, 692, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 745, 747, 749, 751, 753, 755, 757, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 805, 807, 809, 811, 813, 815, 817, 819, 821, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 859, 860 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 9, 13, -119, 115, 32, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 100, 107, 109, 111, 116, 116, 107, 111, 114, 101, 105, 110, 110, 121, 105, 98, 101, 110, 101, 111, 114, 103, 97, 116, -61, -77, 107, -61, -74, 110, 121, 118, 32, 58, 118, -61, -95, 122, 108, 97, 116, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 9, 13, -119, 10, 10, 115, 10, 32, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 9, 13, -61, 97, -95, 116, 116, -61, -87, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 9, 13, -119, 10, 10, 115, 10, 32, 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, 100, 107, 109, 10, 111, 10, 116, 10, 116, 10, 107, 10, 111, 10, 114, 10, 101, 105, 10, 110, 10, 110, 10, 121, 10, 105, 10, 98, 10, 101, 10, 110, 10, 101, 10, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 32, 58, 10, 118, -61, 10, -95, 10, 10, 122, 10, 108, 10, 97, 10, 116, 10, 58, 10, 97, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 97, 10, 106, 10, 100, 101, 108, 108, 101, 109, 122, -59, -111, 58, 10, 10, 10, 32, 35, 37, 64, 70, 72, 74, 80, 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, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 32, 58, 10, 118, -61, 10, -95, 10, 10, 122, 10, 108, 10, 97, 10, 116, 10, 58, -61, 10, -95, 10, 10, 116, 10, 116, -61, 10, -87, 10, 10, 114, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, -61, 10, -87, 10, 10, 108, 10, 100, -61, 10, -95, 10, 10, 107, 97, 106, 100, -61, -87, 108, 100, -61, -95, 107, 58, 10, 10, 10, 32, 35, 74, 124, 9, 13, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 58, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 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, 100, 107, 109, 10, 111, 10, 116, 10, 116, 10, 107, 10, 111, 10, 114, 10, 101, 105, 10, 110, 10, 110, 10, 121, 10, 105, 10, 98, 10, 101, 10, 110, 10, 101, 10, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 58, 10, 97, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 97, 10, 106, 10, 100, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 9, 13, -119, 10, 10, 115, 10, 32, 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, 100, 107, 109, 10, 111, 10, 116, 10, 116, 10, 107, 10, 111, 10, 114, 10, 101, 105, 10, 110, 10, 110, 10, 121, 10, 105, 10, 98, 10, 101, 10, 110, 10, 101, 10, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 32, 58, 10, 118, -61, 10, -95, 10, 10, 122, 10, 108, 10, 97, 10, 116, 10, 58, -61, 10, 97, -95, 10, 10, 116, 10, 116, -61, 10, -87, 10, 10, 114, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 97, 10, 106, 10, 100, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 1, 2, 2, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 2, 2, 16, 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, 4, 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, 3, 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, 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, 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, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 2, 2, 1, 1, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 3, 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, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 25, 28, 31, 49, 51, 53, 56, 59, 64, 69, 74, 79, 83, 87, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 125, 132, 137, 141, 143, 145, 147, 149, 151, 153, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 236, 239, 242, 245, 263, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 350, 355, 358, 361, 364, 367, 370, 373, 377, 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 776, 782, 786, 789, 795, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 860, 863, 866, 869, 872, 875, 878, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 986, 988, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1229, 1231 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3, 0, 18, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 3, 0, 27, 0, 28, 0, 30, 31, 29, 33, 34, 32, 37, 36, 38, 36, 35, 41, 40, 42, 40, 39, 41, 40, 43, 40, 39, 41, 40, 44, 40, 39, 46, 45, 45, 0, 4, 47, 47, 0, 49, 50, 48, 4, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 0, 0, 0, 0, 65, 66, 67, 66, 66, 69, 68, 65, 4, 70, 9, 70, 0, 71, 72, 73, 0, 74, 0, 75, 0, 19, 0, 76, 0, 77, 0, 19, 0, 78, 72, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 19, 0, 19, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 109, 108, 111, 110, 112, 111, 113, 114, 115, 116, 114, 117, 118, 119, 120, 121, 122, 113, 110, 123, 111, 110, 111, 124, 110, 111, 125, 110, 126, 128, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 127, 0, 142, 19, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 151, 150, 153, 152, 154, 153, 155, 156, 157, 158, 156, 159, 160, 161, 162, 163, 164, 155, 152, 165, 153, 152, 153, 166, 152, 153, 167, 152, 153, 168, 152, 153, 169, 152, 153, 170, 152, 153, 171, 152, 153, 172, 152, 153, 173, 152, 153, 174, 152, 153, 175, 152, 153, 176, 152, 153, 177, 152, 153, 178, 152, 153, 179, 152, 153, 180, 152, 153, 181, 152, 153, 182, 183, 184, 152, 153, 185, 152, 153, 186, 152, 153, 166, 152, 153, 187, 152, 153, 188, 152, 153, 166, 152, 153, 189, 183, 152, 153, 190, 152, 153, 191, 152, 153, 192, 152, 153, 193, 152, 153, 194, 152, 153, 195, 152, 153, 166, 152, 153, 166, 152, 153, 196, 152, 153, 197, 152, 153, 198, 152, 153, 199, 152, 153, 200, 152, 201, 153, 152, 202, 153, 152, 153, 203, 152, 204, 153, 152, 205, 153, 152, 153, 206, 152, 153, 207, 152, 153, 208, 152, 153, 209, 167, 152, 153, 210, 152, 211, 153, 152, 212, 153, 152, 153, 213, 152, 153, 214, 152, 153, 215, 152, 153, 216, 152, 153, 167, 152, 153, 166, 152, 153, 217, 152, 153, 218, 152, 153, 219, 152, 153, 220, 152, 153, 221, 152, 153, 222, 152, 223, 153, 152, 216, 153, 152, 153, 224, 152, 153, 225, 152, 153, 166, 152, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 236, 235, 238, 237, 238, 239, 240, 241, 240, 242, 243, 244, 245, 239, 237, 238, 246, 237, 238, 247, 237, 238, 248, 237, 238, 249, 237, 238, 250, 237, 238, 251, 237, 238, 252, 237, 238, 253, 237, 238, 254, 237, 238, 255, 237, 238, 256, 237, 238, 257, 237, 238, 258, 237, 238, 259, 237, 238, 260, 237, 238, 261, 237, 238, 262, 237, 238, 263, 237, 238, 264, 237, 265, 238, 237, 266, 238, 237, 238, 267, 237, 268, 238, 237, 269, 238, 237, 238, 270, 237, 238, 271, 237, 238, 272, 237, 238, 273, 274, 237, 238, 275, 237, 276, 238, 237, 277, 238, 237, 238, 278, 237, 238, 279, 237, 238, 280, 237, 238, 281, 237, 238, 274, 237, 282, 238, 237, 283, 238, 237, 238, 284, 237, 238, 285, 237, 286, 238, 237, 287, 238, 237, 238, 281, 237, 238, 288, 237, 238, 289, 237, 238, 290, 237, 238, 291, 237, 238, 292, 237, 238, 293, 237, 294, 238, 237, 281, 238, 237, 295, 238, 237, 296, 238, 237, 238, 297, 237, 238, 298, 237, 299, 238, 237, 300, 238, 237, 238, 281, 237, 301, 0, 302, 0, 19, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 312, 311, 314, 313, 314, 315, 316, 317, 316, 315, 313, 314, 318, 313, 314, 319, 313, 314, 320, 313, 314, 321, 313, 314, 322, 313, 314, 323, 313, 324, 314, 313, 325, 314, 313, 314, 326, 313, 327, 328, 327, 0, 331, 330, 332, 333, 330, 329, 0, 335, 336, 334, 0, 335, 334, 331, 337, 335, 336, 337, 334, 338, 331, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 339, 0, 111, 353, 110, 111, 354, 110, 111, 355, 110, 111, 356, 110, 111, 357, 110, 111, 358, 110, 111, 359, 110, 111, 360, 110, 111, 361, 110, 111, 362, 110, 111, 363, 110, 111, 364, 110, 111, 365, 110, 111, 366, 110, 111, 367, 368, 369, 110, 111, 370, 110, 111, 371, 110, 111, 124, 110, 111, 372, 110, 111, 373, 110, 111, 124, 110, 111, 374, 368, 110, 111, 375, 110, 111, 376, 110, 111, 377, 110, 111, 378, 110, 111, 379, 110, 111, 380, 110, 111, 124, 110, 111, 124, 110, 111, 381, 110, 111, 382, 110, 111, 383, 110, 111, 384, 110, 111, 385, 110, 386, 111, 110, 387, 111, 110, 111, 388, 110, 389, 111, 110, 390, 111, 110, 111, 391, 110, 111, 392, 110, 111, 393, 110, 111, 125, 110, 111, 124, 110, 111, 394, 110, 111, 395, 110, 111, 396, 110, 111, 397, 110, 111, 398, 110, 111, 399, 110, 400, 111, 110, 393, 111, 110, 111, 401, 110, 111, 402, 110, 111, 124, 110, 404, 403, 406, 405, 407, 406, 408, 409, 410, 411, 409, 412, 413, 414, 415, 416, 417, 408, 405, 418, 406, 405, 406, 419, 405, 406, 420, 405, 406, 421, 405, 406, 422, 405, 406, 423, 405, 406, 424, 405, 406, 425, 405, 406, 426, 405, 406, 427, 405, 406, 428, 405, 406, 429, 405, 406, 430, 405, 406, 431, 405, 406, 432, 405, 406, 433, 405, 406, 434, 405, 406, 435, 436, 437, 405, 406, 438, 405, 406, 439, 405, 406, 419, 405, 406, 440, 405, 406, 441, 405, 406, 419, 405, 406, 442, 436, 405, 406, 443, 405, 406, 444, 405, 406, 445, 405, 406, 446, 405, 406, 447, 405, 406, 448, 405, 406, 419, 405, 406, 419, 405, 406, 449, 405, 406, 450, 405, 406, 451, 405, 406, 452, 405, 406, 453, 405, 454, 406, 405, 455, 406, 405, 406, 456, 405, 457, 406, 405, 458, 406, 405, 406, 459, 405, 406, 460, 405, 406, 461, 405, 406, 462, 420, 405, 406, 463, 405, 464, 406, 405, 465, 406, 405, 406, 466, 405, 406, 467, 405, 406, 468, 405, 406, 469, 405, 406, 420, 405, 470, 406, 419, 405, 471, 406, 405, 406, 472, 405, 406, 473, 405, 474, 406, 405, 475, 406, 405, 406, 469, 405, 406, 476, 405, 406, 477, 405, 406, 478, 405, 406, 479, 405, 406, 480, 405, 406, 481, 405, 482, 406, 405, 469, 406, 405, 406, 483, 405, 406, 484, 405, 406, 419, 405, 485, 0, 3, 0, 486, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 391, 7, 7, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 3, 4, 5, 6, 7, 19, 6, 7, 19, 9, 10, 11, 12, 11, 11, 12, 11, 13, 13, 13, 14, 13, 13, 13, 14, 15, 16, 17, 7, 17, 18, 7, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 393, 35, 36, 7, 35, 34, 36, 38, 41, 44, 39, 40, 42, 43, 45, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 315, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 76, 77, 78, 77, 7, 259, 80, 273, 288, 289, 303, 304, 312, 79, 80, 81, 2, 7, 7, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 91, 92, 93, 92, 7, 96, 95, 110, 125, 126, 148, 149, 157, 94, 95, 81, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 7, 111, 114, 117, 112, 113, 115, 116, 118, 119, 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 150, 151, 152, 153, 154, 155, 156, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 170, 171, 171, 7, 172, 186, 208, 215, 223, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 7, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 81, 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 242, 243, 243, 7, 244, 245, 246, 247, 248, 249, 250, 251, 252, 81, 253, 254, 255, 257, 258, 256, 254, 255, 256, 254, 257, 2, 258, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 7, 274, 277, 280, 275, 276, 278, 279, 281, 282, 283, 284, 285, 286, 287, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 305, 306, 307, 308, 309, 310, 311, 313, 314, 316, 317, 316, 317, 318, 317, 7, 321, 320, 335, 350, 351, 373, 380, 388, 319, 320, 81, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 7, 336, 339, 342, 337, 338, 340, 341, 343, 344, 345, 346, 347, 348, 349, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 389, 390, 392, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 19, 63, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 393; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/hu.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 777 "lib/gherkin/lexer/hu.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/hu.rb.rl" # line 786 "lib/gherkin/lexer/hu.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/hu.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/hu.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/hu.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/hu.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/hu.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/hu.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/hu.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/hu.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/hu.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/hu.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/hu.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/hu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/hu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/hu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/hu.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/hu.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/hu.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/hu.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/hu.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/hu.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/hu.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/hu.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/hu.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/hu.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1030 "lib/gherkin/lexer/hu.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/hu.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1069 "lib/gherkin/lexer/hu.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/hu.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/sk.rb0000644000004100000410000016143712244512574017555 0ustar www-datawww-data # line 1 "ragel/i18n/sk.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Sk #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/sk.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/sk.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 21, 22, 23, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 111, 116, 119, 123, 127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 329, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 367, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 443, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 526, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 593, 599, 602, 604, 610, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1258, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 107, 108, 10, 13, 116, 122, 10, 13, 97, 105, 10, 13, 107, 10, 13, 116, 10, 13, 105, 10, 13, 101, -59, 10, 13, -66, 10, 13, 10, 13, 32, -61, 10, 13, -95, 10, 13, 10, 13, 114, 10, 13, 111, 10, 13, 118, 10, 13, 101, -59, 10, 13, -120, 10, 13, 101, 117, 110, 107, 99, 105, 97, 58, 10, 10, 10, 32, 35, 37, 64, 70, 78, 79, 80, 83, 86, 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, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, 101, -60, -113, -61, -95, -60, -115, 114, 116, 32, 83, 99, 101, 110, -61, -95, 114, 97, 117, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 75, 80, 83, 84, 86, 90, 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, 107, 108, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 116, 122, 124, 9, 13, 115, 110, 111, 118, 97, 32, 83, 99, 101, 110, -61, -95, 114, 97, 111, 114, -59, 107, 116, 122, -66, 105, 97, 100, 97, 118, 107, 105, 97, -60, -66, 111, 109, 97, 100, 105, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 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, 107, 108, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 116, 122, 124, 9, 13, 99, 101, 110, -61, -95, 114, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 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, 107, 108, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 116, 122, 124, 9, 13, 97, 107, 108, 97, 115, 116, 110, 111, 115, -59, -91, 97, 32, 112, 114, 101, 100, 112, 111, 107, 108, 97, 100, 117, 97, 105, 107, 116, 105, 101, -59, -66, 32, -61, -95, 114, 111, 118, 101, -59, -120, 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, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, 10, 101, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 101, -60, 10, -113, 10, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 117, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 111, -59, 10, 107, 116, 122, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 105, 10, 97, -60, 10, -66, 10, 10, 111, 10, 109, 10, 97, 10, 100, 10, 105, 10, 101, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 10, 97, 10, 32, 10, 112, 10, 114, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 97, 105, 107, 116, 105, 101, -59, -66, 32, -61, -95, 114, 111, 118, 101, -59, -120, 10, 101, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 101, -60, 10, -113, 10, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 117, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 111, -59, 10, 107, 116, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 105, 10, 97, -60, 10, -66, 10, 10, 111, 10, 109, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 10, 97, 10, 32, 10, 112, 10, 114, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, -61, -83, 107, 108, 97, 100, 121, 58, 10, 10, 10, 32, 35, 70, 80, 86, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 111, -59, 10, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 97, 105, 107, 116, 105, 101, -59, -66, 32, -61, -95, 114, 111, 118, 101, -59, -120, 10, 101, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 101, -60, 10, -113, 10, 10, 111, -59, 10, 107, 116, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 105, 10, 97, -60, 10, -66, 10, 10, 111, 10, 109, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 10, 97, 10, 32, 10, 112, 10, 114, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 117, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 111, 114, -59, 10, 122, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 97, 10, 100, 10, 105, 10, 101, -61, 10, -83, 10, 10, 107, 10, 108, 10, 97, 10, 100, 10, 121, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 19, 1, 1, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 18, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 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, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 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, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 3, 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, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 21, 23, 25, 45, 47, 49, 52, 55, 60, 65, 70, 75, 79, 83, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 121, 124, 129, 136, 141, 145, 150, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 368, 370, 372, 374, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 440, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 493, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598, 601, 606, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 714, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 821, 827, 831, 834, 840, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1812, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909, 1912, 1915 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 0, 20, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 0, 21, 0, 22, 0, 24, 25, 23, 27, 28, 26, 31, 30, 32, 30, 29, 35, 34, 36, 34, 33, 35, 34, 37, 34, 33, 35, 34, 38, 34, 33, 40, 39, 39, 0, 3, 41, 41, 0, 43, 44, 42, 3, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 61, 62, 60, 64, 65, 63, 0, 0, 0, 0, 66, 67, 68, 67, 67, 70, 69, 66, 3, 71, 8, 71, 0, 72, 73, 74, 0, 61, 62, 75, 76, 60, 64, 65, 77, 78, 63, 64, 65, 79, 63, 64, 65, 80, 63, 64, 65, 78, 63, 64, 65, 81, 63, 82, 64, 65, 63, 83, 64, 65, 63, 64, 65, 59, 63, 84, 64, 65, 63, 85, 64, 65, 63, 64, 65, 86, 63, 64, 65, 87, 63, 64, 65, 88, 63, 64, 65, 89, 63, 90, 64, 65, 63, 83, 64, 65, 63, 73, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 99, 98, 101, 100, 101, 102, 103, 104, 103, 105, 106, 107, 108, 109, 110, 102, 100, 101, 111, 100, 101, 112, 100, 101, 113, 100, 101, 114, 100, 101, 115, 100, 101, 116, 100, 101, 117, 100, 101, 118, 100, 101, 119, 100, 101, 120, 100, 101, 121, 100, 101, 122, 100, 101, 123, 100, 101, 124, 100, 101, 125, 100, 101, 126, 100, 101, 127, 100, 101, 128, 100, 101, 129, 100, 101, 130, 100, 101, 131, 100, 133, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 132, 0, 150, 0, 151, 0, 73, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 166, 0, 167, 0, 169, 168, 171, 170, 171, 172, 173, 174, 175, 173, 176, 177, 178, 179, 180, 181, 182, 183, 172, 170, 171, 184, 170, 171, 185, 170, 171, 186, 170, 171, 187, 170, 171, 188, 170, 171, 189, 170, 171, 190, 170, 171, 191, 170, 171, 192, 170, 171, 193, 170, 171, 194, 170, 171, 195, 170, 171, 196, 170, 171, 197, 170, 171, 198, 170, 171, 199, 200, 201, 170, 133, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 202, 203, 149, 132, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 166, 0, 217, 218, 0, 219, 220, 221, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 95, 0, 229, 0, 230, 0, 231, 0, 73, 0, 232, 0, 73, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 239, 238, 241, 240, 241, 242, 243, 244, 245, 243, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 242, 240, 241, 256, 240, 241, 257, 240, 241, 258, 240, 241, 259, 240, 241, 260, 240, 241, 261, 240, 241, 262, 240, 241, 263, 240, 241, 264, 240, 241, 265, 240, 241, 266, 240, 241, 267, 240, 241, 268, 240, 241, 269, 240, 241, 270, 240, 241, 271, 272, 273, 240, 133, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 274, 275, 149, 132, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 284, 283, 286, 285, 286, 287, 288, 289, 290, 288, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 287, 285, 286, 301, 285, 286, 302, 285, 286, 303, 285, 286, 304, 285, 286, 305, 285, 286, 306, 285, 286, 307, 285, 286, 308, 285, 286, 309, 285, 286, 310, 285, 286, 311, 285, 286, 312, 285, 286, 313, 285, 286, 314, 285, 286, 315, 285, 286, 316, 317, 318, 285, 133, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 319, 320, 149, 132, 0, 321, 0, 73, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 96, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 73, 0, 342, 343, 0, 344, 0, 345, 0, 343, 0, 346, 0, 347, 0, 348, 0, 315, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 348, 0, 356, 357, 356, 0, 360, 359, 361, 362, 359, 358, 0, 364, 365, 363, 0, 364, 363, 360, 366, 364, 365, 366, 363, 360, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 367, 0, 286, 317, 285, 286, 384, 285, 286, 385, 285, 286, 386, 285, 286, 387, 285, 286, 388, 285, 286, 389, 285, 286, 315, 285, 286, 390, 285, 391, 286, 285, 317, 286, 285, 392, 286, 285, 393, 286, 285, 394, 286, 285, 395, 286, 285, 286, 396, 285, 286, 397, 285, 286, 398, 285, 286, 399, 285, 286, 400, 285, 286, 401, 285, 286, 402, 285, 403, 286, 285, 404, 286, 285, 286, 405, 285, 286, 389, 389, 285, 286, 406, 285, 286, 407, 285, 286, 408, 285, 286, 409, 285, 286, 410, 285, 286, 411, 285, 286, 412, 285, 286, 413, 285, 286, 414, 285, 286, 415, 285, 416, 286, 285, 417, 286, 285, 286, 388, 285, 286, 418, 285, 419, 286, 420, 421, 422, 285, 423, 286, 285, 286, 424, 285, 286, 425, 285, 286, 426, 285, 286, 427, 285, 286, 428, 285, 286, 388, 285, 286, 429, 285, 286, 430, 285, 431, 286, 285, 317, 286, 285, 286, 432, 285, 286, 317, 285, 286, 433, 285, 286, 434, 285, 286, 435, 285, 286, 389, 285, 286, 436, 285, 286, 437, 285, 286, 438, 285, 439, 286, 285, 440, 286, 285, 286, 389, 285, 286, 441, 285, 286, 317, 285, 286, 442, 285, 286, 443, 285, 286, 444, 285, 286, 445, 285, 286, 446, 285, 286, 447, 285, 286, 448, 285, 449, 286, 285, 389, 286, 285, 286, 450, 285, 286, 451, 285, 286, 452, 285, 286, 453, 285, 286, 454, 285, 286, 455, 285, 286, 456, 285, 286, 457, 285, 286, 458, 285, 286, 459, 285, 286, 460, 285, 286, 461, 285, 286, 317, 285, 462, 463, 0, 464, 0, 465, 0, 463, 0, 466, 0, 467, 0, 468, 0, 270, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 468, 0, 241, 272, 240, 241, 476, 240, 241, 477, 240, 241, 478, 240, 241, 479, 240, 241, 480, 240, 241, 481, 240, 241, 270, 240, 241, 482, 240, 483, 241, 240, 272, 241, 240, 484, 241, 240, 485, 241, 240, 486, 241, 240, 487, 241, 240, 241, 488, 240, 241, 489, 240, 241, 490, 240, 241, 491, 240, 241, 492, 240, 241, 493, 240, 241, 494, 240, 495, 241, 240, 496, 241, 240, 241, 497, 240, 241, 481, 481, 240, 241, 498, 240, 241, 499, 240, 241, 500, 240, 241, 501, 240, 241, 502, 240, 241, 503, 240, 241, 504, 240, 241, 505, 240, 241, 506, 240, 241, 507, 240, 508, 241, 240, 509, 241, 240, 241, 480, 240, 241, 510, 240, 511, 241, 512, 513, 240, 514, 241, 240, 241, 515, 240, 241, 516, 240, 241, 517, 240, 241, 518, 240, 241, 519, 240, 241, 480, 240, 241, 520, 240, 241, 521, 240, 522, 241, 240, 272, 241, 240, 241, 523, 240, 241, 272, 240, 241, 524, 240, 241, 525, 240, 241, 526, 240, 527, 241, 240, 528, 241, 240, 241, 481, 240, 241, 529, 240, 241, 272, 240, 241, 530, 240, 241, 531, 240, 241, 532, 240, 241, 533, 240, 241, 534, 240, 241, 535, 240, 241, 536, 240, 537, 241, 240, 481, 241, 240, 241, 538, 240, 241, 539, 240, 241, 540, 240, 241, 541, 240, 241, 542, 240, 241, 543, 240, 241, 544, 240, 241, 545, 240, 241, 546, 240, 241, 547, 240, 241, 548, 240, 241, 549, 240, 241, 272, 240, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 559, 558, 561, 560, 561, 562, 563, 564, 565, 566, 563, 562, 560, 561, 567, 560, 561, 568, 560, 561, 569, 560, 561, 570, 560, 561, 571, 560, 561, 572, 560, 561, 573, 560, 561, 574, 560, 575, 561, 560, 576, 561, 560, 561, 577, 560, 561, 578, 560, 561, 579, 560, 561, 580, 560, 561, 581, 560, 561, 571, 560, 561, 582, 560, 561, 583, 560, 561, 584, 560, 561, 585, 560, 561, 586, 560, 561, 587, 560, 561, 588, 560, 589, 561, 560, 572, 561, 560, 590, 591, 0, 592, 0, 593, 0, 591, 0, 594, 0, 595, 0, 596, 0, 198, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 596, 0, 171, 200, 170, 171, 604, 170, 171, 605, 170, 171, 606, 170, 171, 607, 170, 171, 608, 170, 171, 609, 170, 171, 198, 170, 171, 610, 170, 611, 171, 170, 200, 171, 170, 171, 612, 170, 613, 171, 614, 615, 170, 616, 171, 170, 171, 617, 170, 171, 618, 170, 171, 619, 170, 171, 620, 170, 171, 621, 170, 171, 608, 170, 171, 622, 170, 171, 623, 170, 624, 171, 170, 200, 171, 170, 171, 625, 170, 171, 200, 170, 171, 626, 170, 171, 627, 170, 171, 628, 170, 629, 171, 170, 630, 171, 170, 171, 609, 170, 171, 631, 170, 171, 200, 170, 171, 632, 170, 171, 633, 170, 171, 634, 170, 171, 635, 170, 171, 636, 170, 171, 637, 170, 171, 638, 170, 639, 171, 170, 609, 171, 170, 171, 640, 170, 171, 641, 170, 171, 642, 170, 171, 643, 170, 171, 644, 170, 171, 645, 170, 171, 646, 170, 171, 647, 170, 171, 648, 170, 171, 649, 170, 171, 650, 170, 171, 651, 170, 171, 200, 170, 652, 101, 100, 653, 101, 100, 654, 101, 100, 655, 101, 100, 101, 656, 100, 101, 657, 100, 101, 658, 100, 101, 659, 100, 101, 660, 100, 101, 661, 100, 101, 662, 100, 663, 101, 100, 664, 101, 100, 101, 665, 100, 101, 130, 130, 100, 101, 666, 100, 101, 667, 100, 101, 668, 100, 101, 669, 100, 101, 670, 100, 101, 671, 100, 101, 672, 100, 101, 673, 100, 101, 674, 100, 101, 675, 100, 676, 101, 100, 677, 101, 100, 101, 129, 100, 101, 678, 679, 100, 680, 101, 681, 100, 682, 101, 100, 101, 683, 100, 101, 684, 100, 101, 685, 100, 101, 686, 100, 101, 687, 100, 101, 129, 100, 101, 688, 100, 101, 689, 100, 101, 690, 100, 101, 130, 100, 691, 101, 100, 692, 101, 100, 101, 693, 100, 101, 694, 100, 101, 695, 100, 101, 696, 100, 101, 130, 100, 101, 697, 100, 101, 698, 100, 101, 699, 100, 700, 101, 100, 701, 101, 100, 101, 130, 100, 101, 702, 100, 101, 703, 100, 101, 704, 100, 101, 705, 100, 101, 706, 100, 101, 707, 100, 101, 708, 100, 709, 101, 100, 130, 101, 100, 710, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 613, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 31, 55, 39, 47, 40, 43, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 64, 65, 65, 4, 66, 80, 550, 565, 578, 598, 604, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 4, 81, 82, 83, 84, 85, 86, 87, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 108, 109, 109, 4, 110, 124, 125, 495, 502, 505, 520, 526, 528, 537, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 4, 87, 126, 124, 494, 478, 486, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 442, 143, 150, 154, 156, 144, 145, 146, 147, 148, 149, 151, 152, 153, 155, 157, 158, 159, 160, 161, 162, 163, 162, 163, 163, 4, 164, 178, 179, 359, 366, 369, 384, 397, 412, 418, 420, 429, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 4, 87, 180, 178, 358, 342, 350, 182, 183, 184, 185, 186, 187, 188, 189, 190, 189, 190, 190, 4, 191, 205, 206, 255, 262, 265, 280, 293, 312, 318, 320, 329, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 4, 87, 207, 205, 254, 232, 240, 209, 211, 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 233, 236, 234, 235, 237, 238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 252, 253, 251, 249, 250, 251, 249, 252, 253, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 256, 257, 258, 259, 260, 261, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 302, 306, 308, 296, 297, 298, 299, 300, 301, 303, 304, 305, 307, 309, 310, 311, 313, 314, 315, 316, 317, 319, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 343, 346, 344, 345, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 360, 361, 362, 363, 364, 365, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 398, 399, 406, 410, 400, 401, 402, 403, 404, 405, 407, 408, 409, 411, 413, 414, 415, 416, 417, 419, 421, 422, 423, 424, 425, 426, 427, 428, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 451, 452, 452, 4, 453, 460, 469, 454, 455, 456, 457, 458, 459, 87, 461, 462, 463, 464, 465, 466, 467, 468, 470, 471, 472, 473, 474, 475, 476, 477, 479, 482, 480, 481, 483, 484, 485, 487, 488, 489, 490, 491, 492, 493, 496, 497, 498, 499, 500, 501, 503, 504, 506, 507, 514, 518, 508, 509, 510, 511, 512, 513, 515, 516, 517, 519, 521, 522, 523, 524, 525, 527, 529, 530, 531, 532, 533, 534, 535, 536, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 579, 591, 580, 587, 581, 582, 583, 584, 585, 586, 588, 589, 590, 592, 593, 594, 595, 596, 597, 599, 600, 601, 602, 603, 605, 606, 607, 608, 609, 610, 611, 612, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 84, 84, 0, 0, 0, 0, 0, 0, 21, 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, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 613; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/sk.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1111 "lib/gherkin/lexer/sk.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/sk.rb.rl" # line 1120 "lib/gherkin/lexer/sk.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/sk.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/sk.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/sk.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/sk.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/sk.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/sk.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/sk.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/sk.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/sk.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/sk.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/sk.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/sk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/sk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/sk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/sk.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/sk.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/sk.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/sk.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/sk.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/sk.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/sk.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/sk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/sk.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/sk.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1364 "lib/gherkin/lexer/sk.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/sk.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1403 "lib/gherkin/lexer/sk.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/sk.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/uk.rb0000644000004100000410000020313312244512574017545 0ustar www-datawww-data # line 1 "ragel/i18n/uk.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Uk #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/uk.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/uk.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 22, 23, 25, 27, 38, 39, 40, 42, 44, 49, 54, 59, 64, 68, 72, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 94, 101, 106, 110, 116, 119, 121, 127, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 204, 215, 217, 228, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 336, 338, 340, 342, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 440, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 518, 519, 520, 521, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 595, 596, 597, 598, 599, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 644, 655, 657, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 806, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 907, 918, 920, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069, 1071, 1073, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1167, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1245, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1281, 1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1506, 1507, 1508, 1509 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 32, -69, -48, -75, -47, -126, -48, -80, -48, -70, -48, -66, -48, -74, -48, -80, -48, -67, -48, -66, -48, -66, -48, -69, -48, -72, -48, -75, -47, -123, -48, -80, -48, -71, -48, -47, -75, -47, -128, -48, -75, -48, -76, -47, -125, -48, -68, -48, -66, -48, -78, -48, -80, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, 32, -69, 10, -48, 10, -75, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -70, 10, -48, 10, -66, 10, -48, 10, -74, 10, -48, 10, -80, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, -75, 10, -47, 10, -123, 10, -48, 10, -80, 10, -48, 10, -71, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -66, 10, 10, 32, 44, 10, 32, -47, 10, -119, 10, -47, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -47, 10, -114, 10, 10, 58, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, 32, -76, 10, -47, 10, -106, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -70, 10, 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, -128, -48, -72, -48, -70, -65, -48, -69, -48, -80, -48, -76, -48, -72, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -92, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 10, 58, -47, -125, -47, -127, -47, -126, -48, -72, -48, -68, -48, -66, 32, 44, 32, -47, -119, -47, -126, -122, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -47, -106, -47, -114, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 10, 10, 32, -48, 10, 32, -69, 10, -48, 10, -75, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -70, 10, -48, 10, -66, 10, -48, 10, -74, 10, -48, 10, -80, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, -75, 10, -47, 10, -123, 10, -48, 10, -80, 10, -48, 10, -71, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -66, 10, 10, 32, 44, 10, 32, -47, 10, -119, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, 10, 58, -48, 10, -80, -66, 10, -48, 10, 32, -76, 10, -47, 10, -106, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -70, 10, 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, -48, -75, -48, -67, -48, -80, -47, -128, -47, -106, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 10, 10, 32, -48, 10, 32, -69, 10, -48, 10, -75, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -70, 10, -48, 10, -66, 10, -48, 10, -74, 10, -48, 10, -80, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, -75, 10, -47, 10, -123, 10, -48, 10, -80, 10, -48, 10, -71, 10, -48, -47, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, 10, 58, -128, 10, -48, 10, -72, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -66, 10, 10, 32, 44, 10, 32, -47, 10, -119, 10, -47, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -47, 10, -114, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, 32, -76, 10, -47, 10, -106, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -70, 10, 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, -48, -80, -66, -48, 32, -76, -47, -106, -47, -125, -48, -67, -48, -70, -47, -122, -47, -106, -48, -66, -48, -67, -48, -80, -48, -69, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -97, -95, -92, 10, -48, -47, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, 10, 58, -128, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -72, 10, -47, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -47, 10, -114, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -70, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 10, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 2, 9, 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, 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, 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, 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, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 4, 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, 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, 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, 2, 2, 2, 2, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 23, 25, 28, 31, 42, 44, 46, 49, 52, 57, 62, 67, 72, 76, 80, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 118, 125, 130, 134, 140, 144, 147, 153, 164, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 285, 297, 300, 311, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 472, 475, 478, 481, 484, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 627, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 744, 746, 748, 750, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 869, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 957, 969, 972, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1194, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1348, 1360, 1363, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 1466, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1579, 1582, 1585, 1588, 1591, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1731, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1848, 1851, 1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, 1882, 1884, 1886, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902, 1910, 1915, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2246, 2248, 2250, 2252 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 21, 0, 23, 24, 22, 26, 27, 25, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 28, 0, 29, 0, 31, 32, 30, 34, 35, 33, 38, 37, 39, 37, 36, 42, 41, 43, 41, 40, 42, 41, 44, 41, 40, 42, 41, 45, 41, 40, 47, 46, 46, 0, 4, 48, 48, 0, 50, 51, 49, 4, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 66, 67, 68, 67, 67, 70, 69, 66, 4, 71, 9, 71, 0, 72, 73, 72, 0, 76, 75, 77, 78, 75, 74, 0, 80, 81, 79, 0, 80, 79, 76, 82, 80, 81, 82, 79, 83, 76, 84, 85, 86, 87, 88, 89, 90, 84, 0, 91, 92, 0, 93, 0, 94, 0, 11, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 11, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 11, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 11, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 11, 0, 121, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 142, 141, 144, 143, 145, 144, 146, 147, 148, 149, 147, 146, 143, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 144, 143, 144, 160, 143, 161, 163, 162, 164, 165, 166, 167, 168, 169, 162, 0, 170, 144, 171, 143, 172, 144, 143, 173, 144, 143, 150, 144, 143, 174, 144, 143, 175, 144, 143, 176, 144, 143, 177, 144, 143, 178, 144, 143, 179, 144, 143, 180, 144, 143, 181, 144, 143, 182, 144, 143, 150, 144, 143, 183, 144, 143, 184, 144, 143, 185, 144, 143, 186, 144, 143, 187, 144, 143, 150, 144, 143, 188, 144, 143, 189, 144, 143, 190, 144, 143, 191, 144, 143, 192, 144, 143, 150, 144, 143, 193, 144, 143, 194, 144, 143, 195, 144, 143, 196, 144, 143, 197, 144, 143, 198, 144, 143, 199, 144, 143, 150, 144, 143, 200, 144, 143, 201, 144, 143, 202, 144, 143, 203, 144, 143, 204, 144, 143, 205, 144, 143, 206, 144, 143, 207, 144, 143, 208, 144, 143, 209, 144, 143, 210, 144, 143, 211, 144, 143, 212, 144, 143, 213, 144, 143, 214, 144, 143, 215, 144, 143, 216, 144, 143, 217, 144, 143, 144, 160, 218, 143, 144, 219, 143, 220, 144, 143, 186, 144, 143, 221, 144, 143, 222, 223, 144, 143, 224, 144, 143, 225, 144, 143, 226, 144, 143, 227, 144, 143, 228, 144, 143, 229, 144, 143, 230, 144, 143, 231, 144, 143, 232, 144, 143, 233, 144, 143, 234, 144, 143, 235, 144, 143, 236, 144, 143, 237, 144, 143, 144, 238, 143, 239, 144, 143, 240, 144, 143, 241, 144, 143, 242, 144, 143, 243, 144, 143, 244, 144, 143, 245, 144, 143, 246, 144, 143, 247, 144, 143, 248, 144, 143, 249, 144, 143, 250, 144, 143, 251, 144, 143, 252, 144, 143, 253, 144, 143, 254, 144, 143, 144, 160, 143, 255, 144, 143, 256, 144, 143, 257, 144, 143, 258, 144, 143, 259, 144, 143, 260, 144, 143, 261, 144, 143, 262, 144, 143, 263, 144, 143, 264, 144, 143, 265, 144, 143, 254, 144, 143, 266, 144, 143, 150, 267, 144, 143, 268, 144, 160, 143, 269, 144, 143, 270, 144, 143, 150, 144, 143, 271, 144, 143, 272, 144, 143, 273, 144, 143, 274, 144, 143, 275, 144, 143, 276, 144, 143, 277, 144, 143, 278, 144, 143, 279, 144, 143, 280, 144, 143, 281, 144, 143, 282, 144, 143, 283, 144, 143, 284, 144, 143, 285, 144, 143, 286, 144, 143, 287, 144, 143, 254, 144, 143, 288, 144, 143, 219, 144, 143, 144, 289, 143, 144, 290, 143, 144, 291, 143, 144, 292, 143, 144, 293, 143, 144, 294, 143, 144, 295, 143, 144, 296, 143, 144, 297, 143, 144, 298, 143, 144, 299, 143, 144, 300, 143, 144, 301, 143, 144, 302, 143, 303, 0, 304, 0, 305, 0, 306, 0, 307, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 319, 318, 321, 320, 322, 321, 323, 324, 324, 323, 320, 325, 321, 320, 326, 321, 320, 327, 321, 320, 328, 321, 320, 329, 321, 320, 330, 321, 320, 331, 321, 320, 332, 321, 320, 333, 321, 320, 334, 321, 320, 335, 321, 320, 336, 321, 320, 337, 321, 320, 338, 321, 320, 339, 321, 320, 340, 321, 320, 341, 321, 320, 342, 321, 320, 343, 321, 320, 321, 344, 320, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 21, 357, 0, 358, 0, 359, 0, 107, 0, 360, 0, 361, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 396, 395, 398, 397, 399, 398, 400, 401, 402, 403, 401, 400, 397, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 398, 397, 398, 414, 397, 415, 398, 416, 397, 417, 398, 397, 418, 398, 397, 404, 398, 397, 419, 398, 397, 420, 398, 397, 421, 398, 397, 422, 398, 397, 423, 398, 397, 424, 398, 397, 425, 398, 397, 426, 398, 397, 427, 398, 397, 404, 398, 397, 428, 398, 397, 429, 398, 397, 430, 398, 397, 431, 398, 397, 432, 398, 397, 404, 398, 397, 433, 398, 397, 434, 398, 397, 435, 398, 397, 436, 398, 397, 437, 398, 397, 404, 398, 397, 438, 398, 397, 439, 398, 397, 440, 398, 397, 441, 398, 397, 442, 398, 397, 443, 398, 397, 444, 398, 397, 404, 398, 397, 445, 398, 397, 446, 398, 397, 447, 398, 397, 448, 398, 397, 449, 398, 397, 450, 398, 397, 451, 398, 397, 452, 398, 397, 453, 398, 397, 454, 398, 397, 455, 398, 397, 456, 398, 397, 457, 398, 397, 458, 398, 397, 459, 398, 397, 460, 398, 397, 461, 398, 397, 462, 398, 397, 398, 414, 463, 397, 398, 464, 397, 465, 398, 397, 431, 398, 397, 466, 398, 397, 467, 398, 397, 468, 398, 397, 469, 398, 397, 470, 398, 397, 471, 398, 397, 472, 398, 397, 473, 398, 397, 474, 398, 397, 475, 398, 397, 476, 398, 397, 477, 398, 397, 478, 398, 397, 479, 398, 397, 398, 414, 397, 480, 398, 397, 404, 481, 398, 397, 482, 398, 414, 397, 483, 398, 397, 484, 398, 397, 404, 398, 397, 485, 398, 397, 486, 398, 397, 487, 398, 397, 488, 398, 397, 489, 398, 397, 490, 398, 397, 491, 398, 397, 492, 398, 397, 493, 398, 397, 494, 398, 397, 495, 398, 397, 496, 398, 397, 497, 398, 397, 498, 398, 397, 499, 398, 397, 500, 398, 397, 501, 398, 397, 479, 398, 397, 502, 398, 397, 464, 398, 397, 398, 503, 397, 398, 504, 397, 398, 505, 397, 398, 506, 397, 398, 507, 397, 398, 508, 397, 398, 509, 397, 398, 510, 397, 398, 511, 397, 398, 512, 397, 398, 513, 397, 398, 514, 397, 398, 515, 397, 398, 516, 397, 517, 0, 518, 0, 519, 0, 520, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 0, 531, 530, 533, 532, 534, 533, 535, 536, 537, 538, 536, 535, 532, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 533, 532, 533, 549, 532, 550, 533, 551, 532, 552, 533, 532, 553, 533, 532, 539, 533, 532, 554, 533, 532, 555, 533, 532, 556, 533, 532, 557, 533, 532, 558, 533, 532, 559, 533, 532, 560, 533, 532, 561, 533, 532, 562, 533, 532, 539, 533, 532, 563, 533, 532, 564, 533, 532, 565, 533, 532, 566, 533, 532, 567, 533, 532, 539, 533, 532, 568, 533, 532, 569, 533, 532, 570, 533, 532, 571, 533, 532, 572, 533, 532, 539, 533, 532, 573, 533, 532, 574, 533, 532, 575, 533, 532, 576, 533, 532, 577, 533, 532, 578, 533, 532, 579, 533, 532, 539, 533, 532, 580, 581, 533, 532, 582, 533, 532, 583, 533, 532, 584, 533, 532, 585, 533, 532, 586, 533, 532, 587, 533, 532, 588, 533, 532, 589, 533, 532, 590, 533, 532, 591, 533, 532, 592, 533, 532, 593, 533, 532, 594, 533, 532, 595, 533, 532, 596, 533, 532, 597, 533, 532, 598, 533, 532, 533, 549, 532, 599, 533, 532, 600, 533, 532, 601, 533, 532, 602, 533, 532, 603, 533, 532, 604, 533, 532, 605, 533, 532, 606, 533, 532, 607, 533, 532, 608, 533, 532, 609, 533, 532, 610, 533, 532, 611, 533, 532, 612, 533, 532, 613, 533, 532, 614, 533, 532, 615, 533, 532, 533, 549, 616, 532, 533, 617, 532, 618, 533, 532, 566, 533, 532, 619, 533, 532, 620, 621, 533, 532, 622, 533, 532, 623, 533, 532, 624, 533, 532, 625, 533, 532, 626, 533, 532, 627, 533, 532, 628, 533, 532, 629, 533, 532, 630, 533, 532, 631, 533, 532, 632, 533, 532, 633, 533, 532, 634, 533, 532, 635, 533, 532, 533, 636, 532, 637, 533, 532, 638, 533, 532, 639, 533, 532, 640, 533, 532, 641, 533, 532, 642, 533, 532, 643, 533, 532, 644, 533, 532, 645, 533, 532, 646, 533, 532, 647, 533, 532, 648, 533, 532, 649, 533, 532, 650, 533, 532, 651, 533, 532, 598, 533, 532, 652, 533, 532, 653, 533, 532, 654, 533, 532, 655, 533, 532, 656, 533, 532, 657, 533, 532, 658, 533, 532, 659, 533, 532, 660, 533, 532, 661, 533, 532, 662, 533, 532, 598, 533, 532, 663, 533, 532, 539, 664, 533, 532, 665, 533, 549, 532, 666, 533, 532, 667, 533, 532, 539, 533, 532, 668, 533, 532, 669, 533, 532, 670, 533, 532, 671, 533, 532, 672, 533, 532, 673, 533, 532, 674, 533, 532, 675, 533, 532, 676, 533, 532, 677, 533, 532, 678, 533, 532, 679, 533, 532, 680, 533, 532, 681, 533, 532, 682, 533, 532, 683, 533, 532, 684, 533, 532, 598, 533, 532, 685, 533, 532, 617, 533, 532, 533, 686, 532, 533, 687, 532, 533, 688, 532, 533, 689, 532, 533, 690, 532, 533, 691, 532, 533, 692, 532, 533, 693, 532, 533, 694, 532, 533, 695, 532, 533, 696, 532, 533, 697, 532, 533, 698, 532, 533, 699, 532, 700, 0, 11, 701, 0, 702, 21, 0, 703, 0, 704, 0, 11, 0, 705, 0, 706, 0, 707, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 721, 0, 722, 0, 723, 0, 725, 724, 727, 726, 728, 727, 729, 730, 731, 730, 729, 726, 732, 733, 734, 727, 726, 735, 736, 727, 726, 737, 727, 726, 738, 727, 726, 739, 727, 726, 740, 727, 726, 741, 727, 726, 742, 727, 726, 743, 727, 726, 744, 727, 726, 745, 727, 726, 746, 727, 726, 747, 727, 726, 748, 727, 726, 749, 727, 726, 750, 727, 726, 751, 727, 726, 752, 727, 726, 753, 727, 726, 727, 754, 726, 755, 727, 726, 756, 727, 726, 757, 727, 726, 758, 727, 726, 759, 727, 726, 760, 727, 726, 761, 727, 726, 762, 727, 726, 763, 727, 726, 764, 727, 726, 765, 727, 726, 766, 727, 726, 753, 727, 726, 767, 727, 726, 768, 769, 727, 726, 770, 727, 726, 771, 727, 726, 772, 727, 726, 773, 727, 726, 774, 727, 726, 775, 727, 726, 776, 727, 726, 777, 727, 726, 778, 727, 726, 779, 727, 726, 780, 727, 726, 781, 727, 726, 782, 727, 726, 783, 727, 726, 727, 784, 726, 785, 727, 726, 786, 727, 726, 787, 727, 726, 788, 727, 726, 789, 727, 726, 790, 727, 726, 791, 727, 726, 792, 727, 726, 793, 727, 726, 794, 727, 726, 795, 727, 726, 796, 727, 726, 797, 727, 726, 798, 727, 726, 799, 727, 726, 753, 727, 726, 800, 727, 726, 801, 727, 726, 802, 727, 726, 803, 727, 726, 804, 727, 726, 805, 727, 726, 806, 727, 726, 807, 727, 726, 808, 727, 726, 809, 727, 726, 810, 727, 726, 753, 727, 726, 811, 727, 726, 812, 727, 726, 813, 727, 726, 814, 727, 726, 815, 727, 726, 816, 727, 726, 817, 727, 726, 818, 727, 726, 819, 727, 726, 820, 727, 726, 821, 727, 726, 822, 727, 726, 823, 727, 726, 824, 727, 726, 825, 727, 726, 826, 727, 726, 827, 727, 726, 753, 727, 726, 727, 828, 726, 727, 829, 726, 727, 830, 726, 727, 831, 726, 727, 832, 726, 727, 833, 726, 727, 834, 726, 727, 835, 726, 727, 836, 726, 727, 837, 726, 727, 838, 726, 727, 839, 726, 727, 840, 726, 727, 841, 726, 842, 0, 358, 0, 843, 0, 3, 0, 844, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 763, 6, 6, 7, 17, 19, 3, 33, 36, 3, 42, 56, 62, 68, 76, 296, 623, 629, 761, 4, 5, 6, 18, 5, 6, 18, 8, 9, 10, 11, 10, 10, 11, 10, 12, 12, 12, 13, 12, 12, 12, 13, 14, 15, 16, 6, 16, 17, 6, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 765, 34, 35, 6, 34, 33, 35, 36, 37, 38, 40, 41, 39, 37, 38, 39, 37, 40, 2, 41, 7, 17, 19, 3, 33, 36, 43, 46, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 243, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 96, 97, 98, 97, 6, 229, 99, 99, 101, 115, 121, 127, 135, 157, 203, 209, 227, 100, 2, 6, 6, 7, 17, 19, 3, 33, 36, 102, 105, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 158, 159, 191, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 6, 244, 245, 246, 247, 248, 280, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 258, 259, 260, 259, 6, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 100, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 297, 298, 446, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 331, 332, 333, 332, 6, 432, 334, 334, 335, 349, 355, 361, 369, 391, 406, 412, 430, 100, 336, 339, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 350, 351, 352, 353, 354, 356, 357, 358, 359, 360, 362, 363, 364, 365, 366, 367, 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 407, 408, 409, 410, 411, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 6, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 460, 461, 462, 461, 6, 609, 463, 463, 464, 478, 484, 490, 498, 538, 583, 589, 607, 100, 465, 468, 466, 467, 469, 470, 471, 472, 473, 474, 475, 476, 477, 479, 480, 481, 482, 483, 485, 486, 487, 488, 489, 491, 492, 493, 494, 495, 496, 497, 499, 517, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 539, 540, 571, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 584, 585, 586, 587, 588, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 6, 624, 625, 626, 627, 628, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 649, 650, 651, 650, 6, 747, 652, 684, 729, 653, 671, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 100, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 685, 686, 717, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 6, 762, 764, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 13, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 765; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/uk.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1305 "lib/gherkin/lexer/uk.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/uk.rb.rl" # line 1314 "lib/gherkin/lexer/uk.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/uk.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/uk.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/uk.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/uk.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/uk.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/uk.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/uk.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/uk.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/uk.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/uk.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/uk.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/uk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/uk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/uk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/uk.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/uk.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/uk.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/uk.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/uk.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/uk.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/uk.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/uk.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/uk.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/uk.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1558 "lib/gherkin/lexer/uk.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/uk.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1597 "lib/gherkin/lexer/uk.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/uk.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/zh_cn.rb0000644000004100000410000011665112244512574020237 0ustar www-datawww-data # line 1 "ragel/i18n/zh_cn.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Zh_cn #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/zh_cn.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/zh_cn.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 15, 17, 18, 19, 20, 21, 23, 25, 39, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 81, 83, 85, 87, 89, 91, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 130, 132, 134, 136, 138, 140, 148, 150, 153, 156, 158, 160, 162, 164, 166, 168, 170, 172, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 266, 267, 268, 269, 270, 271, 272, 274, 276, 281, 286, 291, 296, 300, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 327, 334, 339, 343, 349, 352, 354, 360, 374, 382, 384, 387, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 487, 488, 500, 502, 504, 506, 508, 510, 518, 520, 523, 526, 528, 530, 532, 534, 536, 538, 540, 542, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 645, 646, 647, 648, 649, 650, 651, 661, 663, 665, 667, 669, 671, 673, 677, 679, 681, 683, 685, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 776, 778, 780, 782, 784, 786, 788, 789, 790 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -28, -27, -24, -23, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -67, -66, -122, -26, -104, -81, 10, 13, 10, 13, -28, -27, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -119, -118, -112, -100, -71, -67, -121, -27, -24, -90, -82, -126, -102, -82, -66, -89, -26, -100, -84, -27, 58, -92, -89, -25, -70, -78, 58, 10, 10, -28, -27, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -67, 10, -122, 10, -26, 10, -104, 10, -81, 10, -28, -27, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -128, -125, -116, -28, -72, -108, -116, -26, -103, -81, 58, 10, 10, -28, -27, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -67, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -119, -118, -112, -100, -71, -67, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -82, 10, -66, 10, -89, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -70, 10, -78, 10, 10, 58, -97, 10, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -105, 10, -74, 10, -70, 10, -26, 10, -103, 10, -81, 10, -74, 10, -28, 10, -72, 10, -108, 10, -109, 10, -128, 10, -116, 10, -126, 10, -93, 10, -28, 10, -71, 10, -120, 10, 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, -126, -93, -28, -71, -120, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -28, -27, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -119, -118, -112, -100, -71, -67, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -82, 10, -66, 10, -89, 10, -26, 10, -100, 10, -84, 10, 10, 58, -97, 10, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -105, 10, -74, 10, -70, 10, -26, 10, -103, 10, -81, 10, -74, 10, -28, 10, -72, 10, -108, 10, -109, 10, -128, 10, -116, 10, -126, 10, -93, 10, -28, 10, -71, 10, -120, 10, 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, 10, -28, -27, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -67, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -119, -118, -112, -100, -71, -67, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -82, 10, -66, 10, -89, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -70, 10, -78, 10, 10, 58, -97, 10, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -105, 10, -74, 10, -70, 10, -26, 10, -103, 10, -81, 10, -74, 10, -28, 10, -72, 10, -108, 10, -109, 10, -128, -125, 10, -116, 10, -116, 10, -26, 10, -103, 10, -81, 10, -126, 10, -93, 10, -28, 10, -71, 10, -120, 10, 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, -97, -24, -125, -67, 58, 10, 10, -28, -27, -24, 10, 32, 35, 37, 64, 9, 13, -66, 10, -117, 10, -27, 10, -83, 10, -112, 10, 10, 58, -119, -118, -100, 10, -89, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -70, 10, -78, 10, -97, 10, -24, 10, -125, 10, -67, 10, -70, 10, -26, 10, -103, 10, -81, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -116, -26, -105, -74, -70, -26, -103, -81, -74, -109, -117, -27, -83, -112, 58, 10, 10, -27, 10, 32, 35, 124, 9, 13, -118, 10, -97, 10, -24, 10, -125, 10, -67, 10, 10, 58, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 13, 2, 1, 1, 1, 1, 2, 2, 12, 7, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 12, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 8, 2, 3, 3, 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, 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, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 12, 8, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 10, 2, 2, 2, 2, 2, 8, 2, 3, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 15, 18, 20, 22, 24, 26, 29, 32, 46, 54, 56, 59, 62, 64, 66, 68, 70, 72, 74, 76, 78, 81, 83, 85, 87, 89, 91, 93, 95, 97, 109, 112, 115, 118, 121, 124, 138, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 175, 178, 181, 184, 187, 190, 199, 202, 206, 210, 213, 216, 219, 222, 225, 228, 231, 234, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 375, 377, 379, 381, 383, 385, 387, 390, 393, 398, 403, 408, 413, 417, 421, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 461, 468, 473, 477, 483, 487, 490, 496, 510, 519, 522, 526, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 676, 678, 690, 693, 696, 699, 702, 705, 714, 717, 721, 725, 728, 731, 734, 737, 740, 743, 746, 749, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 903, 905, 907, 909, 911, 913, 915, 925, 928, 931, 934, 937, 940, 943, 948, 951, 954, 957, 960, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1121, 1123 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 4, 5, 7, 6, 8, 9, 10, 11, 12, 13, 6, 0, 14, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 1, 2, 3, 4, 7, 6, 8, 9, 10, 11, 12, 13, 6, 0, 26, 27, 28, 29, 30, 31, 32, 0, 33, 0, 34, 35, 0, 36, 37, 0, 19, 0, 19, 0, 38, 0, 19, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 52, 51, 54, 53, 55, 56, 57, 58, 54, 59, 60, 61, 62, 60, 59, 53, 63, 54, 53, 64, 54, 53, 65, 54, 53, 66, 54, 53, 67, 54, 53, 68, 69, 70, 71, 73, 72, 74, 75, 76, 77, 78, 79, 72, 0, 80, 81, 0, 82, 0, 83, 0, 84, 0, 19, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 91, 90, 93, 92, 94, 95, 96, 97, 93, 98, 99, 100, 101, 99, 98, 92, 102, 93, 92, 103, 93, 92, 104, 93, 92, 105, 93, 92, 106, 93, 92, 107, 108, 109, 110, 111, 112, 113, 93, 92, 114, 93, 92, 115, 116, 93, 92, 117, 118, 93, 92, 106, 93, 92, 106, 93, 92, 119, 93, 92, 106, 93, 92, 120, 93, 92, 121, 93, 92, 122, 93, 92, 123, 93, 92, 124, 93, 106, 92, 125, 93, 92, 126, 93, 92, 127, 93, 92, 128, 93, 92, 129, 93, 92, 93, 106, 92, 130, 93, 92, 131, 93, 92, 132, 93, 92, 129, 93, 92, 133, 93, 92, 134, 93, 92, 135, 93, 92, 106, 93, 92, 136, 93, 92, 137, 93, 92, 138, 93, 92, 123, 93, 92, 139, 93, 92, 140, 93, 92, 141, 93, 92, 106, 93, 92, 106, 93, 92, 142, 93, 92, 139, 93, 92, 143, 93, 92, 144, 93, 92, 145, 93, 92, 146, 93, 92, 106, 93, 92, 93, 147, 92, 93, 148, 92, 93, 149, 92, 93, 150, 92, 93, 151, 92, 93, 152, 92, 93, 153, 92, 93, 154, 92, 93, 155, 92, 93, 156, 92, 93, 157, 92, 93, 158, 92, 93, 159, 92, 93, 160, 92, 93, 106, 92, 161, 0, 162, 0, 163, 0, 164, 0, 19, 0, 165, 0, 166, 0, 168, 169, 167, 171, 172, 170, 175, 174, 176, 174, 173, 179, 178, 180, 178, 177, 179, 178, 181, 178, 177, 179, 178, 182, 178, 177, 184, 183, 183, 0, 7, 185, 185, 0, 187, 188, 186, 7, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 19, 0, 0, 0, 0, 0, 203, 204, 205, 204, 204, 207, 206, 203, 7, 208, 12, 208, 0, 209, 210, 209, 0, 213, 212, 214, 215, 212, 211, 0, 217, 218, 216, 0, 217, 216, 213, 219, 217, 218, 219, 216, 220, 221, 222, 223, 213, 224, 225, 226, 227, 228, 229, 230, 224, 0, 231, 232, 233, 234, 235, 236, 237, 54, 53, 238, 54, 53, 239, 240, 54, 53, 241, 242, 54, 53, 67, 54, 53, 67, 54, 53, 243, 54, 53, 67, 54, 53, 244, 54, 53, 245, 54, 53, 246, 54, 53, 247, 54, 53, 54, 67, 53, 248, 54, 53, 249, 54, 53, 250, 54, 53, 247, 54, 53, 251, 54, 53, 252, 54, 53, 253, 54, 53, 67, 54, 53, 254, 54, 53, 255, 54, 53, 256, 54, 53, 247, 54, 53, 257, 54, 53, 258, 54, 53, 259, 54, 53, 67, 54, 53, 67, 54, 53, 260, 54, 53, 257, 54, 53, 261, 54, 53, 262, 54, 53, 263, 54, 53, 264, 54, 53, 67, 54, 53, 54, 265, 53, 54, 266, 53, 54, 267, 53, 54, 268, 53, 54, 269, 53, 54, 270, 53, 54, 271, 53, 54, 272, 53, 54, 273, 53, 54, 274, 53, 54, 275, 53, 54, 276, 53, 54, 277, 53, 54, 278, 53, 54, 67, 53, 280, 279, 282, 281, 283, 284, 285, 286, 282, 287, 288, 289, 290, 288, 287, 281, 291, 282, 281, 292, 282, 281, 293, 282, 281, 294, 282, 281, 295, 282, 281, 296, 297, 298, 299, 300, 301, 302, 282, 281, 303, 282, 281, 304, 305, 282, 281, 306, 307, 282, 281, 295, 282, 281, 295, 282, 281, 308, 282, 281, 295, 282, 281, 309, 282, 281, 310, 282, 281, 311, 282, 281, 312, 282, 281, 313, 282, 295, 281, 314, 282, 281, 315, 282, 281, 316, 282, 281, 317, 282, 281, 318, 282, 281, 282, 295, 281, 319, 282, 281, 320, 282, 281, 321, 282, 281, 318, 282, 281, 322, 282, 281, 323, 282, 281, 324, 282, 281, 295, 282, 281, 325, 282, 281, 326, 282, 281, 327, 282, 281, 312, 282, 281, 328, 282, 281, 329, 282, 281, 330, 282, 281, 295, 282, 281, 295, 282, 281, 331, 332, 282, 281, 328, 282, 281, 333, 282, 281, 334, 282, 281, 335, 282, 281, 318, 282, 281, 336, 282, 281, 337, 282, 281, 338, 282, 281, 339, 282, 281, 295, 282, 281, 282, 340, 281, 282, 341, 281, 282, 342, 281, 282, 343, 281, 282, 344, 281, 282, 345, 281, 282, 346, 281, 282, 347, 281, 282, 348, 281, 282, 349, 281, 282, 350, 281, 282, 351, 281, 282, 352, 281, 282, 353, 281, 282, 295, 281, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 360, 359, 362, 361, 363, 364, 365, 362, 366, 367, 368, 367, 366, 361, 369, 362, 361, 370, 362, 361, 371, 362, 361, 372, 362, 361, 373, 362, 361, 362, 374, 361, 375, 376, 377, 362, 361, 378, 362, 361, 379, 362, 361, 380, 362, 361, 381, 362, 361, 382, 362, 374, 361, 383, 362, 361, 384, 362, 361, 385, 362, 361, 386, 362, 361, 373, 362, 361, 387, 362, 361, 388, 362, 361, 389, 362, 361, 373, 362, 361, 390, 362, 361, 391, 362, 361, 392, 362, 361, 381, 362, 361, 393, 362, 361, 394, 362, 361, 395, 362, 361, 396, 362, 361, 373, 362, 361, 362, 397, 361, 362, 398, 361, 362, 399, 361, 362, 400, 361, 362, 401, 361, 362, 402, 361, 362, 403, 361, 362, 404, 361, 362, 405, 361, 362, 406, 361, 362, 407, 361, 362, 408, 361, 362, 409, 361, 362, 410, 361, 411, 0, 412, 0, 413, 0, 19, 0, 414, 0, 415, 0, 416, 0, 42, 0, 82, 0, 19, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 423, 422, 425, 424, 426, 425, 427, 428, 428, 427, 424, 429, 425, 424, 430, 425, 424, 431, 425, 424, 432, 425, 424, 433, 425, 424, 425, 434, 424, 435, 0, 6, 0, 436, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 10, 38, 114, 353, 9, 9, 119, 129, 131, 145, 146, 149, 3, 339, 4, 5, 6, 7, 8, 9, 130, 8, 9, 130, 11, 18, 277, 329, 333, 337, 338, 12, 13, 16, 14, 15, 17, 19, 20, 21, 22, 23, 207, 24, 25, 26, 27, 28, 29, 30, 31, 30, 31, 32, 155, 185, 187, 31, 9, 192, 206, 33, 34, 35, 36, 37, 2, 10, 38, 114, 9, 9, 119, 129, 131, 145, 146, 149, 39, 43, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 49, 50, 51, 56, 92, 94, 50, 9, 99, 113, 52, 53, 54, 55, 37, 57, 64, 75, 79, 83, 87, 91, 58, 59, 62, 60, 61, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 80, 81, 82, 84, 85, 86, 88, 89, 90, 93, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 9, 115, 116, 117, 118, 120, 121, 122, 123, 122, 122, 123, 122, 124, 124, 124, 125, 124, 124, 124, 125, 126, 127, 128, 9, 128, 129, 9, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 355, 147, 148, 9, 147, 146, 148, 149, 150, 151, 153, 154, 152, 150, 151, 152, 150, 153, 2, 10, 38, 114, 154, 119, 129, 131, 145, 146, 149, 156, 163, 168, 172, 176, 180, 184, 157, 158, 161, 159, 160, 162, 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 177, 178, 179, 181, 182, 183, 186, 188, 189, 190, 191, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 9, 208, 209, 208, 209, 210, 215, 251, 257, 209, 9, 262, 276, 211, 212, 213, 214, 37, 216, 223, 234, 238, 242, 246, 250, 217, 218, 221, 219, 220, 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 235, 236, 237, 239, 240, 241, 243, 244, 245, 247, 248, 249, 252, 253, 254, 255, 256, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 9, 278, 279, 280, 281, 282, 283, 284, 283, 284, 285, 291, 310, 284, 9, 315, 286, 287, 288, 289, 290, 37, 292, 302, 306, 293, 294, 295, 296, 297, 298, 299, 300, 301, 303, 304, 305, 307, 308, 309, 311, 312, 313, 314, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 9, 330, 331, 332, 334, 335, 336, 340, 341, 342, 343, 344, 345, 346, 345, 346, 347, 346, 9, 348, 349, 350, 351, 352, 37, 354, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 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, 57, 144, 0, 54, 84, 84, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 19, 63, 63, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 15, 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, 15, 0, 0, 0, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 96, 96, 0, 93, 90, 41, 96, 90, 99, 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, 19, 57, 144, 0, 54, 84, 84, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 17, 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, 17, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 0, 69, 33, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 21, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 355; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/zh_cn.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 717 "lib/gherkin/lexer/zh_cn.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/zh_cn.rb.rl" # line 726 "lib/gherkin/lexer/zh_cn.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/zh_cn.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/zh_cn.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/zh_cn.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/zh_cn.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/zh_cn.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/zh_cn.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/zh_cn.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/zh_cn.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/zh_cn.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/zh_cn.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/zh_cn.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/zh_cn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/zh_cn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/zh_cn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/zh_cn.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/zh_cn.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/zh_cn.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/zh_cn.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/zh_cn.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/zh_cn.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/zh_cn.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/zh_cn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/zh_cn.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/zh_cn.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 970 "lib/gherkin/lexer/zh_cn.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/zh_cn.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1009 "lib/gherkin/lexer/zh_cn.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/zh_cn.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/en_au.rb0000644000004100000410000016370012244512574020222 0ustar www-datawww-data # line 1 "ragel/i18n/en_au.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En_au #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en_au.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en_au.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 957, 958, 959, 960, 961, 962, 963, 964, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1023, 1029, 1032, 1034, 1040, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 70, 73, 80, 82, 84, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 70, 73, 80, 82, 84, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 119, 119, 119, 44, 32, 108, 111, 111, 107, 32, 109, 97, 116, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 70, 73, 80, 82, 84, 89, 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, 70, 73, 80, 82, 84, 89, 124, 9, 13, 117, 116, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 100, 97, 121, 32, 73, 32, 114, 101, 99, 107, 111, 110, 105, 114, 115, 116, 32, 111, 102, 102, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 73, 80, 82, 84, 89, 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, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 117, 10, 116, 10, 32, 10, 97, 10, 116, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 101, 10, 110, 10, 100, 10, 32, 10, 111, 10, 102, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 100, 10, 97, 10, 121, 10, 32, 10, 73, 10, 32, 10, 114, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 116, 10, 39, 10, 115, 10, 32, 10, 106, 10, 117, 10, 115, 10, 116, 10, 32, 10, 117, 10, 110, 10, 98, 10, 101, 10, 108, 10, 105, 10, 101, 10, 118, 10, 97, 10, 98, 10, 108, 10, 101, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 32, 10, 105, 10, 116, 10, 39, 10, 115, 10, 32, 10, 108, 10, 105, 10, 107, 10, 111, 10, 111, 10, 32, 10, 114, 10, 105, 10, 103, 10, 104, 10, 116, 10, 39, 101, 10, 107, 10, 110, 10, 111, 10, 119, 10, 97, 10, 104, 10, 32, 10, 110, 10, 97, 10, 104, 116, 39, 115, 32, 106, 117, 115, 116, 32, 117, 110, 98, 101, 108, 105, 101, 118, 97, 98, 108, 101, 114, 101, 116, 116, 121, 32, 109, 117, 99, 104, 58, 10, 10, 10, 32, 35, 37, 64, 65, 70, 80, 82, 89, 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, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 105, 10, 114, 10, 115, 10, 116, 10, 32, 10, 111, 10, 102, 10, 102, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 32, 10, 105, 10, 116, 10, 39, 10, 115, 10, 32, 10, 108, 10, 105, 10, 107, 10, 111, 10, 117, 10, 39, 10, 108, 10, 108, 10, 32, 10, 119, 10, 97, 10, 110, 10, 110, 10, 97, 101, 99, 107, 111, 110, 32, 105, 116, 39, 115, 32, 108, 105, 107, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 73, 80, 84, 89, 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, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 117, 10, 116, 10, 32, 10, 97, 10, 116, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 101, 10, 110, 10, 100, 10, 32, 10, 111, 10, 102, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 100, 10, 97, 10, 121, 10, 32, 10, 73, 10, 32, 10, 114, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 116, 10, 39, 10, 115, 10, 32, 10, 106, 10, 117, 10, 115, 10, 116, 10, 32, 10, 117, 10, 110, 10, 98, 10, 101, 10, 108, 10, 105, 10, 101, 10, 118, 10, 97, 10, 98, 10, 108, 10, 101, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 111, 10, 111, 10, 32, 10, 114, 10, 105, 10, 103, 10, 104, 10, 116, 10, 39, 101, 10, 107, 10, 110, 10, 111, 10, 119, 10, 97, 10, 104, 10, 32, 10, 110, 10, 97, 10, 104, 111, 111, 32, 114, 105, 103, 104, 116, 39, 101, 111, 107, 110, 111, 119, 97, 104, 32, 110, 97, 104, 117, 39, 108, 108, 32, 119, 97, 110, 110, 97, 58, 10, 10, 10, 32, 35, 80, 124, 9, 13, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 58, 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, 70, 73, 80, 82, 84, 89, 124, 9, 13, 10, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 117, 10, 116, 10, 32, 10, 97, 10, 116, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 101, 10, 110, 10, 100, 10, 32, 10, 111, 10, 102, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 100, 10, 97, 10, 121, 10, 32, 10, 73, 10, 32, 10, 114, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 105, 10, 114, 10, 115, 10, 116, 10, 32, 10, 111, 10, 102, 10, 102, 10, 116, 10, 39, 10, 115, 10, 32, 10, 106, 10, 117, 10, 115, 10, 116, 10, 32, 10, 117, 10, 110, 10, 98, 10, 101, 10, 108, 10, 105, 10, 101, 10, 118, 10, 97, 10, 98, 10, 108, 10, 101, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 32, 10, 105, 10, 116, 10, 39, 10, 115, 10, 32, 10, 108, 10, 105, 10, 107, 10, 111, 10, 111, 10, 32, 10, 114, 10, 105, 10, 103, 10, 104, 10, 116, 10, 39, 101, 10, 107, 10, 110, 10, 111, 10, 119, 10, 97, 10, 104, 10, 32, 10, 110, 10, 97, 10, 104, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 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, 328, 330, 332, 334, 336, 338, 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, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1531, 1537, 1541, 1544, 1550, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1899, 1902, 1905, 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 86, 85, 88, 87, 88, 89, 90, 91, 92, 90, 93, 94, 95, 96, 97, 98, 99, 100, 89, 87, 88, 101, 87, 88, 102, 87, 88, 103, 87, 88, 104, 87, 88, 105, 87, 88, 106, 87, 88, 107, 87, 88, 108, 87, 88, 109, 87, 88, 110, 87, 88, 111, 87, 88, 112, 87, 88, 113, 87, 88, 114, 87, 88, 115, 87, 117, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 116, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 175, 174, 177, 176, 177, 178, 179, 180, 181, 179, 182, 183, 184, 185, 186, 187, 188, 178, 176, 177, 189, 176, 177, 190, 176, 177, 191, 176, 177, 192, 176, 177, 193, 176, 177, 194, 176, 177, 195, 176, 177, 196, 176, 177, 197, 176, 177, 198, 176, 177, 199, 176, 177, 200, 176, 177, 201, 176, 177, 202, 176, 177, 203, 176, 177, 204, 176, 177, 205, 176, 177, 206, 176, 177, 207, 176, 177, 208, 176, 177, 209, 176, 177, 210, 176, 177, 211, 176, 177, 212, 176, 177, 213, 176, 177, 214, 176, 177, 215, 176, 177, 216, 176, 177, 217, 176, 177, 203, 176, 177, 218, 176, 177, 219, 176, 177, 220, 176, 177, 221, 176, 177, 222, 176, 177, 223, 176, 177, 224, 176, 177, 225, 176, 177, 226, 176, 177, 227, 176, 177, 228, 176, 177, 229, 176, 177, 230, 176, 177, 231, 176, 177, 232, 176, 177, 233, 176, 177, 234, 176, 177, 235, 176, 177, 236, 176, 177, 237, 176, 177, 238, 176, 177, 239, 176, 177, 240, 176, 177, 241, 176, 177, 242, 176, 177, 243, 176, 177, 244, 176, 177, 245, 176, 177, 246, 176, 177, 247, 176, 177, 248, 176, 177, 249, 176, 177, 250, 176, 177, 251, 176, 177, 252, 176, 177, 253, 176, 177, 254, 176, 177, 255, 176, 177, 256, 176, 177, 257, 176, 177, 258, 176, 177, 259, 176, 177, 260, 176, 177, 261, 176, 177, 262, 176, 177, 263, 176, 177, 264, 176, 177, 265, 176, 177, 266, 176, 177, 267, 176, 177, 268, 176, 177, 269, 176, 177, 270, 176, 177, 250, 176, 177, 271, 176, 177, 272, 176, 177, 273, 176, 177, 274, 176, 177, 275, 176, 177, 276, 176, 177, 277, 176, 177, 278, 176, 177, 279, 176, 177, 217, 176, 177, 280, 176, 177, 281, 176, 177, 282, 176, 177, 283, 176, 177, 284, 176, 177, 285, 176, 177, 286, 176, 177, 287, 176, 177, 288, 176, 177, 289, 176, 177, 290, 176, 177, 291, 176, 177, 292, 176, 177, 216, 176, 177, 293, 176, 177, 294, 176, 177, 295, 176, 177, 296, 176, 177, 297, 176, 177, 298, 176, 177, 299, 176, 177, 250, 176, 177, 300, 301, 176, 177, 302, 176, 177, 303, 176, 177, 304, 176, 177, 250, 176, 177, 305, 176, 177, 306, 176, 177, 307, 176, 177, 308, 176, 177, 309, 176, 177, 250, 176, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 164, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 342, 341, 344, 343, 344, 345, 346, 347, 346, 348, 349, 350, 351, 352, 345, 343, 344, 353, 343, 344, 354, 343, 344, 355, 343, 344, 356, 343, 344, 357, 343, 344, 358, 343, 344, 359, 343, 344, 360, 343, 344, 361, 343, 344, 362, 343, 344, 363, 343, 344, 364, 343, 344, 365, 343, 344, 366, 343, 344, 367, 343, 344, 368, 343, 344, 369, 343, 344, 370, 343, 344, 371, 343, 344, 372, 343, 344, 373, 343, 344, 374, 343, 344, 375, 343, 344, 376, 343, 344, 377, 343, 344, 378, 343, 344, 379, 343, 344, 380, 343, 344, 381, 343, 344, 382, 343, 344, 383, 343, 344, 384, 343, 344, 385, 343, 344, 386, 343, 344, 387, 343, 344, 388, 343, 344, 380, 343, 344, 389, 343, 344, 390, 343, 344, 391, 343, 344, 392, 343, 344, 393, 343, 344, 394, 343, 344, 395, 343, 344, 396, 343, 344, 397, 343, 344, 380, 343, 344, 398, 343, 344, 399, 343, 344, 400, 343, 344, 401, 343, 344, 402, 343, 344, 403, 343, 344, 404, 343, 344, 405, 343, 344, 406, 343, 344, 407, 343, 344, 408, 343, 344, 409, 343, 344, 410, 343, 344, 379, 343, 344, 411, 343, 344, 412, 343, 344, 413, 343, 344, 414, 343, 344, 415, 343, 344, 416, 343, 344, 417, 343, 344, 418, 343, 344, 419, 343, 344, 420, 343, 344, 380, 343, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 438, 437, 440, 439, 440, 441, 442, 443, 444, 442, 445, 446, 447, 448, 449, 450, 441, 439, 440, 451, 439, 440, 452, 439, 440, 453, 439, 440, 454, 439, 440, 455, 439, 440, 456, 439, 440, 457, 439, 440, 458, 439, 440, 459, 439, 440, 460, 439, 440, 461, 439, 440, 462, 439, 440, 463, 439, 440, 464, 439, 440, 465, 439, 440, 466, 439, 440, 467, 439, 440, 468, 439, 440, 469, 439, 440, 470, 439, 440, 471, 439, 440, 472, 439, 440, 473, 439, 440, 474, 439, 440, 475, 439, 440, 476, 439, 440, 477, 439, 440, 478, 439, 440, 479, 439, 440, 465, 439, 440, 480, 439, 440, 481, 439, 440, 482, 439, 440, 483, 439, 440, 484, 439, 440, 485, 439, 440, 486, 439, 440, 487, 439, 440, 488, 439, 440, 489, 439, 440, 490, 439, 440, 491, 439, 440, 492, 439, 440, 493, 439, 440, 494, 439, 440, 495, 439, 440, 496, 439, 440, 497, 439, 440, 498, 439, 440, 499, 439, 440, 500, 439, 440, 501, 439, 440, 502, 439, 440, 503, 439, 440, 504, 439, 440, 505, 439, 440, 506, 439, 440, 507, 439, 440, 508, 439, 440, 509, 439, 440, 510, 439, 440, 511, 439, 440, 512, 439, 440, 513, 439, 440, 514, 439, 440, 515, 439, 440, 516, 439, 440, 517, 439, 440, 518, 439, 440, 519, 439, 440, 520, 439, 440, 521, 439, 440, 522, 439, 440, 523, 439, 440, 524, 439, 440, 525, 439, 440, 526, 439, 440, 527, 439, 440, 528, 439, 440, 529, 439, 440, 530, 439, 440, 531, 439, 440, 532, 439, 440, 512, 439, 440, 533, 439, 440, 534, 439, 440, 535, 439, 440, 536, 439, 440, 537, 439, 440, 538, 439, 440, 539, 439, 440, 540, 439, 440, 541, 439, 440, 479, 439, 440, 542, 439, 440, 543, 439, 440, 544, 439, 440, 545, 439, 440, 546, 439, 440, 547, 439, 440, 548, 439, 440, 512, 439, 440, 549, 550, 439, 440, 551, 439, 440, 552, 439, 440, 553, 439, 440, 512, 439, 440, 554, 439, 440, 555, 439, 440, 556, 439, 440, 557, 439, 440, 558, 439, 440, 512, 439, 559, 0, 560, 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, 164, 0, 566, 567, 568, 0, 569, 0, 570, 0, 571, 0, 164, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 164, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 589, 588, 591, 590, 591, 592, 593, 594, 593, 592, 590, 591, 595, 590, 591, 596, 590, 591, 597, 590, 591, 598, 590, 591, 599, 590, 591, 600, 590, 591, 601, 590, 591, 602, 590, 591, 603, 590, 591, 604, 590, 591, 605, 590, 606, 607, 606, 0, 610, 609, 611, 612, 609, 608, 0, 614, 615, 613, 0, 614, 613, 610, 616, 614, 615, 616, 613, 610, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 617, 0, 88, 632, 87, 88, 633, 87, 88, 634, 87, 88, 635, 87, 88, 636, 87, 88, 637, 87, 88, 638, 87, 88, 639, 87, 88, 640, 87, 88, 641, 87, 88, 642, 87, 88, 643, 87, 88, 644, 87, 88, 645, 87, 88, 115, 87, 88, 646, 87, 88, 647, 87, 88, 648, 87, 88, 649, 87, 88, 650, 87, 88, 651, 87, 88, 652, 87, 88, 653, 87, 88, 654, 87, 88, 655, 87, 88, 656, 87, 88, 657, 87, 88, 658, 87, 88, 659, 87, 88, 660, 87, 88, 661, 87, 88, 662, 87, 88, 663, 87, 88, 664, 87, 88, 665, 87, 88, 666, 87, 88, 667, 87, 88, 668, 87, 88, 669, 87, 88, 670, 87, 88, 671, 87, 88, 672, 87, 88, 673, 87, 88, 674, 87, 88, 675, 87, 88, 676, 87, 88, 677, 87, 88, 678, 87, 88, 679, 87, 88, 680, 87, 88, 681, 87, 88, 682, 87, 88, 683, 87, 88, 684, 87, 88, 685, 87, 88, 645, 87, 88, 686, 87, 88, 687, 87, 88, 688, 87, 88, 689, 87, 88, 690, 87, 88, 691, 87, 88, 692, 87, 88, 693, 87, 88, 694, 87, 88, 695, 87, 88, 696, 87, 88, 697, 87, 88, 698, 87, 88, 699, 87, 88, 700, 87, 88, 701, 87, 88, 702, 87, 88, 703, 87, 88, 704, 87, 88, 705, 87, 88, 678, 87, 88, 706, 87, 88, 707, 87, 88, 708, 87, 88, 709, 87, 88, 710, 87, 88, 711, 87, 88, 712, 87, 88, 713, 87, 88, 714, 87, 88, 645, 87, 88, 715, 87, 88, 716, 87, 88, 717, 87, 88, 718, 87, 88, 719, 87, 88, 720, 87, 88, 721, 87, 88, 722, 87, 88, 723, 87, 88, 724, 87, 88, 725, 87, 88, 726, 87, 88, 727, 87, 88, 644, 87, 88, 728, 87, 88, 729, 87, 88, 730, 87, 88, 731, 87, 88, 732, 87, 88, 733, 87, 88, 734, 87, 88, 678, 87, 88, 735, 736, 87, 88, 737, 87, 88, 738, 87, 88, 739, 87, 88, 678, 87, 88, 740, 87, 88, 741, 87, 88, 742, 87, 88, 743, 87, 88, 744, 87, 88, 678, 87, 745, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 652, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 53, 54, 54, 4, 55, 69, 532, 547, 580, 588, 609, 619, 633, 641, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 4, 70, 4, 4, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 31, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 114, 115, 115, 4, 116, 130, 131, 146, 179, 200, 210, 224, 232, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 4, 70, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 130, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 230, 231, 233, 237, 234, 235, 236, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 276, 277, 277, 4, 278, 292, 307, 315, 325, 339, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 4, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 70, 308, 309, 310, 311, 312, 313, 314, 316, 317, 318, 319, 320, 321, 322, 323, 324, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 367, 368, 368, 4, 369, 383, 384, 399, 432, 453, 463, 471, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 4, 70, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 383, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 454, 455, 456, 457, 458, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 470, 472, 476, 473, 474, 475, 477, 478, 479, 480, 481, 483, 484, 485, 486, 487, 488, 489, 491, 495, 501, 492, 493, 494, 496, 497, 498, 499, 500, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 513, 514, 514, 4, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 70, 526, 527, 528, 530, 531, 529, 527, 528, 529, 527, 530, 531, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 69, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 634, 635, 636, 637, 638, 639, 640, 642, 646, 643, 644, 645, 647, 648, 649, 650, 651, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 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, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 652; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en_au.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1145 "lib/gherkin/lexer/en_au.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en_au.rb.rl" # line 1154 "lib/gherkin/lexer/en_au.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en_au.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en_au.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en_au.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en_au.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en_au.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en_au.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en_au.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en_au.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en_au.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en_au.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en_au.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en_au.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en_au.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en_au.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en_au.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en_au.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en_au.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en_au.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en_au.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en_au.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en_au.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en_au.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en_au.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en_au.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1398 "lib/gherkin/lexer/en_au.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en_au.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1437 "lib/gherkin/lexer/en_au.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en_au.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/uz.rb0000644000004100000410000015314112244512574017567 0ustar www-datawww-data # line 1 "ragel/i18n/uz.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Uz #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/uz.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/uz.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 21, 22, 24, 25, 26, 27, 28, 29, 31, 33, 44, 45, 46, 48, 50, 55, 60, 65, 70, 74, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 100, 107, 112, 116, 122, 125, 127, 133, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 291, 299, 301, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 461, 462, 471, 480, 482, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 724, 732, 734, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 973, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1164, 1165 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -111, -110, -101, -100, -95, -94, -93, -92, -48, -77, -68, -48, -80, -47, -128, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -68, -48, -66, -48, -72, -47, -128, -48, -66, -48, -70, -48, -80, -48, -75, -48, -70, -48, -72, -48, -67, -48, -72, -47, -127, -48, -66, -48, -69, -48, -69, -48, -80, -47, -128, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -92, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 10, 58, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 32, 58, -47, -127, -47, -126, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, -47, -127, -48, -72, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -110, -101, -95, -93, -92, 10, -48, 10, -77, -68, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 32, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -72, 10, -47, 10, -128, 10, -48, 10, -66, 10, -48, 10, -70, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 58, -48, 10, -67, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -110, -101, -95, -94, -93, -92, 10, -48, 10, -77, -68, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 32, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -72, 10, -47, 10, -128, 10, -48, 10, -66, 10, -48, 10, -70, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 32, 58, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, -47, 10, -127, 10, -48, 10, -72, 10, 10, 58, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -123, 10, -48, 10, -67, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -80, -47, -128, -48, -72, -47, -123, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -110, -101, -95, -93, -92, 10, -48, 10, -77, -68, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 32, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -72, 10, -47, 10, -128, 10, -48, 10, -66, 10, -48, 10, -70, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 32, 58, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, -47, 10, -127, 10, -48, 10, -72, 10, 10, 58, -48, 10, -67, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -67, -48, -76, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -66, -48, -67, -48, -80, -48, -69, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -100, -95, -94, -92, 10, -48, 10, -72, 10, -47, 10, -127, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -69, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 58, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 32, 58, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, -47, 10, -127, 10, -48, 10, -72, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -123, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 9, 1, 2, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 2, 2, 2, 2, 2, 2, 2, 1, 1, 7, 9, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 5, 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, 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, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 22, 24, 27, 29, 31, 33, 35, 37, 40, 43, 54, 56, 58, 61, 64, 69, 74, 79, 84, 88, 92, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 130, 137, 142, 146, 152, 156, 159, 165, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 422, 431, 434, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 674, 676, 685, 695, 698, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 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, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1061, 1070, 1073, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1439, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1724, 1726 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 0, 21, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 29, 30, 28, 32, 33, 31, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 34, 0, 35, 0, 37, 38, 36, 40, 41, 39, 44, 43, 45, 43, 42, 48, 47, 49, 47, 46, 48, 47, 50, 47, 46, 48, 47, 51, 47, 46, 53, 52, 52, 0, 4, 54, 54, 0, 56, 57, 55, 4, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 72, 73, 74, 73, 73, 76, 75, 72, 4, 77, 9, 77, 0, 78, 79, 78, 0, 82, 81, 83, 84, 81, 80, 0, 86, 87, 85, 0, 86, 85, 82, 88, 86, 87, 88, 85, 89, 82, 90, 91, 92, 93, 94, 95, 96, 90, 0, 97, 0, 98, 0, 99, 0, 26, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 26, 0, 107, 0, 26, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 26, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 131, 130, 133, 132, 134, 133, 135, 136, 136, 135, 132, 137, 133, 132, 138, 133, 132, 139, 133, 132, 140, 133, 132, 141, 133, 132, 142, 133, 132, 143, 133, 132, 144, 133, 132, 145, 133, 132, 146, 133, 132, 147, 133, 132, 148, 133, 132, 149, 133, 132, 150, 133, 132, 151, 133, 132, 152, 133, 132, 153, 133, 132, 154, 133, 132, 155, 133, 132, 133, 156, 132, 157, 159, 158, 160, 161, 162, 163, 164, 165, 158, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 206, 205, 208, 207, 209, 208, 210, 211, 212, 213, 211, 210, 207, 214, 215, 216, 217, 218, 219, 220, 208, 207, 221, 208, 207, 222, 223, 208, 207, 224, 208, 207, 225, 208, 207, 226, 208, 207, 227, 208, 207, 208, 228, 207, 229, 208, 207, 230, 208, 207, 231, 208, 207, 227, 208, 207, 232, 208, 207, 233, 208, 207, 234, 208, 207, 235, 208, 207, 236, 208, 207, 237, 208, 207, 238, 208, 207, 227, 208, 207, 239, 208, 207, 227, 208, 207, 240, 208, 207, 241, 208, 207, 242, 208, 207, 243, 208, 207, 244, 208, 207, 245, 208, 207, 246, 208, 207, 227, 208, 207, 247, 208, 207, 248, 208, 207, 249, 208, 207, 250, 208, 207, 251, 208, 207, 252, 208, 207, 253, 208, 207, 254, 208, 207, 255, 208, 207, 256, 208, 207, 257, 208, 207, 258, 208, 207, 259, 208, 207, 260, 208, 207, 208, 228, 207, 261, 208, 207, 262, 208, 207, 263, 208, 207, 216, 208, 207, 264, 208, 207, 265, 208, 207, 266, 208, 207, 267, 208, 207, 268, 208, 207, 269, 208, 207, 270, 208, 207, 271, 208, 207, 272, 208, 207, 273, 208, 207, 274, 208, 207, 275, 208, 207, 276, 208, 207, 277, 208, 207, 278, 208, 207, 279, 208, 207, 280, 208, 207, 260, 208, 207, 208, 281, 207, 208, 282, 207, 208, 283, 207, 208, 284, 207, 208, 285, 207, 208, 286, 207, 208, 287, 207, 208, 288, 207, 208, 289, 207, 208, 290, 207, 208, 291, 207, 208, 292, 207, 208, 293, 207, 208, 294, 207, 296, 295, 298, 297, 299, 298, 300, 301, 302, 303, 301, 300, 297, 304, 305, 306, 307, 308, 309, 310, 311, 298, 297, 312, 298, 297, 313, 314, 298, 297, 315, 298, 297, 316, 298, 297, 317, 298, 297, 318, 298, 297, 298, 319, 297, 320, 298, 297, 321, 298, 297, 322, 298, 297, 318, 298, 297, 323, 298, 297, 324, 298, 297, 325, 298, 297, 326, 298, 297, 327, 298, 297, 328, 298, 297, 329, 298, 297, 318, 298, 297, 330, 298, 297, 318, 298, 297, 331, 298, 297, 332, 298, 297, 333, 298, 297, 334, 298, 297, 335, 298, 297, 336, 298, 297, 337, 298, 297, 318, 298, 297, 338, 298, 297, 339, 298, 297, 340, 298, 297, 341, 298, 297, 342, 298, 297, 343, 298, 297, 344, 298, 297, 345, 298, 297, 346, 298, 297, 347, 298, 297, 348, 298, 297, 349, 298, 297, 350, 298, 297, 351, 298, 297, 298, 352, 319, 297, 353, 298, 297, 354, 298, 297, 355, 298, 297, 356, 298, 297, 357, 298, 297, 358, 298, 297, 359, 298, 297, 360, 298, 297, 361, 298, 297, 362, 298, 297, 363, 298, 297, 364, 298, 297, 365, 298, 297, 366, 298, 297, 367, 298, 297, 368, 298, 297, 369, 298, 297, 370, 298, 297, 371, 298, 297, 372, 298, 297, 373, 298, 297, 374, 298, 297, 298, 319, 297, 375, 298, 297, 376, 298, 297, 377, 298, 297, 378, 298, 297, 379, 298, 297, 380, 298, 297, 381, 298, 297, 374, 298, 297, 382, 298, 297, 383, 298, 297, 384, 298, 297, 306, 298, 297, 385, 298, 297, 386, 298, 297, 387, 298, 297, 388, 298, 297, 389, 298, 297, 390, 298, 297, 391, 298, 297, 392, 298, 297, 393, 298, 297, 394, 298, 297, 395, 298, 297, 396, 298, 297, 397, 298, 297, 398, 298, 297, 399, 298, 297, 400, 298, 297, 401, 298, 297, 374, 298, 297, 298, 402, 297, 298, 403, 297, 298, 404, 297, 298, 405, 297, 298, 406, 297, 298, 407, 297, 298, 408, 297, 298, 409, 297, 298, 410, 297, 298, 411, 297, 298, 412, 297, 298, 413, 297, 298, 414, 297, 298, 415, 297, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 426, 425, 428, 427, 429, 428, 430, 431, 432, 433, 431, 430, 427, 434, 435, 436, 437, 438, 439, 440, 428, 427, 441, 428, 427, 442, 443, 428, 427, 444, 428, 427, 445, 428, 427, 446, 428, 427, 447, 428, 427, 428, 448, 427, 449, 428, 427, 450, 428, 427, 451, 428, 427, 447, 428, 427, 452, 428, 427, 453, 428, 427, 454, 428, 427, 455, 428, 427, 456, 428, 427, 457, 428, 427, 458, 428, 427, 447, 428, 427, 459, 428, 427, 447, 428, 427, 460, 428, 427, 461, 428, 427, 462, 428, 427, 463, 428, 427, 464, 428, 427, 465, 428, 427, 466, 428, 427, 447, 428, 427, 467, 428, 427, 468, 428, 427, 469, 428, 427, 470, 428, 427, 471, 428, 427, 472, 428, 427, 473, 428, 427, 474, 428, 427, 475, 428, 427, 476, 428, 427, 477, 428, 427, 478, 428, 427, 479, 428, 427, 480, 428, 427, 428, 481, 448, 427, 482, 428, 427, 483, 428, 427, 484, 428, 427, 485, 428, 427, 486, 428, 427, 487, 428, 427, 488, 428, 427, 489, 428, 427, 490, 428, 427, 491, 428, 427, 492, 428, 427, 493, 428, 427, 494, 428, 427, 495, 428, 427, 496, 428, 427, 497, 428, 427, 498, 428, 427, 499, 428, 427, 500, 428, 427, 501, 428, 427, 502, 428, 427, 503, 428, 427, 428, 448, 427, 504, 428, 427, 505, 428, 427, 506, 428, 427, 436, 428, 427, 507, 428, 427, 508, 428, 427, 509, 428, 427, 510, 428, 427, 511, 428, 427, 512, 428, 427, 513, 428, 427, 514, 428, 427, 515, 428, 427, 516, 428, 427, 517, 428, 427, 518, 428, 427, 519, 428, 427, 520, 428, 427, 521, 428, 427, 522, 428, 427, 523, 428, 427, 503, 428, 427, 428, 524, 427, 428, 525, 427, 428, 526, 427, 428, 527, 427, 428, 528, 427, 428, 529, 427, 428, 530, 427, 428, 531, 427, 428, 532, 427, 428, 533, 427, 428, 534, 427, 428, 535, 427, 428, 536, 427, 428, 537, 427, 538, 0, 539, 0, 540, 0, 13, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 561, 560, 563, 562, 564, 563, 565, 566, 567, 566, 565, 562, 568, 569, 570, 571, 563, 562, 572, 563, 562, 573, 563, 562, 574, 563, 562, 575, 563, 562, 576, 563, 562, 577, 563, 562, 578, 563, 562, 579, 563, 562, 580, 563, 562, 581, 563, 562, 582, 563, 562, 583, 563, 562, 584, 563, 562, 585, 563, 562, 563, 586, 562, 587, 563, 562, 588, 563, 562, 589, 563, 562, 590, 563, 562, 591, 563, 562, 592, 563, 562, 593, 563, 562, 594, 563, 562, 595, 563, 562, 596, 563, 562, 597, 563, 562, 598, 563, 562, 599, 563, 562, 600, 563, 562, 563, 601, 586, 562, 602, 563, 562, 603, 563, 562, 604, 563, 562, 605, 563, 562, 606, 563, 562, 607, 563, 562, 608, 563, 562, 609, 563, 562, 610, 563, 562, 611, 563, 562, 612, 563, 562, 613, 563, 562, 614, 563, 562, 615, 563, 562, 616, 563, 562, 617, 563, 562, 618, 563, 562, 619, 563, 562, 620, 563, 562, 621, 563, 562, 622, 563, 562, 585, 563, 562, 623, 563, 562, 624, 563, 562, 625, 563, 562, 626, 563, 562, 627, 563, 562, 628, 563, 562, 629, 563, 562, 585, 563, 562, 630, 563, 562, 631, 563, 562, 632, 563, 562, 633, 563, 562, 634, 563, 562, 635, 563, 562, 636, 563, 562, 637, 563, 562, 638, 563, 562, 639, 563, 562, 640, 563, 562, 641, 563, 562, 642, 563, 562, 643, 563, 562, 644, 563, 562, 645, 563, 562, 646, 563, 562, 585, 563, 562, 563, 647, 562, 563, 648, 562, 563, 649, 562, 563, 650, 562, 563, 651, 562, 563, 652, 562, 563, 653, 562, 563, 654, 562, 563, 655, 562, 563, 656, 562, 563, 657, 562, 563, 658, 562, 563, 659, 562, 563, 660, 562, 661, 0, 3, 0, 662, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 581, 12, 12, 13, 23, 25, 9, 39, 42, 3, 52, 60, 62, 70, 109, 346, 462, 466, 4, 5, 48, 6, 7, 8, 9, 10, 11, 12, 24, 11, 12, 24, 14, 15, 16, 17, 16, 16, 17, 16, 18, 18, 18, 19, 18, 18, 18, 19, 20, 21, 22, 12, 22, 23, 12, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 583, 40, 41, 12, 40, 39, 41, 42, 43, 44, 46, 47, 45, 43, 44, 45, 43, 46, 2, 47, 13, 23, 25, 9, 39, 42, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 61, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 86, 87, 88, 87, 12, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 2, 12, 12, 13, 23, 25, 9, 39, 42, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 231, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 148, 149, 150, 149, 12, 217, 157, 151, 162, 170, 172, 180, 195, 199, 152, 153, 158, 154, 155, 156, 157, 108, 159, 160, 161, 163, 164, 165, 166, 167, 168, 169, 171, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 196, 197, 198, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 12, 232, 233, 232, 233, 234, 233, 12, 332, 241, 235, 246, 254, 256, 264, 302, 310, 314, 236, 237, 242, 238, 239, 240, 241, 108, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 255, 257, 258, 259, 260, 261, 262, 263, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 303, 304, 305, 306, 307, 308, 309, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 12, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 356, 357, 358, 357, 12, 448, 365, 359, 370, 378, 380, 388, 426, 430, 360, 361, 366, 362, 363, 364, 365, 108, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 379, 381, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 12, 463, 464, 465, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 486, 487, 488, 487, 12, 567, 489, 504, 541, 549, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 108, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 542, 543, 544, 545, 546, 547, 548, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 12, 582, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 13, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 583; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/uz.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1035 "lib/gherkin/lexer/uz.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/uz.rb.rl" # line 1044 "lib/gherkin/lexer/uz.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/uz.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/uz.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/uz.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/uz.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/uz.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/uz.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/uz.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/uz.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/uz.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/uz.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/uz.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/uz.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/uz.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/uz.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/uz.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/uz.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/uz.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/uz.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/uz.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/uz.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/uz.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/uz.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/uz.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/uz.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1288 "lib/gherkin/lexer/uz.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/uz.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1327 "lib/gherkin/lexer/uz.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/uz.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/vi.rb0000644000004100000410000013246112244512574017551 0ustar www-datawww-data # line 1 "ragel/i18n/vi.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Vi #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/vi.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/vi.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 352, 354, 356, 358, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 400, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 426, 427, 428, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 542, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 604, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 775, 777, 779, 781, 783, 785, 787, 788, 789, 790, 791, 795, 801, 804, 806, 812, 829, 831, 833, 835, 837, 839, 841, 843, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 919, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 943, 944, 945, 946 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, -31, 105, -69, -111, 105, 32, 99, -31, -70, -93, 110, 104, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 67, 75, 78, 84, 86, 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, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, 104, 111, -31, -69, -81, 32, 108, 105, -31, -69, -121, 117, 58, 10, 10, 10, 32, 35, 84, 124, 9, 13, -61, 10, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, 10, 110, 10, 103, 10, 58, -31, 104, -69, -117, 99, 104, 32, 98, -31, -70, -93, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 67, 75, 78, 84, 86, 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, -31, 10, 105, -69, 10, -111, 10, 10, 105, 10, 32, 10, 99, -31, 10, -70, 10, -93, 10, 10, 110, 10, 104, 10, 58, -31, 10, -70, 10, -65, 10, 10, 116, 10, 104, 10, 111, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 105, 117, 10, 110, 10, 103, 10, 32, 10, 107, 116, -31, 10, -61, 10, -84, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, 10, 104, -58, 10, -80, 10, 10, 110, 10, 103, -61, 10, 104, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, 10, -84, 10, -61, 10, -96, 10, 105, 117, 110, 103, 32, 107, 116, -31, -69, -117, 99, 104, 32, 98, -31, -70, -93, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 67, 75, 78, 84, 86, 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, 105, -31, 10, -70, 10, -65, 10, 10, 116, 10, 104, 10, 111, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 58, 10, 105, 10, 104, -58, 10, -80, 10, 10, 110, 10, 103, -61, 10, 104, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, 10, -84, 10, -61, 10, -96, 10, -61, -84, 110, 104, 32, 104, 117, -31, -69, -111, 110, 103, 104, -58, -80, 110, 103, -61, 104, -84, -83, 110, 104, 32, 104, 117, -31, -69, -111, 110, 103, 110, 104, 32, 110, -60, -125, 110, 103, 58, 10, 10, 10, 32, 35, 37, 64, 66, 68, 75, 84, 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, -31, 10, -69, 10, -111, 10, 10, 105, 10, 32, 10, 99, -31, 10, -70, 10, -93, 10, 10, 110, 10, 104, 10, 58, -31, 10, -69, 10, -81, 10, 10, 32, 10, 108, 10, 105, -31, 10, -69, 10, -121, 10, 10, 117, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 117, 10, 110, 10, 103, 10, 32, 10, 107, 116, -31, 10, -61, 10, -84, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, -61, 10, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, -84, -61, -96, 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, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, 10, 105, -31, 10, -70, 10, -65, 10, 10, 116, 10, 104, 10, 111, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 58, 10, 105, 117, 10, 110, 10, 103, 10, 32, 10, 107, 116, -31, 10, -61, 10, -84, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, 10, 104, -58, 10, -80, 10, 10, 110, 10, 103, -61, 10, 104, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, 10, -84, 10, -61, 10, -96, 10, -31, -70, -65, 116, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 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, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 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, 3, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 3, 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, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 4, 3, 2, 4, 15, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 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, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 353, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 491, 494, 497, 500, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 562, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 601, 603, 605, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 775, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 876, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1156, 1158, 1160, 1162, 1166, 1172, 1176, 1179, 1185, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1264, 1267, 1270, 1273, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1335, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1371, 1373, 1375, 1377 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 83, 82, 85, 84, 85, 86, 87, 88, 89, 87, 90, 91, 92, 93, 94, 95, 86, 84, 85, 96, 84, 85, 97, 84, 85, 98, 84, 85, 99, 84, 85, 100, 84, 85, 101, 84, 85, 102, 84, 85, 103, 84, 85, 104, 84, 85, 105, 84, 85, 106, 84, 85, 107, 84, 85, 108, 84, 85, 109, 84, 85, 110, 84, 112, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 111, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 140, 139, 142, 141, 142, 143, 144, 145, 144, 143, 141, 146, 142, 141, 147, 142, 141, 142, 148, 141, 142, 149, 141, 142, 150, 141, 142, 151, 141, 152, 142, 141, 153, 142, 141, 142, 154, 141, 142, 155, 141, 142, 156, 141, 157, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 171, 170, 173, 172, 173, 174, 175, 176, 177, 175, 178, 179, 180, 181, 182, 183, 174, 172, 173, 184, 172, 173, 185, 172, 173, 186, 172, 173, 187, 172, 173, 188, 172, 173, 189, 172, 173, 190, 172, 173, 191, 172, 173, 192, 172, 173, 193, 172, 173, 194, 172, 173, 195, 172, 173, 196, 172, 173, 197, 172, 173, 198, 172, 199, 173, 200, 172, 201, 173, 172, 202, 173, 172, 173, 203, 172, 173, 204, 172, 173, 205, 172, 206, 173, 172, 207, 173, 172, 208, 173, 172, 173, 209, 172, 173, 210, 172, 173, 198, 172, 211, 173, 172, 212, 173, 172, 213, 173, 172, 173, 214, 172, 173, 215, 172, 173, 214, 172, 216, 173, 217, 172, 218, 173, 172, 219, 173, 172, 173, 220, 172, 173, 221, 172, 173, 222, 172, 173, 223, 172, 224, 173, 172, 225, 173, 172, 226, 173, 172, 173, 210, 172, 173, 214, 227, 172, 173, 228, 172, 173, 229, 172, 173, 230, 172, 173, 231, 232, 172, 216, 173, 172, 233, 173, 172, 234, 173, 172, 173, 235, 172, 173, 236, 172, 173, 237, 172, 173, 238, 172, 173, 239, 172, 240, 173, 172, 241, 173, 172, 242, 173, 172, 173, 243, 172, 173, 210, 172, 173, 244, 172, 245, 173, 172, 246, 173, 172, 173, 247, 172, 173, 214, 172, 248, 173, 249, 172, 234, 250, 173, 172, 173, 251, 172, 173, 252, 172, 173, 253, 172, 173, 254, 172, 255, 173, 172, 242, 173, 172, 256, 173, 172, 214, 173, 172, 257, 173, 172, 214, 173, 172, 127, 258, 0, 259, 0, 260, 0, 261, 0, 262, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 277, 276, 279, 278, 279, 280, 281, 282, 283, 281, 284, 285, 286, 287, 288, 289, 280, 278, 279, 290, 278, 279, 291, 278, 279, 292, 278, 279, 293, 278, 279, 294, 278, 279, 295, 278, 279, 296, 278, 279, 297, 278, 279, 298, 278, 279, 299, 278, 279, 300, 278, 279, 301, 278, 279, 302, 278, 279, 303, 278, 279, 304, 278, 279, 305, 278, 306, 279, 278, 307, 279, 278, 308, 279, 278, 279, 309, 278, 279, 310, 278, 279, 309, 278, 311, 279, 312, 278, 313, 279, 278, 314, 279, 278, 279, 315, 278, 279, 316, 278, 279, 317, 278, 279, 318, 278, 319, 279, 278, 320, 279, 278, 321, 279, 278, 279, 322, 278, 279, 304, 278, 279, 309, 278, 279, 323, 278, 324, 279, 278, 325, 279, 278, 279, 326, 278, 279, 309, 278, 327, 279, 328, 278, 329, 330, 279, 278, 279, 331, 278, 279, 332, 278, 279, 333, 278, 279, 334, 278, 279, 335, 278, 336, 279, 278, 337, 279, 278, 338, 279, 278, 279, 339, 278, 279, 322, 278, 279, 340, 278, 279, 341, 278, 279, 342, 278, 279, 343, 278, 344, 279, 278, 338, 279, 278, 345, 279, 278, 309, 279, 278, 346, 279, 278, 309, 279, 278, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 274, 0, 358, 0, 359, 0, 360, 0, 361, 0, 127, 0, 362, 363, 0, 364, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 168, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 385, 384, 387, 386, 387, 388, 389, 390, 389, 391, 392, 393, 394, 388, 386, 387, 395, 386, 387, 396, 386, 387, 397, 386, 387, 398, 386, 387, 399, 386, 387, 400, 386, 387, 401, 386, 387, 402, 386, 387, 403, 386, 387, 404, 386, 387, 405, 386, 387, 406, 386, 387, 407, 386, 387, 408, 386, 409, 387, 386, 410, 387, 386, 411, 387, 386, 387, 412, 386, 387, 413, 386, 387, 414, 386, 415, 387, 386, 416, 387, 386, 417, 387, 386, 387, 418, 386, 387, 419, 386, 387, 420, 386, 421, 387, 386, 422, 387, 386, 423, 387, 386, 387, 424, 386, 387, 425, 386, 387, 426, 386, 427, 387, 386, 428, 387, 386, 429, 387, 386, 387, 419, 386, 430, 387, 431, 386, 432, 387, 386, 433, 387, 386, 387, 434, 386, 387, 435, 386, 387, 436, 386, 387, 437, 386, 438, 387, 386, 439, 387, 386, 440, 387, 386, 387, 419, 386, 387, 441, 386, 387, 442, 386, 387, 443, 386, 387, 444, 386, 387, 445, 446, 386, 430, 387, 386, 447, 387, 386, 448, 387, 386, 387, 449, 386, 387, 450, 386, 387, 451, 386, 387, 452, 386, 387, 453, 386, 454, 387, 386, 455, 387, 386, 456, 387, 386, 387, 457, 386, 387, 419, 386, 458, 387, 386, 448, 459, 387, 386, 387, 460, 386, 387, 461, 386, 387, 462, 386, 387, 463, 386, 464, 387, 386, 456, 387, 386, 465, 0, 127, 0, 466, 0, 127, 0, 467, 468, 467, 0, 471, 470, 472, 473, 470, 469, 0, 475, 476, 474, 0, 475, 474, 471, 477, 475, 476, 477, 474, 471, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 478, 0, 85, 492, 84, 493, 85, 84, 494, 85, 84, 495, 85, 84, 85, 496, 84, 85, 497, 84, 85, 496, 84, 498, 85, 499, 84, 500, 85, 84, 501, 85, 84, 85, 502, 84, 85, 503, 84, 85, 504, 84, 85, 505, 84, 506, 85, 84, 507, 85, 84, 508, 85, 84, 85, 509, 84, 85, 110, 84, 85, 496, 510, 84, 85, 511, 84, 85, 512, 84, 85, 513, 84, 85, 514, 515, 84, 498, 85, 84, 516, 85, 84, 517, 85, 84, 85, 518, 84, 85, 519, 84, 85, 520, 84, 85, 521, 84, 85, 522, 84, 523, 85, 84, 524, 85, 84, 525, 85, 84, 85, 526, 84, 85, 509, 84, 85, 527, 84, 528, 85, 84, 529, 85, 84, 85, 530, 84, 85, 496, 84, 531, 85, 532, 84, 517, 533, 85, 84, 85, 534, 84, 85, 535, 84, 85, 536, 84, 85, 537, 84, 538, 85, 84, 525, 85, 84, 539, 85, 84, 496, 85, 84, 540, 85, 84, 496, 85, 84, 541, 0, 542, 0, 543, 0, 127, 0, 544, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 453, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 449, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 50, 51, 51, 4, 52, 66, 395, 400, 402, 432, 437, 447, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 4, 67, 4, 4, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 69, 31, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 82, 83, 83, 4, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 67, 96, 189, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 108, 109, 109, 4, 110, 124, 125, 141, 143, 172, 177, 187, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 4, 67, 126, 137, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 138, 139, 140, 124, 142, 144, 154, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 173, 174, 175, 176, 178, 185, 179, 180, 181, 182, 183, 184, 186, 188, 190, 191, 192, 193, 194, 271, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 207, 208, 208, 4, 209, 223, 224, 229, 231, 244, 249, 269, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 4, 67, 225, 226, 227, 228, 223, 230, 232, 243, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 245, 246, 247, 248, 250, 267, 251, 261, 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, 263, 264, 265, 266, 268, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 284, 285, 286, 287, 289, 385, 290, 300, 291, 292, 293, 294, 295, 296, 297, 298, 299, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 310, 311, 311, 4, 312, 326, 338, 348, 377, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 4, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 67, 339, 340, 341, 342, 343, 344, 345, 346, 347, 349, 359, 350, 351, 352, 353, 354, 355, 356, 357, 358, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 378, 379, 380, 381, 382, 383, 384, 386, 388, 389, 390, 391, 393, 394, 392, 390, 391, 392, 390, 393, 394, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 396, 397, 398, 399, 66, 401, 403, 414, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 433, 434, 435, 436, 438, 445, 439, 440, 441, 442, 443, 444, 446, 448, 450, 451, 452, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 453; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/vi.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 857 "lib/gherkin/lexer/vi.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/vi.rb.rl" # line 866 "lib/gherkin/lexer/vi.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/vi.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/vi.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/vi.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/vi.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/vi.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/vi.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/vi.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/vi.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/vi.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/vi.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/vi.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/vi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/vi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/vi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/vi.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/vi.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/vi.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/vi.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/vi.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/vi.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/vi.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/vi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/vi.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/vi.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1110 "lib/gherkin/lexer/vi.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/vi.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1149 "lib/gherkin/lexer/vi.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/vi.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/encoding.rb0000644000004100000410000000207112244512574020712 0ustar www-datawww-datamodule Gherkin module Lexer class Encoding native_impl('gherkin') COMMENT_OR_EMPTY_LINE_PATTERN = /^\s*#|^\s*$/ ENCODING_PATTERN = /^\s*#\s*encoding\s*:\s*([0-9a-zA-Z\-]+)/i #:nodoc: DEFAULT_ENCODING = 'UTF-8' def read_file(path) source = File.new(path).read enc = encoding(source) if(enc != DEFAULT_ENCODING) # Read it again with different encoding source = File.new(path, "r:#{enc}:#{DEFAULT_ENCODING}").read if source.respond_to?(:encode) source = source.encode(DEFAULT_ENCODING) else require 'iconv' source = Iconv.new(DEFAULT_ENCODING, enc).iconv(source) end end source end private def encoding(source) encoding = DEFAULT_ENCODING source.each_line do |line| break unless COMMENT_OR_EMPTY_LINE_PATTERN =~ line if ENCODING_PATTERN =~ line encoding = $1 break end end encoding.upcase end end end endgherkin-2.12.2/lib/gherkin/lexer/hr.rb0000644000004100000410000011716012244512574017543 0ustar www-datawww-data # line 1 "ragel/i18n/hr.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Hr #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/hr.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/hr.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 310, 312, 314, 316, 318, 320, 322, 325, 327, 329, 331, 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 401, 403, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 427, 429, 431, 433, 435, 438, 440, 442, 444, 446, 448, 450, 452, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 500, 502, 504, 506, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 536, 537, 538, 539, 540, 541, 543, 544, 545, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 598, 600, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 624, 626, 628, 630, 632, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 688, 689, 690, 691, 692, 693, 694, 695, 698, 702, 708, 711, 713, 719, 737, 739, 741, 743, 745, 748, 750, 752, 754, 757, 759, 761, 763, 765, 767, 769, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 812 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 105, 97, 111, 100, 32, 97, 110, 99, 101, 112, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 73, 75, 77, 79, 83, 90, 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, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 111, 103, 117, -60, 99, -121, 110, 111, 115, 116, 58, 10, 10, 10, 32, 35, 37, 64, 75, 77, 79, 80, 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, 111, 10, 110, 10, 99, 10, 101, 10, 112, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 115, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 111, 114, 10, 122, 10, 97, 10, 100, 10, 105, 10, 109, 10, 106, 10, 101, 10, 114, 10, 105, 10, 99, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 58, 105, 10, 105, 10, 99, 110, 115, 100, 97, 111, 98, 105, 110, 97, 111, 114, 122, 97, 100, 105, 110, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 73, 75, 77, 79, 83, 90, 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, 108, 10, 105, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 10, 101, 10, 112, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 99, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 105, 10, 99, 10, 97, 10, 100, 10, 97, 10, 110, 10, 32, 105, 111, 105, 109, 106, 101, 114, 105, 58, 10, 10, 10, 32, 35, 77, 79, 124, 9, 13, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 115, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 99, 107, 101, 110, 97, 114, 105, 106, 58, 105, 10, 10, 10, 32, 35, 37, 42, 64, 65, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 10, 101, 10, 112, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 111, 10, 122, 10, 97, 10, 100, 10, 99, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 105, 10, 99, 10, 97, 10, 100, 10, 97, 10, 110, 10, 32, 105, 111, 105, 99, 97, 97, 100, 97, 110, 32, 105, 111, 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, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 10, 108, 10, 105, 10, 97, 10, 100, 10, 32, 97, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 10, 100, 10, 97, 10, 110, 10, 32, 105, 111, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 2, 1, 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, 16, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 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, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 3, 2, 4, 16, 2, 2, 2, 2, 3, 2, 2, 2, 3, 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, 4, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 144, 146, 149, 151, 153, 155, 157, 159, 161, 163, 165, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 243, 245, 247, 249, 252, 254, 256, 258, 260, 262, 264, 266, 268, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 421, 424, 427, 430, 433, 436, 439, 443, 446, 449, 452, 454, 456, 458, 460, 462, 464, 466, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 557, 560, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 595, 598, 601, 604, 607, 611, 614, 617, 620, 623, 626, 629, 632, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 703, 706, 709, 712, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 757, 759, 761, 763, 765, 767, 770, 772, 774, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 845, 848, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 883, 886, 889, 892, 895, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 977, 979, 981, 983, 985, 987, 989, 991, 995, 999, 1005, 1009, 1012, 1018, 1036, 1039, 1042, 1045, 1048, 1052, 1055, 1058, 1061, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1146 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 7, 10, 11, 12, 13, 14, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 7, 10, 11, 12, 13, 14, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 0, 70, 0, 71, 72, 0, 73, 0, 56, 70, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 81, 80, 83, 82, 83, 84, 85, 86, 87, 85, 88, 87, 89, 90, 91, 92, 93, 84, 82, 83, 94, 82, 83, 95, 82, 83, 96, 82, 83, 97, 82, 83, 98, 82, 83, 99, 82, 83, 100, 82, 83, 101, 82, 83, 102, 82, 83, 103, 82, 83, 104, 82, 83, 105, 82, 83, 106, 82, 83, 107, 82, 83, 108, 82, 110, 109, 111, 112, 113, 114, 115, 116, 114, 117, 118, 119, 120, 121, 122, 123, 109, 0, 124, 0, 125, 0, 126, 0, 127, 128, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 135, 134, 137, 136, 137, 138, 139, 140, 139, 141, 142, 143, 144, 145, 138, 136, 137, 146, 136, 137, 147, 136, 137, 148, 136, 137, 149, 136, 137, 150, 136, 137, 151, 136, 137, 152, 136, 137, 153, 136, 137, 154, 136, 137, 155, 136, 137, 156, 136, 137, 157, 136, 137, 158, 136, 137, 159, 136, 137, 160, 136, 137, 161, 136, 137, 162, 136, 137, 163, 136, 137, 164, 136, 137, 165, 136, 137, 166, 136, 137, 167, 136, 137, 168, 136, 137, 169, 136, 170, 137, 171, 136, 171, 137, 136, 137, 172, 136, 137, 173, 136, 137, 164, 136, 137, 174, 136, 137, 175, 136, 137, 176, 136, 137, 177, 136, 137, 178, 136, 137, 165, 136, 137, 179, 180, 136, 137, 181, 136, 137, 182, 136, 137, 176, 136, 137, 183, 136, 137, 184, 136, 137, 185, 136, 137, 186, 136, 137, 187, 136, 137, 165, 136, 137, 188, 189, 136, 137, 190, 136, 137, 191, 136, 137, 192, 136, 137, 193, 136, 137, 194, 136, 137, 195, 136, 137, 166, 165, 136, 137, 196, 136, 137, 178, 136, 197, 198, 0, 199, 0, 70, 0, 200, 0, 201, 0, 202, 0, 203, 0, 132, 0, 204, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 214, 213, 216, 215, 216, 217, 218, 219, 220, 218, 221, 220, 222, 223, 224, 225, 226, 217, 215, 216, 227, 215, 216, 228, 215, 216, 229, 215, 216, 230, 215, 216, 231, 215, 216, 232, 215, 216, 233, 215, 216, 234, 215, 216, 235, 215, 216, 236, 215, 216, 237, 215, 216, 238, 215, 216, 239, 215, 216, 240, 215, 216, 241, 215, 216, 242, 215, 216, 243, 215, 216, 244, 245, 215, 216, 246, 215, 216, 241, 243, 215, 216, 247, 215, 216, 248, 215, 216, 249, 215, 216, 250, 215, 216, 251, 215, 216, 241, 215, 216, 252, 215, 216, 253, 215, 216, 254, 215, 255, 216, 256, 215, 256, 216, 215, 216, 257, 215, 216, 258, 215, 216, 250, 215, 216, 259, 260, 215, 216, 261, 215, 216, 243, 215, 216, 262, 215, 216, 263, 215, 216, 264, 215, 216, 265, 215, 216, 251, 215, 216, 266, 267, 215, 216, 268, 215, 216, 269, 215, 216, 270, 215, 216, 271, 215, 216, 272, 215, 216, 251, 215, 216, 273, 215, 216, 265, 215, 216, 274, 215, 216, 275, 215, 216, 276, 215, 216, 277, 215, 216, 241, 243, 243, 215, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 286, 285, 288, 287, 288, 289, 290, 291, 292, 290, 289, 287, 288, 293, 287, 288, 294, 287, 288, 295, 287, 296, 288, 297, 287, 297, 288, 287, 288, 298, 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, 301, 287, 308, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 283, 0, 318, 317, 320, 319, 320, 321, 322, 323, 324, 322, 325, 324, 326, 327, 328, 329, 330, 331, 321, 319, 320, 332, 319, 320, 333, 319, 320, 334, 319, 320, 335, 319, 320, 336, 319, 320, 337, 319, 320, 338, 319, 320, 339, 319, 320, 340, 319, 320, 341, 319, 320, 342, 319, 320, 343, 319, 320, 344, 319, 320, 345, 319, 320, 346, 319, 320, 347, 319, 320, 348, 319, 320, 349, 350, 319, 320, 351, 319, 320, 346, 348, 319, 320, 352, 319, 320, 353, 319, 320, 354, 319, 320, 355, 319, 320, 356, 319, 320, 346, 319, 320, 357, 319, 320, 358, 319, 320, 359, 319, 360, 320, 361, 319, 361, 320, 319, 320, 362, 319, 320, 363, 319, 320, 355, 319, 320, 364, 365, 319, 320, 366, 319, 320, 348, 319, 320, 367, 319, 320, 368, 319, 320, 369, 319, 320, 370, 319, 320, 356, 319, 320, 371, 319, 320, 372, 319, 320, 373, 319, 320, 368, 319, 320, 374, 375, 319, 320, 376, 319, 320, 377, 319, 320, 378, 319, 320, 379, 319, 320, 380, 319, 320, 356, 319, 320, 381, 319, 320, 370, 319, 320, 382, 319, 320, 383, 319, 320, 384, 319, 320, 385, 319, 320, 346, 348, 348, 319, 386, 0, 387, 0, 78, 0, 388, 0, 389, 0, 390, 0, 391, 0, 56, 70, 70, 0, 392, 393, 392, 0, 396, 395, 397, 398, 395, 394, 0, 400, 401, 399, 0, 400, 399, 396, 402, 400, 401, 402, 399, 396, 403, 404, 405, 406, 407, 408, 409, 407, 410, 411, 412, 413, 414, 415, 416, 403, 0, 83, 417, 82, 83, 418, 82, 83, 419, 82, 83, 420, 82, 83, 108, 418, 82, 83, 421, 82, 83, 422, 82, 83, 423, 82, 424, 83, 425, 82, 425, 83, 82, 83, 426, 82, 83, 427, 82, 83, 428, 82, 83, 429, 82, 83, 108, 82, 83, 430, 431, 82, 83, 432, 82, 83, 418, 82, 83, 433, 82, 83, 434, 82, 83, 435, 82, 83, 436, 82, 83, 429, 82, 83, 437, 82, 83, 438, 82, 83, 439, 82, 83, 440, 82, 83, 441, 82, 83, 442, 82, 83, 429, 82, 83, 443, 82, 83, 444, 82, 83, 445, 82, 83, 446, 82, 83, 108, 418, 418, 82, 447, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 67, 135, 143, 236, 310, 315, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 356, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 31, 40, 42, 41, 43, 44, 45, 46, 47, 48, 49, 50, 49, 50, 50, 4, 51, 65, 321, 323, 326, 336, 344, 351, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 4, 66, 4, 4, 5, 15, 17, 31, 34, 37, 39, 67, 135, 143, 236, 310, 315, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 78, 79, 79, 4, 80, 94, 101, 109, 115, 125, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 4, 95, 96, 97, 98, 99, 100, 66, 102, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 116, 119, 117, 118, 120, 121, 122, 123, 124, 126, 133, 127, 128, 129, 130, 131, 132, 134, 136, 138, 137, 139, 140, 141, 142, 144, 210, 145, 146, 147, 148, 149, 150, 151, 152, 153, 152, 153, 153, 4, 154, 168, 169, 171, 180, 188, 196, 205, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 4, 66, 170, 168, 172, 174, 173, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 189, 191, 190, 192, 193, 194, 195, 197, 203, 198, 199, 200, 201, 202, 204, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, 218, 219, 219, 4, 220, 230, 221, 222, 223, 224, 225, 226, 227, 228, 229, 66, 231, 232, 233, 234, 235, 237, 307, 238, 239, 240, 241, 242, 243, 244, 245, 246, 245, 246, 246, 4, 247, 261, 262, 264, 273, 281, 289, 293, 302, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 4, 66, 263, 261, 265, 267, 266, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 282, 284, 283, 285, 286, 287, 288, 290, 291, 292, 294, 300, 295, 296, 297, 298, 299, 301, 303, 304, 305, 306, 308, 309, 311, 312, 313, 314, 315, 316, 317, 319, 320, 318, 316, 317, 318, 316, 319, 320, 5, 15, 17, 31, 34, 37, 39, 67, 135, 143, 236, 310, 315, 322, 65, 324, 325, 327, 328, 329, 330, 331, 332, 333, 334, 335, 337, 339, 338, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 352, 353, 354, 355, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 356; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/hr.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 725 "lib/gherkin/lexer/hr.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/hr.rb.rl" # line 734 "lib/gherkin/lexer/hr.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/hr.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/hr.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/hr.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/hr.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/hr.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/hr.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/hr.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/hr.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/hr.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/hr.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/hr.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/hr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/hr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/hr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/hr.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/hr.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/hr.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/hr.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/hr.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/hr.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/hr.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/hr.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/hr.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/hr.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 978 "lib/gherkin/lexer/hr.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/hr.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1017 "lib/gherkin/lexer/hr.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/hr.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/hi.rb0000644000004100000410000017316712244512574017543 0ustar www-datawww-data # line 1 "ragel/i18n/hi.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Hi #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/hi.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/hi.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 13, 23, 24, 25, 26, 27, 28, 29, 30, 32, 34, 45, 46, 47, 49, 51, 56, 61, 66, 71, 75, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 101, 108, 113, 117, 123, 126, 128, 134, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 258, 259, 261, 262, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 317, 319, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 418, 420, 422, 424, 427, 429, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 531, 532, 541, 543, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 642, 644, 647, 649, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 878, 880, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 979, 981, 983, 985, 988, 990, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1166, 1168, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1397, 1398 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -92, -123, -119, -108, -107, -102, -100, -92, -86, -81, -80, -32, -92, -105, -32, -92, -80, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -92, -90, -32, -92, -66, -32, -92, -71, -32, -92, -80, -32, -92, -93, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -92, -90, -65, -32, -92, -66, -32, -92, -88, -32, -91, -115, -32, -92, -92, -32, -91, -127, -32, -91, -126, -32, -92, -126, -32, -92, -107, -32, -92, -65, -32, -92, -84, -32, -92, -84, -91, -90, -32, -92, -91, -80, -32, 32, -92, -88, -65, -32, -92, -90, -32, -91, -125, -32, -92, -74, -32, -91, -115, -32, -92, -81, 32, 58, -32, -92, -80, -32, -91, -126, -32, -92, -86, -32, -92, -80, -32, -91, -121, -32, -92, -106, -32, -92, -66, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -92, 10, -123, -108, -107, -102, -100, -92, -86, -81, -80, 10, -32, 10, -92, 10, -105, 10, -32, 10, -92, 10, -80, 10, 10, 32, -32, 10, -92, 10, -90, -65, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -88, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -92, 10, -32, 10, -91, 10, -127, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -126, 10, -32, 10, -92, 10, -107, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -84, 10, -32, 10, -92, 10, -84, 10, -91, -90, -32, 10, -92, 10, -80, 10, -32, 10, 32, -92, 10, -88, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 58, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -92, 10, -123, -108, -107, -102, -100, -92, -86, -81, -80, 10, -32, 10, -92, 10, -105, 10, -32, 10, -92, 10, -80, 10, 10, 32, -32, 10, -92, 10, -90, -65, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -88, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -92, 10, -32, 10, -91, 10, -127, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -126, 10, -32, 10, -92, 10, -107, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -84, 10, -32, 10, -92, 10, -84, 10, -91, -90, -32, 10, -92, -91, 10, -80, 10, -32, 10, 32, -92, 10, -88, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 32, 58, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, -32, 10, -92, 10, -66, 10, 10, 58, -125, 10, -32, 10, -92, 10, -73, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -96, 10, -32, 10, -92, 10, -83, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -82, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, -125, -32, -92, -73, -32, -91, -115, -32, -92, -96, -32, -92, -83, -32, -91, -126, -32, -92, -82, -32, -92, -65, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -92, 10, -123, -108, -107, -102, -100, -92, -86, -81, -80, 10, -32, 10, -92, 10, -105, 10, -32, 10, -92, 10, -80, 10, 10, 32, -32, 10, -92, 10, -90, -65, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -88, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -92, 10, -32, 10, -91, 10, -127, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -126, 10, -32, 10, -92, 10, -107, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -84, 10, -32, 10, -92, 10, -84, 10, -91, -90, -32, 10, -92, 10, -80, 10, -32, 10, 32, -92, 10, -88, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 32, 58, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, -32, 10, -92, 10, -66, 10, 10, 58, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, -32, -92, -90, -32, -91, -126, -32, -92, -86, 32, -32, -92, -78, -32, -91, -121, -32, -92, -106, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -92, 10, -119, -86, -80, 10, -32, 10, -92, 10, -90, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -71, 10, -32, 10, -92, 10, -80, 10, -32, 10, -92, 10, -93, 10, 10, 58, -32, 10, -92, -91, 10, -80, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 32, 58, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, -32, 10, -92, 10, -66, 10, -125, 10, -32, 10, -92, 10, -73, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -96, 10, -32, 10, -92, 10, -83, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -82, 10, -32, 10, -92, 10, -65, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 1, 10, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 7, 2, 10, 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, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 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, 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, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 4, 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, 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, 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, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 14, 25, 27, 29, 31, 33, 35, 37, 39, 42, 45, 56, 58, 60, 63, 66, 71, 76, 81, 86, 90, 94, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 132, 139, 144, 148, 154, 158, 161, 167, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 221, 224, 227, 230, 233, 236, 239, 242, 245, 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, 289, 291, 293, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 363, 365, 368, 370, 373, 375, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 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, 468, 471, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 613, 616, 619, 622, 626, 629, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 782, 784, 793, 796, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 938, 941, 945, 948, 952, 955, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1298, 1301, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1443, 1446, 1449, 1452, 1456, 1459, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1679, 1681, 1683, 1685, 1687, 1689, 1691, 1693, 1695, 1697, 1699, 1701, 1703, 1705, 1707, 1709, 1711, 1713, 1715, 1717, 1719, 1721, 1729, 1732, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1785, 1788, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2066, 2069, 2072, 2074, 2076 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, 22, 0, 23, 0, 14, 0, 24, 0, 25, 0, 26, 0, 27, 0, 29, 30, 28, 32, 33, 31, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 34, 0, 35, 0, 37, 38, 36, 40, 41, 39, 44, 43, 45, 43, 42, 48, 47, 49, 47, 46, 48, 47, 50, 47, 46, 48, 47, 51, 47, 46, 53, 52, 52, 0, 4, 54, 54, 0, 56, 57, 55, 4, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 72, 73, 74, 73, 73, 76, 75, 72, 4, 77, 9, 77, 0, 78, 79, 78, 0, 82, 81, 83, 84, 81, 80, 0, 86, 87, 85, 0, 86, 85, 82, 88, 86, 87, 88, 85, 89, 82, 90, 91, 92, 93, 94, 95, 96, 90, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 114, 113, 116, 115, 117, 116, 118, 119, 119, 118, 115, 120, 116, 115, 121, 116, 115, 122, 116, 115, 123, 116, 115, 124, 116, 115, 125, 116, 115, 126, 116, 115, 127, 116, 115, 116, 128, 115, 129, 116, 115, 130, 116, 115, 131, 116, 115, 132, 116, 115, 133, 116, 115, 134, 116, 115, 135, 116, 115, 136, 116, 115, 137, 116, 115, 116, 138, 115, 139, 141, 140, 142, 143, 144, 145, 146, 147, 140, 0, 148, 0, 149, 0, 150, 151, 0, 152, 0, 153, 0, 26, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 26, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 26, 0, 176, 0, 177, 0, 26, 0, 178, 0, 179, 0, 26, 150, 0, 180, 0, 181, 182, 0, 183, 0, 184, 27, 0, 185, 0, 156, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 227, 226, 229, 228, 230, 229, 231, 232, 233, 234, 232, 231, 228, 235, 229, 228, 236, 237, 238, 239, 240, 241, 242, 243, 244, 229, 228, 245, 229, 228, 246, 229, 228, 237, 229, 228, 247, 229, 228, 248, 229, 228, 249, 229, 228, 229, 250, 228, 251, 229, 228, 252, 229, 228, 253, 254, 229, 228, 255, 229, 228, 256, 229, 228, 249, 229, 228, 257, 229, 228, 258, 229, 228, 259, 229, 228, 260, 229, 228, 261, 229, 228, 262, 229, 228, 263, 229, 228, 264, 229, 228, 265, 229, 228, 266, 229, 228, 267, 229, 228, 249, 229, 228, 268, 229, 228, 269, 229, 228, 270, 229, 228, 271, 229, 228, 272, 229, 228, 273, 229, 228, 274, 229, 228, 275, 229, 228, 276, 229, 228, 277, 229, 228, 278, 229, 228, 249, 229, 228, 279, 229, 228, 280, 229, 228, 249, 229, 228, 281, 229, 228, 282, 229, 228, 249, 229, 253, 228, 283, 229, 228, 284, 229, 228, 285, 229, 228, 286, 229, 250, 228, 287, 229, 228, 259, 288, 229, 228, 289, 229, 228, 290, 229, 228, 291, 229, 228, 292, 229, 228, 293, 229, 228, 294, 229, 228, 295, 229, 228, 296, 229, 228, 297, 229, 228, 298, 229, 228, 299, 229, 228, 300, 229, 228, 301, 229, 228, 302, 229, 228, 303, 229, 228, 229, 250, 228, 304, 229, 228, 305, 229, 228, 276, 229, 228, 306, 229, 228, 307, 229, 228, 308, 229, 228, 309, 229, 228, 310, 229, 228, 311, 229, 228, 229, 312, 228, 313, 229, 228, 314, 229, 228, 315, 229, 228, 316, 229, 228, 317, 229, 228, 318, 229, 228, 319, 229, 228, 320, 229, 228, 303, 229, 228, 229, 321, 228, 229, 322, 228, 229, 323, 228, 229, 324, 228, 229, 325, 228, 229, 326, 228, 229, 327, 228, 229, 328, 228, 229, 329, 228, 229, 330, 228, 229, 331, 228, 229, 332, 228, 229, 333, 228, 229, 334, 228, 336, 335, 338, 337, 339, 338, 340, 341, 342, 343, 341, 340, 337, 344, 338, 337, 345, 346, 347, 348, 349, 350, 351, 352, 353, 338, 337, 354, 338, 337, 355, 338, 337, 346, 338, 337, 356, 338, 337, 357, 338, 337, 358, 338, 337, 338, 359, 337, 360, 338, 337, 361, 338, 337, 362, 363, 338, 337, 364, 338, 337, 365, 338, 337, 358, 338, 337, 366, 338, 337, 367, 338, 337, 368, 338, 337, 369, 338, 337, 370, 338, 337, 371, 338, 337, 372, 338, 337, 373, 338, 337, 374, 338, 337, 375, 338, 337, 376, 338, 337, 358, 338, 337, 377, 338, 337, 378, 338, 337, 379, 338, 337, 380, 338, 337, 381, 338, 337, 382, 338, 337, 383, 338, 337, 384, 338, 337, 385, 338, 337, 386, 338, 337, 387, 338, 337, 358, 338, 337, 388, 338, 337, 389, 338, 337, 358, 338, 337, 390, 338, 337, 391, 338, 337, 358, 338, 362, 337, 392, 338, 337, 393, 394, 338, 337, 395, 338, 337, 396, 338, 359, 337, 397, 338, 337, 368, 398, 338, 337, 399, 338, 337, 400, 338, 337, 401, 338, 337, 402, 338, 337, 403, 338, 337, 404, 338, 337, 405, 338, 337, 406, 338, 337, 407, 338, 337, 408, 338, 337, 409, 338, 337, 410, 338, 337, 411, 338, 337, 412, 338, 337, 413, 338, 337, 338, 414, 359, 337, 415, 338, 337, 416, 338, 337, 417, 338, 337, 418, 338, 337, 419, 338, 337, 420, 338, 337, 421, 338, 337, 422, 338, 337, 423, 338, 337, 424, 338, 337, 425, 338, 337, 426, 338, 337, 427, 338, 337, 428, 338, 337, 429, 338, 337, 430, 338, 337, 431, 338, 337, 432, 338, 337, 433, 338, 337, 434, 338, 337, 435, 338, 337, 338, 359, 337, 436, 338, 337, 437, 338, 337, 438, 338, 337, 439, 338, 337, 440, 338, 337, 441, 338, 337, 442, 338, 337, 443, 338, 337, 444, 338, 337, 445, 338, 337, 446, 338, 337, 447, 338, 337, 448, 338, 337, 449, 338, 337, 450, 338, 337, 451, 338, 337, 452, 338, 337, 453, 338, 337, 454, 338, 337, 455, 338, 337, 456, 338, 337, 435, 338, 337, 457, 338, 337, 458, 338, 337, 385, 338, 337, 459, 338, 337, 460, 338, 337, 461, 338, 337, 462, 338, 337, 463, 338, 337, 464, 338, 337, 338, 465, 337, 466, 338, 337, 467, 338, 337, 468, 338, 337, 469, 338, 337, 470, 338, 337, 471, 338, 337, 472, 338, 337, 473, 338, 337, 435, 338, 337, 338, 474, 337, 338, 475, 337, 338, 476, 337, 338, 477, 337, 338, 478, 337, 338, 479, 337, 338, 480, 337, 338, 481, 337, 338, 482, 337, 338, 483, 337, 338, 484, 337, 338, 485, 337, 338, 486, 337, 338, 487, 337, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 512, 511, 514, 513, 515, 514, 516, 517, 518, 519, 517, 516, 513, 520, 514, 513, 521, 522, 523, 524, 525, 526, 527, 528, 529, 514, 513, 530, 514, 513, 531, 514, 513, 522, 514, 513, 532, 514, 513, 533, 514, 513, 534, 514, 513, 514, 535, 513, 536, 514, 513, 537, 514, 513, 538, 539, 514, 513, 540, 514, 513, 541, 514, 513, 534, 514, 513, 542, 514, 513, 543, 514, 513, 544, 514, 513, 545, 514, 513, 546, 514, 513, 547, 514, 513, 548, 514, 513, 549, 514, 513, 550, 514, 513, 551, 514, 513, 552, 514, 513, 534, 514, 513, 553, 514, 513, 554, 514, 513, 555, 514, 513, 556, 514, 513, 557, 514, 513, 558, 514, 513, 559, 514, 513, 560, 514, 513, 561, 514, 513, 562, 514, 513, 563, 514, 513, 534, 514, 513, 564, 514, 513, 565, 514, 513, 534, 514, 513, 566, 514, 513, 567, 514, 513, 534, 514, 538, 513, 568, 514, 513, 569, 514, 513, 570, 514, 513, 571, 514, 535, 513, 572, 514, 513, 544, 573, 514, 513, 574, 514, 513, 575, 514, 513, 576, 514, 513, 577, 514, 513, 578, 514, 513, 579, 514, 513, 580, 514, 513, 581, 514, 513, 582, 514, 513, 583, 514, 513, 584, 514, 513, 585, 514, 513, 586, 514, 513, 587, 514, 513, 588, 514, 513, 514, 589, 535, 513, 590, 514, 513, 591, 514, 513, 592, 514, 513, 593, 514, 513, 594, 514, 513, 595, 514, 513, 596, 514, 513, 597, 514, 513, 598, 514, 513, 599, 514, 513, 600, 514, 513, 601, 514, 513, 602, 514, 513, 603, 514, 513, 604, 514, 513, 605, 514, 513, 606, 514, 513, 607, 514, 513, 608, 514, 513, 609, 514, 513, 610, 514, 513, 514, 535, 513, 611, 514, 513, 612, 514, 513, 561, 514, 513, 613, 514, 513, 614, 514, 513, 615, 514, 513, 616, 514, 513, 617, 514, 513, 618, 514, 513, 514, 619, 513, 620, 514, 513, 621, 514, 513, 622, 514, 513, 623, 514, 513, 624, 514, 513, 625, 514, 513, 626, 514, 513, 627, 514, 513, 610, 514, 513, 514, 628, 513, 514, 629, 513, 514, 630, 513, 514, 631, 513, 514, 632, 513, 514, 633, 513, 514, 634, 513, 514, 635, 513, 514, 636, 513, 514, 637, 513, 514, 638, 513, 514, 639, 513, 514, 640, 513, 514, 641, 513, 642, 0, 643, 0, 173, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 0, 653, 0, 654, 0, 655, 0, 656, 0, 657, 0, 658, 0, 659, 0, 660, 0, 662, 661, 664, 663, 665, 664, 666, 667, 668, 667, 666, 663, 669, 664, 663, 670, 671, 672, 664, 663, 673, 664, 663, 674, 664, 663, 675, 664, 663, 676, 664, 663, 677, 664, 663, 678, 664, 663, 679, 664, 663, 680, 664, 663, 681, 664, 663, 682, 664, 663, 683, 664, 663, 684, 664, 663, 685, 664, 663, 686, 664, 663, 687, 664, 663, 664, 688, 663, 689, 664, 663, 690, 691, 664, 663, 692, 664, 663, 693, 664, 663, 694, 664, 663, 695, 664, 663, 696, 664, 663, 697, 664, 663, 698, 664, 663, 699, 664, 663, 700, 664, 663, 701, 664, 663, 702, 664, 663, 703, 664, 663, 704, 664, 663, 705, 664, 663, 706, 664, 663, 707, 664, 663, 708, 664, 663, 709, 664, 663, 710, 664, 663, 664, 711, 688, 663, 712, 664, 663, 713, 664, 663, 714, 664, 663, 715, 664, 663, 716, 664, 663, 717, 664, 663, 718, 664, 663, 719, 664, 663, 720, 664, 663, 721, 664, 663, 722, 664, 663, 723, 664, 663, 724, 664, 663, 725, 664, 663, 726, 664, 663, 727, 664, 663, 728, 664, 663, 729, 664, 663, 730, 664, 663, 731, 664, 663, 687, 664, 663, 732, 664, 663, 733, 664, 663, 734, 664, 663, 735, 664, 663, 736, 664, 663, 737, 664, 663, 738, 664, 663, 739, 664, 663, 740, 664, 663, 741, 664, 663, 742, 664, 663, 743, 664, 663, 744, 664, 663, 745, 664, 663, 746, 664, 663, 747, 664, 663, 748, 664, 663, 749, 664, 663, 750, 664, 663, 751, 664, 663, 752, 664, 663, 687, 664, 663, 753, 664, 663, 754, 664, 663, 755, 664, 663, 756, 664, 663, 757, 664, 663, 758, 664, 663, 664, 759, 663, 760, 664, 663, 761, 664, 663, 762, 664, 663, 763, 664, 663, 764, 664, 663, 765, 664, 663, 766, 664, 663, 767, 664, 663, 687, 664, 663, 664, 768, 663, 664, 769, 663, 664, 770, 663, 664, 771, 663, 664, 772, 663, 664, 773, 663, 664, 774, 663, 664, 775, 663, 664, 776, 663, 664, 777, 663, 664, 778, 663, 664, 779, 663, 664, 780, 663, 664, 781, 663, 782, 0, 3, 0, 783, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 702, 13, 13, 14, 24, 26, 10, 40, 43, 3, 4, 49, 7, 88, 106, 118, 121, 124, 566, 569, 5, 6, 8, 9, 10, 11, 12, 13, 25, 12, 13, 25, 15, 16, 17, 18, 17, 17, 18, 17, 19, 19, 19, 20, 19, 19, 19, 20, 21, 22, 23, 13, 23, 24, 13, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 704, 41, 42, 13, 41, 40, 42, 43, 44, 45, 47, 48, 46, 44, 45, 46, 44, 47, 2, 48, 14, 24, 26, 10, 40, 43, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 66, 67, 68, 67, 13, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 2, 13, 13, 14, 24, 26, 10, 40, 43, 89, 90, 91, 94, 92, 93, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 119, 120, 122, 123, 125, 126, 418, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 271, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 169, 170, 171, 170, 13, 257, 179, 172, 173, 176, 180, 198, 210, 213, 216, 238, 241, 174, 175, 177, 178, 179, 87, 181, 182, 183, 186, 184, 185, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 239, 240, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 13, 272, 273, 272, 273, 274, 273, 13, 404, 282, 275, 276, 279, 283, 301, 313, 316, 319, 385, 388, 277, 278, 280, 281, 282, 87, 284, 285, 286, 289, 287, 288, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 314, 315, 317, 318, 320, 321, 363, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 13, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 442, 443, 444, 443, 13, 552, 452, 445, 446, 449, 453, 471, 483, 486, 489, 533, 536, 447, 448, 450, 451, 452, 87, 454, 455, 456, 459, 457, 458, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 484, 485, 487, 488, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 534, 535, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 13, 567, 568, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 587, 588, 589, 588, 13, 688, 590, 591, 607, 672, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 87, 608, 609, 650, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 13, 703, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 0, 0, 0, 0, 19, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 13, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 704; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/hi.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1218 "lib/gherkin/lexer/hi.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/hi.rb.rl" # line 1227 "lib/gherkin/lexer/hi.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/hi.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/hi.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/hi.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/hi.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/hi.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/hi.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/hi.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/hi.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/hi.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/hi.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/hi.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/hi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/hi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/hi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/hi.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/hi.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/hi.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/hi.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/hi.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/hi.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/hi.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/hi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/hi.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/hi.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1471 "lib/gherkin/lexer/hi.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/hi.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1510 "lib/gherkin/lexer/hi.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/hi.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/en_pirate.rb0000644000004100000410000013411312244512574021075 0ustar www-datawww-data # line 1 "ragel/i18n/en_pirate.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En_pirate #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en_pirate.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en_pirate.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 824, 830, 833, 835, 841, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 958, 959, 960, 961 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 71, 72, 76, 83, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 71, 72, 76, 83, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 104, 118, 121, 111, 121, 32, 109, 97, 116, 101, 121, 33, 58, 10, 10, 10, 32, 35, 37, 64, 65, 68, 72, 83, 89, 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, 104, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 71, 72, 76, 83, 89, 124, 9, 13, 108, 105, 109, 101, 121, 33, 101, 97, 100, 32, 109, 101, 110, 32, 116, 101, 108, 108, 32, 110, 111, 32, 116, 97, 108, 101, 115, 58, 10, 10, 10, 32, 35, 65, 124, 9, 13, 10, 104, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 97, 110, 103, 119, 97, 101, 97, 118, 101, 32, 116, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 71, 72, 76, 83, 89, 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, 104, 118, 121, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 97, 10, 115, 10, 116, 10, 33, 10, 101, 10, 108, 10, 105, 10, 109, 10, 101, 10, 121, 10, 97, 10, 110, 10, 103, 10, 119, 10, 97, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 101, 10, 116, 10, 32, 10, 103, 10, 111, 10, 32, 10, 97, 10, 110, 10, 100, 10, 32, 10, 104, 10, 97, 10, 117, 10, 108, 10, 104, 10, 105, 10, 118, 10, 101, 10, 114, 10, 32, 10, 109, 10, 101, 10, 32, 10, 116, 10, 105, 10, 109, 10, 98, 10, 101, 10, 114, 10, 115, 10, 111, 10, 45, 10, 104, 10, 111, 10, 45, 10, 104, 101, 116, 32, 103, 111, 32, 97, 110, 100, 32, 104, 97, 117, 108, 104, 105, 118, 101, 114, 32, 109, 101, 32, 116, 105, 109, 98, 101, 114, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 71, 72, 76, 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, 104, 118, 121, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 97, 10, 115, 10, 116, 10, 33, 10, 101, 10, 108, 10, 105, 10, 109, 10, 101, 10, 121, 10, 97, 10, 110, 10, 103, 10, 119, 10, 97, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 101, 10, 116, 10, 32, 10, 103, 10, 111, 10, 32, 10, 97, 10, 110, 10, 100, 10, 32, 10, 104, 10, 97, 10, 117, 10, 108, 111, 45, 104, 111, 45, 104, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 71, 72, 76, 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, 32, 10, 104, 118, 121, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 97, 10, 115, 10, 116, 10, 33, 10, 101, 10, 108, 10, 105, 10, 109, 10, 101, 10, 121, 10, 97, 10, 110, 10, 103, 10, 119, 10, 97, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 101, 10, 116, 10, 32, 10, 103, 10, 111, 10, 32, 10, 97, 10, 110, 10, 100, 10, 32, 10, 104, 10, 97, 10, 117, 10, 108, 10, 104, 10, 105, 10, 118, 10, 101, 10, 114, 10, 32, 10, 109, 10, 101, 10, 32, 10, 116, 10, 105, 10, 109, 10, 98, 10, 101, 10, 114, 10, 115, 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, 68, 71, 72, 76, 83, 89, 124, 9, 13, 10, 101, 10, 97, 10, 100, 10, 32, 10, 109, 10, 101, 10, 110, 10, 32, 10, 116, 10, 101, 10, 108, 10, 108, 10, 32, 10, 110, 10, 111, 10, 32, 10, 116, 10, 97, 10, 108, 10, 101, 10, 115, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 104, 10, 105, 10, 118, 10, 101, 10, 114, 10, 32, 10, 109, 10, 101, 10, 32, 10, 116, 10, 105, 10, 109, 10, 98, 10, 101, 10, 114, 10, 111, 10, 45, 10, 104, 10, 111, 10, 45, 10, 104, 97, 115, 116, 101, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 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, 4, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 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, 328, 330, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1210, 1216, 1220, 1223, 1229, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1396, 1398, 1400, 1402 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 71, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 84, 83, 86, 85, 86, 87, 88, 89, 88, 90, 91, 92, 93, 94, 87, 85, 86, 95, 85, 86, 96, 85, 86, 97, 85, 86, 98, 85, 86, 99, 85, 86, 100, 85, 86, 101, 85, 86, 102, 85, 86, 103, 85, 86, 104, 85, 86, 105, 85, 86, 106, 85, 86, 107, 85, 86, 108, 85, 86, 109, 85, 86, 110, 85, 86, 111, 85, 86, 112, 85, 86, 113, 85, 86, 114, 85, 86, 115, 85, 86, 116, 85, 86, 117, 85, 86, 118, 85, 86, 119, 85, 121, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 120, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 165, 164, 167, 166, 167, 168, 169, 170, 169, 168, 166, 167, 171, 166, 167, 172, 166, 167, 173, 166, 167, 174, 166, 167, 175, 166, 167, 176, 166, 167, 177, 166, 167, 178, 166, 167, 179, 166, 167, 180, 166, 167, 181, 166, 182, 0, 183, 0, 184, 0, 185, 0, 139, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 195, 194, 197, 196, 197, 198, 199, 200, 201, 199, 202, 203, 204, 205, 206, 207, 208, 198, 196, 197, 209, 196, 197, 210, 196, 197, 211, 196, 197, 212, 196, 197, 213, 196, 197, 214, 196, 197, 215, 196, 197, 216, 196, 197, 217, 196, 197, 218, 196, 197, 219, 196, 197, 220, 196, 197, 221, 196, 197, 222, 196, 197, 223, 196, 197, 224, 225, 226, 196, 197, 227, 196, 197, 228, 196, 197, 229, 196, 197, 230, 196, 197, 231, 196, 197, 232, 196, 197, 233, 196, 197, 234, 196, 197, 235, 196, 197, 223, 196, 197, 236, 196, 197, 237, 196, 197, 238, 196, 197, 239, 196, 197, 239, 196, 197, 240, 196, 197, 241, 196, 197, 242, 196, 197, 243, 196, 197, 238, 196, 197, 244, 196, 197, 245, 196, 197, 246, 196, 197, 247, 196, 197, 243, 196, 197, 248, 196, 197, 249, 196, 197, 250, 196, 197, 251, 196, 197, 252, 196, 197, 253, 196, 197, 235, 196, 197, 254, 196, 197, 255, 196, 197, 256, 196, 197, 257, 196, 197, 258, 196, 197, 259, 196, 197, 260, 196, 197, 261, 196, 197, 262, 196, 197, 263, 196, 197, 264, 196, 197, 265, 196, 197, 266, 196, 197, 239, 196, 197, 267, 196, 197, 268, 196, 197, 269, 196, 197, 270, 196, 197, 271, 196, 197, 272, 196, 197, 273, 196, 197, 274, 196, 197, 275, 196, 197, 276, 196, 197, 277, 196, 197, 278, 196, 197, 279, 196, 197, 280, 196, 197, 281, 196, 197, 235, 196, 197, 282, 196, 197, 283, 196, 197, 284, 196, 197, 285, 196, 197, 286, 196, 197, 253, 196, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 141, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 318, 317, 320, 319, 320, 321, 322, 323, 324, 322, 325, 326, 327, 328, 329, 321, 319, 320, 330, 319, 320, 331, 319, 320, 332, 319, 320, 333, 319, 320, 334, 319, 320, 335, 319, 320, 336, 319, 320, 337, 319, 320, 338, 319, 320, 339, 319, 320, 340, 319, 320, 341, 319, 320, 342, 319, 320, 343, 319, 320, 344, 319, 320, 345, 346, 347, 319, 320, 348, 319, 320, 349, 319, 320, 350, 319, 320, 351, 319, 320, 352, 319, 320, 353, 319, 320, 354, 319, 320, 355, 319, 320, 356, 319, 320, 344, 319, 320, 357, 319, 320, 358, 319, 320, 359, 319, 320, 360, 319, 320, 360, 319, 320, 361, 319, 320, 362, 319, 320, 363, 319, 320, 364, 319, 320, 359, 319, 320, 365, 319, 320, 366, 319, 320, 367, 319, 320, 368, 319, 320, 364, 319, 320, 369, 319, 320, 370, 319, 320, 371, 319, 320, 372, 319, 320, 373, 319, 320, 374, 319, 320, 356, 319, 320, 375, 319, 320, 376, 319, 320, 377, 319, 320, 378, 319, 320, 379, 319, 320, 380, 319, 320, 381, 319, 320, 382, 319, 320, 383, 319, 320, 384, 319, 320, 385, 319, 320, 386, 319, 320, 387, 319, 320, 360, 319, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 397, 396, 399, 398, 399, 400, 401, 402, 403, 401, 404, 405, 406, 407, 408, 409, 400, 398, 399, 410, 398, 399, 411, 398, 399, 412, 398, 399, 413, 398, 399, 414, 398, 399, 415, 398, 399, 416, 398, 399, 417, 398, 399, 418, 398, 399, 419, 398, 399, 420, 398, 399, 421, 398, 399, 422, 398, 399, 423, 398, 399, 424, 398, 399, 425, 426, 427, 398, 399, 428, 398, 399, 429, 398, 399, 430, 398, 399, 431, 398, 399, 432, 398, 399, 433, 398, 399, 434, 398, 399, 435, 398, 399, 436, 398, 399, 424, 398, 399, 437, 398, 399, 438, 398, 399, 439, 398, 399, 440, 398, 399, 440, 398, 399, 441, 398, 399, 442, 398, 399, 443, 398, 399, 444, 398, 399, 439, 398, 399, 445, 398, 399, 446, 398, 399, 447, 398, 399, 448, 398, 399, 444, 398, 399, 449, 398, 399, 450, 398, 399, 451, 398, 399, 452, 398, 399, 453, 398, 399, 454, 398, 399, 436, 398, 399, 455, 398, 399, 456, 398, 399, 457, 398, 399, 458, 398, 399, 459, 398, 399, 460, 398, 399, 461, 398, 399, 462, 398, 399, 463, 398, 399, 464, 398, 399, 465, 398, 399, 466, 398, 399, 467, 398, 399, 440, 398, 399, 468, 398, 399, 469, 398, 399, 470, 398, 399, 471, 398, 399, 472, 398, 399, 473, 398, 399, 474, 398, 399, 475, 398, 399, 476, 398, 399, 477, 398, 399, 478, 398, 399, 479, 398, 399, 480, 398, 399, 481, 398, 399, 482, 398, 399, 436, 398, 483, 484, 483, 0, 487, 486, 488, 489, 486, 485, 0, 491, 492, 490, 0, 491, 490, 487, 493, 491, 492, 493, 490, 487, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 494, 0, 86, 509, 85, 86, 510, 85, 86, 511, 85, 86, 512, 85, 86, 513, 85, 86, 514, 85, 86, 515, 85, 86, 516, 85, 86, 517, 85, 86, 518, 85, 86, 519, 85, 86, 520, 85, 86, 521, 85, 86, 522, 85, 86, 523, 85, 86, 524, 85, 86, 525, 85, 86, 526, 85, 86, 527, 85, 86, 528, 85, 86, 118, 85, 86, 529, 85, 86, 530, 85, 86, 531, 85, 86, 532, 85, 86, 533, 85, 86, 534, 85, 86, 118, 85, 86, 535, 85, 86, 536, 85, 86, 537, 85, 86, 538, 85, 86, 539, 85, 86, 540, 85, 86, 541, 85, 86, 542, 85, 86, 543, 85, 86, 544, 85, 86, 545, 85, 86, 546, 85, 86, 547, 85, 86, 548, 85, 86, 528, 85, 86, 549, 85, 86, 550, 85, 86, 551, 85, 86, 552, 85, 86, 553, 85, 86, 534, 85, 554, 0, 555, 0, 140, 0, 141, 0, 556, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 463, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 459, 462, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 49, 50, 50, 4, 51, 65, 410, 431, 438, 453, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 4, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 4, 4, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 78, 79, 80, 81, 82, 31, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 106, 107, 107, 4, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 76, 120, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 133, 134, 134, 4, 135, 149, 150, 166, 171, 176, 183, 197, 213, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 4, 76, 151, 161, 165, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164, 149, 167, 168, 169, 170, 172, 173, 174, 175, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 218, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 251, 252, 252, 4, 253, 267, 268, 284, 289, 294, 301, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 4, 76, 269, 279, 283, 270, 271, 272, 273, 274, 275, 276, 277, 278, 280, 281, 282, 267, 285, 286, 287, 288, 290, 291, 292, 293, 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 324, 325, 325, 4, 326, 340, 341, 357, 362, 367, 374, 388, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 4, 76, 342, 352, 356, 343, 344, 345, 346, 347, 348, 349, 350, 351, 353, 354, 355, 340, 358, 359, 360, 361, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 408, 409, 407, 405, 406, 407, 405, 408, 409, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 454, 455, 456, 457, 458, 460, 461, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 463; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en_pirate.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 869 "lib/gherkin/lexer/en_pirate.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en_pirate.rb.rl" # line 878 "lib/gherkin/lexer/en_pirate.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en_pirate.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en_pirate.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en_pirate.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en_pirate.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en_pirate.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en_pirate.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en_pirate.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en_pirate.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en_pirate.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en_pirate.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en_pirate.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en_pirate.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en_pirate.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en_pirate.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en_pirate.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en_pirate.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en_pirate.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en_pirate.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en_pirate.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en_pirate.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en_pirate.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en_pirate.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en_pirate.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en_pirate.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1122 "lib/gherkin/lexer/en_pirate.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en_pirate.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1161 "lib/gherkin/lexer/en_pirate.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en_pirate.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/lv.rb0000644000004100000410000012764112244512574017560 0ustar www-datawww-data # line 1 "ragel/i18n/lv.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Lv #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/lv.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/lv.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 165, 167, 169, 171, 173, 175, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 351, 352, 353, 354, 355, 356, 357, 358, 365, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 407, 408, 409, 410, 411, 412, 414, 415, 416, 417, 418, 419, 420, 421, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 556, 557, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 652, 654, 656, 658, 660, 662, 664, 666, 668, 671, 673, 675, 677, 679, 681, 683, 685, 687, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 744, 750, 753, 755, 761, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 849, 851, 853, 855, 857, 859, 861, 863, 865, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 116, -60, 117, -85, -60, -115, 97, 58, 10, 10, 10, 32, 35, 37, 64, 70, 75, 80, 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, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, 97, 97, 111, 100, 110, 116, 101, 107, 115, 116, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 70, 74, 75, 83, 84, 85, 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, 101, 10, 116, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 97, 10, 97, 10, 100, 10, 99, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 32, 58, 10, 112, -60, 10, -109, 10, 10, 99, 10, 32, 10, 112, 10, 97, 10, 114, 10, 97, 10, 117, 10, 103, 10, 110, 97, 105, 114, 97, 117, 103, 115, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 101, 109, -60, -109, 114, 105, 99, 105, 101, 110, -60, -127, 114, 105, 106, 115, 32, 58, 112, -60, -109, 99, 32, 112, 97, 114, 97, 117, 103, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 70, 74, 75, 83, 84, 85, 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, 101, 10, 116, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 97, 10, 97, 10, 100, 10, 99, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 110, 10, 10, 10, 32, 35, 37, 42, 64, 66, 70, 74, 75, 83, 84, 85, 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, 101, 10, 116, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 97, 10, 97, 111, 10, 100, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 115, 10, 99, 105, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 32, 58, 10, 112, -60, 10, -109, 10, 10, 99, 10, 32, 10, 112, 10, 97, 10, 114, 10, 97, 10, 117, 10, 103, 10, 116, 10, 117, -60, 10, -127, 10, 10, 99, 10, 105, 10, 106, 10, 97, 10, 110, 116, 117, -60, -127, 99, 105, 106, 97, 97, 110, 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, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 111, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 115, 10, 97, 105, 10, 114, 10, 97, 10, 117, 10, 103, 10, 101, 10, 109, -60, 10, -109, 10, 10, 114, 10, 105, 10, 99, 105, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 32, 58, 10, 112, -60, 10, -109, 10, 10, 99, 10, 32, 10, 112, 10, 97, 10, 114, 10, 97, 10, 117, 10, 103, 10, 116, 10, 117, -60, 10, -127, 10, 10, 99, 10, 105, 10, 106, 110, 107, 99, 105, 111, 110, 97, 108, 105, 116, -60, -127, 116, 101, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 16, 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, 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, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 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, 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, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 144, 146, 148, 150, 152, 154, 156, 158, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 215, 218, 221, 224, 227, 230, 248, 250, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 483, 485, 487, 489, 491, 493, 495, 497, 504, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 565, 567, 569, 571, 573, 575, 577, 580, 582, 584, 586, 588, 590, 592, 594, 596, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 797, 799, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 939, 942, 945, 948, 951, 954, 957, 961, 964, 967, 970, 973, 976, 979, 982, 985, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1073, 1079, 1083, 1086, 1092, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 80, 79, 82, 81, 82, 83, 84, 85, 84, 86, 87, 88, 89, 83, 81, 82, 90, 81, 82, 91, 81, 82, 92, 81, 82, 93, 81, 82, 94, 81, 82, 95, 81, 82, 96, 81, 82, 97, 81, 82, 98, 81, 82, 99, 81, 82, 100, 81, 82, 101, 81, 82, 102, 81, 82, 103, 81, 104, 82, 105, 81, 106, 82, 81, 107, 82, 81, 108, 82, 81, 82, 109, 81, 82, 110, 81, 112, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 111, 0, 71, 0, 127, 128, 0, 71, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 138, 137, 140, 139, 140, 141, 142, 143, 144, 142, 145, 146, 147, 148, 149, 148, 150, 141, 139, 140, 151, 139, 140, 152, 139, 140, 153, 139, 140, 154, 139, 140, 155, 139, 140, 156, 139, 140, 157, 139, 140, 158, 139, 140, 159, 139, 140, 160, 139, 140, 161, 139, 140, 162, 139, 140, 163, 139, 140, 164, 139, 140, 165, 139, 140, 166, 139, 140, 167, 139, 168, 140, 169, 139, 170, 140, 139, 171, 140, 139, 172, 140, 139, 140, 173, 139, 140, 165, 139, 140, 174, 139, 140, 175, 139, 140, 176, 139, 140, 177, 139, 140, 178, 139, 140, 179, 139, 140, 180, 139, 140, 181, 139, 140, 182, 139, 140, 183, 139, 184, 140, 139, 185, 140, 139, 140, 186, 139, 140, 173, 139, 140, 167, 139, 140, 187, 139, 140, 167, 139, 140, 188, 139, 140, 189, 139, 140, 190, 139, 191, 140, 139, 192, 140, 139, 140, 193, 139, 140, 194, 139, 140, 195, 139, 140, 196, 139, 140, 197, 165, 139, 140, 198, 139, 199, 140, 139, 200, 140, 139, 140, 201, 139, 140, 202, 139, 140, 203, 139, 140, 204, 139, 140, 205, 139, 140, 206, 139, 140, 207, 139, 140, 172, 139, 140, 167, 139, 208, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 217, 216, 219, 218, 219, 220, 221, 222, 221, 220, 218, 223, 219, 224, 218, 225, 219, 218, 226, 219, 218, 227, 219, 218, 219, 228, 218, 219, 229, 218, 219, 230, 218, 219, 231, 218, 219, 232, 218, 219, 233, 218, 219, 234, 218, 219, 235, 218, 219, 236, 218, 219, 237, 218, 219, 238, 218, 219, 239, 218, 240, 219, 218, 241, 219, 218, 219, 242, 218, 219, 228, 218, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 214, 0, 248, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 274, 273, 276, 275, 276, 277, 278, 279, 280, 278, 281, 282, 283, 284, 285, 284, 286, 277, 275, 276, 287, 275, 276, 288, 275, 276, 289, 275, 276, 290, 275, 276, 291, 275, 276, 292, 275, 276, 293, 275, 276, 294, 275, 276, 295, 275, 276, 296, 275, 276, 297, 275, 276, 298, 275, 276, 299, 275, 276, 300, 275, 276, 301, 275, 276, 302, 275, 276, 303, 275, 304, 276, 305, 275, 306, 276, 275, 307, 276, 275, 308, 276, 275, 276, 309, 275, 276, 301, 275, 276, 310, 275, 276, 311, 275, 276, 312, 275, 276, 313, 275, 276, 314, 275, 276, 315, 275, 276, 316, 275, 276, 317, 275, 276, 318, 275, 276, 319, 275, 320, 276, 275, 321, 276, 275, 276, 322, 275, 276, 309, 275, 276, 303, 275, 276, 323, 275, 276, 303, 275, 276, 324, 275, 276, 325, 275, 276, 326, 275, 327, 276, 275, 328, 276, 275, 276, 329, 275, 276, 330, 275, 276, 331, 275, 276, 309, 275, 276, 303, 275, 333, 332, 335, 334, 335, 336, 337, 338, 339, 337, 340, 341, 342, 343, 344, 345, 346, 336, 334, 335, 347, 334, 335, 348, 334, 335, 349, 334, 335, 350, 334, 335, 351, 334, 335, 352, 334, 335, 353, 334, 335, 354, 334, 335, 355, 334, 335, 356, 334, 335, 357, 334, 335, 358, 334, 335, 359, 334, 335, 360, 334, 335, 361, 334, 335, 362, 334, 335, 363, 334, 364, 335, 365, 334, 366, 335, 334, 367, 335, 334, 368, 335, 334, 335, 369, 334, 335, 361, 334, 335, 370, 334, 335, 371, 334, 335, 372, 334, 335, 373, 334, 335, 374, 334, 335, 375, 334, 335, 376, 334, 335, 377, 334, 335, 378, 334, 335, 379, 334, 380, 335, 334, 381, 335, 334, 335, 382, 334, 335, 369, 334, 335, 363, 334, 335, 383, 384, 334, 335, 363, 334, 335, 385, 334, 335, 386, 334, 335, 387, 334, 335, 388, 334, 335, 389, 334, 335, 390, 334, 335, 369, 334, 335, 391, 392, 334, 335, 393, 334, 335, 394, 334, 395, 335, 334, 396, 335, 334, 335, 397, 334, 335, 398, 334, 335, 399, 334, 335, 400, 334, 335, 401, 361, 334, 335, 402, 334, 403, 335, 334, 404, 335, 334, 335, 405, 334, 335, 406, 334, 335, 407, 334, 335, 408, 334, 335, 409, 334, 335, 410, 334, 335, 411, 334, 335, 368, 334, 335, 412, 334, 335, 413, 334, 414, 335, 334, 415, 335, 334, 335, 416, 334, 335, 417, 334, 335, 368, 334, 335, 383, 334, 335, 363, 334, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 135, 0, 127, 0, 71, 0, 425, 426, 425, 0, 429, 428, 430, 431, 428, 427, 0, 433, 434, 432, 0, 433, 432, 429, 435, 433, 434, 435, 432, 429, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 436, 0, 82, 451, 81, 82, 452, 81, 82, 453, 81, 82, 454, 81, 82, 455, 81, 82, 456, 81, 82, 457, 81, 82, 458, 81, 82, 459, 81, 82, 460, 81, 461, 82, 81, 462, 82, 81, 82, 463, 81, 82, 109, 81, 82, 464, 81, 82, 465, 81, 82, 466, 81, 82, 467, 81, 82, 468, 81, 82, 469, 81, 82, 470, 81, 82, 109, 81, 82, 471, 472, 81, 82, 473, 81, 82, 474, 81, 82, 475, 81, 82, 470, 81, 82, 476, 81, 82, 477, 81, 478, 82, 81, 479, 82, 81, 82, 480, 81, 82, 109, 81, 82, 481, 482, 81, 82, 483, 81, 82, 484, 81, 485, 82, 81, 486, 82, 81, 82, 487, 81, 82, 488, 81, 82, 489, 81, 82, 490, 81, 82, 491, 110, 81, 82, 492, 81, 493, 82, 81, 494, 82, 81, 82, 495, 81, 82, 496, 81, 82, 497, 81, 82, 498, 81, 82, 499, 81, 82, 500, 81, 82, 501, 81, 82, 108, 81, 82, 502, 81, 82, 503, 81, 504, 82, 81, 505, 82, 81, 82, 506, 81, 82, 507, 81, 82, 108, 81, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 77, 0, 521, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 428, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 31, 40, 414, 41, 42, 43, 44, 45, 46, 47, 46, 47, 47, 4, 48, 62, 367, 375, 386, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 4, 63, 353, 64, 65, 66, 67, 68, 4, 4, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 81, 82, 82, 4, 83, 97, 98, 100, 120, 121, 123, 144, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 4, 68, 99, 97, 101, 106, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 146, 175, 147, 148, 149, 150, 151, 152, 153, 154, 153, 154, 154, 4, 155, 156, 161, 157, 158, 159, 160, 68, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 176, 177, 178, 179, 180, 182, 337, 183, 184, 185, 186, 187, 188, 189, 190, 191, 257, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 205, 206, 206, 4, 207, 221, 222, 224, 244, 245, 247, 256, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 4, 68, 223, 221, 225, 230, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 246, 248, 249, 250, 251, 252, 253, 254, 255, 258, 259, 258, 259, 259, 4, 260, 274, 275, 277, 297, 298, 307, 335, 336, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 4, 68, 276, 274, 278, 283, 279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 308, 328, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 329, 330, 331, 332, 333, 334, 338, 339, 340, 341, 342, 343, 344, 347, 348, 349, 351, 352, 350, 348, 349, 350, 348, 351, 352, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 368, 369, 370, 371, 372, 373, 374, 376, 380, 377, 378, 379, 381, 382, 383, 384, 385, 387, 407, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 428; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/lv.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 825 "lib/gherkin/lexer/lv.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/lv.rb.rl" # line 834 "lib/gherkin/lexer/lv.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/lv.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/lv.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/lv.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/lv.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/lv.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/lv.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/lv.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/lv.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/lv.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/lv.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/lv.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/lv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/lv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/lv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/lv.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/lv.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/lv.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/lv.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/lv.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/lv.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/lv.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/lv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/lv.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/lv.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1078 "lib/gherkin/lexer/lv.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/lv.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1117 "lib/gherkin/lexer/lv.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/lv.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/gl.rb0000644000004100000410000012333512244512574017535 0ustar www-datawww-data # line 1 "ragel/i18n/gl.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Gl #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/gl.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/gl.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 213, 214, 215, 217, 219, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 334, 337, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 433, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 485, 488, 492, 494, 496, 498, 500, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 594, 595, 596, 597, 598, 599, 600, 604, 610, 613, 615, 621, 637, 639, 641, 643, 645, 647, 649, 652, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 792, 795, 799, 801, 803, 805, 807, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 97, 111, 110, 114, 100, 111, 97, 99, 116, 101, 114, -61, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 67, 69, 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, 111, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 124, 9, 13, 97, 100, 97, 111, 32, 115, 32, 110, 115, 120, 116, -61, -77, 110, 98, 99, 111, 122, 111, 32, 100, 111, 32, 101, 115, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 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, 97, 10, 110, 114, 10, 100, 10, 111, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 115, 10, 116, -61, 10, -77, 10, 10, 110, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 111, 10, 103, 10, 97, 10, 105, 10, 115, 10, 101, 10, 114, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 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, 97, 111, 10, 110, 114, 10, 100, 10, 111, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 115, 10, 116, -61, 10, -77, 10, 10, 110, 10, 98, 99, 10, 111, 10, 122, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 103, 10, 97, 10, 105, 10, 115, 10, 101, 10, 114, 101, 109, 112, 108, 111, 115, 58, 10, 10, 10, 32, 35, 67, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 111, 103, 97, 105, 115, 101, 114, 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, 67, 68, 69, 76, 77, 80, 124, 9, 13, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 111, 10, 115, 120, 10, 98, 99, 10, 111, 10, 122, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 115, 110, 116, 101, 120, 116, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 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, 97, 10, 110, 114, 10, 100, 10, 111, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 115, 10, 116, -61, 10, -77, 10, 10, 110, 10, 98, 99, 10, 111, 10, 122, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 111, 10, 103, 10, 97, 10, 105, 10, 115, 10, 101, 10, 114, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 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, 14, 1, 1, 2, 2, 4, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 3, 3, 4, 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, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 14, 2, 2, 2, 2, 2, 2, 3, 3, 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, 1, 12, 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, 3, 3, 4, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 136, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 182, 185, 188, 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 270, 286, 288, 290, 293, 296, 301, 303, 305, 307, 309, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 471, 475, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 615, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 692, 696, 701, 704, 707, 710, 713, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 855, 857, 859, 861, 863, 865, 867, 871, 877, 881, 884, 890, 906, 909, 912, 915, 918, 921, 924, 928, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1134, 1138, 1143, 1146, 1149, 1152, 1155, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 16, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 17, 0, 18, 0, 20, 21, 19, 23, 24, 22, 27, 26, 28, 26, 25, 31, 30, 32, 30, 29, 31, 30, 33, 30, 29, 31, 30, 34, 30, 29, 36, 35, 35, 0, 3, 37, 37, 0, 39, 40, 38, 3, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 58, 56, 60, 61, 59, 0, 0, 0, 0, 62, 63, 64, 63, 63, 66, 65, 62, 3, 67, 8, 67, 0, 68, 69, 0, 70, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 88, 87, 90, 89, 90, 91, 92, 93, 92, 94, 95, 91, 89, 90, 96, 89, 90, 97, 89, 90, 98, 89, 90, 99, 89, 90, 100, 89, 90, 101, 89, 90, 102, 89, 90, 103, 89, 90, 104, 89, 90, 105, 89, 90, 106, 89, 90, 107, 89, 90, 108, 89, 90, 109, 89, 90, 110, 111, 89, 90, 112, 89, 90, 113, 89, 90, 114, 89, 90, 115, 89, 90, 116, 89, 90, 117, 89, 118, 90, 89, 119, 90, 89, 90, 120, 89, 90, 121, 89, 90, 122, 89, 90, 123, 89, 90, 124, 89, 90, 125, 89, 127, 126, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 126, 0, 140, 0, 141, 0, 142, 142, 0, 55, 73, 0, 55, 143, 144, 145, 0, 146, 0, 147, 0, 148, 0, 73, 0, 149, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 169, 168, 171, 170, 171, 172, 173, 174, 175, 173, 176, 177, 178, 179, 180, 181, 172, 170, 171, 182, 170, 171, 183, 170, 171, 184, 170, 171, 185, 170, 171, 186, 170, 171, 187, 170, 171, 188, 170, 171, 189, 170, 171, 190, 170, 171, 191, 170, 171, 192, 170, 171, 193, 170, 171, 194, 170, 171, 195, 170, 171, 196, 170, 171, 197, 170, 171, 198, 199, 170, 171, 200, 170, 171, 201, 170, 171, 202, 170, 171, 203, 170, 171, 204, 170, 171, 205, 170, 171, 206, 170, 207, 171, 170, 208, 171, 170, 171, 209, 170, 171, 210, 170, 171, 211, 170, 171, 212, 170, 171, 213, 170, 171, 196, 170, 171, 214, 170, 171, 215, 170, 171, 216, 216, 170, 171, 196, 201, 170, 171, 196, 217, 218, 170, 171, 219, 170, 220, 171, 170, 221, 171, 170, 171, 201, 170, 171, 222, 170, 171, 223, 170, 171, 224, 170, 171, 225, 170, 171, 226, 170, 171, 227, 170, 171, 213, 170, 171, 228, 170, 171, 200, 170, 171, 229, 170, 171, 230, 170, 171, 201, 170, 171, 231, 170, 171, 200, 170, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 240, 239, 242, 241, 242, 243, 244, 245, 246, 244, 247, 248, 249, 250, 251, 252, 243, 241, 242, 253, 241, 242, 254, 241, 242, 255, 241, 242, 256, 241, 242, 257, 241, 242, 258, 241, 242, 259, 241, 242, 260, 241, 242, 261, 241, 242, 262, 241, 242, 263, 241, 242, 264, 241, 242, 265, 241, 242, 266, 241, 242, 267, 241, 242, 268, 269, 241, 242, 270, 271, 241, 242, 272, 241, 242, 273, 241, 242, 274, 241, 242, 275, 241, 242, 276, 241, 242, 277, 241, 242, 278, 241, 279, 242, 241, 280, 242, 241, 242, 281, 241, 242, 282, 241, 242, 283, 241, 242, 284, 241, 242, 285, 241, 242, 267, 241, 242, 286, 241, 242, 287, 241, 242, 288, 241, 242, 289, 241, 242, 290, 241, 242, 285, 241, 242, 291, 241, 242, 292, 241, 242, 293, 293, 241, 242, 267, 273, 241, 242, 267, 294, 295, 241, 242, 296, 241, 297, 242, 241, 298, 242, 241, 242, 273, 241, 242, 299, 300, 241, 242, 301, 241, 242, 302, 241, 242, 303, 241, 242, 304, 241, 242, 305, 241, 242, 306, 241, 242, 307, 241, 242, 308, 241, 242, 309, 241, 242, 300, 241, 242, 310, 241, 242, 311, 241, 242, 312, 241, 242, 313, 241, 242, 290, 241, 242, 314, 241, 242, 272, 241, 242, 315, 241, 242, 316, 241, 242, 273, 241, 242, 317, 241, 242, 272, 241, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 326, 325, 328, 327, 328, 329, 330, 331, 330, 329, 327, 328, 332, 327, 328, 333, 327, 328, 334, 327, 328, 335, 327, 328, 336, 327, 328, 337, 327, 328, 338, 327, 339, 328, 327, 340, 328, 327, 328, 341, 327, 328, 342, 327, 328, 343, 327, 328, 344, 327, 328, 345, 327, 328, 346, 327, 347, 0, 72, 0, 348, 0, 349, 0, 73, 0, 350, 0, 72, 0, 351, 352, 351, 0, 355, 354, 356, 357, 354, 353, 0, 359, 360, 358, 0, 359, 358, 355, 361, 359, 360, 361, 358, 355, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 362, 0, 90, 375, 89, 90, 376, 89, 90, 377, 89, 90, 378, 89, 90, 379, 89, 90, 124, 89, 90, 380, 381, 89, 90, 382, 383, 89, 90, 384, 89, 90, 385, 89, 90, 386, 89, 90, 387, 89, 90, 388, 89, 90, 389, 89, 90, 390, 89, 90, 391, 89, 90, 392, 89, 90, 383, 89, 90, 393, 89, 90, 394, 89, 90, 395, 89, 90, 396, 89, 90, 379, 89, 90, 397, 89, 90, 398, 89, 90, 399, 89, 90, 400, 89, 90, 401, 89, 90, 124, 89, 402, 0, 403, 0, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 410, 409, 412, 411, 412, 413, 414, 415, 416, 414, 417, 418, 419, 420, 421, 422, 413, 411, 412, 423, 411, 412, 424, 411, 412, 425, 411, 412, 426, 411, 412, 427, 411, 412, 428, 411, 412, 429, 411, 412, 430, 411, 412, 431, 411, 412, 432, 411, 412, 433, 411, 412, 434, 411, 412, 435, 411, 412, 436, 411, 412, 437, 411, 412, 438, 411, 412, 439, 440, 411, 412, 441, 411, 412, 442, 411, 412, 443, 411, 412, 444, 411, 412, 445, 411, 412, 446, 411, 412, 447, 411, 448, 412, 411, 449, 412, 411, 412, 450, 411, 412, 451, 411, 412, 452, 411, 412, 453, 411, 412, 454, 411, 412, 437, 411, 412, 455, 411, 412, 456, 411, 412, 457, 457, 411, 412, 437, 442, 411, 412, 437, 458, 459, 411, 412, 460, 411, 461, 412, 411, 462, 412, 411, 412, 442, 411, 412, 463, 464, 411, 412, 465, 411, 412, 466, 411, 412, 467, 411, 412, 468, 411, 412, 469, 411, 412, 470, 411, 412, 471, 411, 412, 472, 411, 412, 473, 411, 412, 464, 411, 412, 474, 411, 412, 475, 411, 412, 476, 411, 412, 477, 411, 412, 478, 411, 412, 454, 411, 412, 479, 411, 412, 441, 411, 412, 480, 411, 412, 481, 411, 412, 442, 411, 412, 482, 411, 412, 441, 411, 483, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 394, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 319, 39, 41, 40, 31, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 55, 56, 56, 4, 57, 71, 296, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 4, 72, 290, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 4, 4, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 88, 89, 90, 92, 96, 252, 93, 94, 95, 97, 172, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 115, 116, 116, 4, 117, 131, 132, 149, 153, 165, 167, 170, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 4, 86, 133, 134, 136, 135, 131, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 152, 154, 158, 155, 156, 157, 159, 160, 161, 162, 163, 164, 166, 168, 169, 171, 173, 174, 175, 176, 177, 178, 179, 180, 181, 180, 181, 181, 4, 182, 196, 197, 220, 224, 245, 247, 250, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 4, 86, 198, 214, 199, 201, 200, 196, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 218, 219, 221, 222, 223, 225, 229, 226, 227, 228, 230, 240, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 244, 246, 248, 249, 251, 253, 254, 255, 256, 257, 258, 259, 260, 261, 260, 261, 261, 4, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 86, 278, 280, 281, 283, 284, 285, 286, 288, 289, 287, 285, 286, 287, 285, 288, 289, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 291, 292, 293, 294, 295, 297, 313, 298, 308, 299, 300, 301, 302, 303, 304, 305, 306, 307, 309, 310, 311, 312, 314, 315, 316, 317, 318, 320, 321, 322, 323, 324, 325, 326, 327, 328, 327, 328, 328, 4, 329, 343, 344, 361, 365, 387, 389, 392, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 4, 86, 345, 346, 348, 347, 343, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 362, 363, 364, 366, 370, 367, 368, 369, 371, 381, 372, 373, 374, 375, 376, 377, 378, 379, 380, 382, 383, 384, 385, 386, 388, 390, 391, 393, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 394; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/gl.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 776 "lib/gherkin/lexer/gl.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/gl.rb.rl" # line 785 "lib/gherkin/lexer/gl.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/gl.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/gl.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/gl.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/gl.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/gl.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/gl.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/gl.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/gl.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/gl.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/gl.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/gl.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/gl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/gl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/gl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/gl.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/gl.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/gl.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/gl.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/gl.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/gl.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/gl.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/gl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/gl.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/gl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1029 "lib/gherkin/lexer/gl.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/gl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1068 "lib/gherkin/lexer/gl.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/gl.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/kn.rb0000644000004100000410000020532712244512574017545 0ustar www-datawww-data # line 1 "ragel/i18n/kn.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Kn #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/kn.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/kn.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 13, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 46, 47, 48, 50, 52, 57, 62, 67, 72, 76, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 102, 109, 114, 118, 124, 127, 129, 135, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 266, 268, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 589, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 649, 651, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 968, 970, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1281, 1283, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1514, 1515 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -78, -122, -119, -107, -88, -82, -75, -72, -71, -32, -78, -90, -32, -78, -80, -32, -77, -122, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -78, -90, -32, -78, -66, -32, -78, -71, -32, -78, -80, -32, -78, -93, -32, -77, -122, -32, -78, -105, -32, -78, -77, -32, -77, -127, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -78, 10, -71, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -78, -91, -32, -78, -66, -32, -78, -72, -32, -78, -66, -32, -78, -80, -32, -78, -66, -32, -78, -126, -32, -78, -74, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -78, 10, -122, -107, -88, -82, -75, -72, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -122, 10, 10, 32, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, 10, 58, -32, 10, -78, 10, -126, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -107, 10, -32, 10, -78, 10, -95, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -127, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -75, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -81, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -78, -77, 10, -65, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -78, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -32, -78, -126, -65, -32, -78, -92, -32, -78, -80, -32, -77, -107, -32, -78, -95, -32, -78, -65, -32, -78, -90, -32, -78, -92, -32, -77, -115, -32, -78, -92, -32, -77, -127, -32, -78, -65, -32, -78, -75, -32, -78, -80, -32, -78, -93, -32, -77, -122, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -78, 10, -122, -107, -88, -82, -72, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -122, 10, 10, 32, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, 10, 58, -32, 10, -78, 10, -126, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -107, 10, -32, 10, -78, 10, -95, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -127, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -81, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -32, -77, -115, -32, -78, -91, -32, -78, -65, -32, -78, -92, -32, -78, -65, -32, -78, -81, -32, -78, -88, -32, -77, -115, -32, -78, -88, -32, -78, -77, -65, -32, -78, -88, -32, -77, -115, -32, -78, -88, -32, -77, -122, -32, -78, -78, -32, -77, -122, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -78, 10, -122, -107, -88, -82, -75, -72, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -122, 10, 10, 32, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, 10, 58, -32, 10, -78, 10, -126, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -107, 10, -32, 10, -78, 10, -95, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -127, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -75, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -81, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -122, -32, -78, -102, -32, -77, -115, -32, -78, -102, -32, -78, -77, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -78, 10, -119, -107, -75, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -71, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -105, 10, -32, 10, -78, 10, -77, 10, -32, 10, -77, 10, -127, 10, 10, 58, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -75, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, -77, 10, -65, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -78, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 7, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 5, 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, 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, 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, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 14, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 46, 49, 60, 62, 64, 67, 70, 75, 80, 85, 90, 94, 98, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 136, 143, 148, 152, 158, 162, 165, 171, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 377, 380, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 858, 860, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 968, 971, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1464, 1467, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1896, 1898, 1900, 1902, 1904, 1906, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922, 1924, 1926, 1934, 1937, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2066, 2069, 2072, 2075, 2078, 2081, 2084, 2087, 2090, 2093, 2096, 2099, 2102, 2105, 2108, 2111, 2114, 2117, 2120, 2123, 2126, 2129, 2132, 2135, 2138, 2141, 2144, 2147, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2282, 2284 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 31, 32, 30, 34, 35, 33, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 36, 0, 37, 0, 39, 40, 38, 42, 43, 41, 46, 45, 47, 45, 44, 50, 49, 51, 49, 48, 50, 49, 52, 49, 48, 50, 49, 53, 49, 48, 55, 54, 54, 0, 4, 56, 56, 0, 58, 59, 57, 4, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 0, 0, 0, 0, 74, 75, 76, 75, 75, 78, 77, 74, 4, 79, 9, 79, 0, 80, 81, 80, 0, 84, 83, 85, 86, 83, 82, 0, 88, 89, 87, 0, 88, 87, 84, 90, 88, 89, 90, 87, 91, 84, 92, 93, 94, 95, 96, 97, 98, 92, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 128, 127, 130, 129, 131, 130, 132, 133, 133, 132, 129, 134, 130, 129, 135, 130, 129, 136, 130, 129, 137, 130, 129, 138, 130, 129, 139, 130, 129, 140, 130, 129, 141, 130, 129, 142, 130, 129, 143, 130, 129, 144, 130, 129, 145, 130, 129, 146, 130, 129, 147, 130, 129, 148, 130, 129, 149, 130, 129, 150, 130, 129, 130, 151, 129, 152, 154, 153, 155, 156, 157, 158, 159, 160, 153, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 187, 186, 189, 188, 190, 189, 191, 192, 193, 194, 192, 191, 188, 195, 189, 188, 196, 197, 198, 199, 200, 201, 202, 189, 188, 203, 189, 188, 204, 189, 188, 205, 189, 188, 206, 189, 188, 207, 189, 188, 208, 189, 188, 209, 189, 188, 210, 189, 188, 211, 189, 188, 189, 212, 188, 213, 189, 188, 214, 189, 188, 215, 189, 188, 216, 189, 188, 217, 189, 188, 218, 189, 188, 219, 189, 188, 220, 189, 188, 221, 189, 188, 222, 189, 188, 223, 189, 188, 224, 189, 188, 225, 189, 188, 226, 189, 188, 227, 189, 188, 228, 189, 188, 229, 189, 188, 230, 189, 188, 231, 189, 188, 232, 189, 188, 233, 189, 188, 234, 189, 188, 235, 189, 188, 236, 189, 188, 189, 212, 188, 237, 189, 188, 238, 189, 188, 239, 240, 189, 188, 241, 189, 188, 242, 189, 188, 243, 189, 188, 244, 189, 188, 245, 189, 188, 211, 189, 188, 246, 189, 188, 247, 189, 188, 248, 189, 188, 249, 189, 188, 250, 189, 188, 251, 189, 188, 252, 189, 188, 253, 189, 188, 254, 189, 188, 255, 189, 188, 256, 189, 188, 211, 189, 188, 257, 189, 188, 258, 189, 188, 259, 189, 188, 260, 189, 188, 261, 189, 188, 262, 189, 188, 263, 189, 188, 264, 189, 188, 265, 189, 188, 266, 189, 188, 267, 189, 188, 211, 189, 188, 268, 189, 188, 269, 189, 188, 270, 189, 188, 271, 189, 188, 272, 189, 188, 273, 189, 188, 274, 189, 188, 275, 189, 188, 276, 189, 188, 277, 189, 188, 278, 189, 188, 279, 189, 188, 280, 189, 188, 281, 189, 188, 236, 189, 188, 282, 189, 188, 283, 189, 188, 284, 189, 188, 285, 189, 188, 286, 189, 188, 287, 189, 188, 288, 189, 188, 289, 189, 188, 290, 189, 188, 291, 189, 188, 292, 189, 188, 293, 189, 188, 294, 189, 188, 295, 189, 188, 296, 189, 188, 297, 189, 188, 298, 189, 188, 299, 189, 188, 300, 189, 188, 301, 189, 188, 302, 189, 188, 303, 189, 188, 304, 189, 188, 305, 189, 188, 306, 189, 188, 307, 189, 188, 265, 189, 188, 308, 189, 188, 309, 310, 189, 188, 311, 189, 188, 312, 189, 188, 313, 189, 188, 314, 189, 188, 315, 189, 188, 316, 189, 188, 317, 189, 188, 318, 189, 188, 319, 189, 188, 320, 189, 188, 321, 189, 188, 322, 189, 188, 323, 189, 188, 324, 189, 188, 325, 189, 188, 279, 189, 188, 326, 189, 188, 327, 189, 188, 328, 189, 188, 329, 189, 188, 330, 189, 188, 331, 189, 188, 332, 189, 188, 333, 189, 188, 334, 189, 188, 335, 189, 188, 336, 189, 188, 337, 189, 188, 236, 189, 188, 189, 338, 188, 189, 339, 188, 189, 340, 188, 189, 341, 188, 189, 342, 188, 189, 343, 188, 189, 344, 188, 189, 345, 188, 189, 346, 188, 189, 347, 188, 189, 348, 188, 189, 349, 188, 189, 350, 188, 189, 351, 188, 352, 0, 353, 0, 354, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 28, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 28, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 28, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 400, 399, 402, 401, 403, 402, 404, 405, 406, 407, 405, 404, 401, 408, 402, 401, 409, 410, 411, 412, 413, 414, 402, 401, 415, 402, 401, 416, 402, 401, 417, 402, 401, 418, 402, 401, 419, 402, 401, 420, 402, 401, 421, 402, 401, 422, 402, 401, 423, 402, 401, 402, 424, 401, 425, 402, 401, 426, 402, 401, 427, 402, 401, 428, 402, 401, 429, 402, 401, 430, 402, 401, 431, 402, 401, 432, 402, 401, 433, 402, 401, 434, 402, 401, 435, 402, 401, 436, 402, 401, 437, 402, 401, 438, 402, 401, 439, 402, 401, 440, 402, 401, 441, 402, 401, 442, 402, 401, 443, 402, 401, 444, 402, 401, 445, 402, 401, 446, 402, 401, 447, 402, 401, 448, 402, 401, 402, 424, 401, 449, 402, 401, 450, 402, 401, 451, 452, 402, 401, 453, 402, 401, 454, 402, 401, 455, 402, 401, 456, 402, 401, 457, 402, 401, 423, 402, 401, 458, 402, 401, 459, 402, 401, 460, 402, 401, 461, 402, 401, 462, 402, 401, 463, 402, 401, 464, 402, 401, 465, 402, 401, 466, 402, 401, 467, 402, 401, 468, 402, 401, 423, 402, 401, 469, 402, 401, 470, 402, 401, 471, 402, 401, 472, 402, 401, 473, 402, 401, 474, 402, 401, 475, 402, 401, 476, 402, 401, 477, 402, 401, 478, 402, 401, 479, 402, 401, 423, 402, 401, 480, 402, 401, 481, 402, 401, 482, 402, 401, 483, 402, 401, 484, 402, 401, 485, 402, 401, 486, 402, 401, 487, 402, 401, 488, 402, 401, 489, 402, 401, 490, 402, 401, 491, 402, 401, 492, 402, 401, 493, 402, 401, 494, 402, 401, 495, 402, 401, 496, 402, 401, 497, 402, 401, 498, 402, 401, 499, 402, 401, 500, 402, 401, 501, 402, 401, 502, 402, 401, 503, 402, 401, 504, 402, 401, 505, 402, 401, 477, 402, 401, 506, 402, 401, 507, 402, 401, 508, 402, 401, 509, 402, 401, 510, 402, 401, 511, 402, 401, 512, 402, 401, 513, 402, 401, 514, 402, 401, 515, 402, 401, 516, 402, 401, 517, 402, 401, 518, 402, 401, 519, 402, 401, 448, 402, 401, 402, 520, 401, 402, 521, 401, 402, 522, 401, 402, 523, 401, 402, 524, 401, 402, 525, 401, 402, 526, 401, 402, 527, 401, 402, 528, 401, 402, 529, 401, 402, 530, 401, 402, 531, 401, 402, 532, 401, 402, 533, 401, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 380, 0, 560, 0, 561, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 584, 583, 586, 585, 587, 586, 588, 589, 590, 591, 589, 588, 585, 592, 586, 585, 593, 594, 595, 596, 597, 598, 599, 586, 585, 600, 586, 585, 601, 586, 585, 602, 586, 585, 603, 586, 585, 604, 586, 585, 605, 586, 585, 606, 586, 585, 607, 586, 585, 608, 586, 585, 586, 609, 585, 610, 586, 585, 611, 586, 585, 612, 586, 585, 613, 586, 585, 614, 586, 585, 615, 586, 585, 616, 586, 585, 617, 586, 585, 618, 586, 585, 619, 586, 585, 620, 586, 585, 621, 586, 585, 622, 586, 585, 623, 586, 585, 624, 586, 585, 625, 586, 585, 626, 586, 585, 627, 586, 585, 628, 586, 585, 629, 586, 585, 630, 586, 585, 631, 586, 585, 632, 586, 585, 633, 586, 585, 586, 609, 585, 634, 586, 585, 635, 586, 585, 636, 637, 586, 585, 638, 586, 585, 639, 586, 585, 640, 586, 585, 641, 586, 585, 642, 586, 585, 608, 586, 585, 643, 586, 585, 644, 586, 585, 645, 586, 585, 646, 586, 585, 647, 586, 585, 648, 586, 585, 649, 586, 585, 650, 586, 585, 651, 586, 585, 652, 586, 585, 653, 586, 585, 608, 586, 585, 654, 586, 585, 655, 586, 585, 656, 586, 585, 657, 586, 585, 658, 586, 585, 659, 586, 585, 660, 586, 585, 661, 586, 585, 662, 586, 585, 663, 586, 585, 664, 586, 585, 608, 586, 585, 665, 586, 585, 666, 586, 585, 667, 586, 585, 668, 586, 585, 669, 586, 585, 670, 586, 585, 671, 586, 585, 672, 586, 585, 673, 586, 585, 674, 586, 585, 675, 586, 585, 676, 586, 585, 677, 586, 585, 678, 586, 585, 633, 586, 585, 679, 586, 585, 680, 586, 585, 681, 586, 585, 682, 586, 585, 683, 586, 585, 684, 586, 585, 685, 586, 585, 686, 586, 585, 687, 586, 585, 688, 586, 585, 689, 586, 585, 690, 586, 585, 691, 586, 585, 692, 586, 585, 693, 586, 585, 694, 586, 585, 695, 586, 585, 696, 586, 585, 697, 586, 585, 698, 586, 585, 699, 586, 585, 700, 586, 585, 701, 586, 585, 702, 586, 585, 703, 586, 585, 704, 586, 585, 662, 586, 585, 705, 586, 585, 706, 586, 585, 707, 586, 585, 708, 586, 585, 709, 586, 585, 710, 586, 585, 711, 586, 585, 712, 586, 585, 713, 586, 585, 714, 586, 585, 715, 586, 585, 716, 586, 585, 717, 586, 585, 718, 586, 585, 633, 586, 585, 586, 719, 585, 586, 720, 585, 586, 721, 585, 586, 722, 585, 586, 723, 585, 586, 724, 585, 586, 725, 585, 586, 726, 585, 586, 727, 585, 586, 728, 585, 586, 729, 585, 586, 730, 585, 586, 731, 585, 586, 732, 585, 733, 0, 734, 0, 735, 0, 736, 0, 737, 0, 738, 0, 739, 0, 740, 0, 741, 0, 742, 0, 743, 0, 744, 0, 745, 0, 746, 0, 748, 747, 750, 749, 751, 750, 752, 753, 754, 753, 752, 749, 755, 750, 749, 756, 757, 758, 759, 750, 749, 760, 750, 749, 761, 750, 749, 762, 750, 749, 763, 750, 749, 764, 750, 749, 765, 750, 749, 766, 750, 749, 767, 750, 749, 768, 750, 749, 769, 750, 749, 770, 750, 749, 771, 750, 749, 772, 750, 749, 773, 750, 749, 774, 750, 749, 775, 750, 749, 776, 750, 749, 777, 750, 749, 778, 750, 749, 779, 750, 749, 780, 750, 749, 781, 750, 749, 782, 750, 749, 783, 750, 749, 784, 750, 749, 785, 750, 749, 786, 750, 749, 750, 787, 749, 788, 750, 749, 789, 750, 749, 790, 750, 749, 791, 750, 749, 792, 750, 749, 793, 750, 749, 794, 750, 749, 795, 750, 749, 796, 750, 749, 797, 750, 749, 798, 750, 749, 799, 750, 749, 800, 750, 749, 801, 750, 749, 802, 750, 749, 803, 750, 749, 804, 750, 749, 805, 750, 749, 806, 750, 749, 807, 750, 749, 808, 750, 749, 809, 750, 749, 810, 750, 749, 786, 750, 749, 811, 750, 749, 812, 750, 749, 813, 750, 749, 814, 750, 749, 815, 750, 749, 816, 750, 749, 817, 750, 749, 818, 750, 749, 819, 750, 749, 820, 750, 749, 821, 750, 749, 822, 750, 749, 823, 750, 749, 824, 750, 749, 786, 750, 749, 825, 750, 749, 826, 827, 750, 749, 828, 750, 749, 829, 750, 749, 830, 750, 749, 831, 750, 749, 832, 750, 749, 833, 750, 749, 834, 750, 749, 835, 750, 749, 836, 750, 749, 837, 750, 749, 838, 750, 749, 839, 750, 749, 840, 750, 749, 841, 750, 749, 842, 750, 749, 822, 750, 749, 843, 750, 749, 844, 750, 749, 845, 750, 749, 846, 750, 749, 847, 750, 749, 848, 750, 749, 849, 750, 749, 850, 750, 749, 851, 750, 749, 852, 750, 749, 853, 750, 749, 854, 750, 749, 786, 750, 749, 750, 855, 749, 750, 856, 749, 750, 857, 749, 750, 858, 749, 750, 859, 749, 750, 860, 749, 750, 861, 749, 750, 862, 749, 750, 863, 749, 750, 864, 749, 750, 865, 749, 750, 866, 749, 750, 867, 749, 750, 868, 749, 869, 0, 3, 0, 870, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 789, 16, 16, 17, 27, 29, 13, 43, 46, 3, 4, 52, 102, 287, 308, 320, 465, 492, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 28, 15, 16, 28, 18, 19, 20, 21, 20, 20, 21, 20, 22, 22, 22, 23, 22, 22, 22, 23, 24, 25, 26, 16, 26, 27, 16, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 791, 44, 45, 16, 44, 43, 45, 46, 47, 48, 50, 51, 49, 47, 48, 49, 47, 50, 2, 51, 17, 27, 29, 13, 43, 46, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 81, 82, 83, 82, 16, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 2, 16, 16, 17, 27, 29, 13, 43, 46, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 128, 129, 130, 129, 16, 273, 141, 131, 132, 142, 167, 188, 200, 215, 242, 133, 134, 135, 136, 137, 138, 139, 140, 141, 101, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 176, 171, 172, 173, 174, 175, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 243, 244, 260, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 16, 288, 289, 290, 296, 291, 292, 293, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 337, 338, 339, 338, 16, 451, 350, 340, 341, 351, 376, 397, 409, 436, 342, 343, 344, 345, 346, 347, 348, 349, 350, 101, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 377, 378, 379, 385, 380, 381, 382, 383, 384, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 16, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 493, 494, 658, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 515, 516, 517, 516, 16, 644, 528, 518, 519, 529, 554, 575, 587, 602, 629, 520, 521, 522, 523, 524, 525, 526, 527, 528, 101, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 555, 556, 557, 563, 558, 559, 560, 561, 562, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 16, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 673, 674, 675, 674, 16, 775, 676, 677, 705, 729, 744, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 101, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 745, 746, 762, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 16, 790, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 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, 19, 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, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 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, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 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, 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, 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, 13, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 791; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/kn.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1331 "lib/gherkin/lexer/kn.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/kn.rb.rl" # line 1340 "lib/gherkin/lexer/kn.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/kn.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/kn.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/kn.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/kn.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/kn.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/kn.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/kn.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/kn.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/kn.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/kn.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/kn.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/kn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/kn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/kn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/kn.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/kn.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/kn.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/kn.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/kn.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/kn.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/kn.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/kn.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/kn.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/kn.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1584 "lib/gherkin/lexer/kn.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/kn.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1623 "lib/gherkin/lexer/kn.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/kn.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/ca.rb0000644000004100000410000014441112244512574017514 0ustar www-datawww-data # line 1 "ragel/i18n/ca.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Ca #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/ca.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/ca.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 20, 21, 22, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 97, 102, 109, 114, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 201, 202, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 312, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 398, 399, 400, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 503, 505, 507, 509, 511, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 547, 549, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 708, 710, 712, 714, 716, 718, 720, 722, 725, 727, 729, 731, 733, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 923, 929, 932, 934, 940, 959, 962, 964, 966, 968, 970, 972, 974, 976, 979, 981, 983, 985, 987, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1025, 1027, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1107, 1108 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 110, 116, 101, 115, 104, 111, 114, 101, 115, 116, 101, 99, 101, 100, 101, 110, 116, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 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, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, 97, 108, 114, 97, 99, 116, 101, 114, -61, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 65, 67, 69, 70, 82, 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, 110, 10, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 115, 10, 58, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 115, 120, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 39, 10, 101, 10, 115, 10, 99, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, 10, 101, 10, 102, 10, 111, 10, 110, 111, 110, 97, 100, 116, 97, 115, 120, 99, 113, 101, 110, 97, 114, 105, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 82, 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, 108, 110, 116, 10, 101, 10, 115, 10, 104, 10, 111, 10, 114, 10, 101, 10, 115, 10, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 115, 10, 58, -61, 10, 101, -88, 10, 10, 115, 10, 97, 10, 97, 10, 108, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 111, 10, 110, 10, 97, 10, 100, 116, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 39, 10, 101, 10, 115, 10, 99, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, -61, 10, -78, 10, 10, 117, 10, 97, 10, 110, 10, 101, 10, 114, 10, 101, 10, 102, 10, 111, 10, 110, 117, 101, 109, 97, 32, 100, 101, 32, 108, 39, 101, 115, 99, 101, 110, 97, 114, 105, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 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, 108, 116, 10, 101, 10, 115, 10, 104, 10, 111, 10, 114, 10, 101, 10, 115, -61, 10, 101, -88, 10, 10, 115, 10, 97, 10, 97, 10, 108, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 111, 10, 110, 10, 97, 10, 100, 116, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, -61, 10, -78, 10, 10, 117, 10, 97, 10, 110, 101, 109, 112, 108, 101, 115, 58, 10, 10, 10, 32, 35, 67, 70, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 117, 110, 99, 105, 111, 110, 97, 108, 105, 116, 97, 116, 101, 114, -61, -78, 117, 97, 110, 101, 114, 101, 102, 111, 110, 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, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, 10, 108, 116, 10, 101, 10, 115, 10, 104, 10, 111, 10, 114, 10, 101, 10, 115, -61, 10, 101, -88, 10, 10, 115, 10, 97, 10, 97, 10, 108, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 111, 10, 110, 10, 97, 10, 100, 116, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 39, 10, 101, 10, 115, 10, 99, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, -61, 10, -78, 10, 10, 117, 10, 97, 10, 110, -61, 101, -88, 115, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 18, 1, 1, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 17, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 20, 22, 24, 43, 45, 47, 50, 53, 58, 63, 68, 73, 77, 81, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 127, 134, 139, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 230, 233, 236, 239, 242, 261, 263, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 308, 311, 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, 429, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 558, 560, 562, 565, 567, 570, 573, 575, 577, 579, 581, 583, 585, 587, 589, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 711, 714, 717, 720, 723, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 776, 779, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1044, 1047, 1050, 1053, 1056, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1351, 1357, 1361, 1364, 1370, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1418, 1421, 1424, 1427, 1430, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1486, 1489, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1609, 1611 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 7, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 7, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 71, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 91, 90, 93, 92, 93, 94, 95, 96, 97, 95, 98, 99, 100, 101, 102, 97, 103, 104, 94, 92, 93, 105, 92, 93, 106, 92, 93, 107, 92, 93, 108, 92, 93, 109, 92, 93, 110, 92, 93, 111, 92, 93, 112, 92, 93, 113, 92, 93, 114, 92, 93, 115, 92, 93, 116, 92, 93, 117, 92, 93, 118, 92, 93, 119, 92, 121, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 125, 132, 133, 134, 135, 120, 0, 136, 0, 79, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 152, 151, 154, 153, 154, 155, 156, 157, 156, 158, 159, 160, 161, 162, 155, 153, 154, 163, 153, 154, 164, 153, 154, 165, 153, 154, 166, 153, 154, 167, 153, 154, 168, 153, 154, 169, 153, 154, 170, 153, 154, 171, 153, 154, 172, 153, 154, 173, 153, 154, 174, 153, 154, 175, 153, 154, 176, 153, 154, 177, 153, 154, 178, 153, 154, 179, 153, 154, 180, 153, 154, 181, 153, 154, 182, 153, 154, 183, 153, 154, 184, 153, 154, 185, 153, 154, 186, 153, 154, 187, 153, 154, 188, 153, 154, 189, 153, 154, 190, 153, 154, 191, 153, 154, 192, 153, 154, 193, 153, 154, 194, 153, 195, 154, 153, 196, 154, 153, 154, 197, 153, 154, 198, 153, 154, 199, 153, 154, 200, 153, 154, 186, 153, 154, 201, 202, 153, 154, 203, 204, 153, 154, 205, 153, 154, 206, 153, 154, 207, 153, 154, 208, 153, 154, 186, 153, 154, 209, 153, 154, 210, 153, 154, 211, 153, 154, 212, 153, 154, 213, 153, 154, 214, 153, 154, 215, 153, 154, 216, 153, 154, 217, 153, 154, 218, 153, 154, 219, 153, 154, 220, 153, 154, 203, 153, 154, 221, 153, 154, 222, 153, 154, 223, 153, 154, 224, 153, 154, 185, 153, 154, 225, 153, 154, 226, 153, 154, 227, 153, 154, 228, 153, 154, 229, 153, 154, 230, 153, 154, 231, 153, 154, 232, 153, 154, 233, 153, 154, 234, 153, 154, 235, 153, 154, 186, 153, 154, 236, 153, 154, 237, 153, 154, 238, 153, 154, 239, 153, 154, 240, 153, 154, 185, 153, 241, 0, 242, 0, 243, 0, 244, 79, 0, 79, 0, 245, 246, 0, 247, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 256, 255, 258, 257, 258, 259, 260, 261, 262, 260, 263, 264, 265, 266, 267, 262, 268, 269, 270, 259, 257, 258, 271, 257, 258, 272, 257, 258, 273, 257, 258, 274, 257, 258, 275, 257, 258, 276, 257, 258, 277, 257, 258, 278, 257, 258, 279, 257, 258, 280, 257, 258, 281, 257, 258, 282, 257, 258, 283, 257, 258, 284, 257, 258, 285, 257, 258, 286, 287, 288, 257, 258, 289, 257, 258, 290, 257, 258, 291, 257, 258, 292, 257, 258, 293, 257, 258, 294, 257, 258, 295, 257, 258, 296, 257, 258, 297, 257, 258, 298, 257, 258, 299, 257, 258, 300, 257, 258, 301, 257, 258, 302, 257, 258, 303, 257, 258, 304, 257, 258, 285, 257, 305, 258, 306, 257, 294, 258, 257, 258, 307, 257, 258, 295, 257, 258, 308, 257, 258, 295, 309, 257, 258, 310, 257, 258, 311, 257, 258, 312, 257, 258, 313, 257, 258, 314, 257, 315, 258, 257, 316, 258, 257, 258, 317, 257, 258, 318, 257, 258, 319, 257, 258, 320, 257, 258, 304, 257, 258, 321, 257, 258, 322, 257, 258, 323, 257, 258, 307, 295, 257, 258, 324, 257, 258, 325, 326, 257, 258, 327, 257, 258, 328, 257, 258, 329, 257, 258, 330, 257, 258, 304, 257, 258, 331, 257, 258, 332, 257, 258, 333, 257, 258, 334, 257, 258, 335, 257, 258, 336, 257, 258, 337, 257, 258, 338, 257, 258, 339, 257, 258, 340, 257, 258, 341, 257, 258, 342, 257, 258, 325, 257, 258, 343, 257, 258, 344, 257, 258, 345, 257, 258, 346, 257, 258, 347, 257, 258, 348, 257, 258, 349, 257, 258, 350, 257, 258, 351, 257, 258, 352, 257, 258, 353, 257, 258, 304, 257, 258, 354, 257, 258, 355, 257, 356, 258, 257, 295, 258, 257, 258, 357, 257, 258, 358, 257, 258, 295, 257, 258, 359, 257, 258, 360, 257, 258, 361, 257, 258, 362, 257, 258, 363, 257, 258, 303, 257, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 384, 383, 386, 385, 386, 387, 388, 389, 390, 388, 391, 392, 393, 394, 395, 390, 396, 397, 387, 385, 386, 398, 385, 386, 399, 385, 386, 400, 385, 386, 401, 385, 386, 402, 385, 386, 403, 385, 386, 404, 385, 386, 405, 385, 386, 406, 385, 386, 407, 385, 386, 408, 385, 386, 409, 385, 386, 410, 385, 386, 411, 385, 386, 412, 385, 386, 413, 414, 385, 386, 415, 385, 386, 416, 385, 386, 417, 385, 386, 418, 385, 386, 419, 385, 386, 420, 385, 386, 421, 385, 422, 386, 423, 385, 420, 386, 385, 386, 424, 385, 386, 421, 385, 386, 425, 385, 386, 421, 426, 385, 386, 427, 385, 386, 428, 385, 386, 429, 385, 386, 430, 385, 386, 431, 385, 432, 386, 385, 433, 386, 385, 386, 434, 385, 386, 435, 385, 386, 436, 385, 386, 437, 385, 386, 438, 385, 386, 412, 385, 386, 439, 385, 386, 440, 385, 386, 441, 385, 386, 424, 421, 385, 386, 442, 385, 386, 443, 385, 386, 444, 385, 386, 445, 385, 386, 446, 385, 386, 447, 385, 386, 438, 385, 386, 448, 385, 386, 449, 385, 386, 450, 385, 386, 451, 385, 386, 452, 385, 386, 453, 385, 386, 454, 385, 386, 455, 385, 386, 456, 385, 386, 457, 385, 386, 458, 385, 386, 438, 385, 386, 459, 385, 386, 460, 385, 461, 386, 385, 421, 386, 385, 386, 462, 385, 386, 463, 385, 386, 421, 385, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 472, 471, 474, 473, 474, 475, 476, 477, 478, 476, 475, 473, 474, 479, 473, 474, 480, 473, 474, 481, 473, 474, 482, 473, 474, 483, 473, 474, 484, 473, 474, 485, 473, 486, 474, 473, 487, 474, 473, 474, 488, 473, 474, 489, 473, 474, 490, 473, 474, 491, 473, 474, 492, 473, 474, 493, 473, 474, 494, 473, 474, 495, 473, 474, 496, 473, 474, 497, 473, 474, 498, 473, 474, 499, 473, 474, 500, 473, 474, 501, 473, 474, 502, 473, 474, 503, 473, 474, 504, 473, 474, 492, 473, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 149, 0, 516, 0, 517, 0, 518, 0, 79, 0, 519, 0, 520, 0, 79, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, 0, 87, 0, 526, 527, 526, 0, 530, 529, 531, 532, 529, 528, 0, 534, 535, 533, 0, 534, 533, 530, 536, 534, 535, 536, 533, 530, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 541, 548, 549, 550, 551, 537, 0, 93, 552, 553, 92, 93, 554, 92, 93, 555, 92, 93, 556, 92, 93, 557, 92, 93, 558, 92, 93, 559, 92, 93, 560, 92, 561, 93, 562, 92, 559, 93, 92, 93, 563, 92, 93, 560, 92, 93, 564, 92, 93, 560, 565, 92, 93, 566, 92, 93, 567, 92, 93, 568, 92, 93, 569, 92, 93, 570, 92, 571, 93, 92, 572, 93, 92, 93, 573, 92, 93, 574, 92, 93, 575, 92, 93, 576, 92, 93, 577, 92, 93, 119, 92, 93, 578, 92, 93, 579, 92, 93, 580, 92, 93, 563, 560, 92, 93, 581, 92, 93, 582, 583, 92, 93, 584, 92, 93, 585, 92, 93, 586, 92, 93, 587, 92, 93, 577, 92, 93, 588, 92, 93, 589, 92, 93, 590, 92, 93, 591, 92, 93, 592, 92, 93, 593, 92, 93, 594, 92, 93, 595, 92, 93, 596, 92, 93, 597, 92, 93, 598, 92, 93, 599, 92, 93, 582, 92, 93, 600, 92, 93, 601, 92, 93, 602, 92, 93, 603, 92, 93, 604, 92, 93, 605, 92, 93, 606, 92, 93, 607, 92, 93, 608, 92, 93, 609, 92, 93, 610, 92, 93, 577, 92, 93, 611, 92, 93, 612, 92, 613, 93, 92, 560, 93, 92, 93, 614, 92, 93, 615, 92, 93, 560, 92, 616, 617, 0, 78, 0, 244, 0, 618, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 433, 437, 440, 446, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 525, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 45, 522, 39, 40, 41, 42, 43, 44, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 56, 57, 57, 4, 58, 72, 452, 464, 479, 483, 503, 515, 519, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 4, 73, 4, 4, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 433, 437, 440, 446, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 90, 91, 91, 4, 92, 106, 117, 131, 156, 168, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 4, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 73, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 151, 133, 138, 134, 135, 136, 137, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 175, 176, 177, 178, 180, 384, 181, 290, 182, 183, 184, 185, 186, 187, 188, 189, 188, 189, 189, 4, 190, 204, 205, 227, 241, 245, 265, 277, 281, 284, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 4, 73, 206, 213, 223, 207, 208, 209, 210, 211, 212, 204, 214, 215, 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 244, 246, 247, 252, 248, 249, 250, 251, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, 279, 280, 282, 283, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 310, 311, 311, 4, 312, 326, 327, 339, 354, 358, 365, 377, 381, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 4, 73, 328, 335, 329, 330, 331, 332, 333, 334, 326, 336, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 357, 359, 360, 361, 362, 363, 364, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 378, 379, 380, 382, 383, 385, 386, 387, 388, 389, 390, 391, 392, 393, 392, 393, 393, 4, 394, 409, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 73, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 434, 435, 436, 438, 439, 441, 442, 443, 444, 445, 446, 447, 448, 450, 451, 449, 447, 448, 449, 447, 450, 451, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 433, 437, 440, 446, 453, 460, 454, 455, 456, 457, 458, 459, 72, 461, 462, 463, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 480, 481, 482, 484, 485, 490, 486, 487, 488, 489, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 516, 517, 518, 520, 521, 523, 524, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 81, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 525; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/ca.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 969 "lib/gherkin/lexer/ca.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/ca.rb.rl" # line 978 "lib/gherkin/lexer/ca.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/ca.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/ca.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/ca.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/ca.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/ca.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/ca.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/ca.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/ca.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/ca.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/ca.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/ca.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/ca.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/ca.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/ca.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/ca.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/ca.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/ca.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/ca.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/ca.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/ca.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/ca.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/ca.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/ca.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/ca.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1222 "lib/gherkin/lexer/ca.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/ca.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1261 "lib/gherkin/lexer/ca.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/ca.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/ja.rb0000644000004100000410000015666312244512574017537 0ustar www-datawww-data # line 1 "ragel/i18n/ja.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Ja #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/ja.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/ja.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 16, 19, 23, 24, 25, 26, 28, 30, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 132, 135, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 179, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 237, 239, 241, 243, 245, 247, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 364, 368, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 433, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 603, 604, 606, 608, 613, 618, 623, 628, 632, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 659, 666, 671, 675, 681, 684, 686, 692, 707, 709, 711, 713, 715, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 752, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 785, 789, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 945, 946, 947, 948, 949, 950, 951, 952, 965, 969, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1034, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1094, 1096, 1098, 1100, 1102, 1104, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -29, -28, -27, -26, -24, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -126, -125, -117, -105, -97, -86, -29, -127, -92, 10, 13, 10, 13, -29, -28, -27, -26, -24, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -67, -66, -122, -29, -127, -105, -117, 58, 10, 10, -29, -26, 10, 32, 35, 124, 9, 13, -125, 10, -107, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, 10, 58, -29, -28, -27, -26, -24, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -119, -115, -26, -113, -112, -87, -97, -24, -125, -67, 58, 10, 10, -29, -28, -26, -24, 10, 32, 35, 37, 64, 9, 13, -126, -125, 10, -75, -73, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -85, 10, 10, 58, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, -29, 10, 58, -126, -125, 10, -94, 10, -29, 10, -126, 10, -90, 10, -29, 10, -125, 10, -120, 10, -29, 10, -125, 10, -87, 10, -29, 10, -126, 10, -92, 10, -29, 10, -125, 10, -77, 10, -122, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, 58, -125, 10, -68, 10, -29, 10, -125, 10, -120, 10, -122, -107, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -66, 10, -117, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -125, -116, -26, -103, -81, 58, 10, 10, -29, -28, -27, -26, 10, 32, 35, 37, 42, 64, 9, 13, -127, -126, -125, 10, -117, -105, -97, -86, 10, -29, 10, -127, 10, -92, 10, -29, 10, -127, 10, -117, 10, -29, 10, -127, 10, -105, 10, -29, 10, -127, 10, -96, 10, -29, 10, -126, 10, -119, 10, -29, 10, -127, 10, -80, 10, -126, -73, 10, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, -29, 10, 58, -126, -125, 10, -94, 10, -29, 10, -126, 10, -90, 10, -29, 10, -125, 10, -120, 10, -29, 10, -125, 10, -87, 10, -29, 10, -126, 10, -92, 10, -29, 10, -125, 10, -77, 10, 10, 58, -122, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, 58, -125, 10, -68, 10, -29, 10, -125, 10, -120, 10, -122, -107, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -67, 10, -122, 10, -119, 10, -115, 10, -26, 10, -113, 10, -112, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, 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, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -29, -28, -27, -26, -24, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, -29, -127, -117, -29, -127, -96, -29, -126, -119, -29, -127, -80, -126, -75, -73, -29, -125, -77, -29, -125, -105, -29, -125, -85, -29, -125, -118, -29, -125, -86, -29, -126, -86, -29, 58, -126, -125, -94, -29, -126, -90, -29, -125, -120, -29, -125, -87, -29, -126, -92, -29, -125, -77, 58, 10, 10, -29, -28, -27, -26, 10, 32, 35, 37, 42, 64, 9, 13, -127, -126, -125, 10, -117, -105, -97, -86, 10, -29, 10, -127, 10, -92, 10, -29, 10, -127, 10, -117, 10, -29, 10, -127, 10, -105, 10, -29, 10, -127, 10, -96, 10, -29, 10, -126, 10, -119, 10, -29, 10, -127, 10, -80, 10, -126, -73, 10, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, 10, 58, -107, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -67, 10, -122, 10, -119, 10, -115, 10, -26, 10, -113, 10, -112, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, 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, -122, -29, -125, -77, -29, -125, -105, -29, -125, -84, -29, 58, -125, -68, -29, -125, -120, 10, 10, -29, -28, -27, -26, -24, 10, 32, 35, 37, 42, 64, 9, 13, -127, -126, -125, 10, -117, -105, -97, -86, 10, -29, 10, -127, 10, -92, 10, -29, 10, -127, 10, -117, 10, -29, 10, -127, 10, -105, 10, -29, 10, -127, 10, -96, 10, -29, 10, -126, 10, -119, 10, -29, 10, -127, 10, -80, 10, -126, -73, 10, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, -29, 10, 58, -126, -125, 10, -94, 10, -29, 10, -126, 10, -90, 10, -29, 10, -125, 10, -120, 10, -29, 10, -125, 10, -87, 10, -29, 10, -126, 10, -92, 10, -29, 10, -125, 10, -77, 10, 10, 58, -122, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, 58, -125, 10, -68, 10, -29, 10, -125, 10, -120, 10, -122, -107, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -67, 10, -122, 10, -119, 10, -115, 10, -26, 10, -113, 10, -112, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -122, -107, -29, -125, -77, -29, -125, -105, -29, -125, -84, -29, -126, -93, -29, -125, -68, -29, -125, -127, -29, -125, -93, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 14, 3, 4, 1, 1, 1, 2, 2, 13, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 3, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 10, 4, 5, 2, 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, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 13, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 4, 5, 2, 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, 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, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 11, 4, 5, 2, 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, 3, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 16, 20, 25, 27, 29, 31, 34, 37, 52, 55, 57, 59, 61, 63, 65, 67, 69, 71, 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 176, 180, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 235, 238, 241, 245, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 331, 334, 337, 340, 343, 346, 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, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 493, 495, 497, 499, 501, 503, 505, 507, 519, 524, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 619, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 708, 711, 714, 717, 720, 723, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 873, 875, 878, 881, 886, 891, 896, 901, 905, 909, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 949, 956, 961, 965, 971, 975, 978, 984, 999, 1002, 1005, 1008, 1011, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1081, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1134, 1139, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1403, 1408, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 1468, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1503, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1592, 1595, 1598, 1601, 1604, 1607, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 7, 0, 15, 16, 17, 0, 18, 19, 20, 21, 0, 22, 0, 23, 0, 24, 0, 26, 27, 25, 29, 30, 28, 1, 2, 3, 4, 5, 8, 7, 9, 10, 11, 12, 13, 14, 7, 0, 31, 32, 0, 33, 0, 34, 0, 35, 0, 24, 0, 36, 0, 37, 0, 39, 38, 41, 40, 42, 43, 41, 44, 45, 45, 44, 40, 46, 41, 40, 47, 41, 40, 48, 41, 40, 49, 41, 40, 50, 41, 40, 51, 41, 40, 52, 41, 40, 53, 41, 40, 54, 41, 40, 55, 41, 40, 56, 41, 40, 57, 41, 40, 58, 41, 40, 59, 41, 40, 41, 60, 40, 61, 62, 63, 64, 65, 67, 66, 68, 69, 70, 71, 72, 73, 66, 0, 74, 0, 75, 0, 76, 0, 77, 0, 24, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 85, 84, 87, 86, 88, 89, 90, 91, 87, 92, 93, 94, 93, 92, 86, 95, 96, 87, 86, 97, 98, 87, 86, 99, 87, 86, 100, 87, 86, 101, 87, 86, 102, 87, 86, 103, 87, 86, 104, 87, 86, 105, 87, 86, 106, 87, 86, 107, 87, 86, 87, 108, 86, 109, 87, 86, 110, 87, 86, 111, 87, 86, 112, 87, 86, 113, 87, 86, 114, 87, 86, 115, 87, 86, 116, 87, 86, 117, 87, 86, 118, 87, 108, 86, 119, 120, 87, 86, 121, 87, 86, 122, 87, 86, 123, 87, 86, 124, 87, 86, 125, 87, 86, 126, 87, 86, 127, 87, 86, 128, 87, 86, 129, 87, 86, 130, 87, 86, 131, 87, 86, 132, 87, 86, 133, 87, 86, 134, 87, 86, 135, 87, 86, 107, 87, 86, 136, 87, 86, 137, 87, 86, 138, 87, 86, 139, 87, 86, 140, 87, 86, 141, 87, 86, 142, 87, 86, 143, 87, 86, 144, 87, 86, 145, 87, 86, 146, 87, 108, 86, 147, 87, 86, 148, 87, 86, 149, 87, 86, 150, 87, 86, 107, 87, 86, 151, 152, 87, 86, 153, 87, 86, 154, 87, 86, 155, 87, 86, 156, 87, 86, 157, 87, 86, 158, 87, 86, 159, 87, 86, 160, 87, 86, 107, 87, 86, 161, 87, 86, 162, 87, 86, 163, 87, 86, 164, 87, 86, 165, 87, 86, 166, 87, 86, 167, 87, 86, 168, 87, 86, 169, 87, 86, 170, 87, 86, 171, 87, 86, 107, 87, 86, 172, 87, 86, 107, 87, 86, 173, 87, 86, 174, 87, 86, 175, 87, 86, 176, 87, 86, 107, 87, 86, 177, 87, 86, 178, 87, 86, 179, 87, 86, 180, 87, 86, 107, 87, 86, 87, 181, 86, 87, 182, 86, 87, 183, 86, 87, 184, 86, 87, 185, 86, 87, 186, 86, 87, 187, 86, 87, 188, 86, 87, 189, 86, 87, 190, 86, 87, 191, 86, 87, 192, 86, 87, 193, 86, 87, 194, 86, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 202, 201, 204, 203, 205, 206, 207, 208, 204, 209, 210, 211, 212, 210, 209, 203, 213, 214, 215, 204, 203, 216, 217, 218, 219, 204, 203, 220, 204, 203, 221, 204, 203, 222, 204, 203, 223, 204, 203, 224, 204, 203, 225, 204, 203, 226, 204, 203, 227, 204, 203, 222, 204, 203, 228, 204, 203, 229, 204, 203, 225, 204, 203, 230, 204, 203, 231, 204, 203, 232, 204, 203, 233, 204, 203, 234, 204, 203, 222, 204, 203, 225, 235, 204, 203, 236, 204, 203, 237, 204, 203, 238, 204, 203, 239, 204, 203, 240, 204, 203, 241, 204, 203, 242, 204, 203, 243, 204, 203, 244, 204, 203, 245, 204, 222, 203, 246, 247, 204, 203, 248, 204, 203, 249, 204, 203, 250, 204, 203, 251, 204, 203, 252, 204, 203, 253, 204, 203, 254, 204, 203, 255, 204, 203, 256, 204, 203, 257, 204, 203, 258, 204, 203, 259, 204, 203, 260, 204, 203, 261, 204, 203, 262, 204, 203, 263, 204, 203, 204, 222, 203, 264, 204, 203, 265, 204, 203, 266, 204, 203, 267, 204, 203, 268, 204, 203, 269, 204, 203, 270, 204, 203, 271, 204, 203, 272, 204, 203, 273, 204, 203, 274, 204, 222, 203, 275, 204, 203, 276, 204, 203, 277, 204, 203, 278, 204, 203, 263, 204, 203, 279, 280, 204, 203, 281, 204, 203, 282, 204, 203, 283, 204, 203, 284, 204, 203, 285, 204, 203, 286, 204, 203, 287, 204, 203, 288, 204, 203, 263, 204, 203, 289, 204, 203, 290, 204, 203, 291, 204, 203, 292, 204, 203, 293, 204, 203, 294, 204, 203, 295, 204, 203, 296, 204, 203, 297, 204, 203, 298, 204, 203, 299, 204, 203, 263, 204, 203, 300, 204, 203, 225, 204, 203, 301, 204, 203, 302, 204, 203, 303, 204, 203, 304, 204, 203, 222, 204, 203, 305, 204, 203, 306, 204, 203, 307, 204, 203, 308, 204, 203, 263, 204, 203, 204, 309, 203, 204, 310, 203, 204, 311, 203, 204, 312, 203, 204, 313, 203, 204, 314, 203, 204, 315, 203, 204, 316, 203, 204, 317, 203, 204, 318, 203, 204, 319, 203, 204, 320, 203, 204, 321, 203, 204, 322, 203, 204, 222, 203, 323, 0, 324, 0, 326, 327, 325, 329, 330, 328, 333, 332, 334, 332, 331, 337, 336, 338, 336, 335, 337, 336, 339, 336, 335, 337, 336, 340, 336, 335, 342, 341, 341, 0, 8, 343, 343, 0, 345, 346, 344, 8, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 24, 0, 0, 0, 0, 0, 361, 362, 363, 362, 362, 365, 364, 361, 8, 366, 13, 366, 0, 367, 368, 367, 0, 371, 370, 372, 373, 370, 369, 0, 375, 376, 374, 0, 375, 374, 371, 377, 375, 376, 377, 374, 378, 379, 380, 381, 382, 371, 383, 384, 385, 386, 387, 388, 389, 383, 0, 390, 41, 40, 391, 41, 40, 392, 41, 40, 393, 41, 40, 59, 41, 40, 394, 0, 395, 0, 33, 0, 396, 0, 397, 0, 33, 0, 398, 0, 399, 0, 400, 0, 401, 0, 402, 0, 24, 0, 33, 403, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 411, 0, 412, 0, 36, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 423, 0, 424, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 442, 0, 444, 443, 446, 445, 447, 448, 449, 450, 446, 451, 452, 453, 454, 452, 451, 445, 455, 456, 457, 446, 445, 458, 459, 460, 461, 446, 445, 462, 446, 445, 463, 446, 445, 464, 446, 445, 465, 446, 445, 466, 446, 445, 467, 446, 445, 468, 446, 445, 469, 446, 445, 464, 446, 445, 470, 446, 445, 471, 446, 445, 467, 446, 445, 472, 446, 445, 473, 446, 445, 474, 446, 445, 475, 446, 445, 476, 446, 445, 464, 446, 445, 467, 477, 446, 445, 478, 446, 445, 479, 446, 445, 480, 446, 445, 481, 446, 445, 482, 446, 445, 483, 446, 445, 484, 446, 445, 485, 446, 445, 486, 446, 445, 446, 464, 445, 487, 446, 445, 488, 446, 445, 489, 446, 445, 490, 446, 445, 491, 446, 445, 492, 446, 445, 493, 446, 445, 494, 446, 445, 495, 446, 445, 496, 446, 445, 497, 446, 445, 498, 446, 445, 486, 446, 445, 499, 446, 445, 467, 446, 445, 500, 446, 445, 501, 446, 445, 502, 446, 445, 503, 446, 445, 464, 446, 445, 504, 446, 445, 505, 446, 445, 506, 446, 445, 507, 446, 445, 486, 446, 445, 446, 508, 445, 446, 509, 445, 446, 510, 445, 446, 511, 445, 446, 512, 445, 446, 513, 445, 446, 514, 445, 446, 515, 445, 446, 516, 445, 446, 517, 445, 446, 518, 445, 446, 519, 445, 446, 520, 445, 446, 521, 445, 446, 464, 445, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, 532, 442, 0, 533, 0, 534, 0, 535, 0, 536, 0, 441, 0, 538, 537, 540, 539, 541, 542, 543, 544, 545, 540, 546, 547, 548, 549, 547, 546, 539, 550, 551, 552, 540, 539, 553, 554, 555, 556, 540, 539, 557, 540, 539, 558, 540, 539, 559, 540, 539, 560, 540, 539, 561, 540, 539, 562, 540, 539, 563, 540, 539, 564, 540, 539, 559, 540, 539, 565, 540, 539, 566, 540, 539, 562, 540, 539, 567, 540, 539, 568, 540, 539, 569, 540, 539, 570, 540, 539, 571, 540, 539, 559, 540, 539, 562, 572, 540, 539, 573, 540, 539, 574, 540, 539, 575, 540, 539, 576, 540, 539, 577, 540, 539, 578, 540, 539, 579, 540, 539, 580, 540, 539, 581, 540, 539, 582, 540, 559, 539, 583, 584, 540, 539, 585, 540, 539, 586, 540, 539, 587, 540, 539, 588, 540, 539, 589, 540, 539, 590, 540, 539, 591, 540, 539, 592, 540, 539, 593, 540, 539, 594, 540, 539, 595, 540, 539, 596, 540, 539, 597, 540, 539, 598, 540, 539, 599, 540, 539, 600, 540, 539, 540, 559, 539, 601, 540, 539, 602, 540, 539, 603, 540, 539, 604, 540, 539, 605, 540, 539, 606, 540, 539, 607, 540, 539, 608, 540, 539, 609, 540, 539, 610, 540, 539, 611, 540, 559, 539, 612, 540, 539, 613, 540, 539, 614, 540, 539, 615, 540, 539, 600, 540, 539, 616, 617, 540, 539, 618, 540, 539, 619, 540, 539, 620, 540, 539, 621, 540, 539, 622, 540, 539, 623, 540, 539, 624, 540, 539, 625, 540, 539, 600, 540, 539, 626, 540, 539, 627, 540, 539, 628, 540, 539, 629, 540, 539, 630, 540, 539, 631, 540, 539, 632, 540, 539, 633, 540, 539, 634, 540, 539, 635, 540, 539, 636, 540, 539, 600, 540, 539, 637, 540, 539, 562, 540, 539, 638, 540, 539, 639, 540, 539, 640, 540, 539, 641, 540, 539, 559, 540, 539, 642, 540, 539, 643, 540, 539, 644, 540, 539, 645, 540, 539, 600, 540, 539, 646, 540, 539, 647, 540, 539, 648, 540, 539, 649, 540, 539, 600, 540, 539, 540, 650, 539, 540, 651, 539, 540, 652, 539, 540, 653, 539, 540, 654, 539, 540, 655, 539, 540, 656, 539, 540, 657, 539, 540, 658, 539, 540, 659, 539, 540, 660, 539, 540, 661, 539, 540, 662, 539, 540, 663, 539, 540, 559, 539, 664, 665, 0, 666, 0, 667, 0, 668, 0, 669, 0, 670, 0, 671, 0, 672, 0, 673, 0, 441, 0, 674, 0, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 680, 0, 681, 0, 682, 0, 683, 0, 684, 0, 82, 0, 685, 0, 7, 0, 686, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 10, 36, 41, 153, 601, 9, 9, 276, 286, 288, 302, 303, 306, 3, 329, 579, 4, 317, 320, 323, 5, 6, 7, 8, 9, 287, 8, 9, 287, 11, 15, 12, 13, 14, 16, 17, 18, 19, 18, 19, 20, 312, 19, 9, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 2, 10, 36, 41, 153, 9, 9, 276, 286, 288, 302, 303, 306, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 48, 49, 50, 127, 129, 134, 49, 9, 139, 51, 105, 52, 62, 53, 54, 55, 56, 57, 58, 59, 60, 61, 35, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 89, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 115, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 130, 131, 132, 133, 135, 136, 137, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 9, 154, 155, 156, 157, 158, 159, 160, 161, 160, 161, 162, 249, 251, 256, 161, 9, 261, 275, 163, 182, 227, 164, 167, 173, 176, 165, 166, 35, 168, 169, 170, 171, 172, 174, 175, 177, 178, 179, 180, 181, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 211, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 237, 229, 230, 231, 232, 233, 234, 235, 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 250, 252, 253, 254, 255, 257, 258, 259, 260, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 9, 277, 278, 279, 280, 279, 279, 280, 279, 281, 281, 281, 282, 281, 281, 281, 282, 283, 284, 285, 9, 285, 286, 9, 287, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 603, 304, 305, 9, 304, 303, 305, 306, 307, 308, 310, 311, 309, 307, 308, 309, 307, 310, 2, 10, 36, 41, 153, 311, 276, 286, 288, 302, 303, 306, 313, 314, 315, 316, 318, 319, 321, 322, 324, 325, 326, 327, 328, 330, 339, 331, 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 457, 350, 441, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 368, 369, 370, 414, 416, 421, 369, 9, 426, 440, 371, 390, 401, 372, 375, 381, 384, 373, 374, 35, 376, 377, 378, 379, 380, 382, 383, 385, 386, 387, 388, 389, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 417, 418, 419, 420, 422, 423, 424, 425, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 9, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 458, 459, 458, 459, 460, 547, 549, 554, 559, 459, 9, 564, 578, 461, 480, 525, 462, 465, 471, 474, 463, 464, 35, 466, 467, 468, 469, 470, 472, 473, 475, 476, 477, 478, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 509, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 526, 535, 527, 528, 529, 530, 531, 532, 533, 534, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 548, 550, 551, 552, 553, 555, 556, 557, 558, 560, 561, 562, 563, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 9, 580, 589, 581, 582, 583, 584, 585, 586, 587, 588, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 602, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 29, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 63, 63, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 13, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 96, 96, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 84, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 84, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 603; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/ja.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1077 "lib/gherkin/lexer/ja.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/ja.rb.rl" # line 1086 "lib/gherkin/lexer/ja.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/ja.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/ja.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/ja.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/ja.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/ja.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/ja.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/ja.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/ja.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/ja.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/ja.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/ja.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/ja.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/ja.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/ja.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/ja.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/ja.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/ja.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/ja.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/ja.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/ja.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/ja.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/ja.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/ja.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/ja.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1330 "lib/gherkin/lexer/ja.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/ja.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1369 "lib/gherkin/lexer/ja.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/ja.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/cs.rb0000644000004100000410000013672712244512574017551 0ustar www-datawww-data # line 1 "ragel/i18n/cs.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Cs #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/cs.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/cs.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 112, 115, 118, 121, 124, 127, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 272, 290, 291, 292, 293, 294, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 339, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 457, 459, 461, 463, 465, 467, 469, 471, 473, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 579, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 620, 626, 629, 631, 637, 654, 656, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 728, 730, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 805, 806, 807, 808, 809, 811, 813, 815, 817, 819, 822, 824, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 894, 912, 913, 914, 915, 916, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 980, 982, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 108, 10, 13, 116, 10, 13, 97, 10, 13, 107, -61, 10, 13, -87, 10, 13, 10, 13, 32, 101, 100, 111, 121, -59, -66, 110, 116, 101, 120, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 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, 75, 78, 79, 80, 83, 90, 124, 9, 13, -61, -95, -60, -115, 114, 116, 32, 83, 99, -61, -87, 110, -61, -95, -59, -103, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 75, 80, 83, 90, 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, 108, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 116, 124, 9, 13, 115, 110, 111, 118, 97, 32, 115, -59, 97, 111, -103, -61, -83, 107, 108, 97, 100, 121, 58, 10, 10, 10, 32, 35, 80, 124, 9, 13, 10, 111, -59, 10, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 58, 107, -59, 107, 122, -66, 97, 100, 97, 118, 101, 107, 58, 10, 10, 10, 32, 35, 37, 64, 75, 78, 79, 80, 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, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 101, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 115, -59, 10, 111, -103, 10, -61, 10, -83, 10, 10, 107, 10, 108, 10, 97, 10, 100, 10, 121, -59, 10, 122, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 97, 10, 100, -61, 10, -83, 10, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 117, 100, 97, 100, -61, -83, 99, -61, -87, 110, -61, -95, -59, -103, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 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, 108, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 116, 124, 9, 13, 97, 32, 112, -59, -103, 101, 100, 112, 111, 107, 108, 97, 100, 117, 97, 107, -61, -87, 32, 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, 75, 78, 79, 80, 83, 90, 124, 9, 13, 10, 101, 10, 100, 111, 10, 121, -59, 10, -66, 10, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 101, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 115, 10, 97, 111, 10, 107, -59, 10, 107, 122, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 117, 10, 100, 10, 97, 10, 100, -61, 10, -83, 10, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 97, 10, 32, 10, 112, -59, 10, -103, 10, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 97, 107, -61, -87, 32, 10, 101, 10, 100, 10, 121, -59, 10, -66, 10, 10, 97, 111, 10, 107, -59, 10, 107, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 58, 10, 117, 10, 100, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 97, 10, 32, 10, 112, -59, 10, -103, 10, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 10, 32, 108, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 116, 124, 9, 13, 97, 107, -61, -87, 32, 10, 101, 10, 100, 10, 121, -59, 10, -66, 10, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 101, 10, 58, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 115, 10, 97, 111, 10, 107, -59, 10, 107, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 117, 10, 100, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 97, 10, 32, 10, 112, -59, 10, -103, 10, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 3, 3, 3, 3, 3, 3, 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, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 16, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 3, 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, 1, 1, 1, 1, 1, 1, 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, 3, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 15, 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, 2, 2, 2, 2, 2, 2, 3, 2, 4, 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, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 3, 16, 1, 1, 1, 1, 1, 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, 3, 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, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 1, 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, 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, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 138, 142, 146, 150, 154, 158, 162, 164, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 368, 386, 388, 390, 392, 394, 396, 398, 400, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 465, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 640, 643, 646, 649, 652, 655, 658, 661, 664, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 823, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 883, 889, 893, 896, 902, 919, 922, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1029, 1032, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1144, 1146, 1148, 1150, 1152, 1155, 1158, 1161, 1164, 1167, 1171, 1174, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1278, 1296, 1298, 1300, 1302, 1304, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 1396, 1400, 1403, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 70, 0, 58, 59, 71, 57, 61, 62, 72, 60, 61, 62, 73, 60, 74, 61, 62, 60, 75, 61, 62, 60, 61, 62, 56, 60, 76, 0, 77, 78, 0, 79, 0, 80, 0, 76, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 88, 87, 90, 89, 90, 91, 92, 93, 94, 92, 95, 96, 97, 98, 99, 100, 101, 91, 89, 90, 102, 89, 90, 103, 89, 90, 104, 89, 90, 105, 89, 90, 106, 89, 90, 107, 89, 90, 108, 89, 90, 109, 89, 90, 110, 89, 90, 111, 89, 90, 112, 89, 90, 113, 89, 90, 114, 89, 90, 115, 89, 90, 116, 89, 118, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 117, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 151, 150, 153, 152, 153, 154, 155, 156, 157, 155, 158, 159, 160, 161, 162, 154, 152, 153, 163, 152, 153, 164, 152, 153, 165, 152, 153, 166, 152, 153, 167, 152, 153, 168, 152, 153, 169, 152, 153, 170, 152, 153, 171, 152, 153, 172, 152, 153, 173, 152, 153, 174, 152, 153, 175, 152, 153, 176, 152, 153, 177, 152, 153, 178, 179, 152, 118, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 180, 131, 117, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 139, 0, 187, 188, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 200, 199, 202, 201, 202, 203, 204, 205, 204, 203, 201, 202, 206, 201, 207, 202, 201, 208, 202, 201, 202, 209, 201, 202, 210, 201, 202, 211, 201, 202, 212, 201, 202, 213, 201, 202, 214, 201, 202, 215, 201, 76, 0, 216, 217, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 228, 227, 230, 229, 230, 231, 232, 233, 232, 234, 235, 236, 237, 238, 231, 229, 230, 239, 229, 230, 240, 229, 230, 241, 229, 230, 242, 229, 230, 243, 229, 230, 244, 229, 230, 245, 229, 230, 246, 229, 230, 247, 229, 230, 248, 229, 230, 249, 229, 230, 250, 229, 230, 251, 229, 230, 252, 229, 230, 253, 229, 230, 254, 229, 230, 255, 229, 230, 256, 229, 230, 257, 229, 230, 258, 229, 230, 259, 229, 260, 230, 229, 261, 230, 229, 262, 230, 229, 263, 230, 229, 230, 264, 229, 230, 265, 229, 230, 266, 229, 230, 267, 229, 230, 268, 229, 269, 230, 229, 270, 230, 229, 230, 271, 229, 272, 230, 229, 273, 230, 229, 274, 230, 229, 275, 230, 229, 230, 258, 229, 230, 276, 229, 230, 277, 229, 230, 278, 229, 230, 279, 229, 230, 280, 229, 230, 281, 229, 230, 267, 229, 282, 230, 283, 229, 284, 230, 229, 285, 230, 229, 286, 230, 229, 230, 287, 229, 230, 288, 229, 230, 289, 229, 230, 290, 229, 230, 258, 229, 291, 230, 292, 229, 293, 230, 229, 230, 294, 229, 230, 295, 229, 230, 296, 229, 230, 297, 229, 230, 298, 229, 230, 258, 229, 230, 299, 229, 230, 300, 229, 301, 230, 229, 258, 230, 229, 230, 302, 229, 303, 230, 229, 304, 230, 229, 230, 305, 229, 306, 230, 229, 307, 230, 229, 308, 230, 229, 258, 230, 229, 309, 0, 76, 0, 310, 0, 311, 0, 312, 0, 85, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 323, 322, 325, 324, 325, 326, 327, 328, 329, 327, 330, 331, 332, 333, 334, 335, 336, 326, 324, 325, 337, 324, 325, 338, 324, 325, 339, 324, 325, 340, 324, 325, 341, 324, 325, 342, 324, 325, 343, 324, 325, 344, 324, 325, 345, 324, 325, 346, 324, 325, 347, 324, 325, 348, 324, 325, 349, 324, 325, 350, 324, 325, 351, 324, 325, 352, 353, 324, 118, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 354, 131, 117, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 76, 0, 368, 0, 369, 0, 370, 0, 371, 0, 351, 0, 372, 373, 372, 0, 376, 375, 377, 378, 375, 374, 0, 380, 381, 379, 0, 380, 379, 376, 382, 380, 381, 382, 379, 376, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 383, 0, 325, 397, 324, 325, 398, 399, 324, 325, 400, 324, 401, 325, 324, 397, 325, 324, 325, 402, 324, 325, 403, 324, 325, 404, 324, 325, 405, 324, 325, 406, 324, 325, 351, 324, 407, 325, 324, 408, 325, 324, 409, 325, 324, 410, 325, 324, 325, 411, 324, 325, 412, 324, 325, 413, 324, 325, 414, 324, 325, 415, 324, 416, 325, 324, 417, 325, 324, 325, 418, 324, 419, 325, 324, 420, 325, 324, 421, 325, 324, 422, 325, 324, 325, 406, 324, 325, 423, 324, 325, 424, 324, 325, 425, 324, 325, 426, 324, 325, 427, 324, 325, 428, 324, 325, 414, 324, 325, 429, 430, 324, 325, 397, 324, 431, 325, 432, 433, 324, 434, 325, 324, 325, 435, 324, 325, 436, 324, 325, 437, 324, 325, 438, 324, 325, 439, 324, 325, 406, 324, 325, 440, 324, 325, 397, 324, 325, 441, 324, 325, 442, 324, 443, 325, 324, 406, 325, 324, 325, 444, 324, 445, 325, 324, 446, 325, 324, 325, 447, 324, 448, 325, 324, 449, 325, 324, 450, 325, 324, 406, 325, 324, 325, 451, 324, 325, 452, 324, 325, 453, 324, 454, 325, 324, 455, 325, 324, 325, 456, 324, 325, 457, 324, 325, 458, 324, 325, 459, 324, 325, 460, 324, 325, 461, 324, 325, 462, 324, 325, 463, 324, 325, 397, 324, 464, 0, 465, 0, 466, 0, 467, 0, 177, 0, 153, 468, 152, 153, 469, 152, 153, 470, 152, 471, 153, 152, 468, 153, 152, 153, 472, 473, 152, 153, 468, 152, 474, 153, 475, 152, 476, 153, 152, 153, 477, 152, 153, 478, 152, 153, 479, 152, 153, 480, 152, 153, 481, 152, 153, 482, 152, 153, 177, 152, 153, 483, 152, 153, 468, 152, 153, 484, 152, 485, 153, 152, 486, 153, 152, 153, 487, 152, 488, 153, 152, 489, 153, 152, 490, 153, 152, 482, 153, 152, 153, 491, 152, 153, 492, 152, 153, 493, 152, 494, 153, 152, 495, 153, 152, 153, 496, 152, 153, 497, 152, 153, 498, 152, 153, 499, 152, 153, 500, 152, 153, 501, 152, 153, 502, 152, 153, 503, 152, 153, 468, 152, 90, 504, 505, 89, 118, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 506, 131, 117, 0, 507, 0, 508, 0, 509, 0, 510, 0, 116, 0, 90, 511, 89, 90, 512, 89, 90, 513, 89, 514, 90, 89, 511, 90, 89, 515, 90, 89, 516, 90, 89, 517, 90, 89, 518, 90, 89, 90, 519, 89, 90, 520, 89, 90, 521, 89, 90, 522, 89, 90, 523, 89, 524, 90, 89, 525, 90, 89, 90, 526, 89, 527, 90, 89, 528, 90, 89, 529, 90, 89, 530, 90, 89, 90, 531, 89, 90, 116, 89, 90, 532, 89, 90, 533, 89, 90, 534, 89, 90, 535, 89, 90, 536, 89, 90, 537, 89, 90, 522, 89, 90, 538, 539, 89, 90, 511, 89, 540, 90, 541, 89, 542, 90, 89, 90, 543, 89, 90, 544, 89, 90, 545, 89, 90, 546, 89, 90, 547, 89, 90, 531, 89, 90, 548, 89, 90, 511, 89, 90, 549, 89, 550, 90, 89, 551, 90, 89, 90, 552, 89, 553, 90, 89, 554, 90, 89, 555, 90, 89, 531, 90, 89, 90, 556, 89, 90, 557, 89, 90, 558, 89, 559, 90, 89, 560, 90, 89, 90, 561, 89, 90, 562, 89, 90, 563, 89, 90, 564, 89, 90, 565, 89, 90, 566, 89, 90, 567, 89, 90, 568, 89, 90, 511, 89, 569, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 478, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 44, 39, 40, 41, 42, 43, 31, 46, 49, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 56, 57, 57, 4, 58, 72, 407, 415, 419, 437, 444, 456, 464, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 4, 73, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 93, 94, 94, 4, 95, 109, 110, 368, 372, 385, 393, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 4, 73, 111, 367, 362, 113, 114, 115, 116, 117, 118, 120, 142, 143, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 130, 131, 131, 4, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 73, 144, 229, 231, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 153, 154, 154, 4, 155, 169, 176, 193, 200, 221, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 4, 170, 171, 172, 173, 174, 175, 73, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 196, 197, 198, 199, 201, 209, 202, 203, 204, 205, 206, 207, 208, 210, 217, 211, 212, 213, 214, 215, 216, 218, 219, 220, 222, 223, 224, 225, 226, 227, 228, 230, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 245, 246, 246, 4, 247, 261, 262, 290, 300, 317, 324, 340, 348, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 4, 73, 263, 289, 278, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 279, 280, 281, 282, 283, 284, 285, 287, 288, 286, 284, 285, 286, 284, 287, 288, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 261, 291, 294, 292, 293, 295, 296, 297, 298, 299, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 318, 319, 320, 321, 322, 323, 325, 326, 327, 334, 336, 328, 329, 330, 331, 332, 333, 335, 337, 338, 339, 341, 342, 343, 344, 345, 346, 347, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 363, 364, 365, 366, 109, 369, 370, 371, 373, 374, 375, 383, 376, 377, 378, 379, 380, 381, 382, 384, 386, 387, 388, 389, 390, 391, 392, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 408, 414, 409, 410, 411, 412, 413, 72, 416, 417, 418, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 438, 439, 440, 441, 442, 443, 445, 446, 447, 454, 448, 449, 450, 451, 452, 453, 455, 457, 458, 459, 460, 461, 462, 463, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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, 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, 15, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 478; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/cs.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 905 "lib/gherkin/lexer/cs.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/cs.rb.rl" # line 914 "lib/gherkin/lexer/cs.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/cs.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/cs.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/cs.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/cs.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/cs.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/cs.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/cs.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/cs.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/cs.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/cs.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/cs.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/cs.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/cs.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/cs.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/cs.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/cs.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/cs.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/cs.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/cs.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/cs.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/cs.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/cs.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/cs.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/cs.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1158 "lib/gherkin/lexer/cs.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/cs.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1197 "lib/gherkin/lexer/cs.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/cs.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/et.rb0000644000004100000410000011044712244512574017543 0ustar www-datawww-data # line 1 "ragel/i18n/et.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Et #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/et.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/et.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 135, 137, 139, 141, 143, 145, 147, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 522, 524, 526, 528, 530, 532, 533, 534, 535, 536, 537, 538, 539, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 649, 651, 655, 661, 664, 666, 672, 689 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 108, 100, 97, 100, 101, 115, 97, 117, 104, 116, 117, 109, 105, 100, 58, 10, 10, 10, 32, 35, 79, 124, 9, 13, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 32, 34, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, 117, 105, 32, 100, 109, 97, 100, 117, 115, 58, 10, 10, 10, 32, 35, 37, 64, 74, 79, 82, 83, 84, 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, 117, 10, 104, 10, 116, 10, 117, 10, 109, 10, 105, 10, 100, 10, 58, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 97, 10, 97, 10, 109, 10, 115, 10, 116, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 10, 97, 10, 117, 10, 115, 10, 116, 97, 97, 109, 115, 116, 115, 101, 110, 97, 97, 114, 105, 117, 109, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 74, 75, 79, 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, 32, 10, 101, 10, 108, 10, 100, 10, 97, 10, 100, 10, 101, 10, 115, 10, 97, 10, 117, 10, 105, 10, 32, 100, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 105, 116, 10, 105, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 105, 116, 105, 115, 101, 110, 97, 97, 114, 105, 117, 109, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 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, 101, 10, 108, 10, 100, 10, 97, 10, 100, 10, 101, 10, 115, 10, 97, 10, 117, 10, 105, 10, 32, 100, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 97, 10, 97, 10, 109, 10, 115, 10, 116, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 10, 105, 116, 10, 105, 10, 97, 10, 117, 10, 115, 10, 116, 97, 117, 115, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 74, 75, 79, 82, 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, 32, 10, 101, 10, 108, 10, 100, 10, 97, 10, 100, 10, 101, 10, 115, 10, 97, 10, 117, 10, 105, 10, 32, 100, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 97, 10, 97, 10, 109, 10, 115, 10, 116, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 10, 105, 116, 10, 105, 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, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 15, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 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, 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, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 4, 3, 2, 4, 15, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 137, 139, 141, 143, 145, 147, 149, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 177, 180, 183, 186, 189, 192, 195, 212, 214, 216, 219, 221, 223, 225, 227, 229, 231, 233, 235, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 508, 511, 514, 517, 520, 523, 526, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 604, 607, 610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 747, 750, 753, 756, 759, 762, 764, 766, 768, 770, 772, 774, 776, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 940, 946, 950, 953, 959, 976 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 75, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 85, 84, 87, 86, 87, 88, 89, 90, 89, 88, 86, 87, 91, 86, 87, 92, 86, 87, 93, 86, 87, 94, 86, 87, 95, 86, 87, 96, 86, 98, 97, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 97, 0, 112, 0, 113, 0, 56, 75, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 121, 120, 123, 122, 123, 124, 125, 126, 125, 127, 128, 129, 130, 131, 124, 122, 123, 132, 122, 123, 133, 122, 123, 134, 122, 123, 135, 122, 123, 136, 122, 123, 137, 122, 123, 138, 122, 123, 139, 122, 123, 140, 122, 123, 141, 122, 123, 142, 122, 123, 143, 122, 123, 144, 122, 123, 145, 122, 123, 146, 122, 123, 147, 122, 123, 148, 122, 123, 149, 122, 123, 150, 122, 123, 151, 122, 123, 152, 122, 123, 153, 122, 123, 154, 122, 123, 155, 122, 123, 156, 122, 123, 157, 122, 123, 152, 122, 123, 158, 122, 123, 159, 122, 123, 160, 122, 123, 161, 122, 123, 162, 122, 123, 163, 122, 123, 164, 122, 123, 165, 122, 123, 166, 122, 123, 167, 122, 123, 168, 122, 123, 169, 122, 123, 170, 122, 123, 152, 122, 123, 171, 122, 123, 172, 122, 123, 173, 122, 123, 152, 122, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 190, 189, 192, 191, 192, 193, 194, 195, 196, 194, 197, 198, 199, 200, 201, 193, 191, 192, 202, 191, 192, 203, 191, 192, 204, 191, 192, 205, 191, 192, 206, 191, 192, 207, 191, 192, 208, 191, 192, 209, 191, 192, 210, 191, 192, 211, 191, 192, 212, 191, 192, 213, 191, 192, 214, 191, 192, 215, 191, 192, 216, 191, 192, 217, 191, 192, 218, 191, 192, 219, 191, 192, 220, 191, 192, 221, 191, 192, 222, 191, 192, 223, 191, 192, 223, 191, 192, 224, 191, 192, 225, 191, 192, 216, 223, 191, 192, 226, 191, 192, 227, 191, 192, 228, 191, 192, 229, 191, 192, 230, 191, 192, 216, 191, 192, 231, 232, 191, 192, 222, 191, 192, 233, 191, 192, 234, 191, 192, 235, 191, 192, 236, 191, 192, 237, 191, 192, 238, 191, 192, 239, 191, 192, 240, 191, 192, 230, 191, 241, 242, 0, 74, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 254, 253, 256, 255, 256, 257, 258, 259, 260, 258, 261, 262, 263, 264, 265, 266, 267, 257, 255, 256, 268, 255, 256, 269, 255, 256, 270, 255, 256, 271, 255, 256, 272, 255, 256, 273, 255, 256, 274, 255, 256, 275, 255, 256, 276, 255, 256, 277, 255, 256, 278, 255, 256, 279, 255, 256, 280, 255, 256, 281, 255, 256, 282, 255, 256, 283, 255, 256, 284, 255, 256, 285, 255, 256, 286, 255, 256, 287, 255, 256, 288, 255, 256, 289, 255, 256, 289, 255, 256, 290, 255, 256, 291, 255, 256, 282, 289, 255, 256, 292, 255, 256, 293, 255, 256, 294, 255, 256, 295, 255, 256, 296, 255, 256, 282, 255, 256, 297, 255, 256, 298, 255, 256, 299, 255, 256, 300, 255, 256, 301, 255, 256, 302, 255, 256, 303, 255, 256, 304, 255, 256, 305, 255, 256, 306, 255, 256, 307, 255, 256, 308, 255, 256, 309, 255, 256, 296, 255, 256, 310, 301, 255, 256, 288, 255, 256, 311, 255, 256, 312, 255, 256, 313, 255, 256, 296, 255, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 320, 319, 322, 321, 322, 323, 324, 325, 326, 324, 327, 328, 329, 330, 331, 332, 323, 321, 322, 333, 321, 322, 334, 321, 322, 335, 321, 322, 336, 321, 322, 337, 321, 322, 338, 321, 322, 339, 321, 322, 340, 321, 322, 341, 321, 322, 342, 321, 322, 343, 321, 322, 344, 321, 322, 345, 321, 322, 346, 321, 322, 347, 321, 322, 348, 321, 322, 349, 321, 322, 350, 321, 322, 351, 321, 322, 352, 321, 322, 353, 321, 322, 354, 321, 322, 354, 321, 322, 355, 321, 322, 356, 321, 322, 347, 354, 321, 322, 357, 321, 322, 358, 321, 322, 359, 321, 322, 360, 321, 322, 361, 321, 322, 347, 321, 322, 362, 321, 322, 363, 321, 322, 364, 321, 322, 365, 321, 322, 366, 321, 322, 367, 321, 322, 368, 321, 322, 369, 321, 322, 370, 321, 322, 371, 321, 322, 372, 321, 322, 373, 321, 322, 374, 321, 322, 361, 321, 322, 375, 366, 321, 322, 353, 321, 376, 377, 376, 0, 380, 379, 381, 382, 379, 378, 0, 384, 385, 383, 0, 384, 383, 380, 386, 384, 385, 386, 383, 380, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 387, 0, 401, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 309, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 31, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 53, 54, 54, 4, 55, 56, 57, 58, 59, 60, 61, 4, 4, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 72, 73, 73, 4, 74, 88, 96, 101, 105, 115, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 4, 89, 90, 91, 92, 93, 94, 95, 61, 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 135, 136, 136, 4, 137, 151, 152, 159, 160, 163, 169, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 4, 61, 153, 154, 155, 156, 157, 158, 151, 161, 162, 164, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 193, 194, 194, 4, 195, 209, 210, 217, 218, 221, 227, 241, 243, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 4, 61, 211, 212, 213, 214, 215, 216, 209, 219, 220, 222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 244, 245, 246, 248, 249, 250, 251, 252, 253, 254, 253, 254, 254, 4, 255, 269, 270, 277, 278, 281, 287, 301, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 4, 61, 271, 272, 273, 274, 275, 276, 269, 279, 280, 282, 283, 284, 285, 286, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, 307, 308, 306, 304, 305, 306, 304, 307, 308, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 21, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 309; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/et.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 649 "lib/gherkin/lexer/et.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/et.rb.rl" # line 658 "lib/gherkin/lexer/et.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/et.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/et.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/et.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/et.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/et.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/et.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/et.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/et.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/et.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/et.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/et.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/et.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/et.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/et.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/et.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/et.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/et.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/et.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/et.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/et.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/et.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/et.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/et.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/et.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 902 "lib/gherkin/lexer/et.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/et.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 941 "lib/gherkin/lexer/et.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/et.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/nl.rb0000644000004100000410000012315712244512574017546 0ustar www-datawww-data # line 1 "ragel/i18n/nl.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Nl #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/nl.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/nl.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 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, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 526, 528, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 586, 592, 595, 597, 603, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 678, 680, 682, 684, 686, 688, 690, 692, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 839, 841, 843, 844 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 99, 108, 115, 116, 114, 97, 99, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, 97, 110, 117, 110, 99, 116, 105, 111, 110, 97, 108, 105, 116, 101, 105, 116, 58, 10, 10, 10, 32, 35, 37, 64, 65, 70, 83, 86, 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, 98, 99, 10, 115, 10, 116, 10, 114, 10, 97, 10, 99, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 104, 10, 116, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 111, 10, 111, 10, 114, 10, 98, 10, 101, 10, 101, 10, 108, 10, 100, 10, 101, 10, 110, 101, 103, 101, 118, 101, 97, 97, 114, 99, 116, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 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, 32, 10, 98, 99, 108, 10, 115, 10, 116, 10, 114, 10, 97, 10, 99, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 104, 10, 116, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 115, 10, 97, 10, 110, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 101, 10, 103, 10, 101, 10, 118, 10, 101, 10, 97, 10, 97, 10, 114, 10, 99, 116, 10, 101, 10, 108, 101, 108, 111, 111, 114, 98, 101, 101, 108, 100, 101, 110, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 58, 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, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, 10, 108, 10, 115, 10, 97, 10, 110, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 58, 10, 101, 10, 103, 10, 101, 10, 118, 10, 101, 10, 97, 10, 97, 10, 114, 10, 99, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 10, 108, 104, 116, 101, 114, 103, 114, 111, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 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, 32, 10, 98, 108, 10, 115, 10, 116, 10, 114, 10, 97, 10, 99, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 115, 10, 97, 10, 110, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 101, 10, 103, 10, 101, 10, 118, 10, 101, 10, 97, 10, 97, 10, 114, 10, 99, 116, 10, 101, 10, 108, 115, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 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, 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, 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, 4, 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, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 1, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 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, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 499, 501, 503, 505, 507, 509, 511, 513, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 753, 756, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 845, 851, 855, 858, 864, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 967, 970, 973, 976, 979, 982, 985, 988, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1206, 1209, 1212, 1214 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 71, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 90, 89, 92, 91, 92, 93, 94, 95, 96, 94, 97, 98, 99, 100, 101, 102, 103, 93, 91, 92, 104, 91, 92, 105, 91, 92, 106, 91, 92, 107, 91, 92, 108, 91, 92, 109, 91, 92, 110, 91, 92, 111, 91, 92, 112, 91, 92, 113, 91, 92, 114, 91, 92, 115, 91, 92, 116, 91, 92, 117, 91, 92, 118, 91, 120, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 119, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 153, 152, 155, 154, 155, 156, 157, 158, 157, 159, 160, 161, 162, 156, 154, 155, 163, 154, 155, 164, 154, 155, 165, 154, 155, 166, 154, 155, 167, 154, 155, 168, 154, 155, 169, 154, 155, 170, 154, 155, 171, 154, 155, 172, 154, 155, 173, 154, 155, 174, 154, 155, 175, 154, 155, 176, 154, 155, 177, 178, 154, 155, 179, 154, 155, 180, 154, 155, 181, 154, 155, 182, 154, 155, 183, 154, 155, 184, 154, 155, 185, 154, 155, 186, 154, 155, 187, 154, 155, 188, 154, 155, 189, 154, 155, 190, 154, 155, 191, 154, 155, 192, 154, 155, 193, 154, 155, 194, 154, 155, 195, 154, 155, 196, 154, 155, 197, 154, 155, 198, 154, 155, 199, 154, 155, 200, 154, 155, 201, 154, 155, 202, 154, 155, 193, 154, 155, 203, 154, 155, 204, 154, 155, 205, 154, 155, 206, 154, 155, 207, 154, 155, 208, 154, 155, 209, 154, 155, 210, 154, 155, 211, 154, 155, 212, 154, 155, 213, 154, 155, 214, 154, 155, 215, 154, 155, 193, 154, 155, 216, 154, 155, 217, 154, 155, 218, 154, 155, 219, 154, 155, 220, 154, 155, 221, 154, 155, 222, 154, 155, 223, 154, 155, 224, 154, 155, 193, 154, 225, 0, 226, 0, 227, 0, 228, 0, 135, 0, 229, 0, 230, 0, 136, 0, 231, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 241, 240, 243, 242, 243, 244, 245, 246, 247, 245, 248, 249, 250, 251, 252, 253, 254, 244, 242, 243, 255, 242, 243, 256, 242, 243, 257, 242, 243, 258, 242, 243, 259, 242, 243, 260, 242, 243, 261, 242, 243, 262, 242, 243, 263, 242, 243, 264, 242, 243, 265, 242, 243, 266, 242, 243, 267, 242, 243, 268, 242, 243, 269, 242, 243, 270, 271, 272, 242, 243, 273, 242, 243, 274, 242, 243, 275, 242, 243, 276, 242, 243, 277, 242, 243, 278, 242, 243, 279, 242, 243, 280, 242, 243, 281, 242, 243, 282, 242, 243, 283, 242, 243, 284, 242, 243, 285, 242, 243, 286, 242, 243, 287, 242, 243, 269, 242, 243, 288, 242, 243, 289, 242, 243, 290, 242, 243, 291, 242, 243, 292, 242, 243, 293, 242, 243, 294, 242, 243, 295, 242, 243, 287, 242, 243, 296, 242, 243, 297, 242, 243, 296, 242, 243, 298, 242, 243, 299, 242, 243, 300, 242, 243, 301, 242, 243, 302, 242, 243, 303, 242, 243, 304, 242, 243, 305, 242, 243, 306, 242, 243, 307, 242, 243, 308, 242, 243, 309, 242, 243, 310, 242, 243, 287, 242, 243, 311, 242, 243, 312, 242, 243, 313, 242, 243, 314, 242, 243, 297, 242, 243, 315, 242, 243, 316, 242, 243, 296, 242, 243, 281, 317, 242, 243, 318, 242, 243, 296, 242, 319, 0, 136, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 332, 331, 334, 333, 334, 335, 336, 337, 336, 335, 333, 334, 338, 333, 334, 339, 333, 334, 340, 333, 334, 341, 333, 334, 342, 333, 334, 343, 333, 334, 344, 333, 334, 345, 333, 334, 346, 333, 334, 347, 333, 334, 348, 333, 334, 349, 333, 334, 350, 333, 334, 351, 333, 334, 352, 333, 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, 377, 378, 364, 0, 92, 379, 91, 92, 380, 91, 92, 381, 91, 92, 380, 91, 92, 382, 91, 92, 383, 91, 92, 384, 91, 92, 385, 91, 92, 386, 91, 92, 387, 91, 92, 388, 91, 92, 389, 91, 92, 390, 91, 92, 391, 91, 92, 392, 91, 92, 393, 91, 92, 394, 91, 92, 395, 91, 92, 118, 91, 92, 396, 91, 92, 397, 91, 92, 398, 91, 92, 399, 91, 92, 381, 91, 92, 400, 91, 92, 401, 91, 92, 380, 91, 92, 402, 403, 91, 92, 404, 91, 92, 405, 91, 92, 406, 91, 92, 407, 91, 92, 408, 91, 92, 395, 91, 92, 409, 91, 92, 380, 91, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 421, 420, 423, 422, 423, 424, 425, 426, 427, 425, 428, 429, 430, 431, 432, 433, 434, 424, 422, 423, 435, 422, 423, 436, 422, 423, 437, 422, 423, 438, 422, 423, 439, 422, 423, 440, 422, 423, 441, 422, 423, 442, 422, 423, 443, 422, 423, 444, 422, 423, 445, 422, 423, 446, 422, 423, 447, 422, 423, 448, 422, 423, 449, 422, 423, 450, 451, 422, 423, 452, 422, 423, 453, 422, 423, 454, 422, 423, 455, 422, 423, 456, 422, 423, 457, 422, 423, 458, 422, 423, 459, 422, 423, 460, 422, 423, 461, 422, 423, 462, 422, 423, 463, 422, 423, 464, 422, 423, 465, 422, 423, 466, 422, 423, 449, 422, 423, 467, 422, 423, 468, 422, 423, 467, 422, 423, 469, 422, 423, 470, 422, 423, 471, 422, 423, 472, 422, 423, 473, 422, 423, 474, 422, 423, 475, 422, 423, 476, 422, 423, 477, 422, 423, 478, 422, 423, 479, 422, 423, 480, 422, 423, 481, 422, 423, 466, 422, 423, 482, 422, 423, 483, 422, 423, 484, 422, 423, 485, 422, 423, 468, 422, 423, 486, 422, 423, 487, 422, 423, 467, 422, 423, 460, 488, 422, 423, 489, 422, 423, 467, 422, 136, 0, 490, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 392, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 318, 391, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 55, 56, 56, 4, 57, 71, 282, 284, 285, 286, 301, 306, 309, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 4, 72, 4, 4, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 74, 31, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 91, 92, 92, 4, 93, 107, 133, 116, 147, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 4, 108, 124, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 72, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 163, 164, 166, 245, 167, 168, 169, 170, 171, 172, 173, 174, 175, 174, 175, 175, 4, 176, 190, 191, 218, 219, 220, 234, 239, 242, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 4, 72, 192, 208, 217, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 209, 210, 211, 212, 213, 214, 215, 216, 190, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 235, 236, 237, 238, 240, 241, 243, 244, 246, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 259, 260, 260, 4, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 72, 276, 277, 278, 280, 281, 279, 277, 278, 279, 277, 280, 281, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 283, 71, 285, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, 307, 308, 310, 316, 311, 312, 313, 314, 315, 317, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 329, 330, 330, 4, 331, 345, 346, 364, 365, 366, 380, 385, 388, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 4, 72, 347, 363, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 345, 365, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 386, 387, 389, 390, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 392; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/nl.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 774 "lib/gherkin/lexer/nl.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/nl.rb.rl" # line 783 "lib/gherkin/lexer/nl.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/nl.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/nl.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/nl.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/nl.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/nl.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/nl.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/nl.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/nl.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/nl.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/nl.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/nl.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/nl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/nl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/nl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/nl.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/nl.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/nl.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/nl.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/nl.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/nl.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/nl.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/nl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/nl.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/nl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1027 "lib/gherkin/lexer/nl.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/nl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1066 "lib/gherkin/lexer/nl.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/nl.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/tl.rb0000644000004100000410000021167712244512574017561 0ustar www-datawww-data # line 1 "ragel/i18n/tl.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Tl #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/tl.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/tl.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 13, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 56, 57, 58, 60, 62, 67, 72, 77, 82, 86, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 112, 119, 124, 128, 134, 137, 139, 145, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 284, 286, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 623, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 866, 868, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1226, 1228, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1452, 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, 1534, 1536, 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1573, 1574 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -80, -123, -120, -119, -107, -105, -102, -88, -82, -72, -32, -80, -86, -32, -79, -115, -32, -80, -86, -32, -79, -127, -32, -80, -95, -32, -79, -127, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 32, -32, -80, -86, -32, -80, -80, -32, -80, -65, -32, -80, -72, -32, -79, -115, -32, -80, -91, -32, -80, -65, -32, -80, -92, -32, -80, -65, -32, -80, -78, -32, -79, -117, -32, -80, -90, -32, -80, -66, -32, -80, -71, -32, -80, -80, -32, -80, -93, -32, -80, -78, -32, -79, -127, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -80, 10, -105, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -80, -91, -66, -32, -80, -88, -32, -80, -126, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -80, 10, -123, -120, -107, -105, -102, -82, -72, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -95, 10, -32, 10, -79, 10, -127, 10, 10, 32, 10, 32, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -72, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -92, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -117, 10, -32, 10, -80, 10, -66, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, 10, 58, -32, 10, -79, 10, -122, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -84, 10, -32, 10, -80, 10, -95, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -90, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, -32, 10, -80, 10, -126, 10, 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, -32, -80, -88, -32, -80, -65, -32, -79, -127, -32, -80, -93, -32, -80, -82, -32, -79, -127, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -80, 10, -119, -107, -105, -88, -72, 10, -32, 10, -80, 10, -90, 10, -32, 10, -80, 10, -66, 10, -32, 10, -80, 10, -71, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -127, 10, 10, 58, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -126, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -91, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, 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, -32, -79, -122, -32, -80, -86, -32, -79, -115, -32, -80, -86, -32, -80, -84, -32, -80, -95, -32, -80, -65, -32, -80, -88, -32, -80, -90, -32, -79, -121, -32, -80, -86, -32, -80, -91, -32, -79, -115, -32, -80, -81, -32, -80, -126, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -80, 10, -123, -120, -107, -105, -102, -82, -72, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -95, 10, -32, 10, -79, 10, -127, 10, 10, 32, 10, 32, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -72, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -92, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -117, 10, -32, 10, -80, 10, -91, -66, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -126, 10, 10, 58, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, -32, 10, -79, 10, -122, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -84, 10, -32, 10, -80, 10, -95, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -90, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, 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, -32, -80, -80, -32, -80, -65, -32, -80, -81, -32, -80, -88, -32, -79, -115, -32, -80, -88, -32, -80, -65, -32, -80, -75, -32, -79, -121, -32, -80, -74, -32, -80, -126, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -80, 10, -123, -120, -107, -105, -102, -88, -82, -72, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -95, 10, -32, 10, -79, 10, -127, 10, 10, 32, 10, 32, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -72, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -92, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -117, 10, -32, 10, -80, 10, -91, -66, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -126, 10, 10, 58, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, -32, 10, -79, 10, -122, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -84, 10, -32, 10, -80, 10, -95, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -90, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -91, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 6, 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, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 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, 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, 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, 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, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 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, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 14, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 65, 68, 79, 81, 83, 86, 89, 94, 99, 104, 109, 113, 117, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 155, 162, 167, 171, 177, 181, 184, 190, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 380, 382, 384, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 414, 417, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 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, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 923, 926, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1308, 1311, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1489, 1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1779, 1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, 1823, 1825, 1827, 1829, 1831, 1833, 1835, 1837, 1839, 1841, 1843, 1845, 1847, 1849, 1858, 1861, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2375, 2377 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 41, 42, 40, 44, 45, 43, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 46, 0, 47, 0, 49, 50, 48, 52, 53, 51, 56, 55, 57, 55, 54, 60, 59, 61, 59, 58, 60, 59, 62, 59, 58, 60, 59, 63, 59, 58, 65, 64, 64, 0, 4, 66, 66, 0, 68, 69, 67, 4, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 0, 0, 0, 0, 84, 85, 86, 85, 85, 88, 87, 84, 4, 89, 9, 89, 0, 90, 91, 90, 0, 94, 93, 95, 96, 93, 92, 0, 98, 99, 97, 0, 98, 97, 94, 100, 98, 99, 100, 97, 101, 94, 102, 103, 104, 105, 106, 107, 108, 102, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 38, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 165, 164, 167, 166, 168, 167, 169, 170, 170, 169, 166, 171, 167, 166, 172, 167, 166, 173, 167, 166, 174, 167, 166, 175, 167, 166, 176, 167, 166, 177, 167, 166, 178, 167, 166, 179, 167, 166, 180, 167, 166, 181, 167, 166, 182, 167, 166, 183, 167, 166, 184, 167, 166, 167, 185, 166, 186, 188, 187, 189, 190, 191, 192, 193, 194, 187, 0, 195, 0, 196, 0, 197, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 207, 206, 209, 208, 210, 209, 211, 212, 213, 214, 212, 211, 208, 215, 209, 208, 216, 217, 218, 219, 220, 221, 222, 209, 208, 223, 209, 208, 224, 209, 208, 225, 209, 208, 226, 209, 208, 227, 209, 208, 228, 209, 208, 229, 209, 208, 230, 209, 208, 231, 209, 208, 232, 209, 208, 233, 209, 208, 234, 209, 208, 235, 209, 208, 236, 209, 208, 237, 209, 208, 238, 209, 208, 239, 209, 208, 240, 209, 208, 209, 241, 208, 209, 242, 208, 243, 209, 208, 244, 209, 208, 245, 209, 208, 246, 209, 208, 247, 209, 208, 248, 209, 208, 249, 209, 208, 250, 209, 208, 251, 209, 208, 252, 209, 208, 253, 209, 208, 254, 209, 208, 255, 209, 208, 256, 209, 208, 257, 209, 208, 258, 209, 208, 259, 209, 208, 260, 209, 208, 261, 209, 208, 262, 209, 208, 263, 209, 208, 264, 209, 208, 265, 209, 208, 266, 209, 208, 267, 209, 208, 268, 209, 208, 269, 209, 208, 270, 209, 208, 271, 209, 208, 272, 209, 208, 273, 209, 208, 274, 209, 208, 240, 209, 208, 275, 209, 208, 276, 209, 208, 277, 209, 208, 278, 209, 208, 279, 209, 208, 280, 209, 208, 281, 209, 208, 282, 209, 208, 240, 209, 208, 283, 209, 208, 284, 209, 208, 285, 209, 208, 286, 209, 208, 287, 209, 208, 288, 209, 208, 289, 209, 208, 290, 209, 208, 291, 209, 208, 292, 209, 208, 293, 209, 208, 294, 209, 208, 209, 241, 208, 295, 209, 208, 296, 209, 208, 297, 209, 208, 298, 209, 208, 299, 209, 208, 300, 209, 208, 301, 209, 208, 302, 209, 208, 303, 209, 208, 304, 209, 208, 305, 209, 208, 306, 209, 208, 307, 209, 208, 308, 209, 208, 309, 209, 208, 310, 209, 208, 311, 209, 208, 312, 209, 208, 313, 209, 208, 314, 209, 208, 315, 209, 208, 316, 209, 208, 317, 209, 208, 318, 209, 208, 319, 209, 208, 320, 209, 208, 280, 209, 208, 321, 209, 208, 322, 209, 208, 323, 209, 208, 324, 209, 208, 325, 209, 208, 326, 209, 208, 327, 209, 208, 328, 209, 208, 237, 209, 208, 329, 209, 208, 330, 209, 208, 331, 209, 208, 332, 209, 208, 333, 209, 208, 334, 209, 208, 335, 209, 208, 336, 209, 208, 337, 209, 208, 338, 209, 208, 339, 209, 208, 340, 209, 208, 341, 209, 208, 342, 209, 208, 343, 209, 208, 344, 209, 208, 345, 209, 208, 346, 209, 208, 347, 209, 208, 348, 209, 208, 349, 209, 208, 350, 209, 208, 351, 209, 208, 294, 209, 208, 209, 352, 208, 209, 353, 208, 209, 354, 208, 209, 355, 208, 209, 356, 208, 209, 357, 208, 209, 358, 208, 209, 359, 208, 209, 360, 208, 209, 361, 208, 209, 362, 208, 209, 363, 208, 209, 364, 208, 209, 365, 208, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 38, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 385, 384, 387, 386, 388, 387, 389, 390, 391, 390, 389, 386, 392, 387, 386, 393, 394, 395, 396, 397, 387, 386, 398, 387, 386, 399, 387, 386, 400, 387, 386, 401, 387, 386, 402, 387, 386, 403, 387, 386, 404, 387, 386, 405, 387, 386, 406, 387, 386, 407, 387, 386, 408, 387, 386, 409, 387, 386, 410, 387, 386, 411, 387, 386, 412, 387, 386, 413, 387, 386, 414, 387, 386, 415, 387, 386, 416, 387, 386, 417, 387, 386, 418, 387, 386, 387, 419, 386, 420, 387, 386, 421, 387, 386, 422, 387, 386, 423, 387, 386, 424, 387, 386, 425, 387, 386, 426, 387, 386, 427, 387, 386, 418, 387, 386, 428, 387, 386, 429, 387, 386, 430, 387, 386, 431, 387, 386, 432, 387, 386, 433, 387, 386, 434, 387, 386, 435, 387, 386, 415, 387, 386, 436, 387, 386, 437, 387, 386, 438, 387, 386, 439, 387, 386, 440, 387, 386, 441, 387, 386, 442, 387, 386, 443, 387, 386, 444, 387, 386, 445, 387, 386, 446, 387, 386, 447, 387, 386, 448, 387, 386, 449, 387, 386, 425, 387, 386, 450, 387, 386, 451, 387, 386, 452, 387, 386, 453, 387, 386, 454, 387, 386, 455, 387, 386, 456, 387, 386, 457, 387, 386, 458, 387, 386, 459, 387, 386, 460, 387, 386, 461, 387, 386, 462, 387, 386, 463, 387, 386, 464, 387, 386, 465, 387, 386, 466, 387, 386, 467, 387, 386, 468, 387, 386, 469, 387, 386, 425, 387, 386, 387, 470, 386, 387, 471, 386, 387, 472, 386, 387, 473, 386, 387, 474, 386, 387, 475, 386, 387, 476, 386, 387, 477, 386, 387, 478, 386, 387, 479, 386, 387, 480, 386, 387, 481, 386, 387, 482, 386, 387, 483, 386, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 368, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 530, 529, 532, 531, 533, 532, 534, 535, 536, 537, 535, 534, 531, 538, 532, 531, 539, 540, 541, 542, 543, 544, 545, 532, 531, 546, 532, 531, 547, 532, 531, 548, 532, 531, 549, 532, 531, 550, 532, 531, 551, 532, 531, 552, 532, 531, 553, 532, 531, 554, 532, 531, 555, 532, 531, 556, 532, 531, 557, 532, 531, 558, 532, 531, 559, 532, 531, 560, 532, 531, 561, 532, 531, 562, 532, 531, 563, 532, 531, 532, 564, 531, 532, 565, 531, 566, 532, 531, 567, 532, 531, 568, 532, 531, 569, 532, 531, 570, 532, 531, 571, 532, 531, 572, 532, 531, 573, 532, 531, 574, 532, 531, 575, 532, 531, 576, 532, 531, 577, 532, 531, 578, 532, 531, 579, 532, 531, 580, 532, 531, 581, 532, 531, 582, 532, 531, 583, 532, 531, 584, 532, 531, 585, 532, 531, 586, 532, 531, 587, 532, 531, 588, 532, 531, 589, 532, 531, 590, 532, 531, 591, 532, 531, 592, 532, 531, 593, 532, 531, 594, 532, 531, 595, 532, 531, 596, 532, 531, 597, 532, 531, 563, 532, 531, 598, 532, 531, 599, 532, 531, 600, 601, 532, 531, 602, 532, 531, 603, 532, 531, 604, 532, 531, 605, 532, 531, 606, 532, 531, 607, 532, 531, 532, 564, 531, 608, 532, 531, 609, 532, 531, 610, 532, 531, 611, 532, 531, 612, 532, 531, 563, 532, 531, 613, 532, 531, 614, 532, 531, 615, 532, 531, 616, 532, 531, 617, 532, 531, 618, 532, 531, 619, 532, 531, 620, 532, 531, 621, 532, 531, 622, 532, 531, 623, 532, 531, 607, 532, 531, 624, 532, 531, 625, 532, 531, 626, 532, 531, 627, 532, 531, 628, 532, 531, 629, 532, 531, 630, 532, 531, 631, 532, 531, 632, 532, 531, 633, 532, 531, 634, 532, 531, 635, 532, 531, 636, 532, 531, 637, 532, 531, 638, 532, 531, 639, 532, 531, 640, 532, 531, 641, 532, 531, 642, 532, 531, 643, 532, 531, 644, 532, 531, 645, 532, 531, 646, 532, 531, 647, 532, 531, 648, 532, 531, 649, 532, 531, 610, 532, 531, 650, 532, 531, 651, 532, 531, 652, 532, 531, 653, 532, 531, 654, 532, 531, 655, 532, 531, 656, 532, 531, 657, 532, 531, 560, 532, 531, 658, 532, 531, 659, 532, 531, 660, 532, 531, 661, 532, 531, 662, 532, 531, 663, 532, 531, 664, 532, 531, 665, 532, 531, 666, 532, 531, 667, 532, 531, 668, 532, 531, 669, 532, 531, 670, 532, 531, 671, 532, 531, 672, 532, 531, 673, 532, 531, 674, 532, 531, 675, 532, 531, 676, 532, 531, 677, 532, 531, 604, 532, 531, 532, 678, 531, 532, 679, 531, 532, 680, 531, 532, 681, 531, 532, 682, 531, 532, 683, 531, 532, 684, 531, 532, 685, 531, 532, 686, 531, 532, 687, 531, 532, 688, 531, 532, 689, 531, 532, 690, 531, 532, 691, 531, 692, 0, 693, 0, 694, 0, 695, 0, 696, 0, 697, 0, 698, 0, 699, 0, 35, 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 721, 0, 722, 0, 723, 0, 724, 0, 726, 725, 728, 727, 729, 728, 730, 731, 732, 733, 731, 730, 727, 734, 728, 727, 735, 736, 737, 738, 739, 740, 741, 742, 728, 727, 743, 728, 727, 744, 728, 727, 745, 728, 727, 746, 728, 727, 747, 728, 727, 748, 728, 727, 749, 728, 727, 750, 728, 727, 751, 728, 727, 752, 728, 727, 753, 728, 727, 754, 728, 727, 755, 728, 727, 756, 728, 727, 757, 728, 727, 758, 728, 727, 759, 728, 727, 760, 728, 727, 728, 761, 727, 728, 762, 727, 763, 728, 727, 764, 728, 727, 765, 728, 727, 766, 728, 727, 767, 728, 727, 768, 728, 727, 769, 728, 727, 770, 728, 727, 771, 728, 727, 772, 728, 727, 773, 728, 727, 774, 728, 727, 775, 728, 727, 776, 728, 727, 777, 728, 727, 778, 728, 727, 779, 728, 727, 780, 728, 727, 781, 728, 727, 782, 728, 727, 783, 728, 727, 784, 728, 727, 785, 728, 727, 786, 728, 727, 787, 728, 727, 788, 728, 727, 789, 728, 727, 790, 728, 727, 791, 728, 727, 792, 728, 727, 793, 728, 727, 794, 728, 727, 760, 728, 727, 795, 728, 727, 796, 728, 727, 797, 798, 728, 727, 799, 728, 727, 800, 728, 727, 801, 728, 727, 802, 728, 727, 803, 728, 727, 804, 728, 727, 728, 761, 727, 805, 728, 727, 806, 728, 727, 807, 728, 727, 808, 728, 727, 809, 728, 727, 760, 728, 727, 810, 728, 727, 811, 728, 727, 812, 728, 727, 813, 728, 727, 814, 728, 727, 815, 728, 727, 816, 728, 727, 817, 728, 727, 818, 728, 727, 819, 728, 727, 820, 728, 727, 804, 728, 727, 821, 728, 727, 822, 728, 727, 823, 728, 727, 824, 728, 727, 825, 728, 727, 826, 728, 727, 827, 728, 727, 828, 728, 727, 829, 728, 727, 830, 728, 727, 831, 728, 727, 832, 728, 727, 833, 728, 727, 834, 728, 727, 835, 728, 727, 836, 728, 727, 837, 728, 727, 838, 728, 727, 839, 728, 727, 840, 728, 727, 841, 728, 727, 842, 728, 727, 843, 728, 727, 844, 728, 727, 845, 728, 727, 846, 728, 727, 807, 728, 727, 847, 728, 727, 848, 728, 727, 849, 728, 727, 850, 728, 727, 851, 728, 727, 852, 728, 727, 853, 728, 727, 854, 728, 727, 855, 728, 727, 856, 728, 727, 857, 728, 727, 858, 728, 727, 859, 728, 727, 860, 728, 727, 801, 728, 727, 861, 728, 727, 862, 728, 727, 863, 728, 727, 864, 728, 727, 865, 728, 727, 866, 728, 727, 867, 728, 727, 868, 728, 727, 757, 728, 727, 869, 728, 727, 870, 728, 727, 871, 728, 727, 872, 728, 727, 873, 728, 727, 874, 728, 727, 875, 728, 727, 876, 728, 727, 877, 728, 727, 878, 728, 727, 879, 728, 727, 880, 728, 727, 881, 728, 727, 882, 728, 727, 883, 728, 727, 884, 728, 727, 885, 728, 727, 886, 728, 727, 887, 728, 727, 888, 728, 727, 801, 728, 727, 728, 889, 727, 728, 890, 727, 728, 891, 727, 728, 892, 727, 728, 893, 727, 728, 894, 727, 728, 895, 727, 728, 896, 727, 728, 897, 727, 728, 898, 727, 728, 899, 727, 728, 900, 727, 728, 901, 727, 728, 902, 727, 903, 0, 3, 0, 904, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 823, 25, 25, 26, 36, 38, 22, 52, 55, 3, 4, 61, 95, 136, 306, 414, 441, 617, 626, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 37, 24, 25, 37, 27, 28, 29, 30, 29, 29, 30, 29, 31, 31, 31, 32, 31, 31, 31, 32, 33, 34, 35, 25, 35, 36, 25, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 825, 53, 54, 25, 53, 52, 54, 55, 56, 57, 59, 60, 58, 56, 57, 58, 56, 59, 2, 60, 26, 36, 38, 22, 52, 55, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 118, 119, 120, 119, 25, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 2, 25, 25, 26, 36, 38, 22, 52, 55, 137, 138, 139, 300, 140, 141, 142, 143, 144, 145, 146, 147, 148, 147, 148, 149, 148, 25, 286, 169, 150, 151, 170, 204, 213, 226, 253, 262, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 135, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 205, 206, 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 25, 301, 302, 303, 304, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 320, 321, 322, 321, 25, 400, 323, 324, 346, 355, 364, 379, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 135, 347, 348, 349, 350, 351, 352, 353, 354, 356, 357, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 25, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 461, 462, 463, 462, 25, 603, 483, 464, 465, 484, 518, 534, 546, 573, 582, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 135, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 519, 520, 521, 528, 522, 523, 524, 525, 526, 527, 529, 530, 531, 532, 533, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 574, 575, 576, 577, 578, 579, 580, 581, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 25, 618, 619, 620, 621, 622, 623, 624, 625, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 652, 653, 654, 653, 25, 809, 674, 655, 656, 675, 709, 725, 737, 764, 779, 788, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 135, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 710, 711, 712, 719, 713, 714, 715, 716, 717, 718, 720, 721, 722, 723, 724, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 780, 781, 782, 783, 784, 785, 786, 787, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 25, 824, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 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, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 78, 33, 84, 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, 19, 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, 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, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 69, 33, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 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, 15, 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, 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, 15, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 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, 17, 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, 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, 17, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 825; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/tl.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1385 "lib/gherkin/lexer/tl.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/tl.rb.rl" # line 1394 "lib/gherkin/lexer/tl.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/tl.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/tl.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/tl.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/tl.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/tl.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/tl.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/tl.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/tl.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/tl.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/tl.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/tl.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/tl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/tl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/tl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/tl.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/tl.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/tl.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/tl.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/tl.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/tl.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/tl.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/tl.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/tl.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/tl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1638 "lib/gherkin/lexer/tl.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/tl.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1677 "lib/gherkin/lexer/tl.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/tl.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/el.rb0000644000004100000410000020125612244512574017532 0ustar www-datawww-data # line 1 "ragel/i18n/el.rb.rl" require 'gherkin/native' module Gherkin module Lexer class El #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/el.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/el.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 99, 106, 111, 115, 121, 124, 126, 132, 143, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 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, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 514, 517, 519, 521, 523, 525, 527, 529, 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, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 630, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 850, 851, 852, 853, 862, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1193, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1468, 1469 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -50, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -116, -111, -108, -102, -101, -96, -93, -92, -91, -49, -124, -50, -79, -50, -67, 32, 10, 13, 10, 13, -50, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -50, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -50, -69, -50, -69, -50, -84, -50, -49, -75, -50, -76, -50, -65, -50, -68, -50, -83, -50, -67, -50, -65, -49, -123, -123, -50, -67, -50, -79, -49, -124, -49, -116, -49, -124, -50, -73, -49, -124, -50, -79, 58, 10, 10, -50, 10, 32, 35, 37, 64, 9, 13, -108, -101, -96, -93, -91, 10, -49, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -79, -75, 10, -49, 10, -127, 10, -50, 10, -79, 10, -50, 10, -76, 10, -50, 10, -75, 10, -50, 10, -81, 10, -50, 10, -77, 10, -50, 10, -68, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -77, 10, -49, 10, -127, 10, -50, 10, -79, 10, -49, 10, -122, 10, -50, 10, -82, 10, 10, 32, -50, 10, -93, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -81, 10, -50, 10, -65, 10, -49, 10, -123, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -79, -65, 10, -49, 10, -128, 10, -49, 10, -116, 10, -50, 10, -78, 10, -50, 10, -79, 10, -50, 10, -72, 10, -49, 10, -127, 10, -50, 10, -65, 10, 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, -50, -79, -50, -71, -50, -75, -50, -71, -49, -124, -50, -65, -49, -123, -49, -127, -50, -77, -50, -81, -50, -79, -75, -49, -127, -50, -79, -50, -76, -50, -75, -50, -81, -50, -77, -50, -68, -50, -79, -49, -124, -50, -79, 58, 10, 10, -50, 10, 32, 35, 124, 9, 13, -108, -101, 10, -49, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -49, -127, -50, -71, -50, -77, -49, -127, -50, -79, -49, -122, -50, -82, 32, -50, -93, -50, -75, -50, -67, -50, -79, -49, -127, -50, -81, -50, -65, -49, -123, 58, 10, 10, -50, 10, 32, 35, 37, 42, 64, 9, 13, -116, -111, -108, -102, -101, -93, -92, 10, -49, 10, -124, 10, -50, 10, -79, 10, -50, 10, -67, 10, 10, 32, -50, 10, -69, 10, -50, 10, -69, 10, -50, 10, -84, 10, -50, -49, 10, -75, 10, -50, 10, -76, 10, -50, 10, -65, 10, -50, 10, -68, 10, -50, 10, -83, 10, -50, 10, -67, 10, -50, 10, -65, 10, -49, 10, -123, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -79, 10, -50, 10, -71, 10, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -65, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -75, 10, 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, -50, -75, -50, -67, -50, -84, -49, -127, -50, -71, -50, -79, -65, 58, 10, 10, -50, 10, 32, 35, 37, 42, 64, 9, 13, -116, -111, -108, -102, -101, -96, -93, -92, -91, 10, -49, 10, -124, 10, -50, 10, -79, 10, -50, 10, -67, 10, 10, 32, -50, 10, -69, 10, -50, 10, -69, 10, -50, 10, -84, 10, -50, -49, 10, -75, 10, -50, 10, -76, 10, -50, 10, -65, 10, -50, 10, -68, 10, -50, 10, -83, 10, -50, 10, -67, 10, -50, 10, -65, 10, -49, 10, -123, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -79, 10, -50, 10, -71, 10, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -75, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -77, 10, -49, 10, -127, 10, -50, 10, -79, 10, -49, 10, -122, 10, -50, 10, -82, 10, 10, 32, -50, 10, -93, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -81, 10, -50, 10, -65, 10, -49, 10, -123, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -65, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -75, 10, -49, 10, -128, 10, -49, 10, -116, 10, -50, 10, -78, 10, -50, 10, -79, 10, -50, 10, -72, 10, -49, 10, -127, 10, 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, -49, -116, -49, -124, -50, -75, -49, -128, -49, -116, -50, -78, -50, -79, -50, -72, -49, -127, -50, -65, 58, 10, 10, -50, 10, 32, 35, 37, 42, 64, 9, 13, -116, -111, -108, -102, -101, -96, -93, -92, 10, -49, 10, -124, 10, -50, 10, -79, 10, -50, 10, -67, 10, 10, 32, -50, 10, -69, 10, -50, 10, -69, 10, -50, 10, -84, 10, -50, -49, 10, -75, 10, -50, 10, -76, 10, -50, 10, -65, 10, -50, 10, -68, 10, -50, 10, -83, 10, -50, 10, -67, 10, -50, 10, -65, 10, -49, 10, -123, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -79, 10, -50, 10, -71, 10, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -75, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -77, 10, -49, 10, -127, 10, -50, 10, -79, 10, -49, 10, -122, 10, -50, 10, -82, 10, 10, 32, -50, 10, -93, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -81, 10, -50, 10, -65, 10, -49, 10, -123, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -65, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -75, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 9, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 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, 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, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 7, 10, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 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, 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, 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, 2, 2, 2, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 22, 24, 26, 28, 30, 32, 34, 36, 39, 42, 53, 55, 57, 60, 63, 68, 73, 78, 83, 87, 91, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 129, 136, 141, 145, 151, 155, 158, 164, 175, 177, 179, 181, 183, 185, 187, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 268, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 758, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 944, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1276, 1278, 1280, 1282, 1291, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489, 1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1737, 1739, 1741, 1743, 1745, 1747, 1749, 1751, 1753, 1755, 1757, 1759, 1761, 1763, 1765, 1767, 1769, 1771, 1773, 1775, 1777, 1779, 1781, 1790, 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 1839, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1984, 1987, 1990, 1993, 1996, 1999, 2002, 2005, 2008, 2011, 2014, 2017, 2020, 2023, 2026, 2029, 2032, 2035, 2038, 2041, 2044, 2047, 2050, 2053, 2056, 2059, 2062, 2065, 2068, 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092, 2095, 2098, 2101, 2104, 2107, 2110, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2161, 2164, 2167, 2170, 2173, 2176, 2179, 2182, 2185, 2188, 2191, 2194, 2197, 2199, 2201 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 28, 29, 27, 31, 32, 30, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 33, 0, 34, 0, 36, 37, 35, 39, 40, 38, 43, 42, 44, 42, 41, 47, 46, 48, 46, 45, 47, 46, 49, 46, 45, 47, 46, 50, 46, 45, 52, 51, 51, 0, 4, 53, 53, 0, 55, 56, 54, 4, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 0, 0, 0, 0, 71, 72, 73, 72, 72, 75, 74, 71, 4, 76, 9, 76, 0, 77, 78, 77, 0, 81, 80, 82, 83, 80, 79, 0, 85, 86, 84, 0, 85, 84, 81, 87, 85, 86, 87, 84, 88, 81, 89, 90, 91, 92, 93, 94, 95, 89, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 25, 0, 101, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 25, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 136, 135, 138, 137, 139, 138, 140, 141, 142, 141, 140, 137, 143, 144, 145, 146, 147, 138, 137, 148, 138, 137, 149, 138, 137, 150, 138, 137, 151, 138, 137, 152, 138, 137, 153, 138, 137, 154, 138, 137, 155, 138, 137, 156, 138, 137, 157, 138, 137, 158, 138, 137, 159, 138, 137, 160, 138, 137, 161, 138, 137, 162, 138, 137, 163, 138, 137, 164, 138, 137, 165, 138, 137, 138, 166, 137, 167, 169, 168, 170, 171, 172, 173, 174, 175, 168, 0, 176, 138, 137, 177, 138, 137, 178, 138, 137, 179, 138, 137, 180, 138, 137, 181, 138, 137, 182, 138, 137, 183, 138, 137, 184, 138, 137, 185, 138, 137, 186, 138, 137, 187, 138, 137, 188, 138, 137, 189, 138, 137, 190, 138, 137, 163, 138, 137, 191, 138, 137, 192, 193, 138, 137, 194, 138, 137, 195, 138, 137, 196, 138, 137, 197, 138, 137, 198, 138, 137, 199, 138, 137, 200, 138, 137, 201, 138, 137, 202, 138, 137, 203, 138, 137, 204, 138, 137, 205, 138, 137, 206, 138, 137, 207, 138, 137, 208, 138, 137, 161, 138, 137, 209, 138, 137, 210, 138, 137, 211, 138, 137, 212, 138, 137, 213, 138, 137, 214, 138, 137, 215, 138, 137, 216, 138, 137, 217, 138, 137, 218, 138, 137, 219, 138, 137, 220, 138, 137, 221, 138, 137, 222, 138, 137, 138, 223, 137, 224, 138, 137, 225, 138, 137, 226, 138, 137, 227, 138, 137, 228, 138, 137, 229, 138, 137, 230, 138, 137, 231, 138, 137, 232, 138, 137, 233, 138, 137, 234, 138, 137, 235, 138, 137, 236, 138, 137, 237, 138, 137, 238, 138, 137, 165, 138, 137, 239, 138, 137, 240, 138, 137, 241, 138, 137, 242, 138, 137, 243, 138, 137, 244, 138, 137, 245, 138, 137, 246, 138, 137, 247, 138, 137, 248, 138, 137, 249, 138, 137, 165, 165, 138, 137, 250, 138, 137, 251, 138, 137, 252, 138, 137, 253, 138, 137, 254, 138, 137, 255, 138, 137, 256, 138, 137, 257, 138, 137, 258, 138, 137, 259, 138, 137, 260, 138, 137, 261, 138, 137, 262, 138, 137, 165, 138, 137, 138, 263, 137, 138, 264, 137, 138, 265, 137, 138, 266, 137, 138, 267, 137, 138, 268, 137, 138, 269, 137, 138, 270, 137, 138, 271, 137, 138, 272, 137, 138, 273, 137, 138, 274, 137, 138, 275, 137, 138, 276, 137, 277, 0, 278, 0, 279, 0, 25, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 131, 0, 295, 0, 296, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 320, 319, 322, 321, 323, 322, 324, 325, 325, 324, 321, 326, 327, 322, 321, 328, 322, 321, 329, 322, 321, 330, 322, 321, 331, 322, 321, 332, 322, 321, 333, 322, 321, 334, 322, 321, 335, 322, 321, 336, 322, 321, 337, 322, 321, 338, 322, 321, 339, 322, 321, 340, 322, 321, 341, 322, 321, 342, 322, 321, 343, 322, 321, 344, 322, 321, 345, 322, 321, 322, 346, 321, 347, 322, 321, 348, 322, 321, 349, 322, 321, 350, 322, 321, 351, 322, 321, 352, 322, 321, 353, 322, 321, 354, 322, 321, 355, 322, 321, 356, 322, 321, 357, 322, 321, 358, 322, 321, 359, 322, 321, 360, 322, 321, 361, 322, 321, 343, 322, 321, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 395, 394, 397, 396, 398, 397, 399, 400, 401, 402, 400, 399, 396, 403, 404, 405, 406, 407, 408, 409, 397, 396, 410, 397, 396, 411, 397, 396, 412, 397, 396, 413, 397, 396, 414, 397, 396, 415, 397, 396, 397, 416, 396, 417, 397, 396, 418, 397, 396, 419, 397, 396, 420, 397, 396, 421, 397, 396, 415, 397, 396, 422, 423, 397, 396, 424, 397, 396, 425, 397, 396, 426, 397, 396, 427, 397, 396, 428, 397, 396, 429, 397, 396, 430, 397, 396, 431, 397, 396, 432, 397, 396, 433, 397, 396, 434, 397, 396, 435, 397, 396, 436, 397, 396, 437, 397, 396, 415, 397, 396, 438, 397, 396, 439, 397, 396, 440, 397, 396, 441, 397, 396, 442, 397, 396, 443, 397, 396, 444, 397, 396, 445, 397, 396, 446, 397, 396, 447, 397, 396, 448, 397, 396, 449, 397, 396, 450, 397, 396, 451, 397, 396, 452, 397, 396, 453, 397, 396, 454, 397, 396, 397, 416, 396, 455, 397, 396, 456, 397, 396, 457, 397, 396, 415, 397, 396, 458, 397, 396, 459, 397, 396, 460, 397, 396, 461, 397, 396, 462, 397, 396, 463, 397, 396, 464, 397, 396, 465, 397, 396, 466, 397, 396, 467, 397, 396, 468, 397, 396, 469, 397, 396, 470, 397, 396, 471, 397, 396, 472, 397, 396, 452, 397, 396, 473, 397, 396, 474, 397, 396, 475, 397, 396, 476, 397, 396, 477, 397, 396, 478, 397, 396, 479, 397, 396, 480, 397, 396, 481, 397, 396, 482, 397, 396, 483, 397, 396, 454, 397, 396, 484, 397, 396, 485, 397, 396, 486, 397, 396, 487, 397, 396, 488, 397, 396, 415, 397, 396, 397, 489, 396, 397, 490, 396, 397, 491, 396, 397, 492, 396, 397, 493, 396, 397, 494, 396, 397, 495, 396, 397, 496, 396, 397, 497, 396, 397, 498, 396, 397, 499, 396, 397, 500, 396, 397, 501, 396, 397, 502, 396, 503, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 317, 514, 0, 515, 0, 517, 516, 519, 518, 520, 519, 521, 522, 523, 524, 522, 521, 518, 525, 526, 527, 528, 529, 530, 531, 532, 533, 519, 518, 534, 519, 518, 535, 519, 518, 536, 519, 518, 537, 519, 518, 538, 519, 518, 539, 519, 518, 519, 540, 518, 541, 519, 518, 542, 519, 518, 543, 519, 518, 544, 519, 518, 545, 519, 518, 539, 519, 518, 546, 547, 519, 518, 548, 519, 518, 549, 519, 518, 550, 519, 518, 551, 519, 518, 552, 519, 518, 553, 519, 518, 554, 519, 518, 555, 519, 518, 556, 519, 518, 557, 519, 518, 558, 519, 518, 559, 519, 518, 560, 519, 518, 561, 519, 518, 539, 519, 518, 562, 519, 518, 563, 519, 518, 564, 519, 518, 565, 519, 518, 566, 519, 518, 567, 519, 518, 568, 519, 518, 569, 519, 518, 570, 519, 518, 571, 519, 518, 572, 519, 518, 573, 519, 518, 574, 519, 518, 575, 519, 518, 576, 519, 518, 577, 519, 518, 578, 519, 518, 519, 540, 518, 579, 519, 518, 580, 519, 518, 581, 519, 518, 539, 519, 518, 582, 519, 518, 583, 519, 518, 584, 519, 518, 585, 519, 518, 586, 519, 518, 587, 519, 518, 588, 519, 518, 589, 519, 518, 590, 519, 518, 591, 519, 518, 592, 519, 518, 593, 519, 518, 594, 519, 518, 595, 519, 518, 596, 519, 518, 576, 519, 518, 597, 519, 518, 598, 519, 518, 599, 519, 518, 600, 519, 518, 601, 519, 518, 602, 519, 518, 603, 519, 518, 604, 519, 518, 605, 519, 518, 606, 519, 518, 607, 519, 518, 608, 519, 518, 609, 519, 518, 610, 519, 518, 611, 519, 518, 612, 519, 518, 519, 613, 518, 614, 519, 518, 615, 519, 518, 616, 519, 518, 617, 519, 518, 618, 519, 518, 619, 519, 518, 620, 519, 518, 621, 519, 518, 622, 519, 518, 623, 519, 518, 624, 519, 518, 625, 519, 518, 626, 519, 518, 627, 519, 518, 628, 519, 518, 578, 519, 518, 629, 519, 518, 630, 519, 518, 631, 519, 518, 632, 519, 518, 633, 519, 518, 634, 519, 518, 635, 519, 518, 636, 519, 518, 637, 519, 518, 638, 519, 518, 639, 519, 518, 578, 519, 518, 640, 519, 518, 641, 519, 518, 642, 519, 518, 643, 519, 518, 644, 519, 518, 539, 519, 518, 645, 519, 518, 646, 519, 518, 647, 519, 518, 648, 519, 518, 649, 519, 518, 650, 519, 518, 651, 519, 518, 652, 519, 518, 653, 519, 518, 654, 519, 518, 655, 519, 518, 638, 519, 518, 519, 656, 518, 519, 657, 518, 519, 658, 518, 519, 659, 518, 519, 660, 518, 519, 661, 518, 519, 662, 518, 519, 663, 518, 519, 664, 518, 519, 665, 518, 519, 666, 518, 519, 667, 518, 519, 668, 518, 519, 669, 518, 670, 0, 671, 0, 672, 0, 673, 0, 674, 0, 25, 0, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 680, 0, 681, 0, 682, 0, 683, 0, 684, 0, 685, 0, 686, 0, 687, 0, 688, 0, 689, 0, 691, 690, 693, 692, 694, 693, 695, 696, 697, 698, 696, 695, 692, 699, 700, 701, 702, 703, 704, 705, 706, 693, 692, 707, 693, 692, 708, 693, 692, 709, 693, 692, 710, 693, 692, 711, 693, 692, 712, 693, 692, 693, 713, 692, 714, 693, 692, 715, 693, 692, 716, 693, 692, 717, 693, 692, 718, 693, 692, 712, 693, 692, 719, 720, 693, 692, 721, 693, 692, 722, 693, 692, 723, 693, 692, 724, 693, 692, 725, 693, 692, 726, 693, 692, 727, 693, 692, 728, 693, 692, 729, 693, 692, 730, 693, 692, 731, 693, 692, 732, 693, 692, 733, 693, 692, 734, 693, 692, 712, 693, 692, 735, 693, 692, 736, 693, 692, 737, 693, 692, 738, 693, 692, 739, 693, 692, 740, 693, 692, 741, 693, 692, 742, 693, 692, 743, 693, 692, 744, 693, 692, 745, 693, 692, 746, 693, 692, 747, 693, 692, 748, 693, 692, 749, 693, 692, 750, 693, 692, 751, 693, 692, 693, 713, 692, 752, 693, 692, 753, 693, 692, 754, 693, 692, 712, 693, 692, 755, 693, 692, 756, 693, 692, 757, 693, 692, 758, 693, 692, 759, 693, 692, 760, 693, 692, 761, 693, 692, 762, 693, 692, 763, 693, 692, 764, 693, 692, 765, 693, 692, 766, 693, 692, 767, 693, 692, 768, 693, 692, 769, 693, 692, 749, 693, 692, 770, 693, 692, 771, 693, 692, 772, 693, 692, 773, 693, 692, 774, 693, 692, 775, 693, 692, 776, 693, 692, 777, 693, 692, 778, 693, 692, 779, 693, 692, 780, 693, 692, 781, 693, 692, 782, 693, 692, 783, 693, 692, 784, 693, 692, 785, 693, 692, 693, 786, 692, 787, 693, 692, 788, 693, 692, 789, 693, 692, 790, 693, 692, 791, 693, 692, 792, 693, 692, 793, 693, 692, 794, 693, 692, 795, 693, 692, 796, 693, 692, 797, 693, 692, 798, 693, 692, 799, 693, 692, 800, 693, 692, 801, 693, 692, 751, 693, 692, 802, 693, 692, 803, 693, 692, 804, 693, 692, 805, 693, 692, 806, 693, 692, 807, 693, 692, 808, 693, 692, 809, 693, 692, 810, 693, 692, 811, 693, 692, 812, 693, 692, 751, 693, 692, 813, 693, 692, 814, 693, 692, 815, 693, 692, 816, 693, 692, 817, 693, 692, 712, 693, 692, 693, 818, 692, 693, 819, 692, 693, 820, 692, 693, 821, 692, 693, 822, 692, 693, 823, 692, 693, 824, 692, 693, 825, 692, 693, 826, 692, 693, 827, 692, 693, 828, 692, 693, 829, 692, 693, 830, 692, 693, 831, 692, 832, 0, 3, 0, 833, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 752, 12, 12, 13, 23, 25, 9, 39, 42, 3, 48, 54, 217, 221, 237, 434, 595, 601, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 11, 12, 24, 14, 15, 16, 17, 16, 16, 17, 16, 18, 18, 18, 19, 18, 18, 18, 19, 20, 21, 22, 12, 22, 23, 12, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 754, 40, 41, 12, 40, 39, 41, 42, 43, 44, 46, 47, 45, 43, 44, 45, 43, 46, 2, 47, 13, 23, 25, 9, 39, 42, 49, 50, 51, 52, 53, 55, 70, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 89, 90, 91, 90, 12, 203, 92, 112, 128, 177, 189, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 2, 12, 12, 13, 23, 25, 9, 39, 42, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 146, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 12, 218, 219, 220, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 238, 239, 299, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 261, 262, 263, 262, 12, 264, 283, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 111, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 332, 333, 334, 333, 12, 420, 341, 335, 342, 348, 382, 386, 402, 414, 336, 337, 338, 339, 340, 341, 111, 343, 344, 345, 346, 347, 349, 364, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 383, 384, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 12, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 448, 449, 450, 449, 12, 581, 457, 451, 458, 464, 498, 502, 518, 551, 563, 569, 452, 453, 454, 455, 456, 457, 111, 459, 460, 461, 462, 463, 465, 480, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 499, 500, 501, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 564, 565, 566, 567, 568, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 12, 596, 597, 598, 599, 600, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 617, 618, 619, 618, 12, 738, 626, 620, 627, 633, 667, 671, 687, 720, 732, 621, 622, 623, 624, 625, 626, 111, 628, 629, 630, 631, 632, 634, 649, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 668, 669, 670, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 735, 736, 737, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 12, 753, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 57, 144, 0, 54, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 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, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 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, 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, 15, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 754; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/el.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1287 "lib/gherkin/lexer/el.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/el.rb.rl" # line 1296 "lib/gherkin/lexer/el.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/el.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/el.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/el.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/el.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/el.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/el.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/el.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/el.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/el.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/el.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/el.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/el.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/el.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/el.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/el.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/el.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/el.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/el.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/el.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/el.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/el.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/el.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/el.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/el.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1540 "lib/gherkin/lexer/el.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/el.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1579 "lib/gherkin/lexer/el.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/el.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/da.rb0000644000004100000410000011544412244512574017521 0ustar www-datawww-data # line 1 "ragel/i18n/da.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Da #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/da.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/da.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 319, 321, 323, 325, 327, 329, 331, 333, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 491, 493, 495, 497, 499, 501, 503, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 660, 662, 664, 666, 668, 670, 672, 674, 678, 684, 687, 689, 695, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 752, 754, 756, 758, 760, 762, 764, 766 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 115, 116, 114, 97, 107, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 71, 77, 78, 79, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 97, 103, 103, 114, 117, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 103, 107, 101, 110, 115, 107, 97, 98, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 69, 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, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 103, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 107, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 115, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 114, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 115, 101, 109, 112, 108, 101, 114, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 58, 105, 118, 101, 116, 101, 110, -61, -91, 114, 103, -61, 99, -91, 101, 110, 97, 114, 105, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 103, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 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, 71, 77, 78, 79, 83, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 58, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 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, 3, 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, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 16, 2, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 287, 290, 293, 296, 299, 302, 305, 308, 311, 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, 438, 441, 444, 447, 450, 453, 456, 459, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 696, 699, 702, 705, 708, 711, 714, 717, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 951, 954, 957, 960, 963, 966, 969, 972, 976, 982, 986, 989, 995, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 88, 87, 90, 89, 90, 91, 92, 93, 94, 92, 95, 96, 97, 98, 99, 100, 91, 89, 90, 101, 89, 90, 102, 89, 90, 103, 89, 90, 104, 89, 90, 105, 89, 90, 106, 89, 90, 107, 89, 90, 108, 89, 90, 109, 89, 90, 110, 89, 90, 111, 89, 90, 112, 89, 90, 113, 89, 90, 114, 89, 90, 115, 89, 117, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 116, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 141, 140, 143, 142, 143, 144, 145, 146, 147, 145, 148, 149, 150, 151, 152, 153, 154, 144, 142, 143, 155, 142, 143, 156, 142, 143, 157, 142, 143, 158, 142, 143, 159, 142, 143, 160, 142, 143, 161, 142, 143, 162, 142, 143, 163, 142, 143, 164, 142, 143, 165, 142, 143, 166, 142, 143, 167, 142, 143, 168, 142, 143, 169, 142, 143, 170, 142, 143, 171, 142, 143, 172, 142, 143, 173, 142, 143, 174, 142, 143, 175, 142, 143, 176, 142, 143, 177, 142, 143, 178, 142, 143, 179, 142, 143, 180, 142, 143, 181, 142, 143, 182, 142, 143, 183, 142, 143, 184, 142, 143, 185, 142, 143, 169, 142, 143, 186, 142, 143, 187, 142, 143, 188, 142, 143, 189, 142, 143, 190, 142, 143, 191, 142, 143, 185, 142, 143, 192, 142, 143, 193, 142, 143, 194, 142, 143, 195, 142, 143, 196, 142, 143, 195, 142, 197, 143, 142, 198, 143, 142, 143, 195, 142, 143, 195, 142, 199, 143, 200, 142, 195, 143, 142, 143, 201, 142, 143, 202, 142, 143, 203, 142, 143, 204, 142, 143, 205, 142, 143, 185, 142, 206, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 216, 215, 218, 217, 218, 219, 220, 221, 220, 222, 223, 224, 225, 219, 217, 218, 226, 217, 218, 227, 217, 218, 228, 217, 218, 229, 217, 218, 230, 217, 218, 231, 217, 218, 232, 217, 218, 233, 217, 218, 234, 217, 218, 235, 217, 218, 236, 217, 218, 237, 217, 218, 238, 217, 218, 239, 217, 218, 240, 217, 218, 241, 217, 218, 242, 217, 218, 243, 217, 218, 244, 217, 218, 245, 217, 218, 246, 217, 218, 247, 217, 218, 248, 217, 218, 249, 217, 218, 250, 217, 218, 251, 217, 218, 252, 217, 218, 253, 217, 218, 254, 217, 218, 255, 217, 218, 256, 217, 218, 257, 217, 218, 258, 217, 218, 259, 217, 218, 260, 217, 218, 261, 217, 218, 262, 217, 218, 255, 217, 218, 263, 264, 217, 218, 265, 217, 218, 266, 217, 218, 267, 217, 218, 268, 217, 218, 269, 217, 218, 255, 217, 218, 270, 217, 218, 271, 217, 218, 272, 217, 218, 273, 217, 218, 274, 217, 218, 275, 217, 218, 255, 217, 218, 276, 217, 218, 277, 217, 218, 278, 217, 218, 279, 217, 218, 280, 217, 218, 281, 217, 218, 255, 217, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 291, 290, 293, 292, 293, 294, 295, 296, 295, 294, 292, 293, 297, 292, 293, 298, 292, 293, 299, 292, 293, 300, 292, 293, 301, 292, 293, 302, 292, 293, 303, 292, 293, 304, 292, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 308, 0, 310, 0, 311, 0, 308, 0, 308, 0, 312, 313, 0, 308, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 322, 321, 324, 323, 324, 325, 326, 327, 328, 326, 329, 330, 331, 332, 333, 334, 335, 336, 325, 323, 324, 337, 323, 324, 338, 323, 324, 339, 323, 324, 340, 323, 324, 341, 323, 324, 342, 323, 324, 343, 323, 324, 344, 323, 324, 345, 323, 324, 346, 323, 324, 347, 323, 324, 348, 323, 324, 349, 323, 324, 350, 323, 324, 351, 323, 324, 352, 323, 324, 353, 323, 324, 354, 323, 324, 355, 323, 324, 356, 323, 324, 357, 323, 324, 358, 323, 324, 359, 323, 324, 360, 323, 324, 361, 323, 324, 362, 323, 324, 363, 323, 324, 364, 323, 324, 365, 323, 324, 366, 323, 324, 367, 323, 324, 351, 323, 324, 368, 323, 324, 369, 323, 324, 370, 323, 324, 371, 323, 324, 372, 323, 324, 373, 323, 324, 367, 323, 324, 374, 323, 324, 375, 323, 324, 376, 323, 324, 377, 323, 324, 378, 323, 324, 379, 323, 324, 367, 323, 324, 380, 323, 324, 381, 323, 324, 382, 323, 324, 383, 323, 324, 384, 323, 324, 383, 323, 385, 324, 323, 386, 324, 323, 324, 383, 323, 324, 383, 323, 387, 324, 388, 323, 383, 324, 323, 324, 389, 323, 324, 390, 323, 324, 391, 323, 324, 392, 323, 324, 393, 323, 324, 367, 323, 394, 395, 394, 0, 398, 397, 399, 400, 397, 396, 0, 402, 403, 401, 0, 402, 401, 398, 404, 402, 403, 404, 401, 398, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 405, 0, 90, 420, 89, 90, 421, 89, 90, 422, 89, 90, 423, 89, 90, 424, 89, 90, 425, 89, 90, 426, 89, 90, 115, 89, 90, 427, 89, 90, 428, 89, 90, 429, 89, 90, 430, 89, 90, 431, 89, 90, 430, 89, 432, 90, 89, 433, 90, 89, 90, 430, 89, 90, 430, 89, 434, 90, 435, 89, 430, 90, 89, 90, 436, 89, 90, 437, 89, 90, 438, 89, 90, 439, 89, 90, 440, 89, 90, 426, 89, 441, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 348, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 55, 56, 56, 4, 57, 71, 322, 330, 334, 336, 339, 340, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 4, 72, 4, 4, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 82, 83, 83, 4, 84, 98, 99, 116, 123, 127, 129, 132, 133, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 4, 72, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 117, 118, 119, 120, 121, 122, 124, 125, 126, 98, 128, 130, 131, 134, 135, 136, 137, 138, 139, 140, 142, 211, 143, 144, 145, 146, 147, 148, 149, 150, 151, 150, 151, 151, 4, 152, 166, 183, 190, 204, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 4, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 72, 184, 185, 186, 187, 188, 189, 191, 197, 192, 193, 194, 195, 196, 198, 199, 200, 201, 202, 203, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 220, 221, 221, 4, 222, 223, 224, 225, 226, 227, 228, 229, 72, 231, 232, 233, 31, 235, 237, 238, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 250, 251, 251, 4, 252, 266, 267, 284, 291, 298, 302, 304, 307, 308, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 4, 72, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 288, 289, 290, 292, 293, 294, 295, 296, 297, 299, 300, 301, 266, 303, 305, 306, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 320, 321, 319, 317, 318, 319, 317, 320, 321, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 71, 335, 337, 338, 341, 342, 343, 344, 345, 346, 347, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 348; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/da.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 707 "lib/gherkin/lexer/da.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/da.rb.rl" # line 716 "lib/gherkin/lexer/da.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/da.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/da.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/da.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/da.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/da.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/da.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/da.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/da.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/da.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/da.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/da.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/da.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/da.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/da.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/da.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/da.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/da.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/da.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/da.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/da.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/da.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/da.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/da.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/da.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 960 "lib/gherkin/lexer/da.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/da.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 999 "lib/gherkin/lexer/da.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/da.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/en_tx.rb0000644000004100000410000011303012244512574020237 0ustar www-datawww-data # line 1 "ragel/i18n/en_tx.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En_tx #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en_tx.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en_tx.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 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, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 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, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 342, 344, 346, 348, 350, 352, 354, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 473, 475, 477, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 631, 635, 641, 644, 646, 652, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 729 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 110, 108, 32, 121, 39, 97, 108, 108, 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, 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, 108, 110, 10, 108, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 58, 10, 100, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 117, 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, 104, 116, 32, 121, 39, 97, 108, 108, 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, 65, 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, 108, 10, 108, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 58, 10, 97, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 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, 105, 118, 101, 110, 99, 101, 110, 97, 114, 105, 111, 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, 108, 110, 10, 108, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 58, 10, 100, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 97, 117, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 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, 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, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 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, 100, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 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, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 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, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 238, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 473, 476, 479, 482, 485, 488, 491, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 904, 908, 914, 918, 921, 927, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1034 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 80, 79, 82, 81, 82, 83, 84, 85, 86, 84, 87, 88, 89, 90, 91, 92, 92, 83, 81, 82, 93, 81, 82, 94, 81, 82, 95, 81, 82, 96, 81, 82, 97, 81, 82, 98, 81, 82, 99, 81, 82, 100, 81, 82, 101, 81, 82, 102, 81, 82, 103, 81, 82, 104, 81, 82, 105, 81, 82, 106, 81, 82, 107, 81, 109, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 121, 122, 108, 0, 123, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 135, 134, 137, 136, 137, 138, 139, 140, 141, 139, 142, 143, 144, 145, 146, 147, 147, 138, 136, 137, 148, 136, 137, 149, 136, 137, 150, 136, 137, 151, 136, 137, 152, 136, 137, 153, 136, 137, 154, 136, 137, 155, 136, 137, 156, 136, 137, 157, 136, 137, 158, 136, 137, 159, 136, 137, 160, 136, 137, 161, 136, 137, 162, 136, 137, 163, 164, 136, 137, 165, 136, 137, 166, 136, 137, 167, 136, 137, 168, 136, 137, 169, 136, 137, 170, 136, 137, 171, 136, 137, 162, 136, 137, 172, 136, 137, 173, 136, 137, 174, 136, 137, 175, 136, 137, 176, 136, 137, 177, 136, 137, 178, 136, 137, 179, 136, 137, 172, 136, 137, 180, 136, 137, 181, 136, 137, 182, 136, 137, 183, 136, 137, 184, 136, 137, 171, 136, 137, 185, 136, 137, 186, 136, 137, 187, 136, 137, 172, 136, 137, 188, 136, 137, 189, 136, 137, 190, 136, 137, 191, 136, 137, 192, 136, 137, 193, 136, 137, 171, 136, 137, 186, 136, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 210, 209, 212, 211, 212, 213, 214, 215, 214, 213, 211, 212, 216, 211, 212, 217, 211, 212, 218, 211, 212, 219, 211, 212, 220, 211, 212, 221, 211, 212, 222, 211, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 231, 230, 233, 232, 233, 234, 235, 236, 235, 237, 238, 239, 240, 241, 234, 232, 233, 242, 232, 233, 243, 232, 233, 244, 232, 233, 245, 232, 233, 246, 232, 233, 247, 232, 233, 248, 232, 233, 249, 232, 233, 250, 232, 233, 251, 232, 233, 252, 232, 233, 253, 232, 233, 254, 232, 233, 255, 232, 233, 256, 232, 233, 257, 232, 233, 258, 232, 233, 259, 232, 233, 260, 232, 233, 261, 232, 233, 262, 232, 233, 263, 232, 233, 264, 232, 233, 265, 232, 233, 266, 232, 233, 267, 232, 233, 268, 232, 233, 269, 232, 233, 270, 232, 233, 271, 232, 233, 272, 232, 233, 263, 232, 233, 273, 232, 233, 274, 232, 233, 275, 232, 233, 276, 232, 233, 277, 232, 233, 278, 232, 233, 263, 232, 233, 279, 232, 233, 280, 232, 233, 281, 232, 233, 282, 232, 233, 283, 232, 233, 263, 232, 233, 284, 232, 233, 285, 232, 233, 286, 232, 233, 287, 232, 233, 288, 232, 233, 289, 232, 233, 263, 232, 290, 0, 291, 0, 292, 0, 194, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 302, 301, 304, 303, 304, 305, 306, 307, 308, 306, 309, 310, 311, 312, 313, 314, 314, 305, 303, 304, 315, 303, 304, 316, 303, 304, 317, 303, 304, 318, 303, 304, 319, 303, 304, 320, 303, 304, 321, 303, 304, 322, 303, 304, 323, 303, 304, 324, 303, 304, 325, 303, 304, 326, 303, 304, 327, 303, 304, 328, 303, 304, 329, 303, 304, 330, 331, 303, 304, 332, 303, 304, 333, 303, 304, 334, 303, 304, 335, 303, 304, 336, 303, 304, 337, 303, 304, 338, 303, 304, 329, 303, 304, 339, 303, 304, 340, 303, 304, 341, 303, 304, 342, 303, 304, 343, 303, 304, 344, 303, 304, 345, 303, 304, 346, 347, 303, 304, 348, 303, 304, 349, 303, 304, 350, 303, 304, 351, 303, 304, 352, 303, 304, 353, 303, 304, 354, 303, 304, 338, 303, 304, 339, 303, 304, 355, 303, 304, 356, 303, 304, 357, 303, 304, 358, 303, 304, 359, 303, 304, 338, 303, 304, 360, 303, 304, 361, 303, 304, 362, 303, 304, 339, 303, 304, 363, 303, 304, 364, 303, 304, 365, 303, 304, 366, 303, 304, 367, 303, 304, 368, 303, 304, 338, 303, 304, 361, 303, 291, 0, 369, 370, 369, 0, 373, 372, 374, 375, 372, 371, 0, 377, 378, 376, 0, 377, 376, 373, 379, 377, 378, 379, 376, 373, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 392, 393, 380, 0, 82, 394, 81, 82, 395, 81, 82, 396, 81, 82, 397, 81, 82, 398, 81, 82, 399, 81, 82, 400, 81, 82, 401, 81, 82, 402, 81, 82, 395, 81, 82, 403, 81, 82, 404, 81, 82, 405, 81, 82, 406, 81, 82, 407, 81, 82, 408, 81, 82, 107, 81, 82, 409, 81, 82, 410, 81, 82, 411, 81, 82, 395, 81, 82, 412, 81, 82, 413, 81, 82, 414, 81, 82, 415, 81, 82, 416, 81, 82, 417, 81, 82, 408, 81, 82, 410, 81, 194, 0, 418, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 291, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 327, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 326, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 47, 48, 48, 4, 49, 63, 297, 305, 307, 314, 318, 325, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 4, 64, 4, 4, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 291, 66, 129, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 76, 77, 77, 4, 78, 92, 93, 109, 111, 117, 121, 128, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 4, 64, 94, 102, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 92, 110, 112, 113, 114, 115, 116, 118, 119, 120, 122, 123, 124, 125, 126, 127, 130, 131, 132, 133, 134, 135, 31, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 145, 146, 146, 4, 147, 148, 149, 150, 151, 152, 153, 64, 155, 156, 157, 158, 159, 160, 161, 162, 163, 162, 163, 163, 4, 164, 178, 187, 196, 203, 209, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 4, 179, 180, 181, 182, 183, 184, 185, 186, 64, 188, 189, 190, 191, 192, 193, 194, 195, 197, 198, 199, 200, 201, 202, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 229, 230, 230, 4, 231, 245, 246, 262, 272, 278, 282, 289, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 4, 64, 247, 255, 248, 249, 250, 251, 252, 253, 254, 256, 257, 258, 259, 260, 261, 245, 263, 271, 264, 265, 266, 267, 268, 269, 270, 273, 274, 275, 276, 277, 279, 280, 281, 283, 284, 285, 286, 287, 288, 291, 292, 293, 295, 296, 294, 292, 293, 294, 292, 295, 296, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 291, 298, 299, 300, 301, 302, 303, 304, 63, 306, 308, 309, 310, 311, 312, 313, 315, 316, 317, 319, 320, 321, 322, 323, 324, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 327; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en_tx.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 675 "lib/gherkin/lexer/en_tx.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en_tx.rb.rl" # line 684 "lib/gherkin/lexer/en_tx.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en_tx.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en_tx.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en_tx.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en_tx.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en_tx.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en_tx.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en_tx.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en_tx.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en_tx.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en_tx.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en_tx.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en_tx.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en_tx.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en_tx.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en_tx.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en_tx.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en_tx.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en_tx.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en_tx.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en_tx.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en_tx.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en_tx.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en_tx.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en_tx.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 928 "lib/gherkin/lexer/en_tx.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en_tx.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 967 "lib/gherkin/lexer/en_tx.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en_tx.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/th.rb0000644000004100000410000032106612244512574017547 0ustar www-datawww-data # line 1 "ragel/i18n/th.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Th #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/th.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/th.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 12, 14, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 56, 57, 58, 60, 62, 67, 72, 77, 82, 86, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 112, 119, 124, 128, 134, 137, 139, 145, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 225, 228, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 753, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1040, 1043, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1278, 1280, 1282, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1437, 1438, 1439, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1483, 1486, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1574, 1576, 1578, 1580, 1582, 1584, 1586, 1588, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1742, 1744, 1746, 1748, 1750, 1752, 1754, 1756, 1758, 1760, 1762, 1764, 1766, 1768, 1770, 1772, 1774, 1776, 1778, 1780, 1782, 1784, 1786, 1788, 1790, 1794, 1796, 1798, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, 1823, 1827, 1829, 1831, 1833, 1835, 1837, 1839, 1841, 1843, 1845, 1847, 1849, 1851, 1853, 1855, 1857, 1859, 1861, 1863, 1865, 1867, 1869, 1871, 1873, 1875, 1877, 1879, 1881, 1883, 1885, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902, 1904, 1906, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922, 1924, 1926, 1928, 1930, 1932, 1934, 1936, 1938, 1940, 1942, 1944, 1946, 1948, 1950, 1952, 1954, 1956, 1958, 1960, 1962, 1964, 1966, 1968, 1970, 1972, 1974, 1976, 1977, 1978, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2008, 2011, 2016, 2018, 2020, 2022, 2024, 2026, 2028, 2030, 2032, 2034, 2036, 2038, 2040, 2042, 2044, 2046, 2048, 2050, 2052, 2054, 2056, 2058, 2060, 2062, 2064, 2066, 2068, 2070, 2072, 2074, 2076, 2078, 2080, 2082, 2085, 2087, 2089, 2091, 2093, 2095, 2097, 2099, 2101, 2103, 2105, 2107, 2109, 2111, 2113, 2115, 2117, 2119, 2121, 2123, 2125, 2127, 2129, 2131, 2133, 2135, 2137, 2139, 2141, 2143, 2145, 2147, 2149, 2151, 2153, 2155, 2157, 2159, 2161, 2163, 2165, 2167, 2169, 2171, 2173, 2175, 2177, 2179, 2181, 2183, 2185, 2187, 2189, 2191, 2193, 2195, 2197, 2199, 2201, 2203, 2205, 2207, 2209, 2211, 2213, 2215, 2217, 2219, 2221, 2223, 2225, 2227, 2229, 2231, 2233, 2235, 2237, 2239, 2241, 2243, 2245, 2247, 2249, 2251, 2253, 2255, 2257, 2259, 2261, 2263, 2265, 2267, 2269, 2271, 2273, 2275, 2277, 2279, 2281, 2283, 2285, 2287, 2289, 2291, 2293, 2295, 2297, 2299, 2301, 2303, 2305, 2307, 2309, 2311, 2313, 2315, 2319, 2321, 2323, 2326, 2328, 2330, 2332, 2334, 2336, 2338, 2340, 2342, 2344, 2346, 2348, 2351, 2353, 2355, 2357, 2359, 2361, 2363, 2365, 2367, 2369, 2371, 2373, 2375, 2377, 2379, 2381, 2383, 2385, 2388, 2390, 2392, 2394, 2396, 2398, 2400, 2402, 2404, 2406, 2408, 2410, 2412, 2414, 2416, 2418, 2420, 2422, 2424, 2426, 2428, 2430, 2432, 2434, 2436, 2438, 2440, 2442, 2444, 2446, 2448, 2450, 2452, 2454, 2456, 2458, 2460, 2462, 2464, 2466, 2468, 2470, 2472, 2474, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -72, -71, -127, -124, -118, -108, -86, -32, -72, -77, -32, -72, -85, -32, -72, -103, -32, -72, -108, -32, -71, -125, -32, -72, -85, -32, -71, -119, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -72, -89, -32, -72, -78, -32, -72, -95, -32, -72, -107, -86, -32, -71, -119, -32, -72, -83, -32, -72, -121, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -105, -32, -72, -78, -32, -72, -121, -32, -72, -104, -32, -72, -72, -32, -72, -93, -32, -72, -127, -32, -72, -76, -32, -72, -120, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -72, -71, 10, -124, -118, -86, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -108, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, -71, 10, -107, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -94, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -128, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -101, 10, -32, 10, -71, 10, -128, -127, -126, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -108, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -86, -85, 10, -32, 10, -72, 10, -93, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -32, -72, -78, -32, -72, -95, -32, -72, -78, -32, -72, -93, -32, -72, -106, -32, -72, -72, -32, -72, -108, -32, -72, -126, -32, -72, -83, -32, -72, -121, -32, -72, -71, -107, -32, -72, -79, -32, -72, -89, -32, -72, -83, -32, -72, -94, -32, -71, -120, -32, -72, -78, -32, -72, -121, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -72, -71, 10, -124, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -126, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, -128, -32, -72, -85, -32, -72, -107, -32, -72, -72, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -109, -32, -71, -116, -32, -72, -79, -32, -72, -121, -32, -72, -103, -32, -72, -79, -32, -71, -119, -32, -72, -103, -32, -72, -93, -32, -72, -72, -32, -72, -101, -32, -71, -128, -32, -72, -85, -32, -72, -107, -32, -72, -72, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -109, -32, -71, -116, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -72, -71, 10, -127, -124, -108, 10, -32, 10, -72, 10, -77, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -108, 10, -32, 10, -71, 10, -125, 10, -32, 10, -72, 10, -85, 10, -32, 10, -71, 10, -119, 10, 10, 32, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -79, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -103, 10, -128, -127, -126, 10, -32, 10, -72, 10, -95, -85, 10, -32, 10, -72, 10, -73, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -32, 10, -72, 10, -107, -91, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -80, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -128, -127, -126, -32, -72, -95, -85, -32, -72, -73, -32, -71, -120, -32, -72, -83, -32, -72, -107, -32, -72, -72, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -109, -32, -71, -116, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -72, -71, 10, -127, -124, -108, -86, 10, -32, 10, -72, 10, -77, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -108, 10, -32, 10, -71, 10, -125, 10, -32, 10, -72, 10, -85, 10, -32, 10, -71, 10, -119, 10, 10, 32, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -79, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -101, 10, -32, 10, -71, 10, -128, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -128, -127, -126, 10, -32, 10, -72, 10, -95, -85, 10, -32, 10, -72, 10, -73, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -107, -103, -91, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -108, 10, -32, 10, -72, 10, -80, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -86, -85, 10, -32, 10, -72, 10, -93, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -32, -72, -107, -103, -91, -32, -71, -120, -32, -72, -89, -32, -72, -124, -32, -72, -76, -32, -72, -108, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -72, -71, 10, -127, -124, -108, -86, 10, -32, 10, -72, 10, -77, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -108, 10, -32, 10, -71, 10, -125, 10, -32, 10, -72, 10, -85, 10, -32, 10, -71, 10, -119, 10, 10, 32, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -79, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -101, 10, -32, 10, -71, 10, -128, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -128, -127, -126, 10, -32, 10, -72, 10, -95, -85, 10, -32, 10, -72, 10, -73, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -107, -91, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -80, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -86, -85, 10, -32, 10, -72, 10, -93, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -32, -72, -80, -32, -72, -124, -32, -72, -93, -32, -72, -121, -32, -72, -86, -85, -32, -72, -93, -32, -71, -119, -32, -72, -78, -32, -72, -121, -32, -72, -126, -32, -72, -83, -32, -72, -121, -32, -72, -91, -32, -72, -79, -32, -72, -127, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 10, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 3, 4, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 3, 4, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 3, 5, 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, 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, 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, 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, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 3, 5, 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, 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, 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, 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, 2, 2, 3, 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, 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, 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, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 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, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 12, 15, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 68, 71, 82, 84, 86, 89, 92, 97, 102, 107, 112, 116, 120, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 158, 165, 170, 174, 180, 184, 187, 193, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 333, 337, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1140, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1606, 1610, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1960, 1963, 1966, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2066, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2197, 2199, 2201, 2204, 2206, 2208, 2210, 2212, 2214, 2216, 2218, 2220, 2222, 2224, 2226, 2228, 2230, 2232, 2234, 2236, 2238, 2240, 2242, 2244, 2246, 2248, 2250, 2252, 2254, 2256, 2258, 2260, 2262, 2264, 2266, 2268, 2270, 2279, 2283, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2392, 2395, 2398, 2401, 2404, 2407, 2410, 2413, 2416, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494, 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, 2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638, 2641, 2644, 2647, 2650, 2653, 2656, 2659, 2662, 2665, 2668, 2671, 2674, 2677, 2680, 2683, 2686, 2689, 2692, 2695, 2698, 2701, 2704, 2707, 2710, 2713, 2716, 2719, 2722, 2725, 2728, 2731, 2734, 2737, 2742, 2745, 2748, 2752, 2755, 2758, 2761, 2764, 2767, 2770, 2773, 2776, 2779, 2782, 2785, 2790, 2793, 2796, 2799, 2802, 2805, 2808, 2811, 2814, 2817, 2820, 2823, 2826, 2829, 2832, 2835, 2838, 2841, 2844, 2847, 2850, 2853, 2856, 2859, 2862, 2865, 2868, 2871, 2874, 2877, 2881, 2884, 2887, 2890, 2893, 2896, 2899, 2902, 2905, 2908, 2911, 2914, 2917, 2920, 2923, 2926, 2929, 2932, 2935, 2938, 2941, 2944, 2947, 2950, 2953, 2956, 2959, 2962, 2965, 2968, 2971, 2974, 2977, 2980, 2983, 2986, 2989, 2992, 2995, 2998, 3001, 3004, 3007, 3010, 3013, 3015, 3017, 3021, 3023, 3025, 3027, 3029, 3031, 3033, 3035, 3037, 3039, 3041, 3043, 3045, 3047, 3049, 3051, 3053, 3055, 3057, 3066, 3070, 3076, 3079, 3082, 3085, 3088, 3091, 3094, 3097, 3100, 3103, 3106, 3109, 3112, 3115, 3118, 3121, 3124, 3127, 3130, 3133, 3136, 3139, 3142, 3145, 3148, 3151, 3154, 3157, 3160, 3163, 3166, 3169, 3172, 3175, 3179, 3182, 3185, 3188, 3191, 3194, 3197, 3200, 3203, 3206, 3209, 3212, 3215, 3218, 3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3245, 3248, 3251, 3254, 3257, 3260, 3263, 3266, 3269, 3272, 3275, 3278, 3281, 3284, 3287, 3290, 3293, 3296, 3299, 3302, 3305, 3308, 3311, 3314, 3317, 3320, 3323, 3326, 3329, 3332, 3335, 3338, 3341, 3344, 3347, 3350, 3353, 3356, 3359, 3362, 3365, 3368, 3371, 3374, 3377, 3380, 3383, 3386, 3389, 3392, 3395, 3398, 3401, 3404, 3407, 3410, 3413, 3416, 3419, 3422, 3425, 3428, 3431, 3434, 3437, 3440, 3443, 3446, 3449, 3452, 3455, 3458, 3461, 3464, 3467, 3470, 3473, 3476, 3479, 3482, 3485, 3488, 3491, 3494, 3497, 3500, 3503, 3506, 3509, 3512, 3515, 3518, 3521, 3524, 3529, 3532, 3535, 3539, 3542, 3545, 3548, 3551, 3554, 3557, 3560, 3563, 3566, 3569, 3572, 3576, 3579, 3582, 3585, 3588, 3591, 3594, 3597, 3600, 3603, 3606, 3609, 3612, 3615, 3618, 3621, 3624, 3627, 3631, 3634, 3637, 3640, 3643, 3646, 3649, 3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 3751, 3754, 3757, 3760, 3763, 3765, 3767, 3769, 3771, 3773, 3775, 3777, 3779, 3781, 3783, 3785, 3787, 3789, 3791, 3794, 3796, 3798, 3800, 3802, 3804, 3806, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824, 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3840, 3842, 3844, 3846, 3848, 3850, 3852, 3854, 3856, 3858 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 11, 12, 0, 13, 14, 15, 16, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 41, 42, 40, 44, 45, 43, 1, 4, 3, 5, 6, 7, 8, 9, 10, 3, 0, 46, 0, 47, 0, 49, 50, 48, 52, 53, 51, 56, 55, 57, 55, 54, 60, 59, 61, 59, 58, 60, 59, 62, 59, 58, 60, 59, 63, 59, 58, 65, 64, 64, 0, 4, 66, 66, 0, 68, 69, 67, 4, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 0, 0, 0, 0, 84, 85, 86, 85, 85, 88, 87, 84, 4, 89, 9, 89, 0, 90, 91, 90, 0, 94, 93, 95, 96, 93, 92, 0, 98, 99, 97, 0, 98, 97, 94, 100, 98, 99, 100, 97, 101, 94, 102, 103, 104, 105, 106, 107, 108, 102, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 169, 168, 171, 170, 172, 171, 173, 174, 175, 174, 173, 170, 176, 177, 171, 170, 178, 179, 180, 171, 170, 181, 171, 170, 182, 171, 170, 183, 171, 170, 184, 171, 170, 185, 171, 170, 186, 171, 170, 187, 171, 170, 188, 171, 170, 189, 171, 170, 190, 171, 170, 191, 171, 170, 192, 193, 171, 170, 194, 171, 170, 195, 171, 170, 196, 171, 170, 197, 171, 170, 198, 171, 170, 199, 171, 170, 200, 171, 170, 201, 171, 170, 202, 171, 170, 203, 171, 170, 204, 171, 170, 205, 171, 170, 206, 171, 170, 207, 171, 170, 208, 171, 170, 209, 171, 170, 210, 171, 170, 211, 171, 170, 212, 171, 170, 213, 171, 170, 214, 171, 170, 215, 171, 170, 216, 171, 170, 217, 171, 170, 218, 171, 170, 219, 171, 170, 220, 171, 170, 221, 171, 170, 222, 171, 170, 223, 171, 170, 224, 171, 170, 225, 171, 170, 226, 171, 170, 227, 171, 170, 228, 171, 170, 229, 171, 170, 230, 171, 170, 231, 171, 170, 232, 171, 170, 233, 171, 170, 234, 171, 170, 235, 171, 170, 236, 171, 170, 237, 171, 170, 238, 171, 170, 171, 239, 170, 240, 242, 241, 243, 244, 245, 246, 247, 248, 241, 0, 249, 171, 170, 250, 171, 170, 251, 171, 170, 252, 171, 170, 253, 171, 170, 254, 171, 170, 255, 171, 170, 256, 171, 170, 257, 171, 170, 258, 171, 170, 259, 171, 170, 260, 171, 170, 261, 171, 170, 262, 171, 170, 238, 171, 170, 263, 171, 170, 264, 171, 170, 265, 171, 170, 266, 171, 170, 267, 171, 170, 268, 171, 170, 269, 171, 170, 270, 171, 170, 271, 171, 170, 272, 171, 170, 273, 171, 170, 274, 171, 170, 275, 171, 170, 276, 171, 170, 277, 171, 170, 278, 171, 170, 279, 280, 171, 170, 281, 171, 170, 282, 171, 170, 283, 171, 170, 284, 171, 170, 285, 171, 170, 286, 171, 170, 287, 171, 170, 288, 171, 170, 289, 171, 170, 290, 171, 170, 291, 171, 170, 292, 171, 170, 293, 171, 170, 294, 171, 170, 295, 171, 170, 296, 171, 170, 297, 171, 170, 298, 171, 170, 299, 171, 170, 300, 171, 170, 301, 171, 170, 238, 171, 170, 302, 171, 170, 303, 171, 170, 304, 171, 170, 305, 171, 170, 306, 171, 170, 307, 171, 170, 308, 171, 170, 309, 171, 170, 310, 171, 170, 311, 171, 170, 312, 171, 170, 313, 171, 170, 314, 171, 170, 315, 171, 170, 316, 171, 170, 317, 171, 170, 318, 171, 170, 319, 171, 170, 320, 171, 170, 321, 171, 170, 322, 171, 170, 323, 171, 170, 324, 171, 170, 325, 171, 170, 238, 171, 170, 326, 171, 170, 327, 171, 170, 328, 171, 170, 329, 171, 170, 330, 171, 170, 331, 171, 170, 332, 171, 170, 333, 171, 170, 334, 171, 170, 335, 171, 170, 280, 171, 170, 302, 336, 337, 171, 170, 338, 171, 170, 339, 171, 170, 340, 171, 170, 341, 171, 170, 342, 171, 170, 343, 171, 170, 344, 171, 170, 345, 171, 170, 346, 171, 170, 347, 171, 170, 348, 171, 170, 349, 171, 170, 350, 171, 170, 351, 171, 170, 238, 171, 170, 352, 171, 170, 353, 171, 170, 354, 171, 170, 355, 171, 170, 356, 171, 170, 357, 171, 170, 358, 171, 170, 359, 171, 170, 360, 171, 170, 361, 171, 170, 362, 171, 170, 363, 364, 171, 170, 365, 171, 170, 366, 171, 170, 367, 171, 170, 368, 171, 170, 369, 171, 170, 370, 171, 170, 371, 171, 170, 372, 171, 170, 373, 171, 170, 374, 171, 170, 375, 171, 170, 376, 171, 170, 377, 171, 170, 378, 171, 170, 379, 171, 170, 380, 171, 170, 381, 171, 170, 382, 171, 170, 383, 171, 170, 384, 171, 170, 334, 171, 170, 385, 171, 170, 386, 171, 170, 387, 171, 170, 388, 171, 170, 389, 171, 170, 390, 171, 170, 391, 171, 170, 392, 171, 170, 238, 171, 170, 171, 393, 170, 171, 394, 170, 171, 395, 170, 171, 396, 170, 171, 397, 170, 171, 398, 170, 171, 399, 170, 171, 400, 170, 171, 401, 170, 171, 402, 170, 171, 403, 170, 171, 404, 170, 171, 405, 170, 171, 406, 170, 407, 0, 408, 0, 409, 0, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 166, 0, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 438, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 459, 0, 460, 0, 461, 0, 463, 462, 465, 464, 466, 465, 467, 468, 468, 467, 464, 469, 470, 465, 464, 471, 465, 464, 472, 465, 464, 473, 465, 464, 474, 465, 464, 475, 465, 464, 476, 465, 464, 477, 465, 464, 478, 465, 464, 479, 465, 464, 480, 465, 464, 481, 465, 464, 482, 465, 464, 483, 484, 465, 464, 485, 465, 464, 486, 465, 464, 487, 465, 464, 488, 465, 464, 489, 465, 464, 490, 465, 464, 491, 465, 464, 492, 465, 464, 493, 465, 464, 494, 465, 464, 495, 465, 464, 496, 465, 464, 497, 465, 464, 498, 465, 464, 499, 465, 464, 500, 465, 464, 501, 465, 464, 502, 465, 464, 503, 465, 464, 504, 465, 464, 505, 465, 464, 506, 465, 464, 507, 465, 464, 508, 465, 464, 509, 465, 464, 510, 465, 464, 511, 465, 464, 512, 465, 464, 513, 465, 464, 514, 465, 464, 515, 465, 464, 516, 465, 464, 517, 465, 464, 518, 465, 464, 519, 465, 464, 520, 465, 464, 521, 465, 464, 522, 465, 464, 523, 465, 464, 524, 465, 464, 525, 465, 464, 526, 465, 464, 527, 465, 464, 528, 465, 464, 529, 465, 464, 465, 530, 464, 531, 465, 464, 532, 465, 464, 533, 465, 464, 534, 465, 464, 535, 465, 464, 536, 465, 464, 537, 465, 464, 538, 465, 464, 539, 465, 464, 540, 465, 464, 541, 465, 464, 542, 465, 464, 543, 465, 464, 544, 465, 464, 529, 465, 464, 545, 465, 464, 546, 465, 464, 547, 465, 464, 548, 465, 464, 549, 465, 464, 550, 465, 464, 551, 465, 464, 552, 465, 464, 553, 465, 464, 554, 465, 464, 555, 465, 464, 556, 465, 464, 557, 465, 464, 558, 465, 464, 559, 465, 464, 560, 465, 464, 561, 465, 464, 562, 465, 464, 563, 465, 464, 564, 465, 464, 565, 465, 464, 529, 465, 464, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 588, 0, 589, 0, 460, 0, 590, 0, 591, 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 38, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 615, 0, 616, 0, 617, 0, 618, 0, 619, 0, 620, 0, 621, 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 645, 644, 647, 646, 648, 647, 649, 650, 651, 652, 650, 649, 646, 653, 654, 647, 646, 655, 656, 657, 647, 646, 658, 647, 646, 659, 647, 646, 660, 647, 646, 661, 647, 646, 662, 647, 646, 663, 647, 646, 664, 647, 646, 665, 647, 646, 666, 647, 646, 667, 647, 646, 668, 647, 646, 669, 647, 646, 670, 647, 646, 671, 647, 646, 672, 647, 646, 673, 647, 646, 674, 647, 646, 675, 647, 646, 676, 647, 646, 677, 647, 646, 678, 647, 646, 647, 679, 646, 680, 647, 646, 681, 647, 646, 682, 647, 646, 683, 647, 646, 684, 647, 646, 685, 647, 646, 686, 647, 646, 687, 647, 646, 688, 647, 646, 689, 647, 646, 690, 647, 646, 691, 692, 647, 646, 693, 647, 646, 694, 647, 646, 695, 647, 646, 696, 647, 646, 697, 647, 646, 698, 647, 646, 699, 647, 646, 700, 647, 646, 701, 647, 646, 702, 647, 646, 703, 647, 646, 704, 647, 646, 705, 647, 646, 706, 647, 646, 707, 647, 646, 708, 647, 646, 709, 647, 646, 710, 647, 646, 711, 647, 646, 712, 647, 646, 713, 647, 646, 714, 647, 646, 715, 647, 646, 716, 647, 646, 717, 647, 646, 718, 647, 646, 719, 647, 646, 720, 647, 646, 721, 647, 646, 722, 647, 646, 723, 647, 646, 724, 647, 646, 725, 647, 646, 726, 647, 646, 727, 647, 646, 728, 647, 646, 729, 647, 646, 730, 647, 646, 731, 647, 646, 732, 647, 646, 733, 647, 646, 734, 647, 646, 735, 647, 646, 736, 647, 646, 737, 647, 646, 647, 679, 646, 738, 647, 646, 739, 647, 646, 740, 647, 646, 741, 647, 646, 742, 647, 646, 743, 647, 646, 744, 647, 646, 745, 647, 646, 746, 647, 646, 747, 647, 646, 748, 647, 646, 749, 647, 646, 750, 647, 646, 751, 647, 646, 737, 647, 646, 752, 647, 646, 753, 647, 646, 754, 647, 646, 755, 647, 646, 756, 647, 646, 757, 647, 646, 758, 647, 646, 759, 647, 646, 760, 647, 646, 761, 647, 646, 762, 647, 646, 763, 647, 646, 764, 647, 646, 765, 647, 646, 766, 647, 646, 767, 647, 646, 768, 647, 646, 678, 647, 646, 769, 770, 771, 647, 646, 772, 647, 646, 773, 647, 646, 774, 775, 647, 646, 776, 647, 646, 777, 647, 646, 778, 647, 646, 779, 647, 646, 780, 647, 646, 781, 647, 646, 782, 647, 646, 783, 647, 646, 678, 647, 646, 784, 647, 646, 785, 647, 646, 786, 647, 646, 787, 647, 646, 788, 647, 646, 789, 647, 646, 790, 647, 646, 791, 647, 646, 792, 647, 646, 793, 647, 646, 794, 647, 646, 795, 647, 646, 796, 647, 646, 797, 647, 646, 798, 647, 646, 799, 647, 646, 800, 647, 646, 801, 647, 646, 802, 647, 646, 803, 647, 646, 737, 647, 646, 804, 647, 646, 805, 647, 646, 806, 807, 647, 646, 808, 647, 646, 809, 647, 646, 678, 647, 646, 810, 647, 646, 811, 647, 646, 678, 647, 646, 812, 647, 646, 813, 647, 646, 814, 647, 646, 815, 647, 646, 816, 647, 646, 817, 647, 646, 818, 647, 646, 819, 647, 646, 820, 647, 646, 821, 647, 646, 822, 647, 646, 823, 647, 646, 824, 647, 646, 825, 647, 646, 826, 647, 646, 827, 647, 646, 828, 647, 646, 829, 647, 646, 830, 647, 646, 831, 647, 646, 737, 647, 646, 647, 832, 646, 647, 833, 646, 647, 834, 646, 647, 835, 646, 647, 836, 646, 647, 837, 646, 647, 838, 646, 647, 839, 646, 647, 840, 646, 647, 841, 646, 647, 842, 646, 647, 843, 646, 647, 844, 646, 647, 845, 646, 846, 847, 848, 0, 849, 0, 850, 0, 851, 852, 0, 853, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 860, 0, 38, 0, 861, 0, 862, 0, 863, 0, 864, 0, 865, 0, 866, 0, 867, 0, 868, 0, 869, 0, 870, 0, 871, 0, 872, 0, 873, 0, 874, 0, 875, 0, 876, 0, 877, 0, 878, 0, 879, 0, 880, 0, 881, 0, 882, 0, 884, 883, 886, 885, 887, 886, 888, 889, 890, 891, 889, 888, 885, 892, 893, 886, 885, 894, 895, 896, 897, 886, 885, 898, 886, 885, 899, 886, 885, 900, 886, 885, 901, 886, 885, 902, 886, 885, 903, 886, 885, 904, 886, 885, 905, 886, 885, 906, 886, 885, 907, 886, 885, 908, 886, 885, 909, 886, 885, 910, 886, 885, 911, 886, 885, 912, 886, 885, 913, 886, 885, 914, 886, 885, 915, 886, 885, 916, 886, 885, 917, 886, 885, 918, 886, 885, 886, 919, 885, 920, 886, 885, 921, 886, 885, 922, 886, 885, 923, 886, 885, 924, 886, 885, 925, 886, 885, 926, 886, 885, 927, 886, 885, 928, 886, 885, 929, 886, 885, 930, 886, 885, 931, 932, 886, 885, 933, 886, 885, 934, 886, 885, 935, 886, 885, 936, 886, 885, 937, 886, 885, 938, 886, 885, 939, 886, 885, 940, 886, 885, 941, 886, 885, 942, 886, 885, 943, 886, 885, 944, 886, 885, 945, 886, 885, 946, 886, 885, 947, 886, 885, 948, 886, 885, 949, 886, 885, 950, 886, 885, 951, 886, 885, 952, 886, 885, 953, 886, 885, 954, 886, 885, 955, 886, 885, 956, 886, 885, 957, 886, 885, 958, 886, 885, 959, 886, 885, 960, 886, 885, 961, 886, 885, 962, 886, 885, 963, 886, 885, 964, 886, 885, 965, 886, 885, 966, 886, 885, 967, 886, 885, 968, 886, 885, 969, 886, 885, 970, 886, 885, 971, 886, 885, 972, 886, 885, 973, 886, 885, 974, 886, 885, 975, 886, 885, 976, 886, 885, 977, 886, 885, 886, 919, 885, 978, 886, 885, 979, 886, 885, 980, 886, 885, 981, 886, 885, 982, 886, 885, 983, 886, 885, 984, 886, 885, 985, 886, 885, 986, 886, 885, 987, 886, 885, 988, 886, 885, 989, 886, 885, 990, 886, 885, 991, 886, 885, 977, 886, 885, 992, 886, 885, 993, 886, 885, 994, 886, 885, 995, 886, 885, 996, 886, 885, 997, 886, 885, 998, 886, 885, 999, 886, 885, 1000, 886, 885, 1001, 886, 885, 1002, 886, 885, 1003, 886, 885, 1004, 886, 885, 1005, 886, 885, 1006, 886, 885, 1007, 886, 885, 1008, 886, 885, 918, 886, 885, 1009, 886, 885, 1010, 886, 885, 1011, 886, 885, 1012, 886, 885, 1013, 886, 885, 1014, 886, 885, 1015, 886, 885, 1016, 886, 885, 1017, 886, 885, 1018, 886, 885, 1019, 886, 885, 1020, 886, 885, 1021, 886, 885, 1022, 886, 885, 1023, 886, 885, 1024, 886, 885, 1025, 886, 885, 1026, 886, 885, 1027, 886, 885, 1028, 886, 885, 1029, 886, 885, 1030, 886, 885, 1031, 886, 885, 1032, 886, 885, 1033, 886, 885, 1034, 886, 885, 1035, 886, 885, 1036, 886, 885, 1037, 886, 885, 1038, 886, 885, 1039, 886, 885, 1040, 886, 885, 1041, 886, 885, 1042, 886, 885, 1043, 886, 885, 977, 886, 885, 1044, 1045, 1046, 886, 885, 1047, 886, 885, 1048, 886, 885, 1049, 1023, 886, 885, 1050, 886, 885, 1051, 886, 885, 1052, 886, 885, 1053, 886, 885, 1054, 886, 885, 1055, 886, 885, 1056, 886, 885, 1057, 886, 885, 918, 886, 885, 1058, 886, 885, 1059, 886, 885, 1060, 1061, 1062, 886, 885, 1063, 886, 885, 1064, 886, 885, 918, 886, 885, 1065, 886, 885, 1066, 886, 885, 1067, 886, 885, 1068, 886, 885, 1069, 886, 885, 1070, 886, 885, 1071, 886, 885, 1072, 886, 885, 1073, 886, 885, 1074, 886, 885, 1075, 886, 885, 977, 886, 885, 1076, 886, 885, 1077, 886, 885, 918, 886, 885, 1078, 886, 885, 1079, 886, 885, 1080, 886, 885, 1081, 886, 885, 1082, 886, 885, 1083, 886, 885, 1084, 886, 885, 1085, 886, 885, 1086, 886, 885, 1087, 886, 885, 1088, 886, 885, 1089, 1090, 886, 885, 1091, 886, 885, 1092, 886, 885, 1093, 886, 885, 1094, 886, 885, 1095, 886, 885, 1096, 886, 885, 1097, 886, 885, 1098, 886, 885, 1099, 886, 885, 1100, 886, 885, 1101, 886, 885, 1102, 886, 885, 1103, 886, 885, 1104, 886, 885, 1105, 886, 885, 1106, 886, 885, 1107, 886, 885, 1108, 886, 885, 1109, 886, 885, 1110, 886, 885, 1017, 886, 885, 1111, 886, 885, 1112, 886, 885, 1113, 886, 885, 1114, 886, 885, 1115, 886, 885, 1116, 886, 885, 1117, 886, 885, 1118, 886, 885, 977, 886, 885, 886, 1119, 885, 886, 1120, 885, 886, 1121, 885, 886, 1122, 885, 886, 1123, 885, 886, 1124, 885, 886, 1125, 885, 886, 1126, 885, 886, 1127, 885, 886, 1128, 885, 886, 1129, 885, 886, 1130, 885, 886, 1131, 885, 886, 1132, 885, 1133, 0, 1134, 0, 1135, 1136, 1137, 0, 1138, 0, 1139, 0, 38, 0, 1140, 0, 1141, 0, 1142, 0, 1143, 0, 1144, 0, 1145, 0, 1146, 0, 1147, 0, 1148, 0, 1149, 0, 1150, 0, 1151, 0, 1152, 0, 1154, 1153, 1156, 1155, 1157, 1156, 1158, 1159, 1160, 1161, 1159, 1158, 1155, 1162, 1163, 1156, 1155, 1164, 1165, 1166, 1167, 1156, 1155, 1168, 1156, 1155, 1169, 1156, 1155, 1170, 1156, 1155, 1171, 1156, 1155, 1172, 1156, 1155, 1173, 1156, 1155, 1174, 1156, 1155, 1175, 1156, 1155, 1176, 1156, 1155, 1177, 1156, 1155, 1178, 1156, 1155, 1179, 1156, 1155, 1180, 1156, 1155, 1181, 1156, 1155, 1182, 1156, 1155, 1183, 1156, 1155, 1184, 1156, 1155, 1185, 1156, 1155, 1186, 1156, 1155, 1187, 1156, 1155, 1188, 1156, 1155, 1156, 1189, 1155, 1190, 1156, 1155, 1191, 1156, 1155, 1192, 1156, 1155, 1193, 1156, 1155, 1194, 1156, 1155, 1195, 1156, 1155, 1196, 1156, 1155, 1197, 1156, 1155, 1198, 1156, 1155, 1199, 1156, 1155, 1200, 1156, 1155, 1201, 1202, 1156, 1155, 1203, 1156, 1155, 1204, 1156, 1155, 1205, 1156, 1155, 1206, 1156, 1155, 1207, 1156, 1155, 1208, 1156, 1155, 1209, 1156, 1155, 1210, 1156, 1155, 1211, 1156, 1155, 1212, 1156, 1155, 1213, 1156, 1155, 1214, 1156, 1155, 1215, 1156, 1155, 1216, 1156, 1155, 1217, 1156, 1155, 1218, 1156, 1155, 1219, 1156, 1155, 1220, 1156, 1155, 1221, 1156, 1155, 1222, 1156, 1155, 1223, 1156, 1155, 1224, 1156, 1155, 1225, 1156, 1155, 1226, 1156, 1155, 1227, 1156, 1155, 1228, 1156, 1155, 1229, 1156, 1155, 1230, 1156, 1155, 1231, 1156, 1155, 1232, 1156, 1155, 1233, 1156, 1155, 1234, 1156, 1155, 1235, 1156, 1155, 1236, 1156, 1155, 1237, 1156, 1155, 1238, 1156, 1155, 1239, 1156, 1155, 1240, 1156, 1155, 1241, 1156, 1155, 1242, 1156, 1155, 1243, 1156, 1155, 1244, 1156, 1155, 1245, 1156, 1155, 1246, 1156, 1155, 1247, 1156, 1155, 1156, 1189, 1155, 1248, 1156, 1155, 1249, 1156, 1155, 1250, 1156, 1155, 1251, 1156, 1155, 1252, 1156, 1155, 1253, 1156, 1155, 1254, 1156, 1155, 1255, 1156, 1155, 1256, 1156, 1155, 1257, 1156, 1155, 1258, 1156, 1155, 1259, 1156, 1155, 1260, 1156, 1155, 1261, 1156, 1155, 1247, 1156, 1155, 1262, 1156, 1155, 1263, 1156, 1155, 1264, 1156, 1155, 1265, 1156, 1155, 1266, 1156, 1155, 1267, 1156, 1155, 1268, 1156, 1155, 1269, 1156, 1155, 1270, 1156, 1155, 1271, 1156, 1155, 1272, 1156, 1155, 1273, 1156, 1155, 1274, 1156, 1155, 1275, 1156, 1155, 1276, 1156, 1155, 1277, 1156, 1155, 1278, 1156, 1155, 1188, 1156, 1155, 1279, 1156, 1155, 1280, 1156, 1155, 1281, 1156, 1155, 1282, 1156, 1155, 1283, 1156, 1155, 1284, 1156, 1155, 1285, 1156, 1155, 1286, 1156, 1155, 1287, 1156, 1155, 1288, 1156, 1155, 1289, 1156, 1155, 1290, 1156, 1155, 1291, 1156, 1155, 1292, 1156, 1155, 1293, 1156, 1155, 1294, 1156, 1155, 1295, 1156, 1155, 1296, 1156, 1155, 1297, 1156, 1155, 1298, 1156, 1155, 1299, 1156, 1155, 1300, 1156, 1155, 1301, 1156, 1155, 1302, 1156, 1155, 1303, 1156, 1155, 1304, 1156, 1155, 1305, 1156, 1155, 1306, 1156, 1155, 1307, 1156, 1155, 1308, 1156, 1155, 1309, 1156, 1155, 1310, 1156, 1155, 1311, 1156, 1155, 1312, 1156, 1155, 1313, 1156, 1155, 1247, 1156, 1155, 1314, 1315, 1316, 1156, 1155, 1317, 1156, 1155, 1318, 1156, 1155, 1319, 1293, 1156, 1155, 1320, 1156, 1155, 1321, 1156, 1155, 1322, 1156, 1155, 1323, 1156, 1155, 1324, 1156, 1155, 1325, 1156, 1155, 1326, 1156, 1155, 1327, 1156, 1155, 1188, 1156, 1155, 1328, 1156, 1155, 1329, 1156, 1155, 1330, 1331, 1156, 1155, 1332, 1156, 1155, 1333, 1156, 1155, 1188, 1156, 1155, 1334, 1156, 1155, 1335, 1156, 1155, 1188, 1156, 1155, 1336, 1156, 1155, 1337, 1156, 1155, 1338, 1156, 1155, 1339, 1156, 1155, 1340, 1156, 1155, 1341, 1156, 1155, 1342, 1156, 1155, 1343, 1156, 1155, 1344, 1156, 1155, 1345, 1156, 1155, 1346, 1156, 1155, 1347, 1348, 1156, 1155, 1349, 1156, 1155, 1350, 1156, 1155, 1351, 1156, 1155, 1352, 1156, 1155, 1353, 1156, 1155, 1354, 1156, 1155, 1355, 1156, 1155, 1356, 1156, 1155, 1357, 1156, 1155, 1358, 1156, 1155, 1359, 1156, 1155, 1360, 1156, 1155, 1361, 1156, 1155, 1362, 1156, 1155, 1363, 1156, 1155, 1364, 1156, 1155, 1365, 1156, 1155, 1366, 1156, 1155, 1367, 1156, 1155, 1368, 1156, 1155, 1287, 1156, 1155, 1369, 1156, 1155, 1370, 1156, 1155, 1371, 1156, 1155, 1372, 1156, 1155, 1373, 1156, 1155, 1374, 1156, 1155, 1375, 1156, 1155, 1376, 1156, 1155, 1247, 1156, 1155, 1156, 1377, 1155, 1156, 1378, 1155, 1156, 1379, 1155, 1156, 1380, 1155, 1156, 1381, 1155, 1156, 1382, 1155, 1156, 1383, 1155, 1156, 1384, 1155, 1156, 1385, 1155, 1156, 1386, 1155, 1156, 1387, 1155, 1156, 1388, 1155, 1156, 1389, 1155, 1156, 1390, 1155, 1391, 0, 1392, 0, 38, 0, 1393, 0, 1394, 0, 1395, 0, 1396, 0, 1397, 0, 1398, 0, 1399, 0, 1400, 0, 1401, 0, 1402, 0, 1403, 0, 1404, 1405, 0, 1406, 0, 1407, 0, 1408, 0, 1409, 0, 1410, 0, 1411, 0, 1412, 0, 1413, 0, 1414, 0, 1415, 0, 1416, 0, 1417, 0, 1418, 0, 1419, 0, 1420, 0, 1421, 0, 1422, 0, 1423, 0, 1424, 0, 1425, 0, 615, 0, 1426, 0, 1427, 0, 1428, 0, 1429, 0, 1430, 0, 1431, 0, 1432, 0, 1433, 0, 166, 0, 1434, 0, 3, 0, 1435, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 1354, 28, 28, 29, 39, 41, 25, 55, 58, 3, 779, 4, 64, 363, 528, 546, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 40, 27, 28, 40, 30, 31, 32, 33, 32, 32, 33, 32, 34, 34, 34, 35, 34, 34, 34, 35, 36, 37, 38, 28, 38, 39, 28, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 1356, 56, 57, 28, 56, 55, 57, 58, 59, 60, 62, 63, 61, 59, 60, 61, 59, 62, 2, 63, 29, 39, 41, 25, 55, 58, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 348, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 123, 124, 125, 124, 28, 334, 126, 276, 127, 201, 265, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 186, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 2, 28, 28, 29, 39, 41, 25, 55, 58, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 240, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 277, 292, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 325, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 326, 327, 328, 329, 330, 331, 332, 333, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 28, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 503, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 404, 405, 406, 405, 28, 407, 481, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 466, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 185, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 584, 585, 586, 585, 28, 765, 609, 587, 701, 588, 610, 683, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 185, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 668, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 702, 735, 744, 703, 704, 705, 714, 706, 707, 708, 709, 710, 711, 712, 713, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 736, 737, 738, 741, 739, 740, 742, 743, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 28, 780, 1058, 1312, 781, 782, 783, 792, 784, 785, 786, 787, 788, 789, 790, 791, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 815, 816, 817, 816, 28, 1044, 840, 818, 968, 819, 841, 914, 932, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 185, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 899, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 969, 981, 1002, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 982, 983, 984, 987, 999, 985, 986, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 1000, 1001, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1035, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 28, 1059, 1060, 1061, 1064, 1309, 1062, 1063, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1078, 1079, 1080, 1079, 28, 1295, 1103, 1081, 1231, 1082, 1104, 1177, 1195, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 185, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1162, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1232, 1244, 1253, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1245, 1246, 1247, 1250, 1248, 1249, 1251, 1252, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1286, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 28, 1310, 1311, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1345, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1355, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 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, 57, 149, 126, 0, 110, 23, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 0, 93, 90, 41, 96, 90, 99, 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, 57, 144, 0, 54, 84, 0, 69, 33, 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, 13, 63, 31, 130, 60, 57, 31, 63, 57, 66, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 81, 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, 21, 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, 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, 57, 144, 0, 54, 84, 0, 78, 33, 84, 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, 19, 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, 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, 0, 0, 0, 0, 0, 0, 0, 19, 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, 57, 144, 0, 54, 84, 0, 75, 33, 84, 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, 17, 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, 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, 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, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 0, 72, 33, 84, 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, 15, 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, 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, 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, 15, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 1356; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/th.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 2151 "lib/gherkin/lexer/th.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/th.rb.rl" # line 2160 "lib/gherkin/lexer/th.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/th.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/th.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/th.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/th.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/th.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/th.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/th.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/th.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/th.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/th.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/th.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/th.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/th.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/th.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/th.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/th.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/th.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/th.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/th.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/th.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/th.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/th.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/th.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/th.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 2404 "lib/gherkin/lexer/th.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/th.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 2443 "lib/gherkin/lexer/th.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/th.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/en_lol.rb0000644000004100000410000010347012244512574020401 0ustar www-datawww-data # line 1 "ragel/i18n/en_lol.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En_lol #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en_lol.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en_lol.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 115, 116, 117, 118, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 198, 200, 202, 204, 206, 208, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 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, 325, 326, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 531, 537, 540, 542, 548, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 626 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 73, 77, 79, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 73, 77, 79, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 78, 52, 85, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 73, 77, 79, 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, 68, 69, 73, 77, 79, 87, 124, 9, 13, 69, 88, 65, 77, 80, 76, 90, 58, 10, 10, 10, 32, 35, 79, 124, 9, 13, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 10, 58, 32, 67, 65, 78, 32, 72, 65, 90, 73, 83, 72, 85, 78, 32, 58, 83, 82, 83, 76, 89, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 73, 77, 79, 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, 78, 10, 85, 10, 84, 10, 69, 10, 32, 10, 67, 10, 65, 10, 78, 10, 32, 10, 72, 10, 65, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 58, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 73, 77, 79, 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, 78, 10, 52, 85, 10, 58, 10, 84, 10, 69, 10, 32, 10, 67, 10, 65, 10, 78, 10, 32, 10, 72, 10, 65, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 32, 58, 10, 83, 10, 82, 10, 83, 10, 76, 10, 89, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 72, 32, 72, 65, 73, 58, 10, 10, 10, 32, 35, 37, 64, 66, 69, 77, 79, 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, 52, 10, 58, 10, 88, 10, 65, 10, 77, 10, 80, 10, 76, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 32, 58, 10, 83, 10, 82, 10, 83, 10, 76, 10, 89, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 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, 68, 69, 73, 77, 79, 87, 124, 9, 13, 10, 78, 10, 85, 10, 84, 10, 69, 10, 32, 10, 67, 10, 65, 10, 78, 10, 32, 10, 72, 10, 65, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 32, 58, 10, 83, 10, 82, 10, 83, 10, 76, 10, 89, 10, 58, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 84, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 13, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 16, 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, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 142, 144, 146, 148, 163, 166, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 253, 256, 259, 262, 265, 268, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 300, 302, 304, 306, 308, 310, 312, 314, 316, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 447, 449, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598, 600, 602, 604, 606, 608, 610, 612, 614, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 744, 750, 754, 757, 763, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 871 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 11, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 11, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 0, 70, 71, 0, 72, 0, 74, 73, 76, 75, 76, 77, 78, 79, 80, 78, 81, 82, 83, 84, 85, 86, 83, 77, 75, 76, 87, 75, 76, 88, 75, 76, 89, 75, 76, 90, 75, 76, 91, 75, 76, 92, 75, 76, 93, 75, 76, 94, 75, 76, 95, 75, 76, 96, 75, 76, 97, 75, 76, 98, 75, 76, 99, 75, 76, 100, 75, 76, 101, 75, 103, 102, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 111, 116, 102, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 126, 125, 128, 127, 128, 129, 130, 131, 130, 129, 127, 128, 132, 127, 128, 133, 127, 128, 134, 127, 128, 135, 127, 128, 136, 127, 128, 137, 127, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 69, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 159, 158, 161, 160, 161, 162, 163, 164, 165, 163, 166, 167, 168, 169, 170, 171, 168, 162, 160, 161, 172, 160, 161, 173, 160, 161, 174, 160, 161, 175, 160, 161, 176, 160, 161, 177, 160, 161, 178, 160, 161, 179, 160, 161, 180, 160, 161, 181, 160, 161, 182, 160, 161, 183, 160, 161, 184, 160, 161, 185, 160, 161, 186, 160, 161, 187, 160, 161, 188, 160, 161, 187, 160, 161, 189, 160, 161, 190, 160, 161, 191, 160, 161, 192, 160, 161, 193, 160, 161, 194, 160, 161, 195, 160, 161, 196, 160, 161, 187, 160, 161, 197, 160, 161, 198, 160, 161, 199, 160, 161, 200, 160, 161, 201, 160, 161, 186, 160, 161, 202, 160, 161, 203, 160, 161, 204, 160, 161, 205, 160, 161, 201, 160, 207, 206, 209, 208, 209, 210, 211, 212, 213, 211, 214, 215, 216, 217, 218, 219, 216, 210, 208, 209, 220, 208, 209, 221, 208, 209, 222, 208, 209, 223, 208, 209, 224, 208, 209, 225, 208, 209, 226, 208, 209, 227, 208, 209, 228, 208, 209, 229, 208, 209, 230, 208, 209, 231, 208, 209, 232, 208, 209, 233, 208, 209, 234, 208, 209, 235, 208, 209, 236, 237, 208, 209, 234, 208, 209, 235, 208, 209, 238, 208, 209, 239, 208, 209, 240, 208, 209, 241, 208, 209, 242, 208, 209, 243, 208, 209, 244, 208, 209, 245, 208, 209, 235, 208, 209, 246, 208, 209, 247, 208, 209, 248, 208, 209, 249, 208, 209, 250, 208, 209, 251, 234, 208, 209, 252, 208, 209, 253, 208, 209, 254, 208, 209, 255, 208, 209, 236, 208, 209, 256, 208, 209, 257, 208, 209, 258, 208, 209, 259, 208, 209, 236, 208, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 267, 266, 269, 268, 269, 270, 271, 272, 271, 273, 274, 275, 276, 270, 268, 269, 277, 268, 269, 278, 268, 269, 279, 268, 269, 280, 268, 269, 281, 268, 269, 282, 268, 269, 283, 268, 269, 284, 268, 269, 285, 268, 269, 286, 268, 269, 287, 268, 269, 288, 268, 269, 289, 268, 269, 290, 268, 269, 291, 268, 269, 292, 268, 269, 293, 268, 269, 294, 268, 269, 295, 268, 269, 296, 268, 269, 297, 268, 269, 291, 268, 269, 298, 268, 269, 299, 268, 269, 300, 268, 269, 301, 268, 269, 302, 268, 269, 303, 292, 268, 269, 304, 268, 269, 305, 268, 269, 306, 268, 269, 307, 268, 269, 291, 268, 269, 308, 268, 269, 309, 268, 269, 310, 268, 269, 311, 268, 269, 291, 268, 312, 313, 312, 0, 316, 315, 317, 318, 315, 314, 0, 320, 321, 319, 0, 320, 319, 316, 322, 320, 321, 322, 319, 316, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 331, 336, 323, 0, 76, 337, 75, 76, 338, 75, 76, 337, 75, 76, 339, 75, 76, 340, 75, 76, 341, 75, 76, 342, 75, 76, 343, 75, 76, 344, 75, 76, 345, 75, 76, 346, 75, 76, 337, 75, 76, 347, 75, 76, 348, 75, 76, 349, 75, 76, 350, 75, 76, 351, 75, 76, 352, 101, 75, 76, 353, 75, 76, 354, 75, 76, 355, 75, 76, 356, 75, 76, 357, 75, 76, 101, 75, 76, 358, 75, 76, 359, 75, 76, 360, 75, 76, 361, 75, 76, 357, 75, 69, 0, 362, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 231, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 267, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 31, 39, 266, 40, 41, 42, 41, 42, 42, 4, 43, 57, 237, 238, 240, 241, 249, 261, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 4, 58, 4, 4, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 231, 37, 61, 62, 63, 64, 65, 66, 67, 68, 69, 68, 69, 69, 4, 70, 71, 72, 73, 74, 75, 58, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 137, 91, 92, 93, 94, 95, 96, 97, 98, 97, 98, 98, 4, 99, 113, 114, 115, 117, 118, 126, 132, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 4, 58, 113, 116, 114, 119, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 133, 134, 135, 136, 138, 139, 138, 139, 139, 4, 140, 154, 155, 156, 159, 160, 168, 179, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 4, 58, 154, 157, 158, 155, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 180, 181, 182, 183, 185, 186, 187, 188, 189, 190, 191, 192, 191, 192, 192, 4, 193, 207, 209, 215, 226, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 4, 208, 58, 210, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 229, 230, 231, 232, 233, 235, 236, 234, 232, 233, 234, 232, 235, 236, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 231, 57, 239, 237, 242, 243, 244, 245, 246, 247, 248, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, 263, 264, 265, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 267; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en_lol.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 593 "lib/gherkin/lexer/en_lol.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en_lol.rb.rl" # line 602 "lib/gherkin/lexer/en_lol.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en_lol.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en_lol.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en_lol.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en_lol.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en_lol.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en_lol.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en_lol.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en_lol.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en_lol.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en_lol.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en_lol.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en_lol.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en_lol.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en_lol.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en_lol.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en_lol.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en_lol.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en_lol.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en_lol.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en_lol.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en_lol.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en_lol.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en_lol.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en_lol.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 846 "lib/gherkin/lexer/en_lol.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en_lol.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 885 "lib/gherkin/lexer/en_lol.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en_lol.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/it.rb0000644000004100000410000012073412244512574017547 0ustar www-datawww-data # line 1 "ragel/i18n/it.rb.rl" require 'gherkin/native' module Gherkin module Lexer class It #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/it.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/it.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 190, 191, 192, 196, 198, 199, 200, 201, 202, 203, 204, 205, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 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, 473, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 690, 696, 699, 701, 707, 725, 727, 729, 731, 733, 735, 737, 739, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 108, 111, 114, 97, 111, 110, 116, 101, 115, 116, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 77, 81, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, 97, 116, 97, 101, 105, 111, 32, 115, 101, 109, 112, 105, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 58, 117, 110, 122, 105, 111, 110, 97, 108, 105, 116, -61, -96, 58, 10, 10, 10, 32, 35, 37, 64, 67, 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, 111, 10, 110, 10, 116, 10, 101, 10, 115, 10, 116, 10, 111, 10, 58, 10, 115, 10, 101, 10, 109, 10, 112, 10, 105, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 99, 10, 101, 104, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 108, 10, 111, 10, 32, 10, 115, 10, 99, 10, 101, 117, 97, 110, 100, 111, 99, 101, 104, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 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, 32, 10, 108, 10, 108, 10, 111, 10, 114, 10, 97, 10, 111, 10, 110, 10, 116, 10, 101, 10, 115, 10, 116, 10, 111, 10, 58, 10, 97, 10, 116, 10, 97, 101, 105, 111, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 117, 10, 97, 10, 110, 10, 100, 10, 111, 10, 99, 10, 101, 104, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 108, 10, 111, 10, 32, 10, 115, 10, 99, 10, 101, 101, 109, 97, 32, 100, 101, 108, 108, 111, 32, 115, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 77, 81, 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, 32, 10, 108, 10, 108, 10, 111, 10, 114, 10, 97, 10, 97, 10, 116, 10, 97, 101, 105, 111, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 58, 10, 117, 10, 97, 10, 110, 10, 100, 10, 111, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 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, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, 10, 108, 10, 108, 10, 111, 10, 114, 10, 97, 10, 97, 10, 116, 10, 97, 101, 105, 111, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 58, 10, 117, 10, 97, 10, 110, 10, 100, 10, 111, 10, 99, 10, 101, 104, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 108, 10, 111, 10, 32, 10, 115, 10, 99, 10, 101, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 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, 4, 2, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 5, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 5, 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, 4, 16, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 182, 185, 188, 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 245, 247, 249, 254, 257, 259, 261, 263, 265, 267, 269, 271, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 535, 537, 539, 541, 543, 545, 548, 550, 552, 554, 556, 558, 560, 562, 564, 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, 667, 670, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 993, 999, 1003, 1006, 1012, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 84, 83, 86, 85, 86, 87, 88, 89, 90, 88, 91, 92, 90, 93, 94, 95, 96, 87, 85, 86, 97, 85, 86, 98, 85, 86, 99, 85, 86, 100, 85, 86, 101, 85, 86, 102, 85, 86, 103, 85, 86, 104, 85, 86, 105, 85, 86, 106, 85, 86, 107, 85, 86, 108, 85, 86, 109, 85, 86, 110, 85, 86, 111, 85, 113, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 112, 0, 128, 0, 129, 0, 74, 74, 74, 74, 0, 57, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 137, 136, 139, 138, 139, 140, 141, 142, 141, 140, 138, 139, 143, 138, 139, 144, 138, 139, 145, 138, 139, 146, 138, 139, 147, 138, 139, 148, 138, 139, 149, 138, 139, 150, 138, 139, 151, 138, 139, 152, 138, 153, 139, 138, 154, 139, 138, 139, 155, 138, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 170, 169, 172, 171, 172, 173, 174, 175, 174, 176, 177, 178, 179, 173, 171, 172, 180, 171, 172, 181, 171, 172, 182, 171, 172, 183, 171, 172, 184, 171, 172, 185, 171, 172, 186, 171, 172, 187, 171, 172, 188, 171, 172, 189, 171, 172, 190, 171, 172, 191, 171, 172, 192, 171, 172, 193, 171, 172, 194, 171, 172, 195, 171, 172, 196, 171, 172, 197, 171, 172, 198, 171, 172, 199, 171, 172, 200, 171, 172, 201, 171, 172, 202, 171, 172, 203, 171, 172, 204, 171, 172, 205, 171, 172, 200, 171, 172, 206, 171, 172, 207, 171, 172, 208, 171, 172, 209, 171, 172, 210, 171, 172, 211, 171, 172, 212, 171, 172, 213, 171, 172, 214, 171, 172, 215, 171, 216, 172, 171, 200, 172, 171, 172, 217, 171, 172, 218, 219, 171, 172, 220, 171, 172, 221, 171, 172, 222, 171, 172, 199, 171, 172, 223, 171, 172, 224, 171, 172, 225, 171, 172, 226, 171, 172, 227, 171, 172, 228, 171, 172, 229, 171, 172, 230, 171, 172, 231, 171, 172, 232, 171, 172, 233, 171, 172, 234, 171, 172, 218, 171, 235, 0, 236, 0, 237, 0, 238, 0, 74, 0, 239, 0, 240, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 249, 248, 251, 250, 251, 252, 253, 254, 255, 253, 256, 257, 258, 255, 259, 260, 261, 262, 252, 250, 251, 263, 250, 251, 264, 250, 251, 265, 250, 251, 266, 250, 251, 267, 250, 251, 268, 250, 251, 269, 250, 251, 270, 250, 251, 271, 250, 251, 272, 250, 251, 273, 250, 251, 274, 250, 251, 275, 250, 251, 276, 250, 251, 277, 250, 251, 278, 250, 251, 279, 250, 251, 280, 250, 251, 281, 250, 251, 282, 250, 251, 283, 250, 251, 284, 250, 251, 285, 250, 251, 286, 250, 251, 287, 250, 251, 288, 250, 251, 289, 250, 251, 277, 250, 251, 290, 250, 251, 291, 250, 251, 282, 282, 282, 282, 250, 251, 292, 250, 251, 293, 250, 251, 294, 250, 251, 295, 250, 251, 296, 250, 251, 297, 250, 251, 298, 250, 251, 299, 250, 251, 300, 250, 251, 301, 250, 302, 251, 250, 289, 251, 250, 251, 303, 250, 251, 304, 250, 251, 305, 250, 251, 306, 250, 251, 282, 250, 251, 307, 250, 251, 308, 309, 250, 251, 310, 250, 251, 311, 250, 251, 312, 250, 251, 288, 250, 251, 313, 250, 251, 314, 250, 251, 315, 250, 251, 316, 250, 251, 317, 250, 251, 318, 250, 251, 319, 250, 251, 320, 250, 251, 321, 250, 251, 322, 250, 251, 323, 250, 251, 324, 250, 251, 308, 250, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 345, 344, 347, 346, 347, 348, 349, 350, 351, 349, 352, 353, 351, 354, 355, 356, 357, 348, 346, 347, 358, 346, 347, 359, 346, 347, 360, 346, 347, 361, 346, 347, 362, 346, 347, 363, 346, 347, 364, 346, 347, 365, 346, 347, 366, 346, 347, 367, 346, 347, 368, 346, 347, 369, 346, 347, 370, 346, 347, 371, 346, 347, 372, 346, 347, 373, 346, 347, 374, 346, 347, 375, 346, 347, 376, 346, 347, 377, 346, 347, 378, 346, 347, 379, 346, 347, 377, 377, 377, 377, 346, 347, 380, 346, 347, 381, 346, 347, 382, 346, 347, 383, 346, 347, 384, 346, 347, 385, 346, 347, 386, 346, 347, 387, 346, 347, 388, 346, 347, 389, 346, 390, 347, 346, 391, 347, 346, 347, 372, 346, 347, 392, 346, 347, 393, 346, 347, 394, 346, 347, 395, 346, 347, 377, 346, 347, 396, 346, 347, 397, 346, 347, 398, 346, 347, 399, 346, 347, 400, 346, 347, 401, 346, 347, 391, 346, 402, 403, 402, 0, 406, 405, 407, 408, 405, 404, 0, 410, 411, 409, 0, 410, 409, 406, 412, 410, 411, 412, 409, 406, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 413, 0, 86, 428, 85, 86, 429, 85, 86, 430, 85, 86, 431, 85, 86, 432, 85, 86, 433, 85, 86, 434, 85, 86, 432, 432, 432, 432, 85, 86, 435, 85, 86, 436, 85, 86, 437, 85, 86, 438, 85, 86, 439, 85, 86, 440, 85, 86, 441, 85, 86, 442, 85, 86, 443, 85, 86, 444, 85, 445, 86, 85, 446, 86, 85, 86, 111, 85, 86, 447, 85, 86, 448, 85, 86, 449, 85, 86, 450, 85, 86, 432, 85, 86, 451, 85, 86, 452, 453, 85, 86, 454, 85, 86, 455, 85, 86, 456, 85, 86, 457, 85, 86, 446, 85, 86, 458, 85, 86, 459, 85, 86, 460, 85, 86, 461, 85, 86, 462, 85, 86, 463, 85, 86, 464, 85, 86, 465, 85, 86, 466, 85, 86, 467, 85, 86, 468, 85, 86, 469, 85, 86, 452, 85, 470, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 373, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 31, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 51, 52, 52, 4, 53, 67, 327, 332, 335, 331, 348, 353, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 4, 68, 4, 4, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 79, 80, 80, 4, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 68, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 108, 109, 109, 4, 110, 124, 132, 137, 149, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 4, 125, 126, 127, 128, 129, 130, 131, 68, 133, 134, 135, 136, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 155, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 174, 175, 251, 176, 177, 178, 179, 180, 181, 182, 183, 182, 183, 183, 4, 184, 198, 199, 204, 212, 215, 203, 227, 232, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 4, 68, 200, 201, 202, 203, 198, 205, 206, 207, 208, 209, 210, 211, 213, 214, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 233, 234, 238, 235, 236, 237, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 271, 272, 272, 4, 273, 287, 288, 293, 296, 292, 309, 314, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 4, 68, 289, 290, 291, 292, 287, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 325, 326, 324, 322, 323, 324, 322, 325, 326, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 328, 329, 330, 331, 67, 333, 334, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 349, 350, 351, 352, 354, 355, 360, 356, 357, 358, 359, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 373; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/it.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 745 "lib/gherkin/lexer/it.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/it.rb.rl" # line 754 "lib/gherkin/lexer/it.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/it.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/it.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/it.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/it.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/it.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/it.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/it.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/it.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/it.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/it.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/it.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/it.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/it.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/it.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/it.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/it.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/it.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/it.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/it.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/it.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/it.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/it.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/it.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/it.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 998 "lib/gherkin/lexer/it.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/it.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1037 "lib/gherkin/lexer/it.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/it.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/pt.rb0000644000004100000410000015710312244512574017556 0ustar www-datawww-data # line 1 "ragel/i18n/pt.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Pt #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/pt.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/pt.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 171, 173, 175, 177, 179, 181, 183, 186, 188, 190, 192, 194, 196, 198, 200, 216, 218, 219, 221, 223, 224, 225, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 296, 298, 300, 302, 304, 306, 308, 311, 313, 315, 317, 319, 321, 323, 325, 327, 330, 332, 334, 336, 338, 340, 342, 345, 348, 351, 353, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 448, 450, 452, 454, 456, 458, 460, 462, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 506, 507, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 570, 572, 574, 576, 578, 580, 582, 585, 587, 589, 591, 593, 595, 597, 599, 601, 604, 606, 608, 610, 612, 615, 617, 620, 623, 625, 627, 629, 631, 633, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 684, 686, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 754, 755, 756, 757, 758, 759, 763, 769, 772, 774, 780, 796, 798, 801, 803, 805, 807, 809, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 934, 936, 938, 940, 942, 944, 946, 948, 950, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 974, 976, 977, 978, 979, 980, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1074, 1076, 1078, 1080, 1082, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1114, 1116, 1119, 1122, 1124, 1126, 1128, 1130, 1132, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1189, 1191, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1225, 1227, 1229, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1265, 1266, 1267, 1268, 1269 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 97, 101, 111, 114, 97, 99, 116, 101, 114, -61, 105, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 67, 68, 69, 70, 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, 101, 111, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 124, 9, 13, 97, 101, 100, 97, 111, 32, 115, 108, 105, 110, 101, 97, -61, 99, -89, -61, -93, 111, 32, 100, 111, 32, 67, 101, 110, -61, -95, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 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, 97, 101, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 10, 116, -61, 10, 97, -93, 10, 10, 111, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 10, 97, 10, 115, 10, 117, 10, 97, 10, 110, 10, 100, 97, 111, 32, 100, 111, 32, 67, 101, 110, 97, 32, 110, 115, 120, 116, -61, 97, -93, 111, 113, 117, 101, 109, 97, 32, 100, 111, 32, 67, 101, 110, -61, 97, 101, 109, 112, 108, 111, 115, 58, 10, 10, 10, 32, 35, 67, 70, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 117, 110, 99, 100, 105, 111, 110, 97, 108, 105, 100, 97, 100, 101, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 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, 97, 101, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 97, 101, 10, 100, 10, 97, 111, 10, 32, 115, 10, 108, 10, 105, 10, 110, 10, 101, 10, 97, -61, 10, 99, -89, 10, -61, 10, -93, 10, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, 10, 97, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, 10, 97, 10, 32, 110, 115, 10, 116, -61, 10, 97, -93, 10, 10, 111, 10, 113, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 10, 97, 10, 115, 10, 117, 10, 97, 10, 110, 10, 100, 97, 115, 117, 97, 110, 100, 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, 67, 68, 69, 70, 77, 81, 124, 9, 13, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 32, 58, 115, 10, 100, 10, 101, 10, 32, 10, 70, 10, 117, 10, 110, 10, 100, 10, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 101, 10, 108, 10, 105, 10, 110, 10, 101, 10, 97, -61, 10, 99, -89, 10, -61, 10, -93, 10, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 105, 10, 97, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, 10, 97, 10, 115, 120, 10, 113, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, 97, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 115, 10, 117, 10, 110, 10, 99, 100, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 110, -61, 97, -95, 114, 105, 111, 32, 58, 115, 100, 101, 32, 70, 117, 110, 100, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 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, 97, 101, 111, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 100, 10, 101, 10, 32, 10, 70, 10, 117, 10, 110, 10, 100, 10, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 97, 101, 10, 100, 10, 97, 111, 10, 32, 115, 10, 108, 10, 105, 10, 110, 10, 101, 10, 97, -61, 10, 99, -89, 10, -61, 10, -93, 10, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 105, 10, 97, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, 10, 97, 10, 32, 110, 115, 10, 116, -61, 10, 97, -93, 10, 10, 111, 10, 113, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, 97, 10, 117, 10, 110, 10, 99, 100, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 10, 97, 10, 115, 10, 117, 10, 97, 10, 110, 10, 100, 110, 116, 101, 120, 116, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 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, 4, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 14, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 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, 1, 1, 4, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 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, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3, 3, 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, 4, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 14, 2, 3, 2, 2, 2, 2, 4, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 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, 4, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 137, 139, 141, 143, 145, 147, 149, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 228, 231, 234, 237, 240, 243, 246, 250, 253, 256, 259, 262, 265, 268, 271, 287, 290, 292, 295, 298, 300, 302, 304, 306, 308, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 412, 415, 418, 421, 424, 427, 430, 434, 437, 440, 443, 446, 449, 452, 455, 458, 462, 465, 468, 471, 474, 477, 480, 484, 488, 492, 495, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 587, 589, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 649, 652, 655, 658, 661, 664, 667, 670, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 736, 738, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 832, 835, 838, 841, 844, 847, 850, 854, 857, 860, 863, 866, 869, 872, 875, 878, 882, 885, 888, 891, 894, 898, 901, 905, 909, 912, 915, 918, 921, 924, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 999, 1002, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1118, 1124, 1128, 1131, 1137, 1153, 1156, 1160, 1163, 1166, 1169, 1172, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1417, 1420, 1422, 1424, 1426, 1428, 1432, 1434, 1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1564, 1567, 1570, 1573, 1576, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1623, 1626, 1630, 1634, 1637, 1640, 1643, 1646, 1649, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1733, 1736, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1786, 1789, 1792, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1846, 1848, 1850, 1852, 1854 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 16, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 17, 0, 18, 0, 20, 21, 19, 23, 24, 22, 27, 26, 28, 26, 25, 31, 30, 32, 30, 29, 31, 30, 33, 30, 29, 31, 30, 34, 30, 29, 36, 35, 35, 0, 3, 37, 37, 0, 39, 40, 38, 3, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 58, 56, 60, 61, 59, 0, 0, 0, 0, 62, 63, 64, 63, 63, 66, 65, 62, 3, 67, 8, 67, 0, 68, 69, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 78, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 86, 85, 88, 87, 88, 89, 90, 91, 90, 92, 93, 94, 95, 89, 87, 88, 96, 87, 88, 97, 87, 88, 98, 87, 88, 99, 87, 88, 100, 87, 88, 101, 87, 88, 102, 87, 88, 103, 87, 88, 104, 87, 88, 105, 87, 88, 106, 87, 88, 107, 87, 88, 108, 87, 88, 109, 87, 88, 110, 111, 112, 87, 88, 113, 87, 88, 114, 87, 88, 115, 87, 88, 116, 87, 88, 117, 87, 88, 118, 87, 119, 88, 120, 87, 120, 88, 87, 88, 121, 87, 88, 122, 87, 88, 123, 87, 88, 124, 87, 88, 125, 87, 88, 126, 87, 128, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 127, 0, 141, 142, 0, 143, 0, 144, 144, 0, 55, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 171, 170, 173, 172, 173, 174, 175, 176, 177, 175, 178, 179, 180, 181, 182, 183, 174, 172, 173, 184, 172, 173, 185, 172, 173, 186, 172, 173, 187, 172, 173, 188, 172, 173, 189, 172, 173, 190, 172, 173, 191, 172, 173, 192, 172, 173, 193, 172, 173, 194, 172, 173, 195, 172, 173, 196, 172, 173, 197, 172, 173, 198, 172, 173, 199, 200, 172, 173, 201, 172, 173, 202, 172, 173, 203, 172, 173, 204, 172, 173, 205, 172, 173, 206, 172, 207, 173, 208, 172, 208, 173, 172, 173, 209, 172, 173, 210, 172, 173, 211, 172, 173, 212, 172, 173, 213, 172, 173, 198, 172, 173, 214, 172, 215, 173, 216, 172, 216, 173, 172, 173, 217, 172, 173, 218, 172, 173, 213, 172, 173, 219, 172, 173, 220, 172, 173, 221, 221, 172, 173, 198, 222, 172, 173, 198, 223, 172, 173, 224, 172, 225, 173, 226, 172, 226, 173, 172, 173, 222, 172, 173, 227, 172, 173, 228, 172, 173, 229, 172, 173, 230, 172, 173, 231, 172, 173, 232, 172, 173, 233, 172, 173, 234, 172, 173, 235, 172, 173, 236, 172, 173, 237, 172, 173, 238, 172, 173, 213, 172, 173, 239, 172, 173, 222, 172, 173, 240, 172, 173, 241, 172, 173, 242, 172, 173, 226, 172, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 165, 0, 55, 252, 253, 254, 0, 255, 0, 256, 257, 0, 257, 0, 145, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 164, 165, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 278, 277, 280, 279, 280, 281, 282, 283, 284, 282, 281, 279, 280, 285, 279, 280, 286, 279, 280, 287, 279, 280, 288, 279, 280, 289, 279, 280, 290, 279, 280, 291, 279, 292, 280, 293, 279, 293, 280, 279, 280, 294, 279, 280, 295, 279, 280, 296, 279, 280, 297, 279, 280, 298, 279, 280, 299, 279, 280, 300, 279, 280, 301, 279, 280, 302, 279, 280, 303, 279, 280, 304, 279, 280, 305, 279, 280, 306, 279, 280, 307, 279, 280, 308, 279, 280, 309, 279, 280, 310, 279, 280, 311, 279, 280, 298, 279, 312, 0, 313, 0, 314, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 83, 0, 325, 0, 326, 0, 328, 327, 330, 329, 330, 331, 332, 333, 334, 332, 335, 336, 337, 338, 339, 340, 331, 329, 330, 341, 329, 330, 342, 329, 330, 343, 329, 330, 344, 329, 330, 345, 329, 330, 346, 329, 330, 347, 329, 330, 348, 329, 330, 349, 329, 330, 350, 329, 330, 351, 329, 330, 352, 329, 330, 353, 329, 330, 354, 329, 330, 355, 329, 330, 356, 357, 329, 330, 358, 329, 330, 359, 329, 330, 360, 329, 330, 361, 329, 330, 362, 329, 330, 363, 329, 364, 330, 365, 329, 365, 330, 329, 330, 366, 329, 330, 367, 329, 330, 368, 329, 330, 369, 329, 330, 370, 329, 330, 355, 329, 330, 371, 329, 372, 330, 373, 329, 373, 330, 329, 330, 374, 329, 330, 375, 329, 330, 370, 329, 330, 376, 377, 329, 330, 378, 329, 330, 379, 379, 329, 330, 355, 380, 329, 330, 381, 329, 330, 382, 329, 330, 383, 329, 330, 384, 329, 330, 385, 329, 386, 330, 387, 329, 388, 330, 329, 389, 330, 329, 390, 330, 329, 330, 391, 329, 330, 392, 329, 330, 393, 329, 330, 394, 329, 330, 395, 329, 330, 396, 329, 330, 397, 329, 330, 398, 329, 372, 330, 329, 330, 399, 329, 330, 400, 329, 330, 401, 329, 330, 402, 329, 330, 403, 329, 330, 404, 329, 330, 405, 329, 330, 406, 329, 330, 407, 329, 330, 373, 329, 330, 355, 408, 409, 329, 330, 410, 329, 411, 330, 412, 329, 412, 330, 329, 330, 380, 329, 330, 413, 329, 330, 414, 329, 330, 415, 329, 330, 416, 329, 330, 417, 329, 330, 418, 329, 330, 419, 329, 330, 420, 329, 330, 421, 329, 330, 422, 329, 330, 357, 329, 330, 423, 329, 330, 424, 329, 330, 425, 329, 330, 426, 329, 330, 427, 329, 330, 428, 329, 330, 429, 329, 330, 430, 329, 330, 431, 329, 330, 432, 329, 330, 433, 329, 330, 434, 329, 330, 370, 329, 330, 435, 329, 330, 380, 329, 330, 436, 329, 330, 437, 329, 330, 438, 329, 330, 412, 329, 439, 0, 145, 0, 440, 0, 441, 0, 442, 0, 257, 0, 443, 444, 443, 0, 447, 446, 448, 449, 446, 445, 0, 451, 452, 450, 0, 451, 450, 447, 453, 451, 452, 453, 450, 447, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 454, 0, 88, 467, 87, 468, 88, 469, 87, 469, 88, 87, 88, 470, 87, 88, 471, 87, 88, 472, 87, 88, 473, 126, 125, 87, 88, 474, 87, 88, 475, 87, 88, 476, 87, 88, 477, 87, 88, 478, 87, 88, 479, 87, 88, 480, 87, 88, 125, 87, 88, 481, 87, 88, 482, 87, 88, 483, 87, 88, 484, 87, 88, 480, 87, 88, 485, 87, 88, 486, 87, 88, 487, 87, 88, 488, 87, 88, 489, 87, 88, 490, 87, 491, 88, 492, 87, 493, 88, 87, 494, 88, 87, 495, 88, 87, 88, 496, 87, 88, 497, 87, 88, 498, 87, 88, 499, 87, 88, 500, 87, 88, 501, 87, 88, 502, 87, 88, 503, 87, 504, 88, 87, 505, 88, 87, 88, 506, 87, 88, 480, 87, 88, 507, 87, 88, 508, 87, 88, 509, 87, 88, 510, 87, 88, 511, 87, 88, 512, 87, 88, 513, 87, 88, 514, 87, 88, 515, 87, 88, 505, 87, 88, 516, 517, 87, 88, 518, 87, 88, 519, 87, 88, 520, 87, 88, 521, 87, 88, 522, 87, 88, 523, 87, 88, 524, 87, 88, 525, 87, 88, 526, 87, 88, 527, 87, 88, 528, 87, 88, 529, 87, 504, 88, 505, 87, 88, 530, 87, 88, 531, 87, 88, 532, 87, 88, 533, 87, 88, 534, 87, 88, 125, 87, 88, 535, 87, 88, 536, 87, 88, 537, 480, 87, 88, 538, 87, 88, 539, 87, 88, 540, 87, 88, 541, 87, 88, 542, 87, 88, 543, 87, 88, 544, 87, 88, 545, 87, 88, 546, 87, 88, 125, 87, 547, 0, 548, 549, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 554, 275, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 315, 0, 562, 561, 564, 563, 564, 565, 566, 567, 568, 566, 569, 570, 571, 572, 573, 574, 565, 563, 564, 575, 563, 564, 576, 563, 564, 577, 563, 564, 578, 563, 564, 579, 563, 564, 580, 563, 564, 581, 563, 564, 582, 563, 564, 583, 563, 564, 584, 563, 564, 585, 563, 564, 586, 563, 564, 587, 563, 564, 588, 563, 564, 589, 563, 564, 590, 591, 592, 563, 564, 593, 563, 564, 594, 563, 564, 595, 563, 564, 596, 563, 564, 597, 563, 564, 598, 563, 599, 564, 600, 563, 600, 564, 563, 564, 601, 563, 564, 602, 563, 564, 603, 563, 564, 604, 563, 564, 605, 563, 564, 589, 563, 564, 606, 563, 607, 564, 608, 563, 608, 564, 563, 564, 609, 563, 564, 610, 563, 564, 611, 563, 564, 612, 589, 563, 564, 613, 563, 564, 614, 563, 564, 615, 563, 564, 616, 563, 564, 617, 563, 564, 618, 563, 564, 619, 563, 564, 605, 563, 564, 620, 563, 564, 621, 563, 564, 622, 563, 564, 623, 563, 564, 619, 563, 564, 624, 625, 563, 564, 626, 563, 564, 627, 627, 563, 564, 589, 628, 563, 564, 629, 563, 564, 630, 563, 564, 631, 563, 564, 632, 563, 564, 633, 563, 634, 564, 635, 563, 636, 564, 563, 637, 564, 563, 638, 564, 563, 564, 639, 563, 564, 640, 563, 564, 641, 563, 564, 642, 563, 564, 643, 563, 564, 644, 563, 564, 645, 563, 564, 646, 563, 647, 564, 563, 648, 564, 563, 564, 649, 563, 564, 619, 563, 564, 650, 563, 564, 651, 563, 564, 652, 563, 564, 653, 563, 564, 654, 563, 564, 655, 563, 564, 656, 563, 564, 657, 563, 564, 658, 563, 564, 648, 563, 564, 589, 659, 660, 563, 564, 661, 563, 662, 564, 663, 563, 663, 564, 563, 564, 628, 563, 564, 664, 563, 564, 665, 563, 564, 666, 563, 564, 667, 563, 564, 668, 563, 564, 669, 563, 564, 670, 563, 564, 671, 563, 564, 672, 563, 564, 673, 563, 564, 674, 563, 564, 675, 563, 647, 564, 648, 563, 564, 676, 563, 564, 677, 563, 564, 678, 619, 563, 564, 679, 563, 564, 680, 563, 564, 681, 563, 564, 682, 563, 564, 683, 563, 564, 684, 563, 564, 685, 563, 564, 686, 563, 564, 687, 563, 564, 605, 563, 564, 688, 563, 564, 628, 563, 564, 689, 563, 564, 690, 563, 564, 691, 563, 564, 663, 563, 692, 0, 693, 0, 694, 0, 695, 0, 315, 0, 696, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 607, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 463, 602, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 53, 54, 54, 4, 55, 69, 398, 430, 450, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 4, 70, 378, 393, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 4, 4, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 86, 89, 87, 88, 31, 90, 91, 92, 93, 94, 95, 179, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 113, 114, 114, 4, 115, 129, 130, 151, 155, 160, 173, 175, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 4, 84, 131, 145, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 152, 153, 154, 129, 156, 157, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 176, 177, 178, 180, 181, 182, 183, 184, 185, 186, 187, 188, 190, 194, 207, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 216, 215, 216, 216, 4, 217, 232, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 84, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 247, 248, 258, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 262, 261, 262, 262, 4, 263, 277, 278, 299, 331, 347, 360, 362, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 4, 84, 279, 293, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 296, 297, 298, 300, 303, 301, 302, 277, 304, 305, 306, 307, 308, 309, 321, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 332, 336, 333, 334, 335, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 363, 364, 365, 367, 369, 370, 371, 372, 373, 374, 376, 377, 375, 373, 374, 375, 373, 376, 377, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 405, 420, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 444, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 445, 446, 447, 448, 449, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 470, 477, 471, 472, 473, 474, 475, 476, 478, 479, 478, 479, 479, 4, 480, 494, 495, 530, 565, 583, 596, 598, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 4, 84, 496, 510, 525, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 526, 527, 528, 529, 531, 534, 532, 533, 494, 535, 536, 537, 538, 539, 540, 555, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 556, 557, 558, 559, 560, 561, 562, 563, 564, 566, 570, 567, 568, 569, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 597, 599, 600, 601, 603, 604, 605, 606, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 81, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 607; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/pt.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1089 "lib/gherkin/lexer/pt.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/pt.rb.rl" # line 1098 "lib/gherkin/lexer/pt.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/pt.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/pt.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/pt.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/pt.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/pt.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/pt.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/pt.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/pt.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/pt.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/pt.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/pt.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/pt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/pt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/pt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/pt.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/pt.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/pt.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/pt.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/pt.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/pt.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/pt.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/pt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/pt.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/pt.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1342 "lib/gherkin/lexer/pt.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/pt.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1381 "lib/gherkin/lexer/pt.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/pt.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/de.rb0000644000004100000410000012776012244512574017531 0ustar www-datawww-data # line 1 "ragel/i18n/de.rb.rl" require 'gherkin/native' module Gherkin module Lexer class De #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/de.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/de.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 491, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 529, 530, 531, 532, 533, 534, 535, 537, 538, 539, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 875, 876, 877, 881, 887, 890, 892, 898, 916 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 70, 71, 83, 85, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 70, 71, 83, 85, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 110, 101, 114, 103, 101, 110, 111, 109, 109, 101, 110, 101, 105, 115, 112, 105, 101, 108, 101, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 70, 71, 83, 85, 87, 124, 9, 13, 97, 110, 117, 110, 107, 116, 105, 111, 110, 97, 108, 105, 116, -61, -92, 116, 58, 10, 10, 10, 32, 35, 37, 64, 66, 70, 71, 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, 101, 10, 105, 10, 115, 10, 112, 10, 105, 10, 101, 10, 108, 10, 101, 10, 58, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 114, 10, 117, 10, 110, 10, 100, 10, 108, 10, 97, 10, 103, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 114, 10, 105, 10, 115, 10, 115, 101, 114, 103, 101, 98, 101, 110, 32, 115, 101, 105, 32, 101, 117, 110, 100, 108, 97, 103, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 70, 71, 83, 85, 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, 98, 110, 10, 101, 10, 114, 10, 103, 10, 101, 10, 110, 10, 111, 10, 109, 10, 109, 10, 101, 10, 110, 10, 97, 10, 110, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 101, 10, 103, 10, 101, 10, 98, 10, 101, 10, 110, 10, 32, 10, 115, 10, 101, 10, 105, 10, 32, 101, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 114, 10, 105, 10, 115, 10, 115, 10, 110, 10, 100, 10, 101, 122, 101, 110, 97, 114, 105, 111, 58, 103, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 70, 71, 83, 85, 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, 98, 110, 10, 101, 10, 114, 10, 103, 10, 101, 10, 110, 10, 111, 10, 109, 10, 109, 10, 101, 10, 110, 10, 97, 10, 110, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 101, 114, 10, 103, 10, 101, 10, 98, 10, 101, 10, 110, 10, 32, 10, 115, 10, 101, 10, 105, 10, 32, 101, 10, 117, 10, 110, 10, 100, 10, 108, 10, 97, 10, 103, 10, 101, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 114, 10, 105, 10, 115, 10, 115, 10, 110, 10, 100, 10, 101, 114, 117, 110, 100, 114, 105, 115, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 70, 71, 83, 85, 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, 98, 110, 10, 101, 10, 114, 10, 103, 10, 101, 10, 110, 10, 111, 10, 109, 10, 109, 10, 101, 10, 110, 10, 97, 10, 110, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 101, 10, 103, 10, 101, 10, 98, 10, 101, 10, 110, 10, 32, 10, 115, 10, 101, 10, 105, 10, 32, 101, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 110, 10, 100, 10, 101, 110, 100, 101, 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, 68, 70, 71, 83, 85, 87, 124, 9, 13, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 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, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 13, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 4, 3, 2, 4, 16, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 705, 708, 711, 714, 717, 720, 723, 726, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 765, 767, 769, 771, 773, 775, 777, 780, 782, 784, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1276, 1278, 1280, 1284, 1290, 1294, 1297, 1303, 1321 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 73, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 91, 90, 93, 92, 93, 94, 95, 96, 95, 94, 92, 93, 97, 92, 93, 98, 92, 93, 99, 92, 93, 100, 92, 93, 101, 92, 93, 102, 92, 93, 103, 92, 93, 104, 92, 93, 105, 92, 93, 106, 92, 93, 107, 92, 108, 93, 92, 109, 93, 92, 93, 110, 92, 93, 111, 92, 113, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 112, 0, 128, 0, 80, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 145, 144, 147, 146, 147, 148, 149, 150, 149, 151, 152, 153, 154, 148, 146, 147, 155, 146, 147, 156, 146, 147, 157, 146, 147, 158, 146, 147, 159, 146, 147, 160, 146, 147, 161, 146, 147, 162, 146, 147, 163, 146, 147, 164, 146, 147, 165, 146, 147, 166, 146, 147, 167, 146, 147, 168, 146, 147, 169, 146, 147, 170, 146, 147, 171, 146, 147, 172, 146, 147, 173, 146, 147, 174, 146, 147, 175, 146, 147, 176, 146, 147, 177, 146, 147, 178, 146, 147, 179, 146, 147, 180, 146, 147, 181, 146, 147, 182, 146, 147, 183, 146, 147, 184, 146, 147, 185, 146, 147, 186, 146, 147, 187, 146, 147, 188, 146, 189, 147, 146, 190, 147, 146, 147, 176, 146, 147, 191, 146, 147, 192, 146, 147, 193, 146, 147, 194, 146, 147, 195, 146, 147, 196, 146, 147, 175, 146, 147, 197, 146, 147, 198, 146, 147, 199, 146, 147, 200, 146, 147, 201, 146, 147, 202, 146, 147, 203, 146, 147, 177, 204, 146, 147, 205, 146, 147, 206, 146, 147, 207, 146, 147, 208, 146, 147, 209, 146, 147, 210, 146, 147, 211, 146, 147, 176, 146, 212, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 57, 80, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 232, 231, 234, 233, 234, 235, 236, 237, 238, 236, 239, 240, 241, 242, 243, 244, 245, 235, 233, 234, 246, 233, 234, 247, 233, 234, 248, 233, 234, 249, 233, 234, 250, 233, 234, 251, 233, 234, 252, 233, 234, 253, 233, 234, 254, 233, 234, 255, 233, 234, 256, 233, 234, 257, 233, 234, 258, 233, 234, 259, 233, 234, 260, 233, 234, 261, 262, 233, 234, 263, 233, 234, 264, 233, 234, 265, 233, 234, 266, 233, 234, 267, 233, 234, 268, 233, 234, 269, 233, 234, 270, 233, 234, 271, 233, 234, 264, 233, 234, 272, 233, 234, 271, 233, 234, 273, 233, 234, 274, 233, 234, 275, 233, 234, 276, 233, 234, 277, 233, 234, 278, 233, 234, 279, 233, 234, 280, 233, 234, 281, 233, 234, 282, 233, 234, 283, 233, 284, 234, 233, 285, 234, 233, 234, 286, 233, 234, 260, 233, 234, 287, 233, 234, 288, 233, 234, 289, 233, 234, 290, 233, 234, 291, 233, 234, 292, 233, 234, 293, 233, 234, 294, 233, 234, 295, 233, 234, 296, 233, 234, 260, 271, 233, 234, 297, 233, 234, 298, 233, 234, 299, 233, 234, 300, 233, 234, 301, 233, 234, 302, 233, 234, 303, 233, 234, 260, 304, 233, 234, 305, 233, 234, 306, 233, 234, 307, 233, 234, 308, 233, 234, 309, 233, 234, 310, 233, 234, 311, 233, 234, 286, 233, 234, 312, 233, 234, 264, 233, 234, 272, 233, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 321, 0, 323, 322, 325, 324, 325, 326, 327, 328, 329, 327, 330, 331, 332, 333, 334, 335, 336, 326, 324, 325, 337, 324, 325, 338, 324, 325, 339, 324, 325, 340, 324, 325, 341, 324, 325, 342, 324, 325, 343, 324, 325, 344, 324, 325, 345, 324, 325, 346, 324, 325, 347, 324, 325, 348, 324, 325, 349, 324, 325, 350, 324, 325, 351, 324, 325, 352, 353, 324, 325, 354, 324, 325, 355, 324, 325, 356, 324, 325, 357, 324, 325, 358, 324, 325, 359, 324, 325, 360, 324, 325, 361, 324, 325, 362, 324, 325, 355, 324, 325, 363, 324, 325, 362, 324, 325, 364, 324, 325, 365, 324, 325, 366, 324, 325, 367, 324, 325, 368, 324, 325, 369, 324, 325, 370, 324, 325, 371, 324, 325, 372, 324, 325, 373, 324, 325, 374, 324, 375, 325, 324, 376, 325, 324, 325, 377, 324, 325, 351, 324, 325, 378, 379, 324, 325, 380, 324, 325, 381, 324, 325, 382, 324, 325, 383, 324, 325, 384, 324, 325, 385, 324, 325, 386, 324, 325, 387, 324, 325, 388, 324, 325, 351, 362, 324, 325, 389, 324, 325, 390, 324, 325, 391, 324, 325, 392, 324, 325, 393, 324, 325, 394, 324, 325, 377, 324, 325, 395, 324, 325, 396, 324, 325, 397, 324, 325, 398, 324, 325, 399, 324, 325, 400, 324, 325, 401, 324, 325, 351, 402, 324, 325, 403, 324, 325, 404, 324, 325, 405, 324, 325, 406, 324, 325, 407, 324, 325, 408, 324, 325, 409, 324, 325, 377, 324, 325, 410, 324, 325, 355, 324, 325, 363, 324, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 421, 420, 423, 422, 423, 424, 425, 426, 427, 425, 428, 429, 430, 431, 432, 433, 434, 424, 422, 423, 435, 422, 423, 436, 422, 423, 437, 422, 423, 438, 422, 423, 439, 422, 423, 440, 422, 423, 441, 422, 423, 442, 422, 423, 443, 422, 423, 444, 422, 423, 445, 422, 423, 446, 422, 423, 447, 422, 423, 448, 422, 423, 449, 422, 423, 450, 451, 422, 423, 452, 422, 423, 453, 422, 423, 454, 422, 423, 455, 422, 423, 456, 422, 423, 457, 422, 423, 458, 422, 423, 459, 422, 423, 460, 422, 423, 453, 422, 423, 461, 422, 423, 460, 422, 423, 462, 422, 423, 463, 422, 423, 464, 422, 423, 465, 422, 423, 466, 422, 423, 467, 422, 423, 468, 422, 423, 469, 422, 423, 470, 422, 423, 471, 422, 423, 472, 422, 473, 423, 422, 474, 423, 422, 423, 475, 422, 423, 449, 422, 423, 476, 422, 423, 477, 422, 423, 478, 422, 423, 479, 422, 423, 480, 422, 423, 481, 422, 423, 482, 422, 423, 483, 422, 423, 484, 422, 423, 485, 422, 423, 449, 460, 422, 423, 486, 422, 423, 487, 422, 423, 488, 422, 423, 489, 422, 423, 490, 422, 423, 491, 422, 423, 475, 422, 423, 492, 422, 423, 453, 422, 423, 461, 422, 493, 0, 73, 0, 128, 0, 494, 495, 494, 0, 498, 497, 499, 500, 497, 496, 0, 502, 503, 501, 0, 502, 501, 498, 504, 502, 503, 504, 501, 498, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 505, 0, 520, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 427, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 40, 39, 31, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 58, 59, 59, 4, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 4, 4, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 94, 95, 95, 4, 96, 110, 119, 133, 140, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 4, 111, 112, 113, 114, 115, 116, 117, 118, 75, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 167, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 176, 177, 177, 4, 178, 192, 193, 204, 206, 221, 232, 248, 250, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 4, 75, 194, 196, 195, 192, 197, 198, 199, 200, 201, 202, 203, 205, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 252, 253, 254, 255, 256, 257, 258, 259, 342, 260, 261, 260, 261, 261, 4, 262, 276, 277, 288, 290, 305, 323, 339, 341, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 4, 75, 278, 280, 279, 276, 281, 282, 283, 284, 285, 286, 287, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 316, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 340, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 352, 353, 353, 4, 354, 368, 369, 380, 382, 397, 408, 415, 417, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 4, 75, 370, 372, 371, 368, 373, 374, 375, 376, 377, 378, 379, 381, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 409, 410, 411, 412, 413, 414, 416, 419, 421, 422, 423, 425, 426, 424, 422, 423, 424, 422, 425, 426, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 427; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/de.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 825 "lib/gherkin/lexer/de.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/de.rb.rl" # line 834 "lib/gherkin/lexer/de.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/de.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/de.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/de.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/de.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/de.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/de.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/de.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/de.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/de.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/de.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/de.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/de.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/de.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/de.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/de.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/de.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/de.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/de.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/de.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/de.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/de.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/de.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/de.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/de.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1078 "lib/gherkin/lexer/de.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/de.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1117 "lib/gherkin/lexer/de.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/de.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/fi.rb0000644000004100000410000010666412244512574017537 0ustar www-datawww-data # line 1 "ragel/i18n/fi.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Fi #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/fi.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/fi.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 208, 209, 211, 212, 213, 215, 216, 217, 218, 219, 220, 221, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 251, 252, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 350, 352, 354, 356, 359, 361, 363, 365, 367, 369, 371, 373, 374, 375, 376, 377, 378, 379, 380, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 480, 481, 482, 483, 484, 485, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 591, 593, 595, 597, 599, 603, 609, 612, 614, 620, 636, 638, 641, 643, 645, 648, 650, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 97, 117, 110, 117, 116, 116, 105, 105, 108, 109, 101, 116, 101, 116, 97, 97, 105, 110, 97, 105, 115, 117, 117, 115, 58, 10, 10, 10, 32, 35, 37, 64, 79, 84, 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, 109, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 32, 34, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 124, 9, 13, 97, 112, 117, 97, 117, 107, 115, 115, 101, 116, 58, 10, 10, 10, 32, 35, 79, 124, 9, 13, 10, 109, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 58, 97, 10, 10, 10, 32, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 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, 97, 10, 117, 10, 110, 10, 117, 10, 116, 10, 116, 10, 105, 10, 105, 10, 108, 109, 10, 101, 10, 116, 10, 101, 10, 116, 10, 97, 10, 97, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 97, 10, 112, 117, 10, 97, 10, 117, 10, 115, 10, 58, 97, 10, 105, 10, 104, 10, 105, 10, 111, 10, 115, 10, 116, 10, 97, 105, 104, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 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, 97, 10, 117, 10, 110, 10, 117, 10, 116, 10, 116, 10, 105, 10, 105, 10, 108, 109, 10, 101, 10, 116, 10, 101, 10, 116, 10, 97, 10, 97, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 97, 10, 112, 10, 97, 115, 116, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 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, 97, 10, 117, 10, 110, 10, 117, 10, 116, 10, 116, 10, 105, 10, 105, 10, 108, 109, 10, 101, 10, 116, 10, 101, 10, 116, 10, 97, 10, 97, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 97, 10, 112, 10, 97, 10, 117, 10, 115, 10, 58, 97, 10, 105, 10, 104, 10, 105, 10, 111, 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, 74, 75, 77, 78, 79, 84, 124, 9, 13, 10, 97, 10, 112, 117, 10, 97, 10, 117, 10, 107, 115, 10, 115, 10, 101, 10, 116, 10, 58, 97, 10, 105, 10, 104, 10, 105, 10, 111, 10, 115, 10, 116, 10, 97, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 12, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 4, 3, 2, 4, 14, 2, 3, 2, 2, 3, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 135, 137, 139, 141, 143, 145, 147, 149, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 283, 285, 288, 290, 292, 295, 297, 299, 301, 303, 305, 307, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 349, 351, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 490, 493, 496, 499, 503, 506, 509, 512, 515, 518, 521, 524, 526, 528, 530, 532, 534, 536, 538, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 681, 683, 685, 687, 689, 691, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 842, 845, 848, 851, 854, 858, 864, 868, 871, 877, 893, 896, 900, 903, 906, 910, 913, 916, 919, 923, 926, 929, 932, 935, 938, 941, 944 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 16, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 0, 17, 0, 18, 0, 20, 21, 19, 23, 24, 22, 27, 26, 28, 26, 25, 31, 30, 32, 30, 29, 31, 30, 33, 30, 29, 31, 30, 34, 30, 29, 36, 35, 35, 0, 3, 37, 37, 0, 39, 40, 38, 3, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 58, 56, 60, 61, 59, 0, 0, 0, 0, 62, 63, 64, 63, 63, 66, 65, 62, 3, 67, 8, 67, 0, 68, 0, 69, 0, 68, 0, 70, 0, 71, 0, 72, 0, 73, 0, 69, 0, 74, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 69, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 91, 90, 93, 92, 93, 94, 95, 96, 95, 97, 98, 94, 92, 93, 99, 92, 93, 100, 92, 93, 101, 92, 93, 102, 92, 93, 103, 92, 93, 104, 92, 93, 105, 92, 93, 106, 92, 93, 107, 92, 93, 108, 92, 93, 109, 92, 93, 110, 92, 93, 111, 92, 93, 112, 92, 93, 113, 92, 93, 114, 92, 93, 115, 92, 93, 116, 92, 93, 117, 92, 93, 118, 92, 93, 119, 92, 93, 120, 92, 93, 121, 92, 93, 122, 92, 124, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 123, 0, 137, 0, 138, 139, 0, 140, 0, 141, 0, 142, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 149, 148, 151, 150, 151, 152, 153, 154, 153, 152, 150, 151, 155, 150, 151, 156, 150, 151, 157, 150, 151, 158, 150, 151, 159, 150, 151, 160, 150, 151, 161, 150, 151, 162, 150, 151, 163, 150, 151, 164, 150, 165, 166, 0, 168, 167, 170, 169, 170, 171, 172, 173, 174, 172, 175, 176, 177, 178, 179, 180, 171, 169, 170, 181, 169, 170, 182, 169, 170, 183, 169, 170, 184, 169, 170, 185, 169, 170, 186, 169, 170, 187, 169, 170, 188, 169, 170, 189, 169, 170, 190, 169, 170, 191, 169, 170, 192, 169, 170, 193, 169, 170, 194, 169, 170, 195, 169, 170, 196, 169, 170, 197, 169, 170, 196, 169, 170, 198, 169, 170, 199, 169, 170, 200, 169, 170, 201, 169, 170, 197, 169, 170, 202, 203, 169, 170, 204, 169, 170, 205, 169, 170, 206, 169, 170, 207, 169, 170, 208, 169, 170, 197, 169, 170, 209, 169, 170, 210, 169, 170, 211, 169, 170, 212, 169, 170, 213, 169, 170, 214, 169, 170, 215, 169, 170, 216, 169, 170, 195, 169, 170, 217, 169, 170, 218, 219, 169, 170, 220, 169, 170, 221, 169, 170, 222, 169, 170, 195, 223, 169, 170, 224, 169, 170, 225, 169, 170, 226, 169, 170, 216, 169, 170, 227, 169, 170, 228, 169, 170, 216, 169, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 235, 234, 237, 236, 237, 238, 239, 240, 241, 239, 242, 243, 244, 245, 246, 247, 238, 236, 237, 248, 236, 237, 249, 236, 237, 250, 236, 237, 251, 236, 237, 252, 236, 237, 253, 236, 237, 254, 236, 237, 255, 236, 237, 256, 236, 237, 257, 236, 237, 258, 236, 237, 259, 236, 237, 260, 236, 237, 261, 236, 237, 262, 236, 237, 263, 236, 237, 264, 236, 237, 263, 236, 237, 265, 236, 237, 266, 236, 237, 267, 236, 237, 268, 236, 237, 264, 236, 237, 269, 270, 236, 237, 271, 236, 237, 272, 236, 237, 273, 236, 237, 274, 236, 237, 275, 236, 237, 264, 236, 237, 276, 236, 237, 277, 236, 237, 278, 236, 237, 279, 236, 237, 280, 236, 237, 281, 236, 237, 282, 236, 237, 283, 236, 237, 262, 236, 237, 284, 236, 237, 285, 236, 237, 281, 236, 286, 0, 287, 0, 288, 0, 289, 0, 291, 290, 293, 292, 293, 294, 295, 296, 297, 295, 298, 299, 300, 301, 302, 303, 294, 292, 293, 304, 292, 293, 305, 292, 293, 306, 292, 293, 307, 292, 293, 308, 292, 293, 309, 292, 293, 310, 292, 293, 311, 292, 293, 312, 292, 293, 313, 292, 293, 314, 292, 293, 315, 292, 293, 316, 292, 293, 317, 292, 293, 318, 292, 293, 319, 292, 293, 320, 292, 293, 319, 292, 293, 321, 292, 293, 322, 292, 293, 323, 292, 293, 324, 292, 293, 320, 292, 293, 325, 326, 292, 293, 327, 292, 293, 328, 292, 293, 329, 292, 293, 330, 292, 293, 331, 292, 293, 320, 292, 293, 332, 292, 293, 333, 292, 293, 334, 292, 293, 335, 292, 293, 336, 292, 293, 337, 292, 293, 338, 292, 293, 339, 292, 293, 318, 292, 293, 340, 292, 293, 341, 292, 293, 342, 292, 293, 343, 292, 293, 344, 292, 293, 318, 345, 292, 293, 346, 292, 293, 347, 292, 293, 348, 292, 293, 339, 292, 349, 350, 349, 0, 353, 352, 354, 355, 352, 351, 0, 357, 358, 356, 0, 357, 356, 353, 359, 357, 358, 359, 356, 353, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 360, 0, 93, 373, 92, 93, 374, 375, 92, 93, 376, 92, 93, 377, 92, 93, 378, 379, 92, 93, 380, 92, 93, 381, 92, 93, 121, 92, 93, 122, 382, 92, 93, 383, 92, 93, 384, 92, 93, 385, 92, 93, 121, 92, 93, 386, 92, 93, 387, 92, 93, 121, 92, 388, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 295, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 31, 39, 41, 42, 37, 44, 46, 52, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 62, 63, 63, 4, 64, 78, 279, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 4, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 90, 91, 217, 92, 93, 94, 111, 95, 96, 97, 98, 99, 100, 99, 100, 100, 4, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 88, 112, 167, 113, 114, 113, 114, 114, 4, 115, 129, 130, 131, 133, 136, 138, 154, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 4, 88, 129, 132, 134, 135, 130, 137, 139, 145, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 164, 157, 158, 159, 160, 161, 162, 163, 165, 166, 168, 169, 170, 171, 172, 173, 174, 173, 174, 174, 4, 175, 189, 190, 191, 193, 196, 198, 214, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 4, 88, 189, 192, 194, 195, 190, 197, 199, 205, 200, 201, 202, 203, 204, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 218, 219, 220, 221, 222, 223, 222, 223, 223, 4, 224, 238, 239, 240, 242, 245, 247, 263, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 4, 88, 238, 241, 243, 244, 239, 246, 248, 254, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 277, 278, 276, 274, 275, 276, 274, 277, 278, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 280, 281, 292, 282, 283, 284, 287, 285, 286, 288, 289, 290, 291, 293, 294, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 295; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/fi.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 628 "lib/gherkin/lexer/fi.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/fi.rb.rl" # line 637 "lib/gherkin/lexer/fi.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/fi.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/fi.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/fi.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/fi.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/fi.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/fi.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/fi.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/fi.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/fi.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/fi.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/fi.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/fi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/fi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/fi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/fi.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/fi.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/fi.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/fi.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/fi.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/fi.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/fi.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/fi.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/fi.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/fi.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 881 "lib/gherkin/lexer/fi.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/fi.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 920 "lib/gherkin/lexer/fi.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/fi.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/en.rb0000644000004100000410000012676212244512574017544 0ustar www-datawww-data # line 1 "ragel/i18n/en.rb.rl" require 'gherkin/native' module Gherkin module Lexer class En #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/en.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/en.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 255, 257, 259, 261, 263, 265, 267, 269, 271, 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, 328, 331, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 459, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 518, 520, 522, 524, 526, 528, 530, 532, 534, 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, 587, 589, 591, 593, 594, 595, 596, 597, 598, 599, 600, 601, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 649, 651, 653, 655, 657, 659, 661, 663, 666, 668, 670, 672, 674, 676, 678, 680, 682, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 740, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 768, 772, 778, 781, 783, 789, 807, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 890, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 916 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 110, 105, 108, 105, 116, 121, 58, 10, 10, 10, 32, 35, 37, 64, 65, 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, 98, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, 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, 98, 110, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 100, 10, 117, 10, 115, 116, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 10, 100, 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, 115, 116, 105, 110, 101, 115, 115, 32, 78, 101, 101, 100, 120, 97, 109, 112, 108, 101, 115, 58, 10, 10, 10, 32, 35, 65, 66, 70, 124, 9, 13, 10, 98, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 117, 10, 115, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 10, 100, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 101, 97, 116, 117, 114, 101, 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, 98, 110, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 100, 10, 117, 10, 115, 116, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 10, 100, 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, 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, 98, 110, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 100, 10, 97, 117, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 10, 115, 116, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 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, 97, 117, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 10, 115, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 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, 100, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 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, 3, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 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, 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, 3, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 4, 3, 2, 4, 16, 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, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 140, 142, 144, 146, 148, 150, 152, 154, 156, 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 249, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 338, 341, 344, 347, 350, 353, 356, 359, 362, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 451, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 656, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 741, 744, 747, 750, 753, 756, 759, 762, 765, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 855, 857, 859, 861, 863, 865, 867, 869, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 939, 942, 945, 948, 951, 954, 958, 961, 964, 967, 970, 973, 976, 979, 982, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1068, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1110, 1114, 1120, 1124, 1127, 1133, 1151, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1274, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1313 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16, 2, 0, 17, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16, 2, 0, 18, 0, 19, 0, 21, 22, 20, 24, 25, 23, 28, 27, 29, 27, 26, 32, 31, 33, 31, 30, 32, 31, 34, 31, 30, 32, 31, 35, 31, 30, 37, 36, 36, 0, 3, 38, 38, 0, 40, 41, 39, 3, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 58, 59, 57, 61, 62, 60, 0, 0, 0, 0, 63, 64, 65, 64, 64, 67, 66, 63, 3, 68, 8, 68, 0, 69, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 78, 77, 80, 79, 80, 81, 82, 83, 82, 84, 85, 86, 87, 88, 81, 79, 80, 89, 79, 80, 90, 79, 80, 91, 79, 80, 92, 79, 80, 93, 79, 80, 94, 79, 80, 95, 79, 80, 96, 79, 80, 97, 79, 80, 98, 79, 80, 99, 79, 80, 100, 79, 80, 101, 79, 80, 102, 79, 80, 103, 79, 80, 104, 79, 80, 105, 79, 80, 106, 79, 80, 107, 79, 80, 108, 79, 80, 109, 79, 111, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 123, 124, 110, 0, 125, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 137, 136, 139, 138, 139, 140, 141, 142, 143, 141, 144, 145, 146, 147, 148, 149, 149, 140, 138, 139, 150, 138, 139, 151, 138, 139, 152, 138, 139, 153, 138, 139, 154, 138, 139, 155, 138, 139, 156, 138, 139, 157, 138, 139, 158, 138, 139, 159, 138, 139, 160, 138, 139, 161, 138, 139, 162, 138, 139, 163, 138, 139, 164, 138, 139, 165, 166, 138, 139, 167, 138, 139, 168, 138, 139, 169, 138, 139, 170, 138, 139, 171, 138, 139, 164, 138, 139, 172, 138, 139, 173, 138, 139, 174, 172, 138, 139, 175, 138, 139, 176, 138, 139, 177, 138, 139, 178, 138, 139, 179, 138, 139, 180, 138, 139, 181, 138, 139, 182, 138, 139, 183, 138, 139, 171, 138, 139, 184, 138, 139, 185, 138, 139, 186, 138, 139, 187, 138, 139, 188, 138, 139, 171, 138, 139, 189, 138, 139, 190, 138, 139, 191, 138, 139, 172, 138, 139, 192, 138, 139, 193, 138, 139, 194, 138, 139, 195, 138, 139, 196, 138, 139, 197, 138, 139, 198, 138, 139, 199, 164, 138, 139, 200, 201, 138, 139, 202, 138, 139, 203, 138, 139, 204, 138, 139, 205, 138, 139, 188, 138, 139, 206, 138, 139, 207, 138, 139, 208, 138, 139, 209, 138, 139, 210, 138, 139, 188, 138, 139, 190, 138, 211, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 75, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 231, 230, 233, 232, 233, 234, 235, 236, 237, 238, 235, 234, 232, 233, 239, 232, 233, 240, 232, 233, 241, 232, 233, 242, 232, 233, 243, 232, 233, 244, 232, 233, 245, 232, 233, 246, 232, 233, 247, 232, 233, 248, 232, 233, 249, 232, 233, 250, 232, 233, 251, 232, 233, 252, 232, 233, 253, 232, 233, 254, 232, 233, 255, 232, 233, 256, 232, 233, 244, 232, 233, 257, 232, 233, 258, 232, 233, 259, 232, 233, 260, 232, 233, 261, 232, 233, 244, 232, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 75, 0, 267, 0, 268, 0, 269, 0, 212, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 278, 228, 0, 279, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 289, 288, 291, 290, 291, 292, 293, 294, 295, 293, 296, 297, 298, 299, 300, 301, 301, 292, 290, 291, 302, 290, 291, 303, 290, 291, 304, 290, 291, 305, 290, 291, 306, 290, 291, 307, 290, 291, 308, 290, 291, 309, 290, 291, 310, 290, 291, 311, 290, 291, 312, 290, 291, 313, 290, 291, 314, 290, 291, 315, 290, 291, 316, 290, 291, 317, 318, 290, 291, 319, 290, 291, 320, 290, 291, 321, 290, 291, 322, 290, 291, 323, 290, 291, 316, 290, 291, 324, 290, 291, 325, 290, 291, 326, 324, 290, 291, 327, 290, 291, 328, 290, 291, 329, 290, 291, 330, 290, 291, 331, 290, 291, 332, 290, 291, 333, 290, 291, 334, 290, 291, 335, 290, 291, 323, 290, 291, 336, 290, 291, 337, 290, 291, 338, 290, 291, 339, 290, 291, 340, 290, 291, 323, 290, 291, 341, 290, 291, 342, 290, 291, 343, 290, 291, 324, 290, 291, 344, 290, 291, 345, 290, 291, 346, 290, 291, 347, 290, 291, 348, 290, 291, 349, 290, 291, 323, 290, 291, 342, 290, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 285, 0, 356, 355, 358, 357, 358, 359, 360, 361, 362, 360, 363, 364, 365, 366, 367, 368, 368, 359, 357, 358, 369, 357, 358, 370, 357, 358, 371, 357, 358, 372, 357, 358, 373, 357, 358, 374, 357, 358, 375, 357, 358, 376, 357, 358, 377, 357, 358, 378, 357, 358, 379, 357, 358, 380, 357, 358, 381, 357, 358, 382, 357, 358, 383, 357, 358, 384, 385, 357, 358, 386, 357, 358, 387, 357, 358, 388, 357, 358, 389, 357, 358, 390, 357, 358, 383, 357, 358, 391, 357, 358, 392, 393, 357, 358, 394, 357, 358, 395, 357, 358, 396, 357, 358, 397, 357, 358, 398, 357, 358, 399, 357, 358, 400, 357, 358, 390, 357, 358, 401, 391, 357, 358, 402, 357, 358, 403, 357, 358, 404, 357, 358, 405, 357, 358, 406, 357, 358, 407, 357, 358, 408, 357, 358, 409, 357, 358, 400, 357, 358, 410, 357, 358, 411, 357, 358, 412, 357, 358, 413, 357, 358, 414, 357, 358, 390, 357, 358, 415, 357, 358, 416, 357, 358, 417, 357, 358, 391, 357, 358, 418, 357, 358, 419, 357, 358, 420, 357, 358, 421, 357, 358, 422, 357, 358, 423, 357, 358, 424, 357, 358, 425, 383, 357, 358, 426, 427, 357, 358, 428, 357, 358, 429, 357, 358, 430, 357, 358, 431, 357, 358, 414, 357, 358, 432, 357, 358, 433, 357, 358, 434, 357, 358, 435, 357, 358, 436, 357, 358, 414, 357, 358, 416, 357, 268, 0, 437, 438, 437, 0, 441, 440, 442, 443, 440, 439, 0, 445, 446, 444, 0, 445, 444, 441, 447, 445, 446, 447, 444, 441, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 460, 461, 448, 0, 80, 462, 463, 79, 80, 464, 79, 80, 465, 79, 80, 466, 79, 80, 467, 79, 80, 468, 79, 80, 469, 79, 80, 470, 79, 80, 108, 79, 80, 471, 79, 80, 472, 79, 80, 473, 79, 80, 474, 79, 80, 475, 79, 80, 476, 79, 80, 477, 79, 80, 478, 79, 80, 479, 79, 80, 470, 79, 80, 480, 79, 80, 481, 79, 80, 482, 79, 80, 483, 79, 80, 484, 79, 80, 485, 79, 80, 108, 79, 80, 486, 79, 80, 487, 79, 80, 488, 79, 80, 489, 79, 80, 490, 79, 80, 108, 79, 80, 491, 79, 80, 492, 79, 80, 493, 79, 80, 494, 79, 80, 495, 79, 80, 496, 79, 80, 497, 79, 80, 498, 109, 108, 79, 80, 499, 500, 79, 80, 501, 79, 80, 502, 79, 80, 503, 79, 80, 504, 79, 80, 490, 79, 80, 505, 79, 80, 506, 79, 80, 507, 79, 80, 508, 79, 80, 509, 79, 80, 490, 79, 212, 0, 510, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 360, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 419, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 418, 39, 40, 41, 42, 43, 44, 45, 46, 45, 46, 46, 4, 47, 61, 366, 385, 392, 398, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 4, 62, 63, 64, 65, 66, 67, 68, 4, 4, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 360, 70, 148, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 80, 81, 81, 4, 82, 96, 97, 105, 117, 123, 127, 147, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 4, 68, 98, 104, 99, 100, 101, 102, 103, 96, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 124, 125, 126, 128, 129, 130, 131, 132, 133, 134, 135, 136, 141, 137, 138, 139, 140, 142, 143, 144, 145, 146, 149, 31, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 168, 169, 169, 4, 170, 177, 189, 171, 172, 173, 174, 175, 176, 68, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 190, 191, 192, 193, 194, 196, 197, 198, 199, 200, 202, 203, 204, 206, 207, 208, 209, 210, 211, 212, 213, 283, 214, 277, 215, 216, 217, 218, 219, 220, 221, 222, 223, 222, 223, 223, 4, 224, 238, 239, 247, 259, 265, 269, 276, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 4, 68, 240, 246, 241, 242, 243, 244, 245, 238, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 260, 261, 262, 263, 264, 266, 267, 268, 270, 271, 272, 273, 274, 275, 278, 279, 280, 281, 282, 284, 285, 284, 285, 285, 4, 286, 300, 301, 309, 328, 334, 338, 358, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 4, 68, 302, 308, 303, 304, 305, 306, 307, 300, 310, 318, 311, 312, 313, 314, 315, 316, 317, 319, 320, 321, 322, 323, 324, 325, 326, 327, 329, 330, 331, 332, 333, 335, 336, 337, 339, 340, 341, 342, 343, 344, 345, 346, 347, 352, 348, 349, 350, 351, 353, 354, 355, 356, 357, 360, 361, 362, 364, 365, 363, 361, 362, 363, 361, 364, 365, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 360, 367, 375, 368, 369, 370, 371, 372, 373, 374, 376, 377, 378, 379, 380, 381, 382, 383, 384, 386, 387, 388, 389, 390, 391, 393, 394, 395, 396, 397, 399, 400, 401, 402, 403, 404, 405, 406, 407, 412, 408, 409, 410, 411, 413, 414, 415, 416, 417, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 13, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 81, 84, 84, 84, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 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, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 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 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 419; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/en.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 815 "lib/gherkin/lexer/en.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/en.rb.rl" # line 824 "lib/gherkin/lexer/en.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/en.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/en.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/en.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/en.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/en.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/en.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/en.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/en.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/en.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/en.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/en.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/en.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/en.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/en.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/en.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/en.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/en.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/en.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/en.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/en.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/en.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/en.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/en.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/en.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1068 "lib/gherkin/lexer/en.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/en.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1107 "lib/gherkin/lexer/en.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/en.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/tt.rb0000644000004100000410000020217512244512574017562 0ustar www-datawww-data # line 1 "ragel/i18n/tt.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Tt #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/tt.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/tt.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 14, 20, 21, 22, 23, 25, 27, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 81, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 116, 117, 118, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 141, 146, 151, 156, 161, 165, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 191, 198, 203, 207, 213, 216, 218, 224, 237, 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, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 592, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 869, 870, 871, 872, 873, 874, 875, 876, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 962, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1192, 1193, 1204, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1498, 1499 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -48, -46, -45, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -110, -102, -101, -100, -99, -95, -45, -103, 32, 10, 13, 10, 13, -48, -46, -45, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -82, -70, -48, -47, -73, -48, -75, -48, -67, -47, -121, -45, -103, -48, -69, -48, -75, -48, -70, -48, -69, -48, -75, -48, -69, -48, -75, -48, -70, 58, 10, 10, -48, -46, 10, 32, 35, 37, 64, 9, 13, -102, -100, -95, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -47, 10, -120, 10, 10, 58, -48, -46, -45, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -104, -48, -77, -71, -68, -45, -103, -47, -128, -47, -126, -48, -72, -48, -70, -48, -68, -48, -80, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, -46, -45, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -45, 10, -72, 10, -47, 10, -127, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -69, 10, -48, 10, -80, 10, -47, 10, -128, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, 58, -67, 10, -47, 10, -117, 10, -46, 10, -93, 10, 10, 32, -47, 10, -126, 10, -45, 10, -87, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -69, 10, -48, 10, -75, 10, -47, 10, -120, 10, -48, 10, -75, 10, -82, 10, -48, -47, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -128, 10, -48, 10, -67, 10, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -69, 10, -45, 10, -103, 10, 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, -128, -48, -67, -45, -103, -48, -70, -48, -69, -45, -103, -47, -128, 58, 10, 10, -48, -46, 10, 32, 35, 124, 9, 13, -100, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, 10, 58, -82, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, -103, -48, -68, -48, -75, -47, -128, -48, -75, -47, -120, 58, 10, 10, -48, -46, -45, 10, 32, 35, 37, 42, 64, 9, 13, -110, -101, -100, -99, -95, 10, -45, 10, -103, 10, 10, 32, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, 10, 58, -45, 10, -103, 10, -47, 10, -126, 10, -48, 10, -72, 10, -46, 10, -105, 10, -45, 10, -103, 10, -48, 10, -76, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, 58, -67, 10, -47, 10, -117, 10, -46, 10, -93, 10, 10, 32, -47, 10, -126, 10, -45, 10, -87, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -69, 10, -48, 10, -75, 10, -47, 10, -120, 10, -48, 10, -75, 10, -82, -70, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, 10, -103, 10, -48, 10, -68, 10, -104, 10, -48, 10, -77, -71, -68, 10, -45, 10, -103, 10, -47, 10, -128, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -68, 10, -48, 10, -80, 10, 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, -45, -103, -48, -70, -48, -72, -48, -67, -48, -45, -72, -47, -127, -48, -80, -48, -69, -48, -69, -48, -80, -87, -48, -68, -48, -70, -48, -72, -48, -67, -45, -103, -47, -126, -48, -72, -46, -105, -45, -103, -48, -76, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, -48, 58, -67, -47, -117, -46, -93, 32, -47, -126, -45, -87, -48, -73, -48, -75, -48, -69, -48, -75, -47, -120, -48, -75, 58, 10, 10, -48, -46, -45, 10, 32, 35, 37, 42, 64, 9, 13, -110, -101, -100, -99, -95, 10, -45, 10, -103, 10, 10, 32, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, 10, 58, -45, 10, -103, 10, -47, 10, -126, 10, -48, 10, -72, 10, -46, 10, -105, 10, -45, 10, -103, 10, -48, 10, -76, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -82, -70, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, 10, -103, 10, -48, 10, -68, 10, -104, 10, -48, 10, -77, -71, -68, 10, -45, 10, -103, 10, -47, 10, -128, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -68, 10, -48, 10, -80, 10, 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, 10, -48, -46, -45, 10, 32, 35, 37, 42, 64, 9, 13, -110, -102, -101, -100, -99, -95, 10, -45, 10, -103, 10, 10, 32, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -47, 10, -120, 10, 10, 58, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -45, 10, -103, 10, -47, 10, -126, 10, -48, 10, -72, 10, -46, 10, -105, 10, -45, 10, -103, 10, -48, 10, -76, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, 58, -67, 10, -47, 10, -117, 10, -46, 10, -93, 10, 10, 32, -47, 10, -126, 10, -45, 10, -87, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -69, 10, -48, 10, -75, 10, -47, 10, -120, 10, -48, 10, -75, 10, -82, -70, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, 10, -103, 10, -48, 10, -68, 10, -104, 10, -48, 10, -77, -71, -68, 10, -45, 10, -103, 10, -47, 10, -128, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -68, 10, -48, 10, -80, 10, 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, -69, -65, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 12, 6, 1, 1, 1, 2, 2, 11, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 11, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 6, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 6, 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, 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, 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, 4, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 6, 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, 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, 4, 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, 9, 7, 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, 2, 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, 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, 4, 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, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 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, 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, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 14, 21, 23, 25, 27, 30, 33, 46, 49, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 117, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 162, 164, 166, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 205, 208, 213, 218, 223, 228, 232, 236, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 274, 281, 286, 290, 296, 300, 303, 309, 322, 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, 449, 452, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 529, 532, 535, 538, 541, 544, 547, 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, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 859, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1444, 1451, 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1786, 1788, 1799, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1984, 1987, 1990, 1993, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2150, 2153, 2156, 2159, 2162, 2165, 2168, 2171, 2174, 2177, 2180, 2183, 2186, 2189, 2192, 2195, 2198, 2201, 2204, 2207, 2210, 2213, 2216, 2219, 2222, 2225, 2228, 2231, 2234, 2236, 2238 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 2, 3, 4, 6, 5, 7, 8, 9, 10, 11, 12, 5, 0, 13, 14, 15, 16, 17, 18, 0, 19, 0, 20, 0, 21, 0, 23, 24, 22, 26, 27, 25, 1, 2, 3, 6, 5, 7, 8, 9, 10, 11, 12, 5, 0, 28, 29, 0, 30, 31, 0, 32, 0, 33, 0, 34, 0, 35, 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, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 58, 61, 60, 62, 63, 61, 64, 65, 66, 65, 64, 60, 67, 68, 69, 61, 60, 70, 61, 60, 71, 61, 60, 72, 61, 60, 73, 61, 60, 74, 61, 60, 75, 61, 60, 76, 61, 60, 77, 61, 60, 61, 78, 60, 79, 80, 81, 83, 82, 84, 85, 86, 87, 88, 89, 82, 0, 90, 0, 91, 0, 92, 93, 94, 0, 95, 0, 96, 0, 97, 0, 20, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 20, 0, 103, 0, 104, 0, 105, 0, 20, 0, 106, 0, 107, 0, 109, 110, 108, 112, 113, 111, 116, 115, 117, 115, 114, 120, 119, 121, 119, 118, 120, 119, 122, 119, 118, 120, 119, 123, 119, 118, 125, 124, 124, 0, 6, 126, 126, 0, 128, 129, 127, 6, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 0, 0, 0, 0, 144, 145, 146, 145, 145, 148, 147, 144, 6, 149, 11, 149, 0, 150, 151, 150, 0, 154, 153, 155, 156, 153, 152, 0, 158, 159, 157, 0, 158, 157, 154, 160, 158, 159, 160, 157, 161, 162, 163, 154, 164, 165, 166, 167, 168, 169, 170, 164, 0, 171, 172, 61, 60, 173, 61, 60, 174, 61, 60, 175, 61, 60, 176, 61, 60, 177, 61, 60, 178, 61, 60, 179, 61, 60, 180, 61, 60, 181, 61, 60, 182, 61, 60, 183, 61, 60, 184, 61, 60, 77, 61, 60, 185, 61, 60, 186, 61, 60, 187, 61, 60, 188, 61, 60, 189, 61, 60, 190, 61, 60, 191, 61, 60, 192, 61, 60, 193, 61, 60, 194, 61, 60, 195, 61, 60, 196, 61, 60, 197, 61, 60, 198, 61, 60, 77, 61, 60, 199, 61, 60, 200, 61, 60, 201, 61, 60, 202, 61, 60, 203, 61, 60, 204, 61, 60, 205, 61, 60, 206, 61, 60, 207, 61, 60, 208, 61, 60, 209, 61, 60, 210, 61, 60, 211, 61, 60, 212, 61, 60, 213, 61, 78, 60, 214, 61, 60, 215, 61, 60, 216, 61, 60, 217, 61, 60, 218, 61, 60, 61, 219, 60, 220, 61, 60, 221, 61, 60, 222, 61, 60, 223, 61, 60, 224, 61, 60, 225, 61, 60, 226, 61, 60, 227, 61, 60, 228, 61, 60, 229, 61, 60, 230, 61, 60, 231, 61, 60, 232, 61, 60, 233, 61, 60, 234, 61, 60, 77, 61, 60, 235, 61, 60, 236, 237, 61, 60, 238, 61, 60, 239, 61, 60, 240, 61, 60, 241, 61, 60, 242, 61, 60, 243, 61, 60, 244, 61, 60, 245, 61, 60, 246, 61, 60, 247, 61, 60, 248, 61, 60, 249, 61, 60, 250, 61, 60, 251, 61, 60, 252, 61, 60, 253, 61, 60, 254, 61, 60, 255, 61, 60, 193, 61, 60, 256, 61, 60, 257, 61, 60, 258, 61, 60, 259, 61, 60, 260, 61, 60, 261, 61, 60, 262, 61, 60, 263, 61, 60, 264, 61, 60, 265, 61, 60, 183, 61, 60, 61, 266, 60, 61, 267, 60, 61, 268, 60, 61, 269, 60, 61, 270, 60, 61, 271, 60, 61, 272, 60, 61, 273, 60, 61, 274, 60, 61, 275, 60, 61, 276, 60, 61, 277, 60, 61, 278, 60, 61, 279, 60, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 295, 294, 297, 296, 298, 299, 297, 300, 301, 301, 300, 296, 302, 297, 296, 303, 297, 296, 304, 297, 296, 305, 297, 296, 306, 297, 296, 307, 297, 296, 308, 297, 296, 309, 297, 296, 310, 297, 296, 311, 297, 296, 312, 297, 296, 313, 297, 296, 314, 297, 296, 315, 297, 296, 316, 297, 296, 317, 297, 296, 318, 297, 296, 297, 319, 296, 320, 297, 296, 321, 297, 296, 322, 297, 296, 323, 297, 296, 324, 297, 296, 325, 297, 296, 326, 297, 296, 327, 297, 296, 328, 297, 296, 329, 297, 296, 330, 297, 296, 331, 297, 296, 332, 297, 296, 333, 297, 296, 334, 297, 296, 335, 297, 296, 336, 297, 296, 337, 297, 296, 338, 297, 296, 339, 297, 296, 312, 297, 296, 340, 0, 341, 0, 342, 0, 20, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 353, 352, 355, 354, 356, 357, 358, 355, 359, 360, 361, 362, 360, 359, 354, 363, 364, 365, 366, 367, 355, 354, 368, 355, 354, 369, 355, 354, 355, 370, 354, 371, 355, 354, 372, 355, 354, 373, 355, 354, 374, 355, 354, 375, 355, 354, 376, 355, 354, 377, 355, 354, 369, 355, 354, 378, 355, 354, 379, 355, 354, 380, 355, 354, 381, 355, 354, 382, 355, 354, 383, 355, 354, 384, 355, 354, 385, 355, 354, 386, 355, 354, 387, 355, 354, 388, 355, 354, 389, 355, 354, 390, 355, 354, 391, 355, 354, 392, 355, 354, 393, 355, 354, 355, 370, 354, 394, 355, 354, 395, 355, 354, 396, 355, 354, 397, 355, 354, 398, 355, 354, 399, 355, 354, 400, 355, 354, 401, 355, 354, 402, 355, 354, 403, 355, 354, 404, 355, 354, 363, 355, 354, 405, 355, 354, 406, 355, 354, 407, 355, 354, 408, 355, 354, 409, 355, 354, 410, 355, 354, 411, 355, 354, 412, 355, 354, 413, 355, 354, 414, 355, 354, 415, 355, 354, 416, 355, 354, 417, 355, 354, 418, 355, 354, 419, 355, 370, 354, 420, 355, 354, 421, 355, 354, 422, 355, 354, 423, 355, 354, 424, 355, 354, 355, 425, 354, 426, 355, 354, 427, 355, 354, 428, 355, 354, 429, 355, 354, 430, 355, 354, 431, 355, 354, 432, 355, 354, 433, 355, 354, 434, 355, 354, 435, 355, 354, 436, 355, 354, 437, 355, 354, 438, 355, 354, 439, 355, 354, 440, 355, 354, 393, 355, 354, 441, 442, 355, 354, 443, 355, 354, 444, 355, 354, 445, 355, 354, 446, 355, 354, 447, 355, 354, 448, 355, 354, 449, 355, 354, 450, 355, 354, 451, 355, 354, 452, 355, 354, 453, 355, 354, 454, 355, 354, 455, 355, 354, 456, 355, 354, 457, 355, 354, 458, 355, 354, 459, 355, 354, 460, 355, 354, 461, 355, 354, 387, 355, 354, 462, 355, 354, 463, 355, 354, 464, 355, 354, 369, 355, 354, 465, 355, 354, 466, 355, 354, 467, 468, 469, 355, 354, 470, 355, 354, 471, 355, 354, 472, 355, 354, 369, 355, 354, 473, 355, 354, 474, 355, 354, 475, 355, 354, 476, 355, 354, 477, 355, 354, 369, 355, 354, 478, 355, 354, 479, 355, 354, 480, 355, 354, 369, 355, 354, 355, 481, 354, 355, 482, 354, 355, 483, 354, 355, 484, 354, 355, 485, 354, 355, 486, 354, 355, 487, 354, 355, 488, 354, 355, 489, 354, 355, 490, 354, 355, 491, 354, 355, 492, 354, 355, 493, 354, 355, 494, 354, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 20, 0, 502, 503, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 290, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 521, 0, 50, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 13, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 573, 572, 575, 574, 576, 577, 578, 575, 579, 580, 581, 582, 580, 579, 574, 583, 584, 585, 586, 587, 575, 574, 588, 575, 574, 589, 575, 574, 575, 590, 574, 591, 575, 574, 592, 575, 574, 593, 575, 574, 594, 575, 574, 595, 575, 574, 596, 575, 574, 597, 575, 574, 589, 575, 574, 598, 575, 574, 599, 575, 574, 600, 575, 574, 601, 575, 574, 602, 575, 574, 603, 575, 574, 604, 575, 574, 605, 575, 574, 606, 575, 574, 607, 575, 574, 608, 575, 574, 609, 575, 574, 610, 575, 574, 611, 575, 574, 612, 575, 574, 613, 575, 574, 575, 590, 574, 614, 575, 574, 615, 575, 574, 616, 575, 574, 617, 575, 574, 618, 575, 574, 619, 575, 574, 620, 575, 574, 621, 575, 574, 622, 575, 574, 623, 575, 574, 624, 575, 574, 583, 575, 574, 625, 575, 574, 626, 575, 574, 627, 575, 574, 628, 575, 574, 629, 575, 574, 630, 575, 574, 631, 575, 574, 632, 575, 574, 633, 575, 574, 634, 575, 574, 635, 575, 574, 636, 575, 574, 637, 575, 574, 613, 575, 574, 638, 639, 575, 574, 640, 575, 574, 641, 575, 574, 642, 575, 574, 643, 575, 574, 644, 575, 574, 645, 575, 574, 646, 575, 574, 647, 575, 574, 648, 575, 574, 649, 575, 574, 650, 575, 574, 651, 575, 574, 652, 575, 574, 653, 575, 574, 654, 575, 574, 655, 575, 574, 656, 575, 574, 657, 575, 574, 658, 575, 574, 607, 575, 574, 659, 575, 574, 660, 575, 574, 661, 575, 574, 589, 575, 574, 662, 575, 574, 663, 575, 574, 664, 665, 666, 575, 574, 667, 575, 574, 668, 575, 574, 669, 575, 574, 589, 575, 574, 670, 575, 574, 671, 575, 574, 672, 575, 574, 673, 575, 574, 674, 575, 574, 589, 575, 574, 675, 575, 574, 676, 575, 574, 677, 575, 574, 589, 575, 574, 575, 678, 574, 575, 679, 574, 575, 680, 574, 575, 681, 574, 575, 682, 574, 575, 683, 574, 575, 684, 574, 575, 685, 574, 575, 686, 574, 575, 687, 574, 575, 688, 574, 575, 689, 574, 575, 690, 574, 575, 691, 574, 693, 692, 695, 694, 696, 697, 698, 695, 699, 700, 701, 702, 700, 699, 694, 703, 704, 705, 706, 707, 708, 695, 694, 709, 695, 694, 710, 695, 694, 695, 711, 694, 712, 695, 694, 713, 695, 694, 714, 695, 694, 715, 695, 694, 716, 695, 694, 717, 695, 694, 718, 695, 694, 719, 695, 694, 695, 711, 694, 720, 695, 694, 721, 695, 694, 722, 695, 694, 723, 695, 694, 724, 695, 694, 725, 695, 694, 726, 695, 694, 710, 695, 694, 727, 695, 694, 728, 695, 694, 729, 695, 694, 730, 695, 694, 731, 695, 694, 732, 695, 694, 733, 695, 694, 734, 695, 694, 735, 695, 694, 736, 695, 694, 737, 695, 694, 738, 695, 694, 739, 695, 694, 740, 695, 694, 741, 695, 694, 719, 695, 694, 742, 695, 694, 743, 695, 694, 744, 695, 694, 745, 695, 694, 746, 695, 694, 747, 695, 694, 748, 695, 694, 749, 695, 694, 750, 695, 694, 751, 695, 694, 752, 695, 694, 703, 695, 694, 753, 695, 694, 754, 695, 694, 755, 695, 694, 756, 695, 694, 757, 695, 694, 758, 695, 694, 759, 695, 694, 760, 695, 694, 761, 695, 694, 762, 695, 694, 763, 695, 694, 764, 695, 694, 765, 695, 694, 766, 695, 694, 767, 695, 711, 694, 768, 695, 694, 769, 695, 694, 770, 695, 694, 771, 695, 694, 772, 695, 694, 695, 773, 694, 774, 695, 694, 775, 695, 694, 776, 695, 694, 777, 695, 694, 778, 695, 694, 779, 695, 694, 780, 695, 694, 781, 695, 694, 782, 695, 694, 783, 695, 694, 784, 695, 694, 785, 695, 694, 786, 695, 694, 787, 695, 694, 788, 695, 694, 719, 695, 694, 789, 790, 695, 694, 791, 695, 694, 792, 695, 694, 793, 695, 694, 794, 695, 694, 795, 695, 694, 796, 695, 694, 797, 695, 694, 798, 695, 694, 799, 695, 694, 800, 695, 694, 801, 695, 694, 802, 695, 694, 803, 695, 694, 804, 695, 694, 805, 695, 694, 806, 695, 694, 807, 695, 694, 808, 695, 694, 809, 695, 694, 736, 695, 694, 810, 695, 694, 811, 695, 694, 812, 695, 694, 710, 695, 694, 813, 695, 694, 814, 695, 694, 815, 816, 817, 695, 694, 818, 695, 694, 819, 695, 694, 820, 695, 694, 710, 695, 694, 821, 695, 694, 822, 695, 694, 823, 695, 694, 824, 695, 694, 825, 695, 694, 710, 695, 694, 826, 695, 694, 827, 695, 694, 828, 695, 694, 710, 695, 694, 695, 829, 694, 695, 830, 694, 695, 831, 694, 695, 832, 694, 695, 833, 694, 695, 834, 694, 695, 835, 694, 695, 836, 694, 695, 837, 694, 695, 838, 694, 695, 839, 694, 695, 840, 694, 695, 841, 694, 695, 842, 694, 843, 0, 5, 0, 844, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 9, 51, 759, 8, 8, 68, 78, 80, 5, 94, 97, 3, 275, 421, 429, 450, 462, 4, 5, 6, 7, 8, 79, 7, 8, 79, 10, 271, 11, 215, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 38, 39, 40, 169, 39, 8, 201, 41, 103, 132, 42, 43, 44, 45, 46, 47, 48, 49, 50, 2, 9, 51, 8, 8, 68, 78, 80, 5, 94, 97, 52, 53, 54, 58, 64, 55, 56, 57, 59, 60, 61, 62, 63, 65, 66, 67, 69, 70, 71, 72, 71, 71, 72, 71, 73, 73, 73, 74, 73, 73, 73, 74, 75, 76, 77, 8, 77, 78, 8, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 761, 95, 96, 8, 95, 94, 96, 97, 98, 99, 101, 102, 100, 98, 99, 100, 98, 101, 2, 9, 51, 102, 68, 78, 80, 5, 94, 97, 104, 117, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 170, 171, 190, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 8, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 230, 231, 232, 250, 231, 8, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 50, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 285, 286, 287, 365, 390, 286, 8, 407, 290, 288, 291, 299, 316, 328, 289, 290, 50, 292, 293, 294, 295, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 366, 386, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 387, 388, 389, 391, 392, 393, 397, 403, 394, 395, 396, 398, 399, 400, 401, 402, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 8, 422, 423, 424, 425, 426, 427, 428, 430, 441, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 442, 443, 444, 445, 446, 447, 448, 449, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 614, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 501, 502, 503, 558, 583, 502, 8, 600, 506, 504, 507, 515, 532, 544, 505, 506, 50, 508, 509, 510, 511, 512, 513, 514, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 559, 579, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 580, 581, 582, 584, 585, 586, 590, 596, 587, 588, 589, 591, 592, 593, 594, 595, 597, 598, 599, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 8, 615, 616, 615, 616, 617, 703, 728, 616, 8, 745, 620, 618, 621, 630, 638, 654, 666, 619, 620, 50, 622, 623, 624, 625, 626, 627, 628, 629, 631, 632, 633, 634, 635, 636, 637, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 704, 724, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 725, 726, 727, 729, 730, 731, 735, 741, 732, 733, 734, 736, 737, 738, 739, 740, 742, 743, 744, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 8, 760, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 29, 29, 29, 0, 0, 54, 3, 1, 0, 29, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 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, 57, 144, 0, 54, 84, 84, 0, 69, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 63, 63, 63, 31, 130, 60, 57, 31, 63, 57, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 118, 27, 51, 0, 0, 0, 37, 37, 54, 37, 87, 0, 0, 39, 0, 96, 96, 96, 0, 93, 90, 41, 96, 90, 99, 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, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 84, 84, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 57, 144, 0, 54, 84, 84, 84, 0, 72, 33, 84, 0, 0, 0, 0, 0, 0, 0, 15, 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, 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, 15, 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, 57, 144, 0, 54, 84, 84, 84, 0, 78, 33, 84, 0, 0, 0, 0, 0, 0, 0, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 57, 144, 0, 54, 84, 84, 84, 0, 75, 33, 84, 0, 0, 0, 0, 0, 0, 0, 0, 17, 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, 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, 17, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 761; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/tt.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 1302 "lib/gherkin/lexer/tt.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/tt.rb.rl" # line 1311 "lib/gherkin/lexer/tt.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/tt.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/tt.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/tt.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/tt.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/tt.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/tt.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/tt.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/tt.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/tt.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/tt.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/tt.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/tt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/tt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/tt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/tt.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/tt.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/tt.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/tt.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/tt.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/tt.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/tt.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/tt.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/tt.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/tt.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1555 "lib/gherkin/lexer/tt.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/tt.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1594 "lib/gherkin/lexer/tt.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/tt.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/lexer/sv.rb0000644000004100000410000011735712244512574017572 0ustar www-datawww-data # line 1 "ragel/i18n/sv.rb.rl" require 'gherkin/native' module Gherkin module Lexer class Sv #:nodoc: native_impl('gherkin') # line 125 "ragel/i18n/sv.rb.rl" def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil # line 21 "lib/gherkin/lexer/sv.rb" class << self attr_accessor :_lexer_actions private :_lexer_actions, :_lexer_actions= end self._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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 2, 18, 2, 3, 4, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 1, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 1, 2, 22, 16, 2, 22, 19, 3, 4, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 2, 14, 15, 18, 4, 3, 4, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 ] class << self attr_accessor :_lexer_key_offsets private :_lexer_key_offsets, :_lexer_key_offsets= end self._lexer_key_offsets = [ 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 321, 323, 325, 327, 329, 331, 333, 335, 338, 340, 342, 344, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 484, 486, 488, 489, 490, 491, 492, 493, 494, 495, 496, 503, 505, 507, 509, 511, 513, 515, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 532, 533, 534, 535, 536, 537, 538, 539, 541, 542, 543, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 676, 678, 680, 682, 684, 686, 688, 690, 693, 695, 697, 699, 700, 701, 702, 706, 712, 715, 717, 723, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 782, 784, 786, 788, 790, 792, 794, 796 ] class << self attr_accessor :_lexer_trans_keys private :_lexer_trans_keys, :_lexer_trans_keys= end self._lexer_trans_keys = [ -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 115, 116, 114, 97, 107, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 71, 77, 78, 79, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 97, 107, 103, 114, 117, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -92, 10, 10, 114, 10, 99, 10, 104, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 10, 108, 103, 120, 101, 110, 115, 107, 97, 112, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 69, 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, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 120, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 101, 10, 109, 10, 112, 10, 101, 10, 108, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 101, 109, 112, 101, 108, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 105, 118, 101, 116, 101, 110, -61, -92, 114, 99, 104, -61, 99, -91, 101, 110, 97, 114, 105, 111, 58, 109, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -92, 10, 10, 114, 10, 99, 10, 104, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 10, 108, 97, 108, 108, 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, 71, 77, 78, 79, 83, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -92, 10, 10, 114, 10, 99, 10, 104, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 0 ] class << self attr_accessor :_lexer_single_lengths private :_lexer_single_lengths, :_lexer_single_lengths= end self._lexer_single_lengths = [ 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 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, 3, 2, 2, 2, 2, 2, 2, 2, 0 ] class << self attr_accessor :_lexer_range_lengths private :_lexer_range_lengths, :_lexer_range_lengths= end self._lexer_range_lengths = [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 ] class << self attr_accessor :_lexer_index_offsets private :_lexer_index_offsets, :_lexer_index_offsets= end self._lexer_index_offsets = [ 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 287, 290, 293, 296, 299, 302, 305, 308, 311, 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, 441, 444, 447, 450, 453, 456, 459, 462, 466, 469, 472, 475, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 683, 686, 689, 691, 693, 695, 697, 699, 701, 703, 705, 712, 715, 718, 721, 724, 727, 730, 733, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 761, 763, 765, 767, 769, 771, 773, 775, 778, 780, 782, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 973, 976, 979, 982, 985, 988, 991, 994, 998, 1001, 1004, 1007, 1009, 1011, 1013, 1017, 1023, 1027, 1030, 1036, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136 ] class << self attr_accessor :_lexer_indicies private :_lexer_indicies, :_lexer_indicies= end self._lexer_indicies = [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 18, 0, 2, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 2, 0, 19, 0, 20, 0, 22, 23, 21, 25, 26, 24, 29, 28, 30, 28, 27, 33, 32, 34, 32, 31, 33, 32, 35, 32, 31, 33, 32, 36, 32, 31, 38, 37, 37, 0, 3, 39, 39, 0, 41, 42, 40, 3, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 60, 58, 62, 63, 61, 0, 0, 0, 0, 64, 65, 66, 65, 65, 68, 67, 64, 3, 69, 8, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 88, 87, 90, 89, 90, 91, 92, 93, 94, 92, 95, 96, 97, 98, 99, 100, 91, 89, 90, 101, 89, 90, 102, 89, 90, 103, 89, 90, 104, 89, 90, 105, 89, 90, 106, 89, 90, 107, 89, 90, 108, 89, 90, 109, 89, 90, 110, 89, 90, 111, 89, 90, 112, 89, 90, 113, 89, 90, 114, 89, 90, 115, 89, 117, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 116, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 141, 140, 143, 142, 143, 144, 145, 146, 147, 145, 148, 149, 150, 151, 152, 153, 154, 144, 142, 143, 155, 142, 143, 156, 142, 143, 157, 142, 143, 158, 142, 143, 159, 142, 143, 160, 142, 143, 161, 142, 143, 162, 142, 143, 163, 142, 143, 164, 142, 143, 165, 142, 143, 166, 142, 143, 167, 142, 143, 168, 142, 143, 169, 142, 143, 170, 142, 143, 171, 142, 143, 172, 142, 143, 173, 142, 143, 174, 142, 143, 175, 142, 143, 176, 142, 143, 177, 142, 143, 178, 142, 143, 179, 142, 143, 180, 142, 143, 181, 142, 143, 182, 142, 143, 183, 142, 143, 184, 142, 143, 185, 142, 143, 169, 142, 143, 186, 142, 143, 187, 142, 143, 188, 142, 143, 189, 142, 143, 190, 142, 143, 191, 142, 143, 185, 142, 143, 192, 142, 143, 193, 142, 143, 194, 142, 143, 195, 142, 143, 196, 142, 143, 195, 142, 197, 143, 142, 198, 143, 142, 143, 195, 142, 143, 199, 142, 143, 195, 142, 200, 143, 201, 142, 195, 143, 142, 143, 202, 142, 143, 203, 142, 143, 204, 142, 143, 205, 142, 143, 206, 142, 143, 207, 142, 143, 169, 208, 142, 143, 209, 142, 143, 210, 142, 143, 185, 142, 211, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 221, 220, 223, 222, 223, 224, 225, 226, 225, 227, 228, 229, 230, 224, 222, 223, 231, 222, 223, 232, 222, 223, 233, 222, 223, 234, 222, 223, 235, 222, 223, 236, 222, 223, 237, 222, 223, 238, 222, 223, 239, 222, 223, 240, 222, 223, 241, 222, 223, 242, 222, 223, 243, 222, 223, 244, 222, 223, 245, 222, 223, 246, 222, 223, 247, 222, 223, 248, 222, 223, 249, 222, 223, 250, 222, 223, 251, 222, 223, 252, 222, 223, 253, 222, 223, 254, 222, 223, 255, 222, 223, 256, 222, 223, 257, 222, 223, 258, 222, 223, 259, 222, 223, 260, 222, 223, 261, 222, 223, 262, 222, 223, 263, 222, 223, 264, 222, 223, 265, 222, 223, 266, 222, 223, 267, 222, 223, 260, 222, 223, 268, 269, 222, 223, 270, 222, 223, 271, 222, 223, 272, 222, 223, 273, 222, 223, 274, 222, 223, 260, 222, 223, 275, 222, 223, 276, 222, 223, 277, 222, 223, 278, 222, 223, 260, 222, 223, 279, 222, 223, 280, 222, 223, 281, 222, 223, 282, 222, 223, 283, 222, 223, 284, 222, 223, 285, 222, 223, 261, 286, 222, 223, 287, 222, 223, 278, 222, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 295, 294, 297, 296, 297, 298, 299, 300, 299, 298, 296, 297, 301, 296, 297, 302, 296, 297, 303, 296, 297, 304, 296, 297, 305, 296, 297, 306, 296, 297, 307, 296, 297, 308, 296, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 312, 0, 314, 0, 315, 0, 312, 0, 316, 0, 312, 0, 317, 318, 0, 312, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 326, 0, 328, 327, 330, 329, 330, 331, 332, 333, 334, 332, 335, 336, 337, 338, 339, 340, 341, 342, 331, 329, 330, 343, 329, 330, 344, 329, 330, 345, 329, 330, 346, 329, 330, 347, 329, 330, 348, 329, 330, 349, 329, 330, 350, 329, 330, 351, 329, 330, 352, 329, 330, 353, 329, 330, 354, 329, 330, 355, 329, 330, 356, 329, 330, 357, 329, 330, 358, 329, 330, 359, 329, 330, 360, 329, 330, 361, 329, 330, 362, 329, 330, 363, 329, 330, 364, 329, 330, 365, 329, 330, 366, 329, 330, 367, 329, 330, 368, 329, 330, 369, 329, 330, 370, 329, 330, 371, 329, 330, 372, 329, 330, 373, 329, 330, 357, 329, 330, 374, 329, 330, 375, 329, 330, 376, 329, 330, 377, 329, 330, 378, 329, 330, 379, 329, 330, 373, 329, 330, 380, 329, 330, 381, 329, 330, 382, 329, 330, 383, 329, 330, 384, 329, 330, 385, 329, 330, 373, 329, 330, 386, 329, 330, 387, 329, 330, 388, 329, 330, 389, 329, 330, 390, 329, 330, 389, 329, 391, 330, 329, 392, 330, 329, 330, 389, 329, 330, 393, 329, 330, 389, 329, 394, 330, 395, 329, 389, 330, 329, 330, 396, 329, 330, 397, 329, 330, 398, 329, 330, 399, 329, 330, 400, 329, 330, 401, 329, 330, 357, 402, 329, 330, 403, 329, 330, 404, 329, 330, 373, 329, 405, 0, 406, 0, 85, 0, 407, 408, 407, 0, 411, 410, 412, 413, 410, 409, 0, 415, 416, 414, 0, 415, 414, 411, 417, 415, 416, 417, 414, 411, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 418, 0, 90, 433, 89, 90, 434, 89, 90, 435, 89, 90, 436, 89, 90, 437, 89, 90, 438, 89, 90, 439, 89, 90, 115, 89, 90, 440, 89, 90, 441, 89, 90, 442, 89, 90, 443, 89, 90, 444, 89, 90, 443, 89, 445, 90, 89, 446, 90, 89, 90, 443, 89, 90, 447, 89, 90, 443, 89, 448, 90, 449, 89, 443, 90, 89, 90, 450, 89, 90, 451, 89, 90, 452, 89, 90, 453, 89, 90, 454, 89, 90, 439, 89, 455, 0 ] class << self attr_accessor :_lexer_trans_targs private :_lexer_trans_targs, :_lexer_trans_targs= end self._lexer_trans_targs = [ 0, 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 3, 6, 7, 8, 9, 8, 8, 9, 8, 10, 10, 10, 11, 10, 10, 10, 11, 12, 13, 14, 4, 14, 15, 4, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 362, 32, 33, 4, 16, 33, 4, 16, 35, 36, 4, 35, 34, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 55, 56, 56, 4, 57, 71, 335, 343, 347, 349, 352, 354, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 4, 72, 4, 4, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 82, 83, 83, 4, 84, 98, 99, 116, 123, 127, 129, 132, 134, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 4, 72, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 117, 118, 119, 120, 121, 122, 124, 125, 126, 98, 128, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 217, 148, 149, 150, 151, 152, 153, 154, 155, 156, 155, 156, 156, 4, 157, 171, 188, 195, 207, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 4, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 72, 189, 190, 191, 192, 193, 194, 196, 202, 197, 198, 199, 200, 201, 203, 204, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215, 216, 218, 219, 220, 221, 222, 223, 224, 225, 224, 225, 225, 4, 226, 227, 228, 229, 230, 231, 232, 233, 72, 235, 236, 237, 31, 239, 241, 242, 244, 246, 247, 248, 249, 250, 251, 252, 253, 254, 326, 255, 256, 255, 256, 256, 4, 257, 271, 272, 289, 296, 303, 307, 309, 312, 314, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 4, 72, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 290, 291, 292, 293, 294, 295, 297, 298, 299, 300, 301, 302, 304, 305, 306, 271, 308, 310, 311, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 333, 334, 332, 330, 331, 332, 330, 333, 334, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 336, 337, 338, 339, 340, 341, 342, 344, 345, 346, 71, 348, 350, 351, 353, 355, 356, 357, 358, 359, 360, 361, 0 ] class << self attr_accessor :_lexer_trans_actions private :_lexer_trans_actions, :_lexer_trans_actions= end self._lexer_trans_actions = [ 43, 0, 0, 54, 3, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 0, 0, 7, 139, 48, 0, 102, 9, 5, 45, 134, 45, 0, 33, 122, 33, 33, 0, 11, 106, 0, 0, 114, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 149, 126, 0, 110, 23, 0, 27, 118, 27, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 78, 33, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 31, 130, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 72, 33, 84, 84, 84, 84, 84, 84, 84, 84, 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, 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, 57, 144, 0, 54, 0, 69, 33, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 57, 144, 0, 54, 0, 81, 84, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 144, 0, 54, 0, 75, 33, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 37, 37, 54, 37, 87, 0, 0, 39, 0, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_lexer_eof_actions private :_lexer_eof_actions, :_lexer_eof_actions= end self._lexer_eof_actions = [ 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 ] class << self attr_accessor :lexer_start end self.lexer_start = 1; class << self attr_accessor :lexer_first_final end self.lexer_first_final = 362; class << self attr_accessor :lexer_error end self.lexer_error = 0; class << self attr_accessor :lexer_en_main end self.lexer_en_main = 1; # line 133 "ragel/i18n/sv.rb.rl" end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 # line 729 "lib/gherkin/lexer/sv.rb" begin p ||= 0 pe ||= data.length cs = lexer_start end # line 143 "ragel/i18n/sv.rb.rl" # line 738 "lib/gherkin/lexer/sv.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _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 next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _lexer_key_offsets[cs] _trans = _lexer_index_offsets[cs] _klen = _lexer_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 1 elsif data[p].ord > _lexer_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _lexer_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p].ord < _lexer_trans_keys[_mid] _upper = _mid - 2 elsif data[p].ord > _lexer_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false _trans = _lexer_indicies[_trans] 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 case _lexer_actions[_acts - 1] when 0 then # line 11 "ragel/i18n/sv.rb.rl" begin @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length end when 1 then # line 17 "ragel/i18n/sv.rb.rl" begin @current_line = @line_number @start_col = p - @last_newline end when 2 then # line 22 "ragel/i18n/sv.rb.rl" begin @content_start = p end when 3 then # line 26 "ragel/i18n/sv.rb.rl" begin @docstring_content_type_start = p end when 4 then # line 29 "ragel/i18n/sv.rb.rl" begin @docstring_content_type_end = p end when 5 then # line 33 "ragel/i18n/sv.rb.rl" begin con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) end when 6 then # line 38 "ragel/i18n/sv.rb.rl" begin p = store_keyword_content(:feature, data, p, eof) end when 7 then # line 42 "ragel/i18n/sv.rb.rl" begin p = store_keyword_content(:background, data, p, eof) end when 8 then # line 46 "ragel/i18n/sv.rb.rl" begin p = store_keyword_content(:scenario, data, p, eof) end when 9 then # line 50 "ragel/i18n/sv.rb.rl" begin p = store_keyword_content(:scenario_outline, data, p, eof) end when 10 then # line 54 "ragel/i18n/sv.rb.rl" begin p = store_keyword_content(:examples, data, p, eof) end when 11 then # line 58 "ragel/i18n/sv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) end when 12 then # line 63 "ragel/i18n/sv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil end when 13 then # line 69 "ragel/i18n/sv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil end when 14 then # line 75 "ragel/i18n/sv.rb.rl" begin @line_number += 1 end when 15 then # line 79 "ragel/i18n/sv.rb.rl" begin @last_newline = p + 1 end when 16 then # line 83 "ragel/i18n/sv.rb.rl" begin @keyword_start ||= p end when 17 then # line 87 "ragel/i18n/sv.rb.rl" begin @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil end when 18 then # line 92 "ragel/i18n/sv.rb.rl" begin @next_keyword_start = p end when 19 then # line 96 "ragel/i18n/sv.rb.rl" begin p = p - 1 current_row = [] @current_line = @line_number end when 20 then # line 102 "ragel/i18n/sv.rb.rl" begin @content_start = p end when 21 then # line 106 "ragel/i18n/sv.rb.rl" begin con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") end when 22 then # line 111 "ragel/i18n/sv.rb.rl" begin @listener.row(current_row, @current_line) end when 23 then # line 115 "ragel/i18n/sv.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 982 "lib/gherkin/lexer/sv.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof __acts = _lexer_eof_actions[cs] __nacts = _lexer_actions[__acts] __acts += 1 while __nacts > 0 __nacts -= 1 __acts += 1 case _lexer_actions[__acts - 1] when 23 then # line 115 "ragel/i18n/sv.rb.rl" begin if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end end # line 1021 "lib/gherkin/lexer/sv.rb" end # eof action switch end if _trigger_goto next end end end if _goto_level <= _out break end end end # line 144 "ragel/i18n/sv.rb.rl" end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/lib/gherkin/native/0000755000004100000410000000000012244512574016746 5ustar www-datawww-datagherkin-2.12.2/lib/gherkin/native/therubyracer.rb0000644000004100000410000000170412244512574021774 0ustar www-datawww-datarequire 'v8' class Class def native_impl(lib) class << self def new(*args) js = { # Add more mappings here if needed. The mappings are only used by test code. 'Gherkin::Formatter::JSONFormatter' => 'js/lib/gherkin/formatter/json_formatter.js', 'Gherkin::Lexer::En' => 'js/lib/gherkin/lexer/en.js' }[self.name] if(js) Proxy.new(js, *args) else super(*args) end end end end class Proxy def initialize(js, *args) cxt = V8::Context.new cxt['module'] = {} # Mimic Node.js / Firebug console.log cxt['console'] = STDOUT def STDOUT.log(*a) puts sprintf(*a.map(&:to_s)) end cxt.load(js) @js_obj = cxt['module']['exports'].new(*args) end def method_missing(name, *args) a = args.map{|a| a.respond_to?(:to_hash) ? a.to_hash : a} @js_obj.__send__(name, *a) end end end gherkin-2.12.2/lib/gherkin/native/java.rb0000644000004100000410000000313412244512574020215 0ustar www-datawww-dataclass Class class IOWriter < Java.java.io.Writer def initialize(io) @io = io end def write(cbuf, off, len) @io.write(cbuf.unpack("U*")[off..len].pack("U*")) end def flush @io.flush end def close @io.close end end # Causes a Java class to be instantiated instead of the Ruby class when # running on JRuby. This is used to test both pure Java and pure Ruby classes # from the same Ruby based test suite. The Java Class must have a package name # that corresponds with the Ruby class. def native_impl(lib) require "#{lib}.jar" class << self def new(*args) begin java_class.new(*javaify(args)) rescue ArgumentError => e e.message << "\n#{java_class.name}" raise e rescue NameError => e e.message << "\n args: #{args.inspect}" raise e end end def javaify(arg) if Array === arg arg.map{|a| javaify(a)} else case(arg) when Regexp java.util.regex.Pattern.compile(arg.source) when Symbol arg.to_s when IO, StringIO IOWriter.new(arg) else arg end end end def ===(object) super || object.java_kind_of?(java_class) end def java_class names = self.name.split('::') package = Java names[0..-2].each do |module_name| package = package.__send__(module_name.downcase) end package.__send__(names[-1]) end end end end gherkin-2.12.2/lib/gherkin/native/null.rb0000644000004100000410000000007112244512574020243 0ustar www-datawww-dataclass Class def native_impl(lib) # no-op end end gherkin-2.12.2/lib/gherkin/README.md0000644000004100000410000000066012244512574016741 0ustar www-datawww-dataThe i18n.json file uses [ISO 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and [ISO 3166 alpha-2](http://en.wikipedia.org/wiki/ISO_3166-1) (region - if applicable): If you want several aliases for a keyword, just separate them with a `|` character. The `*` is a step keyword alias for all translations. If you do *not* want a trailing space after a keyword, end it with a `<` character. (See Chinese for examples). gherkin-2.12.2/lib/gherkin/i18n.json0000644000004100000410000005322412244512574017140 0ustar www-datawww-data{ "en": { "name": "English", "native": "English", "feature": "Feature|Business Need|Ability", "background": "Background", "scenario": "Scenario", "scenario_outline": "Scenario Outline|Scenario Template", "examples": "Examples|Scenarios", "given": "*|Given", "when": "*|When", "then": "*|Then", "and": "*|And", "but": "*|But" }, "ar": { "name": "Arabic", "native": "العربية", "feature": "خاصية", "background": "الخلفية", "scenario": "سيناريو", "scenario_outline": "سيناريو مخطط", "examples": "امثلة", "given": "*|بفرض", "when": "*|متى|عندما", "then": "*|اذاً|ثم", "and": "*|و", "but": "*|لكن" }, "bm": { "name": "Malay", "native": "Bahasa Melayu", "feature": "Fungsi", "background": "Latar Belakang", "scenario": "Senario|Situai|Keadaan", "scenario_outline": "Template Senario|Template Situai|Template Keadaan|Menggariskan Senario", "examples": "Contoh", "given": "*|Diberi|Bagi", "when": "*|Apabila", "then": "*|Maka|Kemudian", "and": "*|Dan", "but": "*|Tetapi|Tapi" }, "bg": { "name": "Bulgarian", "native": "български", "feature": "Функционалност", "background": "Предистория", "scenario": "Сценарий", "scenario_outline": "Рамка на сценарий", "examples": "Примери", "given": "*|Дадено", "when": "*|Когато", "then": "*|То", "and": "*|И", "but": "*|Но" }, "ca": { "name": "Catalan", "native": "català", "background": "Rerefons|Antecedents", "feature": "Característica|Funcionalitat", "scenario": "Escenari", "scenario_outline": "Esquema de l'escenari", "examples": "Exemples", "given": "*|Donat|Donada|Atès|Atesa", "when": "*|Quan", "then": "*|Aleshores|Cal", "and": "*|I", "but": "*|Però" }, "cy-GB": { "name": "Welsh", "native": "Cymraeg", "background": "Cefndir", "feature": "Arwedd", "scenario": "Scenario", "scenario_outline": "Scenario Amlinellol", "examples": "Enghreifftiau", "given": "*|Anrhegedig a", "when": "*|Pryd", "then": "*|Yna", "and": "*|A", "but": "*|Ond" }, "cs": { "name": "Czech", "native": "Česky", "feature": "Požadavek", "background": "Pozadí|Kontext", "scenario": "Scénář", "scenario_outline": "Náčrt Scénáře|Osnova scénáře", "examples": "Příklady", "given": "*|Pokud|Za předpokladu", "when": "*|Když", "then": "*|Pak", "and": "*|A také|A", "but": "*|Ale" }, "da": { "name": "Danish", "native": "dansk", "feature": "Egenskab", "background": "Baggrund", "scenario": "Scenarie", "scenario_outline": "Abstrakt Scenario", "examples": "Eksempler", "given": "*|Givet", "when": "*|Når", "then": "*|Så", "and": "*|Og", "but": "*|Men" }, "de": { "name": "German", "native": "Deutsch", "feature": "Funktionalität", "background": "Grundlage", "scenario": "Szenario", "scenario_outline": "Szenariogrundriss", "examples": "Beispiele", "given": "*|Angenommen|Gegeben sei|Gegeben seien", "when": "*|Wenn", "then": "*|Dann", "and": "*|Und", "but": "*|Aber" }, "el": { "name": "Greek", "native": "Ελληνικά", "feature": "Δυνατότητα|Λειτουργία", "background": "Υπόβαθρο", "scenario": "Σενάριο", "scenario_outline": "Περιγραφή Σεναρίου", "examples": "Παραδείγματα|Σενάρια", "given": "*|Δεδομένου", "when": "*|Όταν", "then": "*|Τότε", "and": "*|Και", "but": "*|Αλλά" }, "en-au": { "name": "Australian", "native": "Australian", "feature": "Pretty much", "background": "First off", "scenario": "Awww, look mate", "scenario_outline": "Reckon it's like", "examples": "You'll wanna", "given": "*|Y'know", "when": "*|It's just unbelievable", "then": "*|But at the end of the day I reckon", "and": "*|Too right", "but": "*|Yeah nah" }, "en-lol": { "name": "LOLCAT", "native": "LOLCAT", "feature": "OH HAI", "background": "B4", "scenario": "MISHUN", "scenario_outline": "MISHUN SRSLY", "examples": "EXAMPLZ", "given": "*|I CAN HAZ", "when": "*|WEN", "then": "*|DEN", "and": "*|AN", "but": "*|BUT" }, "en-old": { "name": "Old English", "native": "Englisc", "feature": "Hwaet|Hwæt", "background": "Aer|Ær", "scenario": "Swa", "scenario_outline": "Swa hwaer swa|Swa hwær swa", "examples": "Se the|Se þe|Se ðe", "given": "*|Thurh|Þurh|Ðurh", "when": "*|Tha|Þa|Ða", "then": "*|Tha|Þa|Ða|Tha the|Þa þe|Ða ðe", "and": "*|Ond|7", "but": "*|Ac" }, "en-pirate": { "name": "Pirate", "native": "Pirate", "feature": "Ahoy matey!", "background": "Yo-ho-ho", "scenario": "Heave to", "scenario_outline": "Shiver me timbers", "examples": "Dead men tell no tales", "given": "*|Gangway!", "when": "*|Blimey!", "then": "*|Let go and haul", "and": "*|Aye", "but": "*|Avast!" }, "en-Scouse": { "name": "Scouse", "native": "Scouse", "feature": "Feature", "background": "Dis is what went down", "scenario": "The thing of it is", "scenario_outline": "Wharrimean is", "examples": "Examples", "given": "*|Givun|Youse know when youse got", "when": "*|Wun|Youse know like when", "then": "*|Dun|Den youse gotta", "and": "*|An", "but": "*|Buh" }, "en-tx": { "name": "Texan", "native": "Texan", "feature": "Feature", "background": "Background", "scenario": "Scenario", "scenario_outline": "All y'all", "examples": "Examples", "given": "*|Given y'all", "when": "*|When y'all", "then": "*|Then y'all", "and": "*|And y'all", "but": "*|But y'all" }, "eo": { "name": "Esperanto", "native": "Esperanto", "feature": "Trajto", "background": "Fono", "scenario": "Scenaro", "scenario_outline": "Konturo de la scenaro", "examples": "Ekzemploj", "given": "*|Donitaĵo", "when": "*|Se", "then": "*|Do", "and": "*|Kaj", "but": "*|Sed" }, "es": { "name": "Spanish", "native": "español", "background": "Antecedentes", "feature": "Característica", "scenario": "Escenario", "scenario_outline": "Esquema del escenario", "examples": "Ejemplos", "given": "*|Dado|Dada|Dados|Dadas", "when": "*|Cuando", "then": "*|Entonces", "and": "*|Y", "but": "*|Pero" }, "et": { "name": "Estonian", "native": "eesti keel", "feature": "Omadus", "background": "Taust", "scenario": "Stsenaarium", "scenario_outline": "Raamstsenaarium", "examples": "Juhtumid", "given": "*|Eeldades", "when": "*|Kui", "then": "*|Siis", "and": "*|Ja", "but": "*|Kuid" }, "fa": { "name": "Persian", "native": "فارسی", "feature": "وِیژگی", "background": "زمینه", "scenario": "سناریو", "scenario_outline": "الگوی سناریو", "examples": "نمونه ها", "given": "*|با فرض", "when": "*|هنگامی", "then": "*|آنگاه", "and": "*|و", "but": "*|اما" }, "fi": { "name": "Finnish", "native": "suomi", "feature": "Ominaisuus", "background": "Tausta", "scenario": "Tapaus", "scenario_outline": "Tapausaihio", "examples": "Tapaukset", "given": "*|Oletetaan", "when": "*|Kun", "then": "*|Niin", "and": "*|Ja", "but": "*|Mutta" }, "fr": { "name": "French", "native": "français", "feature": "Fonctionnalité", "background": "Contexte", "scenario": "Scénario", "scenario_outline": "Plan du scénario|Plan du Scénario", "examples": "Exemples", "given": "*|Soit|Etant donné|Etant donnée|Etant donnés|Etant données|Étant donné|Étant donnée|Étant donnés|Étant données", "when": "*|Quand|Lorsque|Lorsqu'<", "then": "*|Alors", "and": "*|Et", "but": "*|Mais" }, "gl": { "name": "Galician", "native": "galego", "background": "Contexto", "feature": "Característica", "scenario": "Escenario", "scenario_outline": "Esbozo do escenario", "examples": "Exemplos", "given": "*|Dado|Dada|Dados|Dadas", "when": "*|Cando", "then": "*|Entón|Logo", "and": "*|E", "but": "*|Mais|Pero" }, "he": { "name": "Hebrew", "native": "עברית", "feature": "תכונה", "background": "רקע", "scenario": "תרחיש", "scenario_outline": "תבנית תרחיש", "examples": "דוגמאות", "given": "*|בהינתן", "when": "*|כאשר", "then": "*|אז|אזי", "and": "*|וגם", "but": "*|אבל" }, "hi": { "name": "Hindi", "native": "हिंदी", "feature": "रूप लेख", "background": "पृष्ठभूमि", "scenario": "परिदृश्य", "scenario_outline": "परिदृश्य रूपरेखा", "examples": "उदाहरण", "given": "*|अगर|यदि|चूंकि", "when": "*|जब|कदा", "then": "*|तब|तदा", "and": "*|और|तथा", "but": "*|पर|परन्तु|किन्तु" }, "hr": { "name": "Croatian", "native": "hrvatski", "feature": "Osobina|Mogućnost|Mogucnost", "background": "Pozadina", "scenario": "Scenarij", "scenario_outline": "Skica|Koncept", "examples": "Primjeri|Scenariji", "given": "*|Zadan|Zadani|Zadano", "when": "*|Kada|Kad", "then": "*|Onda", "and": "*|I", "but": "*|Ali" }, "hu": { "name": "Hungarian", "native": "magyar", "feature": "Jellemző", "background": "Háttér", "scenario": "Forgatókönyv", "scenario_outline": "Forgatókönyv vázlat", "examples": "Példák", "given": "*|Amennyiben|Adott", "when": "*|Majd|Ha|Amikor", "then": "*|Akkor", "and": "*|És", "but": "*|De" }, "id": { "name": "Indonesian", "native": "Bahasa Indonesia", "feature": "Fitur", "background": "Dasar", "scenario": "Skenario", "scenario_outline": "Skenario konsep", "examples": "Contoh", "given": "*|Dengan", "when": "*|Ketika", "then": "*|Maka", "and": "*|Dan", "but": "*|Tapi" }, "is": { "name": "Icelandic", "native": "Íslenska", "feature": "Eiginleiki", "background": "Bakgrunnur", "scenario": "Atburðarás", "scenario_outline": "Lýsing Atburðarásar|Lýsing Dæma", "examples": "Dæmi|Atburðarásir", "given": "*|Ef", "when": "*|Þegar", "then": "*|Þá", "and": "*|Og", "but": "*|En" }, "it": { "name": "Italian", "native": "italiano", "feature": "Funzionalità", "background": "Contesto", "scenario": "Scenario", "scenario_outline": "Schema dello scenario", "examples": "Esempi", "given": "*|Dato|Data|Dati|Date", "when": "*|Quando", "then": "*|Allora", "and": "*|E", "but": "*|Ma" }, "ja": { "name": "Japanese", "native": "日本語", "feature": "フィーチャ|機能", "background": "背景", "scenario": "シナリオ", "scenario_outline": "シナリオアウトライン|シナリオテンプレート|テンプレ|シナリオテンプレ", "examples": "例|サンプル", "given": "*|前提<", "when": "*|もし<", "then": "*|ならば<", "and": "*|かつ<", "but": "*|しかし<|但し<|ただし<" }, "kn": { "name": "Kannada", "native": "ಕನ್ನಡ", "background": "ಹಿನ್ನೆಲೆ", "feature": "ಹೆಚ್ಚಳ", "scenario": "ಕಥಾಸಾರಾಂಶ", "scenario_outline": "ವಿವರಣೆ", "examples": "ಉದಾಹರಣೆಗಳು", "given": "*|ನೀಡಿದ", "when": "*|ಸ್ಥಿತಿಯನ್ನು", "then": "*|ನಂತರ", "and": "*|ಮತ್ತು", "but": "*|ಆದರೆ" }, "ko": { "name": "Korean", "native": "한국어", "background": "배경", "feature": "기능", "scenario": "시나리오", "scenario_outline": "시나리오 개요", "examples": "예", "given": "*|조건<|먼저<", "when": "*|만일<|만약<", "then": "*|그러면<", "and": "*|그리고<", "but": "*|하지만<|단<" }, "lt": { "name": "Lithuanian", "native": "lietuvių kalba", "feature": "Savybė", "background": "Kontekstas", "scenario": "Scenarijus", "scenario_outline": "Scenarijaus šablonas", "examples": "Pavyzdžiai|Scenarijai|Variantai", "given": "*|Duota", "when": "*|Kai", "then": "*|Tada", "and": "*|Ir", "but": "*|Bet" }, "lu": { "name": "Luxemburgish", "native": "Lëtzebuergesch", "feature": "Funktionalitéit", "background": "Hannergrond", "scenario": "Szenario", "scenario_outline": "Plang vum Szenario", "examples": "Beispiller", "given": "*|ugeholl", "when": "*|wann", "then": "*|dann", "and": "*|an|a", "but": "*|awer|mä" }, "lv": { "name": "Latvian", "native": "latviešu", "feature": "Funkcionalitāte|Fīča", "background": "Konteksts|Situācija", "scenario": "Scenārijs", "scenario_outline": "Scenārijs pēc parauga", "examples": "Piemēri|Paraugs", "given": "*|Kad", "when": "*|Ja", "then": "*|Tad", "and": "*|Un", "but": "*|Bet" }, "nl": { "name": "Dutch", "native": "Nederlands", "feature": "Functionaliteit", "background": "Achtergrond", "scenario": "Scenario", "scenario_outline": "Abstract Scenario", "examples": "Voorbeelden", "given": "*|Gegeven|Stel", "when": "*|Als", "then": "*|Dan", "and": "*|En", "but": "*|Maar" }, "no": { "name": "Norwegian", "native": "norsk", "feature": "Egenskap", "background": "Bakgrunn", "scenario": "Scenario", "scenario_outline": "Scenariomal|Abstrakt Scenario", "examples": "Eksempler", "given": "*|Gitt", "when": "*|Når", "then": "*|Så", "and": "*|Og", "but": "*|Men" }, "pa": { "name": "Panjabi", "native": "ਪੰਜਾਬੀ", "feature": "ਖਾਸੀਅਤ|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ", "background": "ਪਿਛੋਕੜ", "scenario": "ਪਟਕਥਾ", "scenario_outline": "ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ", "examples": "ਉਦਾਹਰਨਾਂ", "given": "*|ਜੇਕਰ|ਜਿਵੇਂ ਕਿ", "when": "*|ਜਦੋਂ", "then": "*|ਤਦ", "and": "*|ਅਤੇ", "but": "*|ਪਰ" }, "pl": { "name": "Polish", "native": "polski", "feature": "Właściwość|Funkcja|Aspekt|Potrzeba biznesowa", "background": "Założenia", "scenario": "Scenariusz", "scenario_outline": "Szablon scenariusza", "examples": "Przykłady", "given": "*|Zakładając|Mając", "when": "*|Jeżeli|Jeśli|Gdy|Kiedy", "then": "*|Wtedy", "and": "*|Oraz|I", "but": "*|Ale" }, "pt": { "name": "Portuguese", "native": "português", "background": "Contexto|Cenário de Fundo|Cenario de Fundo|Fundo", "feature": "Funcionalidade|Característica|Caracteristica", "scenario": "Cenário|Cenario", "scenario_outline": "Esquema do Cenário|Esquema do Cenario|Delineação do Cenário|Delineacao do Cenario", "examples": "Exemplos|Cenários|Cenarios", "given": "*|Dado|Dada|Dados|Dadas", "when": "*|Quando", "then": "*|Então|Entao", "and": "*|E", "but": "*|Mas" }, "ro": { "name": "Romanian", "native": "română", "background": "Context", "feature": "Functionalitate|Funcționalitate|Funcţionalitate", "scenario": "Scenariu", "scenario_outline": "Structura scenariu|Structură scenariu", "examples": "Exemple", "given": "*|Date fiind|Dat fiind|Dati fiind|Dați fiind|Daţi fiind", "when": "*|Cand|Când", "then": "*|Atunci", "and": "*|Si|Și|Şi", "but": "*|Dar" }, "ru": { "name": "Russian", "native": "русский", "feature": "Функция|Функционал|Свойство", "background": "Предыстория|Контекст", "scenario": "Сценарий", "scenario_outline": "Структура сценария", "examples": "Примеры", "given": "*|Допустим|Дано|Пусть", "when": "*|Если|Когда", "then": "*|То|Тогда", "and": "*|И|К тому же|Также", "but": "*|Но|А" }, "sv": { "name": "Swedish", "native": "Svenska", "feature": "Egenskap", "background": "Bakgrund", "scenario": "Scenario", "scenario_outline": "Abstrakt Scenario|Scenariomall", "examples": "Exempel", "given": "*|Givet", "when": "*|När", "then": "*|Så", "and": "*|Och", "but": "*|Men" }, "sk": { "name": "Slovak", "native": "Slovensky", "feature": "Požiadavka|Funkcia|Vlastnosť", "background": "Pozadie", "scenario": "Scenár", "scenario_outline": "Náčrt Scenáru|Náčrt Scenára|Osnova Scenára", "examples": "Príklady", "given": "*|Pokiaľ|Za predpokladu", "when": "*|Keď|Ak", "then": "*|Tak|Potom", "and": "*|A|A tiež|A taktiež|A zároveň", "but": "*|Ale" }, "sr-Latn": { "name": "Serbian (Latin)", "native": "Srpski (Latinica)", "feature": "Funkcionalnost|Mogućnost|Mogucnost|Osobina", "background": "Kontekst|Osnova|Pozadina", "scenario": "Scenario|Primer", "scenario_outline": "Struktura scenarija|Skica|Koncept", "examples": "Primeri|Scenariji", "given": "*|Zadato|Zadate|Zatati", "when": "*|Kada|Kad", "then": "*|Onda", "and": "*|I", "but": "*|Ali" }, "sr-Cyrl": { "name": "Serbian", "native": "Српски", "feature": "Функционалност|Могућност|Особина", "background": "Контекст|Основа|Позадина", "scenario": "Сценарио|Пример", "scenario_outline": "Структура сценарија|Скица|Концепт", "examples": "Примери|Сценарији", "given": "*|Задато|Задате|Задати", "when": "*|Када|Кад", "then": "*|Онда", "and": "*|И", "but": "*|Али" }, "tl": { "name": "Telugu", "native": "తెలుగు", "feature": "గుణము", "background": "నేపథ్యం", "scenario": "సన్నివేశం", "scenario_outline": "కథనం", "examples": "ఉదాహరణలు", "given": "*|చెప్పబడినది", "when": "*|ఈ పరిస్థితిలో", "then": "*|అప్పుడు", "and": "*|మరియు", "but": "*|కాని" }, "th": { "name": "Thai", "native": "ไทย", "feature": "โครงหลัก|ความต้องการทางธุรกิจ|ความสามารถ", "background": "แนวคิด", "scenario": "เหตุการณ์", "scenario_outline": "สรุปเหตุการณ์|โครงสร้างของเหตุการณ์", "examples": "ชุดของตัวอย่าง|ชุดของเหตุการณ์", "given": "*|กำหนดให้", "when": "*|เมื่อ", "then": "*|ดังนั้น", "and": "*|และ", "but": "*|แต่" }, "tr": { "name": "Turkish", "native": "Türkçe", "feature": "Özellik", "background": "Geçmiş", "scenario": "Senaryo", "scenario_outline": "Senaryo taslağı", "examples": "Örnekler", "given": "*|Diyelim ki", "when": "*|Eğer ki", "then": "*|O zaman", "and": "*|Ve", "but": "*|Fakat|Ama" }, "tt": { "name": "Tatar", "native": "Татарча", "feature": "Мөмкинлек|Үзенчәлеклелек", "background": "Кереш", "scenario": "Сценарий", "scenario_outline": "Сценарийның төзелеше", "examples": "Үрнәкләр|Мисаллар", "given": "*|Әйтик", "when": "*|Әгәр", "then": "*|Нәтиҗәдә", "and": "*|Һәм|Вә", "but": "*|Ләкин|Әмма" }, "uk": { "name": "Ukrainian", "native": "Українська", "feature": "Функціонал", "background": "Передумова", "scenario": "Сценарій", "scenario_outline": "Структура сценарію", "examples": "Приклади", "given": "*|Припустимо|Припустимо, що|Нехай|Дано", "when": "*|Якщо|Коли", "then": "*|То|Тоді", "and": "*|І|А також|Та", "but": "*|Але" }, "uz": { "name": "Uzbek", "native": "Узбекча", "feature": "Функционал", "background": "Тарих", "scenario": "Сценарий", "scenario_outline": "Сценарий структураси", "examples": "Мисоллар", "given": "*|Агар", "when": "*|Агар", "then": "*|Унда", "and": "*|Ва", "but": "*|Лекин|Бирок|Аммо" }, "vi": { "name": "Vietnamese", "native": "Tiếng Việt", "feature": "Tính năng", "background": "Bối cảnh", "scenario": "Tình huống|Kịch bản", "scenario_outline": "Khung tình huống|Khung kịch bản", "examples": "Dữ liệu", "given": "*|Biết|Cho", "when": "*|Khi", "then": "*|Thì", "and": "*|Và", "but": "*|Nhưng" }, "zh-CN": { "name": "Chinese simplified", "native": "简体中文", "feature": "功能", "background": "背景", "scenario": "场景|剧本", "scenario_outline": "场景大纲|剧本大纲", "examples": "例子", "given": "*|假如<|假设<|假定<", "when": "*|当<", "then": "*|那么<", "and": "*|而且<|并且<|同时<", "but": "*|但是<" }, "zh-TW": { "name": "Chinese traditional", "native": "繁體中文", "feature": "功能", "background": "背景", "scenario": "場景|劇本", "scenario_outline": "場景大綱|劇本大綱", "examples": "例子", "given": "*|假如<|假設<|假定<", "when": "*|當<", "then": "*|那麼<", "and": "*|而且<|並且<|同時<", "but": "*|但是<" } } gherkin-2.12.2/cucumber.yml0000644000004100000410000000050112244512574015607 0ustar www-datawww-datadefault: --format pretty --tags ~@pending,~@wip --strict --color --dotcucumber features/.cucumber features wip: --format pretty --tags @wip --wip features pending: --format pretty --tags @pending,~@native_lexer travis: --format pretty --tags ~@cucumber-source-available javascript: --format pretty --tags ~@no-javascript gherkin-2.12.2/metadata.yml0000644000004100000410000005034412244512574015574 0ustar www-datawww-data--- !ruby/object:Gem::Specification name: gherkin version: !ruby/object:Gem::Version version: 2.12.2 platform: ruby authors: - Mike Sassak - Gregory Hnatiuk - Aslak Hellesøy autorequire: bindir: bin cert_chain: [] date: 2013-10-12 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rake-compiler requirement: !ruby/object:Gem::Requirement requirements: - - '=' - !ruby/object:Gem::Version version: 0.8.2 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '=' - !ruby/object:Gem::Version version: 0.8.2 - !ruby/object:Gem::Dependency name: multi_json requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '1.3' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: '1.3' - !ruby/object:Gem::Dependency name: cucumber requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 1.3.8 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 1.3.8 - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 10.1.0 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 10.1.0 - !ruby/object:Gem::Dependency name: bundler requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 1.3.5 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 1.3.5 - !ruby/object:Gem::Dependency name: rspec requirement: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 2.14.1 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ~> - !ruby/object:Gem::Version version: 2.14.1 - !ruby/object:Gem::Dependency name: rubyzip requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 1.0.0 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 1.0.0 - !ruby/object:Gem::Dependency name: ruby-beautify requirement: !ruby/object:Gem::Requirement requirements: - - '=' - !ruby/object:Gem::Version version: 0.92.2 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '=' - !ruby/object:Gem::Version version: 0.92.2 - !ruby/object:Gem::Dependency name: therubyracer requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 0.12.0 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 0.12.0 - !ruby/object:Gem::Dependency name: yard requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 0.8.7.2 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 0.8.7.2 - !ruby/object:Gem::Dependency name: rdiscount requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 2.1.6 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 2.1.6 - !ruby/object:Gem::Dependency name: builder requirement: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 3.2.2 type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: 3.2.2 description: A fast Gherkin lexer/parser based on the Ragel State Machine Compiler. email: cukes@googlegroups.com executables: [] extensions: - ext/gherkin_lexer_ar/extconf.rb - ext/gherkin_lexer_bg/extconf.rb - ext/gherkin_lexer_bm/extconf.rb - ext/gherkin_lexer_ca/extconf.rb - ext/gherkin_lexer_cs/extconf.rb - ext/gherkin_lexer_cy_gb/extconf.rb - ext/gherkin_lexer_da/extconf.rb - ext/gherkin_lexer_de/extconf.rb - ext/gherkin_lexer_el/extconf.rb - ext/gherkin_lexer_en/extconf.rb - ext/gherkin_lexer_en_au/extconf.rb - ext/gherkin_lexer_en_lol/extconf.rb - ext/gherkin_lexer_en_old/extconf.rb - ext/gherkin_lexer_en_pirate/extconf.rb - ext/gherkin_lexer_en_scouse/extconf.rb - ext/gherkin_lexer_en_tx/extconf.rb - ext/gherkin_lexer_eo/extconf.rb - ext/gherkin_lexer_es/extconf.rb - ext/gherkin_lexer_et/extconf.rb - ext/gherkin_lexer_fa/extconf.rb - ext/gherkin_lexer_fi/extconf.rb - ext/gherkin_lexer_fr/extconf.rb - ext/gherkin_lexer_gl/extconf.rb - ext/gherkin_lexer_he/extconf.rb - ext/gherkin_lexer_hi/extconf.rb - ext/gherkin_lexer_hr/extconf.rb - ext/gherkin_lexer_hu/extconf.rb - ext/gherkin_lexer_id/extconf.rb - ext/gherkin_lexer_is/extconf.rb - ext/gherkin_lexer_it/extconf.rb - ext/gherkin_lexer_ja/extconf.rb - ext/gherkin_lexer_kn/extconf.rb - ext/gherkin_lexer_ko/extconf.rb - ext/gherkin_lexer_lt/extconf.rb - ext/gherkin_lexer_lu/extconf.rb - ext/gherkin_lexer_lv/extconf.rb - ext/gherkin_lexer_nl/extconf.rb - ext/gherkin_lexer_no/extconf.rb - ext/gherkin_lexer_pa/extconf.rb - ext/gherkin_lexer_pl/extconf.rb - ext/gherkin_lexer_pt/extconf.rb - ext/gherkin_lexer_ro/extconf.rb - ext/gherkin_lexer_ru/extconf.rb - ext/gherkin_lexer_sk/extconf.rb - ext/gherkin_lexer_sr_cyrl/extconf.rb - ext/gherkin_lexer_sr_latn/extconf.rb - ext/gherkin_lexer_sv/extconf.rb - ext/gherkin_lexer_th/extconf.rb - ext/gherkin_lexer_tl/extconf.rb - ext/gherkin_lexer_tr/extconf.rb - ext/gherkin_lexer_tt/extconf.rb - ext/gherkin_lexer_uk/extconf.rb - ext/gherkin_lexer_uz/extconf.rb - ext/gherkin_lexer_vi/extconf.rb - ext/gherkin_lexer_zh_cn/extconf.rb - ext/gherkin_lexer_zh_tw/extconf.rb extra_rdoc_files: [] files: - .gitattributes - .mailmap - .rbenv-gemsets - .rspec - .ruby-gemset - .ruby-version - .travis.yml - .yardopts - Gemfile - History.md - LICENSE - README.md - Rakefile - build_native_gems.sh - cucumber.yml - examples/parse_and_output_json.rb - features/.cucumber/stepdefs.json - features/escaped_pipes.feature - features/feature_parser.feature - features/json_formatter.feature - features/json_parser.feature - features/native_lexer.feature - features/parser_with_native_lexer.feature - features/pretty_formatter.feature - features/step_definitions/eyeball_steps.rb - features/step_definitions/gherkin_steps.rb - features/step_definitions/json_formatter_steps.rb - features/step_definitions/json_parser_steps.rb - features/step_definitions/pretty_formatter_steps.rb - features/steps_parser.feature - features/support/env.rb - gherkin.gemspec - install_mingw_os_x.sh - js/.npmignore - js/lib/gherkin/lexer/.npmignore - lib/gherkin.rb - lib/gherkin/README.md - lib/gherkin/c_lexer.rb - lib/gherkin/formatter/ansi_escapes.rb - lib/gherkin/formatter/argument.rb - lib/gherkin/formatter/escaping.rb - lib/gherkin/formatter/filter_formatter.rb - lib/gherkin/formatter/hashable.rb - lib/gherkin/formatter/json_formatter.rb - lib/gherkin/formatter/line_filter.rb - lib/gherkin/formatter/model.rb - lib/gherkin/formatter/pretty_formatter.rb - lib/gherkin/formatter/regexp_filter.rb - lib/gherkin/formatter/step_printer.rb - lib/gherkin/formatter/tag_count_formatter.rb - lib/gherkin/formatter/tag_filter.rb - lib/gherkin/i18n.json - lib/gherkin/i18n.rb - lib/gherkin/json_parser.rb - lib/gherkin/lexer/encoding.rb - lib/gherkin/lexer/i18n_lexer.rb - lib/gherkin/listener/event.rb - lib/gherkin/listener/formatter_listener.rb - lib/gherkin/native.rb - lib/gherkin/native/java.rb - lib/gherkin/native/null.rb - lib/gherkin/native/therubyracer.rb - lib/gherkin/parser/meta.txt - lib/gherkin/parser/parser.rb - lib/gherkin/parser/root.txt - lib/gherkin/parser/steps.txt - lib/gherkin/platform.rb - lib/gherkin/rubify.rb - lib/gherkin/tag_expression.rb - ragel/lexer.c.rl.erb - ragel/lexer.java.rl.erb - ragel/lexer.js.rl.erb - ragel/lexer.rb.rl.erb - ragel/lexer_common.rl.erb - spec/gherkin/c_lexer_spec.rb - spec/gherkin/fixtures/1.feature - spec/gherkin/fixtures/comments_in_table.feature - spec/gherkin/fixtures/complex.feature - spec/gherkin/fixtures/complex.json - spec/gherkin/fixtures/complex_for_filtering.feature - spec/gherkin/fixtures/complex_with_tags.feature - spec/gherkin/fixtures/dos_line_endings.feature - spec/gherkin/fixtures/examples_with_only_header.feature - spec/gherkin/fixtures/hantu_pisang.feature - spec/gherkin/fixtures/i18n_fr.feature - spec/gherkin/fixtures/i18n_fr2.feature - spec/gherkin/fixtures/i18n_no.feature - spec/gherkin/fixtures/i18n_pt1.feature - spec/gherkin/fixtures/i18n_pt2.feature - spec/gherkin/fixtures/i18n_pt3.feature - spec/gherkin/fixtures/i18n_pt4.feature - spec/gherkin/fixtures/i18n_zh-CN.feature - spec/gherkin/fixtures/iso-8859-1.feature - spec/gherkin/fixtures/issue_145.feature - spec/gherkin/fixtures/scenario_outline_with_tags.feature - spec/gherkin/fixtures/scenario_without_steps.feature - spec/gherkin/fixtures/simple_with_comments.feature - spec/gherkin/fixtures/simple_with_tags.feature - spec/gherkin/fixtures/with_bom.feature - spec/gherkin/fixtures/with_bom_and_language_spec.feature - spec/gherkin/formatter/ansi_escapes_spec.rb - spec/gherkin/formatter/filter_formatter_spec.rb - spec/gherkin/formatter/json_formatter_spec.rb - spec/gherkin/formatter/model_spec.rb - spec/gherkin/formatter/pretty_formatter_spec.rb - spec/gherkin/formatter/spaces.feature - spec/gherkin/formatter/step_printer_spec.rb - spec/gherkin/formatter/tabs.feature - spec/gherkin/formatter/tag_count_formatter_spec.rb - spec/gherkin/i18n_spec.rb - spec/gherkin/java_lexer_spec.rb - spec/gherkin/json_parser_spec.rb - spec/gherkin/lexer/i18n_lexer_spec.rb - spec/gherkin/native_lexer_spec.rb - spec/gherkin/parser/parser_spec.rb - spec/gherkin/rubify_spec.rb - spec/gherkin/sexp_recorder.rb - spec/gherkin/shared/doc_string_group.rb - spec/gherkin/shared/encoding_group.rb - spec/gherkin/shared/lexer_group.rb - spec/gherkin/shared/row_group.rb - spec/gherkin/shared/tags_group.rb - spec/gherkin/tag_expression_spec.rb - spec/spec_helper.rb - tasks/apidoc.rake - tasks/bench.rake - tasks/bench/feature_builder.rb - tasks/bench/null_listener.rb - tasks/compile.rake - tasks/cucumber.rake - tasks/gems.rake - tasks/ikvm.rake - tasks/ragel_task.rb - tasks/release.rake - tasks/rspec.rake - tasks/yard/default/layout/html/bubble_32x32.png - tasks/yard/default/layout/html/bubble_48x48.png - tasks/yard/default/layout/html/footer.erb - tasks/yard/default/layout/html/index.erb - tasks/yard/default/layout/html/layout.erb - tasks/yard/default/layout/html/logo.erb - tasks/yard/default/layout/html/setup.rb - lib/gherkin/lexer/ar.rb - lib/gherkin/lexer/bg.rb - lib/gherkin/lexer/bm.rb - lib/gherkin/lexer/ca.rb - lib/gherkin/lexer/cs.rb - lib/gherkin/lexer/cy_gb.rb - lib/gherkin/lexer/da.rb - lib/gherkin/lexer/de.rb - lib/gherkin/lexer/el.rb - lib/gherkin/lexer/en.rb - lib/gherkin/lexer/en_au.rb - lib/gherkin/lexer/en_lol.rb - lib/gherkin/lexer/en_old.rb - lib/gherkin/lexer/en_pirate.rb - lib/gherkin/lexer/en_scouse.rb - lib/gherkin/lexer/en_tx.rb - lib/gherkin/lexer/eo.rb - lib/gherkin/lexer/es.rb - lib/gherkin/lexer/et.rb - lib/gherkin/lexer/fa.rb - lib/gherkin/lexer/fi.rb - lib/gherkin/lexer/fr.rb - lib/gherkin/lexer/gl.rb - lib/gherkin/lexer/he.rb - lib/gherkin/lexer/hi.rb - lib/gherkin/lexer/hr.rb - lib/gherkin/lexer/hu.rb - lib/gherkin/lexer/id.rb - lib/gherkin/lexer/is.rb - lib/gherkin/lexer/it.rb - lib/gherkin/lexer/ja.rb - lib/gherkin/lexer/kn.rb - lib/gherkin/lexer/ko.rb - lib/gherkin/lexer/lt.rb - lib/gherkin/lexer/lu.rb - lib/gherkin/lexer/lv.rb - lib/gherkin/lexer/nl.rb - lib/gherkin/lexer/no.rb - lib/gherkin/lexer/pa.rb - lib/gherkin/lexer/pl.rb - lib/gherkin/lexer/pt.rb - lib/gherkin/lexer/ro.rb - lib/gherkin/lexer/ru.rb - lib/gherkin/lexer/sk.rb - lib/gherkin/lexer/sr_cyrl.rb - lib/gherkin/lexer/sr_latn.rb - lib/gherkin/lexer/sv.rb - lib/gherkin/lexer/th.rb - lib/gherkin/lexer/tl.rb - lib/gherkin/lexer/tr.rb - lib/gherkin/lexer/tt.rb - lib/gherkin/lexer/uk.rb - lib/gherkin/lexer/uz.rb - lib/gherkin/lexer/vi.rb - lib/gherkin/lexer/zh_cn.rb - lib/gherkin/lexer/zh_tw.rb - ext/gherkin_lexer_ar/gherkin_lexer_ar.c - ext/gherkin_lexer_bg/gherkin_lexer_bg.c - ext/gherkin_lexer_bm/gherkin_lexer_bm.c - ext/gherkin_lexer_ca/gherkin_lexer_ca.c - ext/gherkin_lexer_cs/gherkin_lexer_cs.c - ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c - ext/gherkin_lexer_da/gherkin_lexer_da.c - ext/gherkin_lexer_de/gherkin_lexer_de.c - ext/gherkin_lexer_el/gherkin_lexer_el.c - ext/gherkin_lexer_en/gherkin_lexer_en.c - ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c - ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c - ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c - ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c - ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c - ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c - ext/gherkin_lexer_eo/gherkin_lexer_eo.c - ext/gherkin_lexer_es/gherkin_lexer_es.c - ext/gherkin_lexer_et/gherkin_lexer_et.c - ext/gherkin_lexer_fa/gherkin_lexer_fa.c - ext/gherkin_lexer_fi/gherkin_lexer_fi.c - ext/gherkin_lexer_fr/gherkin_lexer_fr.c - ext/gherkin_lexer_gl/gherkin_lexer_gl.c - ext/gherkin_lexer_he/gherkin_lexer_he.c - ext/gherkin_lexer_hi/gherkin_lexer_hi.c - ext/gherkin_lexer_hr/gherkin_lexer_hr.c - ext/gherkin_lexer_hu/gherkin_lexer_hu.c - ext/gherkin_lexer_id/gherkin_lexer_id.c - ext/gherkin_lexer_is/gherkin_lexer_is.c - ext/gherkin_lexer_it/gherkin_lexer_it.c - ext/gherkin_lexer_ja/gherkin_lexer_ja.c - ext/gherkin_lexer_kn/gherkin_lexer_kn.c - ext/gherkin_lexer_ko/gherkin_lexer_ko.c - ext/gherkin_lexer_lt/gherkin_lexer_lt.c - ext/gherkin_lexer_lu/gherkin_lexer_lu.c - ext/gherkin_lexer_lv/gherkin_lexer_lv.c - ext/gherkin_lexer_nl/gherkin_lexer_nl.c - ext/gherkin_lexer_no/gherkin_lexer_no.c - ext/gherkin_lexer_pa/gherkin_lexer_pa.c - ext/gherkin_lexer_pl/gherkin_lexer_pl.c - ext/gherkin_lexer_pt/gherkin_lexer_pt.c - ext/gherkin_lexer_ro/gherkin_lexer_ro.c - ext/gherkin_lexer_ru/gherkin_lexer_ru.c - ext/gherkin_lexer_sk/gherkin_lexer_sk.c - ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c - ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c - ext/gherkin_lexer_sv/gherkin_lexer_sv.c - ext/gherkin_lexer_th/gherkin_lexer_th.c - ext/gherkin_lexer_tl/gherkin_lexer_tl.c - ext/gherkin_lexer_tr/gherkin_lexer_tr.c - ext/gherkin_lexer_tt/gherkin_lexer_tt.c - ext/gherkin_lexer_uk/gherkin_lexer_uk.c - ext/gherkin_lexer_uz/gherkin_lexer_uz.c - ext/gherkin_lexer_vi/gherkin_lexer_vi.c - ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c - ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c - ext/gherkin_lexer_ar/extconf.rb - ext/gherkin_lexer_bg/extconf.rb - ext/gherkin_lexer_bm/extconf.rb - ext/gherkin_lexer_ca/extconf.rb - ext/gherkin_lexer_cs/extconf.rb - ext/gherkin_lexer_cy_gb/extconf.rb - ext/gherkin_lexer_da/extconf.rb - ext/gherkin_lexer_de/extconf.rb - ext/gherkin_lexer_el/extconf.rb - ext/gherkin_lexer_en/extconf.rb - ext/gherkin_lexer_en_au/extconf.rb - ext/gherkin_lexer_en_lol/extconf.rb - ext/gherkin_lexer_en_old/extconf.rb - ext/gherkin_lexer_en_pirate/extconf.rb - ext/gherkin_lexer_en_scouse/extconf.rb - ext/gherkin_lexer_en_tx/extconf.rb - ext/gherkin_lexer_eo/extconf.rb - ext/gherkin_lexer_es/extconf.rb - ext/gherkin_lexer_et/extconf.rb - ext/gherkin_lexer_fa/extconf.rb - ext/gherkin_lexer_fi/extconf.rb - ext/gherkin_lexer_fr/extconf.rb - ext/gherkin_lexer_gl/extconf.rb - ext/gherkin_lexer_he/extconf.rb - ext/gherkin_lexer_hi/extconf.rb - ext/gherkin_lexer_hr/extconf.rb - ext/gherkin_lexer_hu/extconf.rb - ext/gherkin_lexer_id/extconf.rb - ext/gherkin_lexer_is/extconf.rb - ext/gherkin_lexer_it/extconf.rb - ext/gherkin_lexer_ja/extconf.rb - ext/gherkin_lexer_kn/extconf.rb - ext/gherkin_lexer_ko/extconf.rb - ext/gherkin_lexer_lt/extconf.rb - ext/gherkin_lexer_lu/extconf.rb - ext/gherkin_lexer_lv/extconf.rb - ext/gherkin_lexer_nl/extconf.rb - ext/gherkin_lexer_no/extconf.rb - ext/gherkin_lexer_pa/extconf.rb - ext/gherkin_lexer_pl/extconf.rb - ext/gherkin_lexer_pt/extconf.rb - ext/gherkin_lexer_ro/extconf.rb - ext/gherkin_lexer_ru/extconf.rb - ext/gherkin_lexer_sk/extconf.rb - ext/gherkin_lexer_sr_cyrl/extconf.rb - ext/gherkin_lexer_sr_latn/extconf.rb - ext/gherkin_lexer_sv/extconf.rb - ext/gherkin_lexer_th/extconf.rb - ext/gherkin_lexer_tl/extconf.rb - ext/gherkin_lexer_tr/extconf.rb - ext/gherkin_lexer_tt/extconf.rb - ext/gherkin_lexer_uk/extconf.rb - ext/gherkin_lexer_uz/extconf.rb - ext/gherkin_lexer_vi/extconf.rb - ext/gherkin_lexer_zh_cn/extconf.rb - ext/gherkin_lexer_zh_tw/extconf.rb homepage: http://github.com/cucumber/gherkin licenses: - MIT metadata: {} post_install_message: rdoc_options: - --charset=UTF-8 require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - '>=' - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.0.3 signing_key: specification_version: 4 summary: gherkin-2.12.2 test_files: - features/escaped_pipes.feature - features/feature_parser.feature - features/json_formatter.feature - features/json_parser.feature - features/native_lexer.feature - features/parser_with_native_lexer.feature - features/pretty_formatter.feature - features/step_definitions/eyeball_steps.rb - features/step_definitions/gherkin_steps.rb - features/step_definitions/json_formatter_steps.rb - features/step_definitions/json_parser_steps.rb - features/step_definitions/pretty_formatter_steps.rb - features/steps_parser.feature - features/support/env.rb - spec/gherkin/c_lexer_spec.rb - spec/gherkin/fixtures/1.feature - spec/gherkin/fixtures/comments_in_table.feature - spec/gherkin/fixtures/complex.feature - spec/gherkin/fixtures/complex.json - spec/gherkin/fixtures/complex_for_filtering.feature - spec/gherkin/fixtures/complex_with_tags.feature - spec/gherkin/fixtures/dos_line_endings.feature - spec/gherkin/fixtures/examples_with_only_header.feature - spec/gherkin/fixtures/hantu_pisang.feature - spec/gherkin/fixtures/i18n_fr.feature - spec/gherkin/fixtures/i18n_fr2.feature - spec/gherkin/fixtures/i18n_no.feature - spec/gherkin/fixtures/i18n_pt1.feature - spec/gherkin/fixtures/i18n_pt2.feature - spec/gherkin/fixtures/i18n_pt3.feature - spec/gherkin/fixtures/i18n_pt4.feature - spec/gherkin/fixtures/i18n_zh-CN.feature - spec/gherkin/fixtures/iso-8859-1.feature - spec/gherkin/fixtures/issue_145.feature - spec/gherkin/fixtures/scenario_outline_with_tags.feature - spec/gherkin/fixtures/scenario_without_steps.feature - spec/gherkin/fixtures/simple_with_comments.feature - spec/gherkin/fixtures/simple_with_tags.feature - spec/gherkin/fixtures/with_bom.feature - spec/gherkin/fixtures/with_bom_and_language_spec.feature - spec/gherkin/formatter/ansi_escapes_spec.rb - spec/gherkin/formatter/filter_formatter_spec.rb - spec/gherkin/formatter/json_formatter_spec.rb - spec/gherkin/formatter/model_spec.rb - spec/gherkin/formatter/pretty_formatter_spec.rb - spec/gherkin/formatter/spaces.feature - spec/gherkin/formatter/step_printer_spec.rb - spec/gherkin/formatter/tabs.feature - spec/gherkin/formatter/tag_count_formatter_spec.rb - spec/gherkin/i18n_spec.rb - spec/gherkin/java_lexer_spec.rb - spec/gherkin/json_parser_spec.rb - spec/gherkin/lexer/i18n_lexer_spec.rb - spec/gherkin/native_lexer_spec.rb - spec/gherkin/parser/parser_spec.rb - spec/gherkin/rubify_spec.rb - spec/gherkin/sexp_recorder.rb - spec/gherkin/shared/doc_string_group.rb - spec/gherkin/shared/encoding_group.rb - spec/gherkin/shared/lexer_group.rb - spec/gherkin/shared/row_group.rb - spec/gherkin/shared/tags_group.rb - spec/gherkin/tag_expression_spec.rb - spec/spec_helper.rb has_rdoc: gherkin-2.12.2/ragel/0000755000004100000410000000000012244512574014355 5ustar www-datawww-datagherkin-2.12.2/ragel/lexer.c.rl.erb0000644000004100000410000002735012244512574017032 0ustar www-datawww-data#include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) %%{ machine lexer; action begin_content { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } action begin_docstring_content { MARK(content_start, p); } action start_docstring { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } action store_docstring_content { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } action start_docstring_content_type { MARK(docstring_content_type_start, p); } action end_docstring_content_type { MARK(docstring_content_type_end, p); } action store_feature_content { STORE_KW_END_CON(feature); } action store_background_content { STORE_KW_END_CON(background); } action store_scenario_content { STORE_KW_END_CON(scenario); } action store_scenario_outline_content { STORE_KW_END_CON(scenario_outline); } action store_examples_content { STORE_KW_END_CON(examples); } action store_step_content { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } action store_comment_content { STORE_ATTR(comment); lexer->mark = 0; } action store_tag_content { STORE_ATTR(tag); lexer->mark = 0; } action inc_line_number { lexer->line_number += 1; MARK(final_newline, p); } action last_newline { MARK(last_newline, p + 1); } action start_keyword { if (lexer->mark == 0) { MARK(mark, p); } } action end_keyword { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } action next_keyword_start { MARK(content_end, p); } action start_row { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } action begin_cell_content { MARK(content_start, p); } action store_cell_content { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } action store_row { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } action end_feature { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } include lexer_common "lexer_common.<%= @i18n.underscored_iso_code %>.rl"; }%% /** Data **/ %% write data; static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); %% write init; %% write exec; assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_<%= @i18n.underscored_iso_code %>() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "<%= @i18n.underscored_iso_code.capitalize %>", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ragel/lexer.js.rl.erb0000644000004100000410000002106212244512574017216 0ustar www-datawww-data;(function() { %%{ machine lexer; action begin_content { this.content_start = p; this.current_line = this.line_number; this.start_col = p - this.last_newline - (this.keyword+':').length; } action start_docstring { this.current_line = this.line_number; this.start_col = p - this.last_newline; } action begin_docstring_content { this.content_start = p; } action start_docstring_content_type { this.docstring_content_type_start = p; } action end_docstring_content_type { this.docstring_content_type_end = p; } action store_docstring_content { var con = this.unindent( this.start_col, this.bytesToString(data.slice(this.content_start, this.next_keyword_start-1)).replace(/(\r?\n)?([\t ])*$/, '').replace(/ESCAPED_TRIPLE_QUOTE/mg, '"""') ); var con_type = this.bytesToString(data.slice(this.docstring_content_type_start, this.docstring_content_type_end)).trim(); this.listener.doc_string(con_type, con, this.current_line); } action store_feature_content { p = this.store_keyword_content('feature', data, p, eof); } action store_background_content { p = this.store_keyword_content('background', data, p, eof); } action store_scenario_content { p = this.store_keyword_content('scenario', data, p, eof); } action store_scenario_outline_content { p = this.store_keyword_content('scenario_outline', data, p, eof); } action store_examples_content { p = this.store_keyword_content('examples', data, p, eof); } action store_step_content { var con = this.bytesToString(data.slice(this.content_start, p)).trim(); this.listener.step(this.keyword, con, this.current_line); } action store_comment_content { var con = this.bytesToString(data.slice(this.content_start, p)).trim(); this.listener.comment(con, this.line_number); this.keyword_start = null; } action store_tag_content { var con = this.bytesToString(data.slice(this.content_start, p)).trim(); this.listener.tag(con, this.line_number); this.keyword_start = null; } action inc_line_number { this.line_number++; } action last_newline { this.last_newline = p + 1; } action start_keyword { this.keyword_start = this.keyword_start || p; } action end_keyword { this.keyword = this.bytesToString(data.slice(this.keyword_start, p)).replace(/:$/, ''); this.keyword_start = null; } action next_keyword_start { this.next_keyword_start = p; } action start_row { p = p - 1; current_row = []; this.current_line = this.line_number; } action begin_cell_content { this.content_start = p; } action store_cell_content { var con = this.bytesToString(data.slice(this.content_start, p)).trim(); current_row.push(con.replace(/\\\|/, "|").replace(/\\n/, "\n").replace(/\\\\/, "\\")); } action store_row { this.listener.row(current_row, this.current_line); } action end_feature { if(this.cs < lexer_first_final) { var content = this.current_line_content(data, p); throw new Error("Lexing error on line " + this.line_number + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information."); } else { this.listener.eof(); } } include lexer_common "lexer_common.<%= @i18n.underscored_iso_code %>.rl"; }%% %% write data; %% access this.; %% variable data data; %% getkey signedCharValue(data[p]); var Lexer = function(listener) { // Check that listener has the required functions var events = ['comment', 'tag', 'feature', 'background', 'scenario', 'scenario_outline', 'examples', 'step', 'doc_string', 'row', 'eof']; for(var i=0, len=events.length; i 127 ? v-256 : v; }; %% write init; %% write exec; }; /* * Decode utf-8 byte sequence to string. */ var decodeUtf8 = function(bytes) { var result = ""; var i = 0; var wc; var c; while (i < bytes.length) { /* parse as UTF-8 lead byte */ wc = bytes[i++]; if (wc < 0x80) { count = 0; } else if (wc < 0xC2 || wc >= 0xF8) { throw new Error("input is not a valid UTF-8 lead octet"); } else if (wc < 0xE0) { count = 1; wc = (wc & 0x1F) << 6; } else if (wc < 0xF0) { count = 2; wc = (wc & 0x0F) << 12; } else /* wc < 0xF8 */ { count = 3; wc = (wc & 0x07) << 18; } /* parse trail bytes, if any */ while (count) { if (!(i < bytes.length)) { throw new Error("short read"); } if ((c = bytes[i++] ^ 0x80) > 0x3F) { throw new Error("input is not a valid UTF-8 trail octet"); } wc |= c << (6 * --count); if (wc < (1 << (5 * count + 6))) { throw new Error("invalid non-minimal encoded input"); } } /* handle conversion to UTF-16 if needed */ if (wc > 0xFFFF) { wc -= 0x10000; result += String.fromCharCode(0xD800 + (wc >> 10)); wc = 0xDC00 + (wc & 0x3FF); } result += String.fromCharCode(wc); } return result; }; /* * Encode string to an array of bytes using utf8 encoding. * * Javascript internally stores character data as utf16 (like java). * String.charCodeAt() does *not* produce unicode points, but simply * reflects this internal representation. Thus, it is necessary * to first decode the utf-16 representation before encoding to * utf-8. */ var encodeUtf8 = function(string) { var bytes = []; var i = 0; var j = 0; var wc; while (i < string.length) { wc = string.charCodeAt(i++); if (wc >= 0xD800 && wc <= 0xDBFF && i < string.length && string.charCodeAt(i) >= 0xDC00 && string.charCodeAt(i) <= 0xDFFF) { /* decode UTF-16 */ wc = 0x10000 + ((wc & 0x3FF) << 10) + (string.charCodeAt(i++) & 0x3FF); } /* emit lead byte */ if (wc < 0x80) { bytes[j++] = wc; count = 0; } else if (wc < 0x800) { bytes[j++] = 0xC0 | (wc >> 6); count = 1; } else if (wc < 0x10000) { bytes[j++] = 0xE0 | (wc >> 12); count = 2; } else { /* SMP: 21-bit Unicode */ bytes[j++] = 0xF0 | (wc >> 18); count = 3; } /* emit trail bytes, if any */ while (count) { bytes[j++] = 0x80 | ((wc >> (6 * --count)) & 0x3F); } } return bytes; }; Lexer.prototype.bytesToString = function(bytes) { if(typeof bytes.write == 'function') { // Node.js return bytes.toString('utf-8'); } return decodeUtf8(bytes); }; Lexer.prototype.stringToBytes = function(string) { return encodeUtf8(string); }; Lexer.prototype.unindent = function(startcol, text) { startcol = startcol || 0; return text.replace(new RegExp('^[\t ]{0,' + startcol + '}', 'gm'), ''); }; Lexer.prototype.store_keyword_content = function(event, data, p, eof) { var end_point = (!this.next_keyword_start || (p == eof)) ? p : this.next_keyword_start; var content = this.unindent(this.start_col + 2, this.bytesToString(data.slice(this.content_start, end_point))).replace(/\s+$/,""); var content_lines = content.split("\n") var name = content_lines.shift() || ""; name = name.trim(); var description = content_lines.join("\n"); this.listener[event](this.keyword, name, description, this.current_line); var nks = this.next_keyword_start; this.next_keyword_start = null; return nks ? nks - 1 : p; }; Lexer.prototype.current_line_content = function(data, p) { var rest = Array.prototype.slice.call(data,this.last_newline, -1); var end = rest.indexOf(10) || -1; return this.bytesToString(rest.slice(0, end)).trim(); }; // Node.js export if(typeof module !== 'undefined') { module.exports = Lexer; } // Require.js export if (typeof define !== 'undefined') { if(define.amd) { define('gherkin/lexer/<%= @i18n.underscored_iso_code %>', [], function() { return Lexer; }); } else { define('gherkin/lexer/<%= @i18n.underscored_iso_code %>', function(require, exports, module) { exports.Lexer = Lexer; }); } } })(); gherkin-2.12.2/ragel/lexer.java.rl.erb0000644000004100000410000001527612244512574017535 0ustar www-datawww-datapackage gherkin.lexer; import java.io.UnsupportedEncodingException; import java.util.List; import java.util.ArrayList; import java.util.regex.Pattern; import gherkin.lexer.Lexer; import gherkin.lexer.Listener; import gherkin.lexer.LexingError; public class <%= @i18n.underscored_iso_code.capitalize %> implements Lexer { %%{ machine lexer; alphtype byte; action begin_content { contentStart = p; currentLine = lineNumber; if(keyword != null) { startCol = p - lastNewline - (keyword.length() + 1); } } action start_docstring { currentLine = lineNumber; startCol = p - lastNewline; } action begin_docstring_content { contentStart = p; } action start_docstring_content_type { docstringContentTypeStart = p; } action end_docstring_content_type { docstringContentTypeEnd = p; } action store_docstring_content { String con = unindent(startCol, substring(data, contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?([\\t ])*\\Z", "").replace("\\\"\\\"\\\"", "\"\"\"")); String conType = substring(data, docstringContentTypeStart, docstringContentTypeEnd).trim(); listener.docString(conType, con, currentLine); } action store_feature_content { String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart)); listener.feature(keyword, nameDescription[0], nameDescription[1], currentLine); if(nextKeywordStart != -1) p = nextKeywordStart - 1; nextKeywordStart = -1; } action store_background_content { String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart)); listener.background(keyword, nameDescription[0], nameDescription[1], currentLine); if(nextKeywordStart != -1) p = nextKeywordStart - 1; nextKeywordStart = -1; } action store_scenario_content { String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart)); listener.scenario(keyword, nameDescription[0], nameDescription[1], currentLine); if(nextKeywordStart != -1) p = nextKeywordStart - 1; nextKeywordStart = -1; } action store_scenario_outline_content { String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart)); listener.scenarioOutline(keyword, nameDescription[0], nameDescription[1], currentLine); if(nextKeywordStart != -1) p = nextKeywordStart - 1; nextKeywordStart = -1; } action store_examples_content { String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart)); listener.examples(keyword, nameDescription[0], nameDescription[1], currentLine); if(nextKeywordStart != -1) p = nextKeywordStart - 1; nextKeywordStart = -1; } action store_step_content { listener.step(keyword, substring(data, contentStart, p).trim(), currentLine); } action store_comment_content { listener.comment(substring(data, contentStart, p).trim(), lineNumber); keywordStart = -1; } action store_tag_content { listener.tag(substring(data, contentStart, p).trim(), currentLine); keywordStart = -1; } action inc_line_number { lineNumber++; } action last_newline { lastNewline = p + 1; } action start_keyword { if(keywordStart == -1) keywordStart = p; } action end_keyword { keyword = substring(data, keywordStart, p).replaceFirst(":$",""); keywordStart = -1; } action next_keyword_start { nextKeywordStart = p; } action start_row { p = p - 1; currentRow = new ArrayList(); currentLine = lineNumber; } action begin_cell_content { contentStart = p; } action store_cell_content { String con = substring(data, contentStart, p).trim(); currentRow.add(con .replace("\\|", "|") .replace("\\n", "\n") .replace("\\\\", "\\") ); } action store_row { listener.row(currentRow, currentLine); } action end_feature { if(cs < lexer_first_final) { String content = currentLineContent(data, lastNewline); throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information."); } else { listener.eof(); } } include lexer_common "lexer_common.<%= @i18n.underscored_iso_code %>.rl"; }%% private final Listener listener; public <%= @i18n.underscored_iso_code.capitalize %>(Listener listener) { this.listener = listener; } %% write data noerror; public void scan(String source) { String input = source + "\n%_FEATURE_END_%"; byte[] data = null; try { data = input.getBytes("UTF-8"); } catch(UnsupportedEncodingException e) { throw new RuntimeException(e); } int cs, p = 0, pe = data.length; int eof = pe; int lineNumber = 1; int lastNewline = 0; int contentStart = -1; int currentLine = -1; int docstringContentTypeStart = -1; int docstringContentTypeEnd = -1; int startCol = -1; int nextKeywordStart = -1; int keywordStart = -1; String keyword = null; List currentRow = null; %% write init; %% write exec; } private String keywordContent(byte[] data, int p, int eof, int nextKeywordStart, int contentStart) { int endPoint = (nextKeywordStart == -1 || (p == eof)) ? p : nextKeywordStart; return substring(data, contentStart, endPoint); } private String[] nameAndUnindentedDescription(int startCol, String text) { String[] lines = text.split("\n"); String name = lines.length > 0 ? lines[0].trim() : ""; StringBuffer description = new StringBuffer(); for(int i = 1; i < lines.length; i++) { description.append(lines[i]); description.append("\n"); } return new String[]{name, unindent(startCol+2, description.toString()).replaceAll("\\s+$", "")}; } private String unindent(int startCol, String text) { return Pattern.compile("^[\t ]{0," + startCol + "}", Pattern.MULTILINE).matcher(text).replaceAll(""); } private String currentLineContent(byte[] data, int lastNewline) { return substring(data, lastNewline, data.length).trim(); } private String substring(byte[] data, int start, int end) { try { return new String(data, start, end-start, "utf-8"); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException("Internal error", e); } } } gherkin-2.12.2/ragel/lexer_common.rl.erb0000644000004100000410000000640112244512574020153 0ustar www-datawww-data%%{ machine lexer_common; # Language specific I18N_Feature = (<%= ragel_list(@i18n.keywords('feature')) %> ':') >start_keyword %end_keyword; I18N_Background = (<%= ragel_list(@i18n.keywords('background')) %> ':') >start_keyword %end_keyword; I18N_ScenarioOutline = (<%= ragel_list(@i18n.keywords('scenario_outline')) %> ':') >start_keyword %end_keyword; I18N_Scenario = (<%= ragel_list(@i18n.keywords('scenario')) %> ':') >start_keyword %end_keyword; I18N_Step = <%= ragel_list(@i18n.step_keywords) %> >start_keyword %end_keyword; I18N_Examples = (<%= ragel_list(@i18n.keywords('examples')) %> ':') >start_keyword %end_keyword; EOF = '%_FEATURE_END_%'; # Explicit EOF added before scanning begins EOL = ('\n' | '\r\n') @inc_line_number @last_newline; BOM = 0xEF 0xBB 0xBF; # http://en.wikipedia.org/wiki/Byte_order_mark PIPE = '|'; ESCAPED_PIPE = '\\|'; FeatureHeadingEnd = EOL+ space* (I18N_Feature | I18N_Background | I18N_Scenario | I18N_ScenarioOutline | I18N_Examples | '@' | '#' | EOF) >next_keyword_start; ScenarioHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Background | I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#' | EOF ) >next_keyword_start; BackgroundHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#'| EOF ) >next_keyword_start; ScenarioOutlineHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Scenario | I18N_Step | '@' | '#' | EOF ) >next_keyword_start; ExamplesHeadingEnd = EOL+ space* ( I18N_Feature | '|' | '#') >next_keyword_start; FeatureHeading = space* I18N_Feature %begin_content ^FeatureHeadingEnd* :>> FeatureHeadingEnd @store_feature_content; BackgroundHeading = space* I18N_Background %begin_content ^BackgroundHeadingEnd* :>> BackgroundHeadingEnd @store_background_content; ScenarioHeading = space* I18N_Scenario %begin_content ^ScenarioHeadingEnd* :>> ScenarioHeadingEnd @store_scenario_content; ScenarioOutlineHeading = space* I18N_ScenarioOutline %begin_content ^ScenarioOutlineHeadingEnd* :>> ScenarioOutlineHeadingEnd @store_scenario_outline_content; ExamplesHeading = space* I18N_Examples %begin_content ^ExamplesHeadingEnd* :>> ExamplesHeadingEnd @store_examples_content; Step = space* I18N_Step %begin_content ^EOL* %store_step_content :> EOL+; Comment = space* '#' >begin_content ^EOL* %store_comment_content :> EOL+; Tag = ( ('@' [^@\r\n\t ]+) >begin_content ) %store_tag_content; Tags = space* (Tag space*)+ EOL+; StartRow = space* PIPE >start_row; EndRow = EOL space* ^PIPE >next_keyword_start; Cell = PIPE (ESCAPED_PIPE | (any - (PIPE|EOL))+ )* >begin_cell_content %store_cell_content; RowBody = space* Cell** PIPE :>> (space* EOL+ space*) %store_row; Row = StartRow :>> RowBody <: EndRow?; StartDocString = '"""' >start_docstring ^EOL* >start_docstring_content_type %end_docstring_content_type :>> EOL; EndDocString = (space* '"""') >next_keyword_start; DocString = space* StartDocString %begin_docstring_content (^EOL | EOL)* :>> EndDocString %store_docstring_content space* EOL+; Tokens = BOM? (space | EOL)* (Tags | Comment | FeatureHeading | BackgroundHeading | ScenarioHeading | ScenarioOutlineHeading | ExamplesHeading | Step | Row | DocString )* (space | EOL)* EOF; main := Tokens %end_feature @!end_feature; }%% gherkin-2.12.2/ragel/lexer.rb.rl.erb0000644000004100000410000001202212244512574017201 0ustar www-datawww-datarequire 'gherkin/native' module Gherkin module Lexer class <%= @i18n.underscored_iso_code.capitalize %> #:nodoc: native_impl('gherkin') %%{ machine lexer; action begin_content { @content_start = p @current_line = @line_number @start_col = p - @last_newline - "#{@keyword}:".length } action start_docstring { @current_line = @line_number @start_col = p - @last_newline } action begin_docstring_content { @content_start = p } action start_docstring_content_type { @docstring_content_type_start = p } action end_docstring_content_type { @docstring_content_type_end = p } action store_docstring_content { con = unindent(@start_col, utf8_pack(data[@content_start...@next_keyword_start-1]).sub(/(\r?\n)?([\t ])*\Z/, '').gsub(/\\"\\"\\"/, '"""')) con_type = utf8_pack(data[@docstring_content_type_start...@docstring_content_type_end]).strip @listener.doc_string(con_type, con, @current_line) } action store_feature_content { p = store_keyword_content(:feature, data, p, eof) } action store_background_content { p = store_keyword_content(:background, data, p, eof) } action store_scenario_content { p = store_keyword_content(:scenario, data, p, eof) } action store_scenario_outline_content { p = store_keyword_content(:scenario_outline, data, p, eof) } action store_examples_content { p = store_keyword_content(:examples, data, p, eof) } action store_step_content { con = utf8_pack(data[@content_start...p]).strip @listener.step(@keyword, con, @current_line) } action store_comment_content { con = utf8_pack(data[@content_start...p]).strip @listener.comment(con, @line_number) @keyword_start = nil } action store_tag_content { con = utf8_pack(data[@content_start...p]).strip @listener.tag(con, @current_line) @keyword_start = nil } action inc_line_number { @line_number += 1 } action last_newline { @last_newline = p + 1 } action start_keyword { @keyword_start ||= p } action end_keyword { @keyword = utf8_pack(data[@keyword_start...p]).sub(/:$/,'') @keyword_start = nil } action next_keyword_start { @next_keyword_start = p } action start_row { p = p - 1 current_row = [] @current_line = @line_number } action begin_cell_content { @content_start = p } action store_cell_content { con = utf8_pack(data[@content_start...p]).strip current_row << con.gsub(/\\\|/, "|").gsub(/\\n/, "\n").gsub(/\\\\/, "\\") } action store_row { @listener.row(current_row, @current_line) } action end_feature { if cs < lexer_first_final content = current_line_content(data, p) raise Gherkin::Lexer::LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information." % [@line_number, content]) else @listener.eof end } include lexer_common "lexer_common.<%= @i18n.underscored_iso_code %>.rl"; }%% def initialize(listener) @listener = listener # Initialize ivars to avoid warnings @keyword = nil %% write data; end def scan(data) data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably eof = pe = data.length @line_number = 1 @last_newline = 0 %% write init; %% write exec; end def unindent(startcol, text) text.gsub(/^[\t ]{0,#{startcol}}/, "") end def store_keyword_content(event, data, p, eof) end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start content = unindent(@start_col + 2, utf8_pack(data[@content_start...end_point])).rstrip content_lines = content.split("\n") name = content_lines.shift || "" name.strip! description = content_lines.join("\n") @listener.__send__(event, @keyword, name, description, @current_line) @next_keyword_start ? @next_keyword_start - 1 : p ensure @next_keyword_start = nil end def current_line_content(data, p) rest = data[@last_newline..-1] utf8_pack(rest[0..rest.index(10)||-1]).strip # 10 is \n end if (RUBY_VERSION =~ /^1\.9|2\.0/) def utf8_pack(array) array.pack("c*").force_encoding("UTF-8") end else def utf8_pack(array) array.pack("c*") end end end end end gherkin-2.12.2/.yardopts0000644000004100000410000000014612244512574015132 0ustar www-datawww-data--no-private --title Gherkin --exclude lib/gherkin/rb_lexer lib/**/*.rb - README.md History.md LICENSEgherkin-2.12.2/tasks/0000755000004100000410000000000012244512574014410 5ustar www-datawww-datagherkin-2.12.2/tasks/bench/0000755000004100000410000000000012244512574015467 5ustar www-datawww-datagherkin-2.12.2/tasks/bench/feature_builder.rb0000644000004100000410000000151712244512574021161 0ustar www-datawww-dataclass StepsBuilder def initialize @steps = [] end def step(content, generator) @steps << " Given #{content}" if(rand(5) == 0) cols = rand(8) + 1 rows = rand(10) rows.times do row = " |" cols.times do row << generator.table_cell << "|" end @steps << row end end end def to_s @steps.join("\n") end end class FeatureBuilder def initialize(name, &block) @name = name @scenarios = {} block.call(self) end def scenario(name, &block) @scenarios[name] = StepsBuilder.new block.call(@scenarios[name]) end def to_s str = "Feature: #{@name}\n" @scenarios.each do |scenario, steps| str += "\n" str += " Scenario: #{scenario}\n" str += steps.to_s str += "\n" end str end end gherkin-2.12.2/tasks/bench/null_listener.rb0000644000004100000410000000007112244512574020671 0ustar www-datawww-dataclass NullListener def method_missing(*args) end end gherkin-2.12.2/tasks/apidoc.rake0000644000004100000410000000173112244512574016515 0ustar www-datawww-dataunless ENV['RUBY_CC_VERSION'] || defined?(JRUBY_VERSION) require 'yard' require 'yard/rake/yardoc_task' SITE_DIR = File.expand_path(File.dirname(__FILE__) + '/../../cucumber.github.com') API_DIR = File.join(SITE_DIR, 'api', 'gherkin', GHERKIN_VERSION) namespace :api do file :dir do raise "You need to git clone git@github.com:cucumber/cucumber.github.com.git #{SITE_DIR}" unless File.directory?(SITE_DIR) mkdir_p API_DIR end YARD::Templates::Engine.register_template_path(File.expand_path(File.join(File.dirname(__FILE__), 'yard'))) YARD::Rake::YardocTask.new(:yard) do |yard| dir = File.join(API_DIR, 'ruby') mkdir_p dir yard.options = ["--out", dir] end task :yard => :dir task :mvn_javadoc => :dir do Dir.chdir('java') do sh("mvn javadoc:javadoc") dir = File.join(API_DIR, 'java') mv 'target/site/apidocs', dir end end task :doc => [:mvn_javadoc, :yard] end endgherkin-2.12.2/tasks/gems.rake0000644000004100000410000000231112244512574016204 0ustar www-datawww-datanamespace :gems do task :win do unless File.directory?(File.expand_path('~/.rake-compiler')) STDERR.puts "[ERROR] You must install MinGW rubies to build gherkin gems for Windows. See README.md" exit(1) end # rvm and mingw ruby versions have to match to avoid errors rbenv('1.9.3-p448') do sh "bundle exec rake cross compile RUBY_CC_VERSION=1.9.3" end rbenv('2.0.0-p247') do sh "bundle exec rake cross compile RUBY_CC_VERSION=2.0.0" end # This will copy the .so files to the proper place sh "bundle exec rake -t cross compile RUBY_CC_VERSION=1.9.3:2.0.0" end desc 'Prepare JRuby binares' task :jruby => [:jar] do rbenv('jruby-1.7.4') do sh "bundle exec rspec spec" end end task :sanity do raise "The jruby gem looks too small" if File.stat("release/gherkin-#{GHERKIN_VERSION}-java.gem").size < 1000000 end desc "Prepare binaries for all gems" task :prepare => [ :clean, :spec, :win, :jruby ] # https://github.com/sstephenson/rbenv/issues/121 def rbenv(version) old_version = ENV['RBENV_VERSION'] ENV['RBENV_VERSION'] = version yield ensure ENV['RBENV_VERSION'] = old_version end end gherkin-2.12.2/tasks/ragel_task.rb0000755000004100000410000000665412244512574017067 0ustar www-datawww-datarequire 'yaml' require 'erb' require 'rbconfig' class RagelTask begin # Support Rake >= 0.9.0 require 'rake/dsl_definition' include Rake::DSL rescue LoadError end RL_OUTPUT_DIR = File.dirname(__FILE__) + "/../ragel/i18n" UGLIFYJS = File.dirname(__FILE__) + "/../js/node_modules/uglify-js/bin/uglifyjs" def initialize(lang, i18n) @lang = lang @i18n = i18n define_tasks end def define_tasks deps = [lang_ragel, common_ragel] deps.unshift(UGLIFYJS) if(@lang == 'js') sed = RbConfig::CONFIG['host_os'] =~ /linux/i ? "sed -i" : "sed -i ''" min_target = target.gsub(/\.js$/, '.min.js') file target => deps do mkdir_p(File.dirname(target)) unless File.directory?(File.dirname(target)) ragel = @lang == 'js' ? 'js/ragel-osx' : 'ragel' sh "#{ragel} #{flags} #{lang_ragel} -o #{target}" # Remove absolute paths from ragel-generated sources sh %{#{sed} "s|#{Dir.pwd}/tasks/../||" #{target}} if(@lang == 'js') # Ragel chokes if we put the escaped triple quotes in .rl, so we'll do the replace with sed after the fact. Lots of backslashes!! sh %{#{sed} 's/ESCAPED_TRIPLE_QUOTE/\\\\\\\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\"/' #{target}} sh %{#{sed} 's/const/var/' #{target}} # Minify sh %{node #{UGLIFYJS} #{target} > #{min_target}} end if(@lang == 'rb') # Prettify the code so we don't get indentation warnings sh %{rbeautify #{target} > tmp.rb} sh %{mv tmp.rb #{target}} # rbeautify has a bug with class << self ... end alignment. Fix it. sh %{perl -i -0pe 's/ end\n self._/ end\n self._/g' #{target}} end end if(@lang != 'java') CLEAN.include(target) end if(@lang == 'js') CLEAN.include(min_target) end file UGLIFYJS do unless File.exist?(UGLIFYJS) Dir.chdir('js') do sh "npm install" end end end file lang_ragel => lang_erb do write(ERB.new(IO.read(lang_erb)).result(binding), lang_ragel) end CLEAN.include(lang_ragel) file common_ragel => common_erb do write(ERB.new(IO.read(common_erb)).result(binding), common_ragel) end CLEAN.include(common_ragel) end def target { 'c' => "ext/gherkin_lexer_#{@i18n.underscored_iso_code}/gherkin_lexer_#{@i18n.underscored_iso_code}.c", 'java' => "java/src/main/java/gherkin/lexer/#{@i18n.underscored_iso_code.capitalize}.java", 'rb' => "lib/gherkin/lexer/#{@i18n.underscored_iso_code}.rb", 'js' => "js/lib/gherkin/lexer/#{@i18n.underscored_iso_code}.js" }[@lang] end def common_ragel RL_OUTPUT_DIR + "/lexer_common.#{@i18n.underscored_iso_code}.rl" end def common_erb File.dirname(__FILE__) + '/../ragel/lexer_common.rl.erb' end def lang_ragel RL_OUTPUT_DIR + "/#{@i18n.underscored_iso_code}.#{@lang}.rl" end def lang_erb File.dirname(__FILE__) + "/../ragel/lexer.#{@lang}.rl.erb" end def flags { 'c' => '-C', 'java' => '-J', 'rb' => '-R', 'js' => '-E' }[@lang] end def write(content, filename) mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename)) File.open(filename, "wb") do |file| file.write(content) end end def ragel_list(keywords) "(#{keywords.map{|keyword| %{"#{keyword}"}}.join(' | ')})" end end gherkin-2.12.2/tasks/ikvm.rake0000644000004100000410000001022112244512574016216 0ustar www-datawww-data# encoding: utf-8 namespace :ikvm do IKVM_VERSION = '7.2.4630.5' IKVM_DIR = "ikvm/ikvm-#{IKVM_VERSION}" IKVM_ZIP = "ikvm/ikvmbin-#{IKVM_VERSION}.zip" CLOBBER.include(IKVM_DIR, IKVM_ZIP) IKVM_BIN_DIR = "#{IKVM_DIR}/bin" IKVMC_EXE = "#{IKVM_BIN_DIR}/ikvmc.exe" GHERKIN_EXE = "release/gherkin.exe" GHERKIN_PKG_DLL = "release/nuspec/lib/gherkin.dll" GHERKIN_NUSPEC = "release/nuspec/gherkin.nuspec" GHERKIN_NUPKG = "release/gherkin.#{GHERKIN_VERSION}.nupkg" GHERKIN_LIB_DLL = 'lib/gherkin.dll' def mono(args) if(`which mono`.strip =~ /mono/) # http://monomvc.wordpress.com/2012/03/06/nuget-on-mono/ sh("mono --runtime=v4.0.30319 #{args}") else raise "[ERROR] You must install Mono and IKVM build gherkin for .NET. See README.md" end end def ikvmc(args) begin mono("#{IKVMC_EXE} #{args}") rescue => e if e.message =~ /Cannot open assembly/ e.message << "\n\n[ERROR] You must install Mono and IKVM build gherkin for .NET. See README.md" end raise e end end def nuget(args) mono("ikvm/NuGet.exe #{args}") end file GHERKIN_EXE => [IKVMC_EXE, 'lib/gherkin.jar'] do ikvmc("-target:exe lib/gherkin.jar -out:#{GHERKIN_EXE}") end file GHERKIN_PKG_DLL => [IKVMC_EXE, 'lib/gherkin.jar'] do mkdir_p File.dirname(GHERKIN_PKG_DLL) unless File.directory?(File.dirname(GHERKIN_PKG_DLL)) ikvmc("-target:library lib/gherkin.jar -out:#{GHERKIN_PKG_DLL} -version:#{GHERKIN_VERSION}") end file GHERKIN_LIB_DLL => GHERKIN_PKG_DLL do cp GHERKIN_PKG_DLL, GHERKIN_LIB_DLL end file GHERKIN_NUPKG => [GHERKIN_PKG_DLL, GHERKIN_NUSPEC] do pkg_dir = File.dirname(GHERKIN_EXE) mkdir_p File.dirname(pkg_dir) unless File.directory?(pkg_dir) nuget("Pack #{GHERKIN_NUSPEC} -Version #{GHERKIN_VERSION} -OutputDirectory #{pkg_dir}") # Now, verify that we have a proper dll inside the package require 'zip' Zip::File.open(GHERKIN_NUPKG) do |zipfile| dll = zipfile.get_entry('lib/gherkin.dll') if(dll.size < 3_000_000) raise "Looks like the dll is too small." end end end file GHERKIN_NUSPEC do mkdir_p File.dirname(GHERKIN_NUSPEC) unless File.directory?(File.dirname(GHERKIN_NUSPEC)) File.open(GHERKIN_NUSPEC, "w") do |io| io.write(<<-EOF) gherkin #{GHERKIN_VERSION} aslakhellesoy Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy https://github.com/cucumber/gherkin https://github.com/cucumber/gherkin/blob/master/LICENSE https://github.com/cucumber/cukes.info/raw/master/templates/images/gherkin/gherkin_128x128.png false A fast lexer and parser for the Gherkin language based on Ragel Copyright (c) 2009-2013 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy gherkin cucumber specflow bdd lexer parser EOF end end task :nupkg => GHERKIN_NUPKG task :check => [GHERKIN_EXE, :copy_ikvm_dlls] do puts "************** Pretty printing some features with .NET. **************" mono "#{GHERKIN_EXE} features" puts "************** DONE Pretty printing some features with .NET. All OK. **************" end task :copy_ikvm_dlls => IKVMC_EXE do exe_dir = File.dirname(GHERKIN_EXE) mkdir_p File.dirname(exe_dir) unless File.directory?(exe_dir) Dir["#{IKVM_BIN_DIR}/*.dll"].each do |dll| cp dll, exe_dir end end task :push => GHERKIN_NUPKG do nuget("Push #{GHERKIN_NUPKG}") end file IKVMC_EXE do sh("wget http://downloads.sourceforge.net/project/ikvm/ikvm/#{IKVM_VERSION}/ikvmbin-#{IKVM_VERSION}.zip -O #{IKVM_ZIP}") Dir.chdir('ikvm') do sh("unzip ikvmbin-#{IKVM_VERSION}.zip") end end end task :ikvm => ['ikvm:check'] gherkin-2.12.2/tasks/cucumber.rake0000644000004100000410000000122412244512574017060 0ustar www-datawww-data unless ENV['RUBY_CC_VERSION'] require 'cucumber/rake/task' Cucumber::Rake::Task.new(:cucumber) do |t| profile = ENV['TRAVIS'] ? 'travis' : 'default' profile = 'javascript' if ENV['GHERKIN_JS_NATIVE'] t.cucumber_opts = "--profile #{profile}" end namespace :cucumber do Cucumber::Rake::Task.new(:rcov, "Run Cucumber using RCov") do |t| t.cucumber_opts = "--profile default" t.rcov = RUBY_VERSION =~ /^1\.8/ t.rcov_opts = %w{--exclude spec\/} end Cucumber::Rake::Task.new(:native_lexer, "Run Native lexer Cucumber features") do |t| t.cucumber_opts = "--profile native_lexer" end task :native_lexer => [:clean, :compile] end endgherkin-2.12.2/tasks/release.rake0000644000004100000410000000204612244512574016676 0ustar www-datawww-datanamespace :release do desc 'Upload all packages and tag git' task :ALL => ['gems:sanity', 'ikvm:check', :mvn_deploy_jar, :push_native_gems, :push_npm_package, 'ikvm:push', :release, 'api:doc', :post_release] desc 'Push all gems to rubygems.org' task :push_native_gems do Dir.chdir('release') do Dir['*.gem'].each do |gem_file| sh("gem push #{gem_file}") end end end task :post_release => :ikvm do puts "\n\n****** Manually close and release at https://oss.sonatype.org/index.html#stagingRepositories ******\n\n" end desc 'Push jar to central Maven repo' task :mvn_deploy_jar do Dir.chdir('java') do sh("mvn clean source:jar javadoc:jar deploy") end end desc 'Push npm package to http://npmjs.org/' task :push_npm_package do en_min_js = File.expand_path(File.dirname(__FILE__) + '/../js/lib/gherkin/lexer/en.min.js') raise "No #{en_min_js}. Did you set GHERKIN_JS=true in your shell?" unless File.file?(en_min_js) Dir.chdir('js') do sh("npm publish") end end endgherkin-2.12.2/tasks/yard/0000755000004100000410000000000012244512574015347 5ustar www-datawww-datagherkin-2.12.2/tasks/yard/default/0000755000004100000410000000000012244512574016773 5ustar www-datawww-datagherkin-2.12.2/tasks/yard/default/layout/0000755000004100000410000000000012244512574020310 5ustar www-datawww-datagherkin-2.12.2/tasks/yard/default/layout/html/0000755000004100000410000000000012244512574021254 5ustar www-datawww-datagherkin-2.12.2/tasks/yard/default/layout/html/index.erb0000644000004100000410000000002012244512574023045 0ustar www-datawww-data<%= yieldall %> gherkin-2.12.2/tasks/yard/default/layout/html/bubble_32x32.png0000644000004100000410000000306512244512574024062 0ustar www-datawww-dataPNG  IHDR sBIT|d pHYs;;oqtEXtSoftwarewww.inkscape.org<IDATHMl\W˞IB8J:nTBC ]PR"B.% Xf3,XP5ϖTAq ʗ_'vCgyo޻7uc{"ot=wywh QU/hc"m:yR)'0k/_hk-]ڱS %LhGŬęlD7a 'r h#ʌGn&7Ӝ~|̞=SH*ു]Pߎ@2b*,GRgc2c~/.ghӯrtbj:Ռ*NLm%\Dt(Xn3ͻNh~3S)/}3_-%p9]gfjARI뗩4ZؐUW@jֆ3gf:7o6OO *W^择>]OH 5Qfg"B-KE8YGye{_R 5xz=$X0ZQeBC",/{Vm^{fSo#Lw RRno((4wi }X'/V(oF^0Z&F;q)/OǷOfկqͿwQE(ڼ LyBm ~nbtq[Gl}VV~3A#<j/_(?6\1ˇ/p;gz;^*ߕPC/_?,pSpnbx\*WkUyV+ژ|nvg(SmNhZ /_xP-=871KF5pw,[c_ U(Y ;|aas쥒9IENDB`gherkin-2.12.2/tasks/yard/default/layout/html/bubble_48x48.png0000644000004100000410000000501312244512574024073 0ustar www-datawww-dataPNG  IHDR.--YsBIT|d pHYsS$tEXtSoftwarewww.inkscape.org< IDAThřs?~{nn@@H@lGkq0uZTpt3Ngiǂ괕*z uڠ@B$!H[6{]O_$Y0}9|~' MǑ[I-&IqsMajYɑR4[ٲhǓ,>t= (a$ҁZtMк"^H> +qXh,jj ;īdUv]6xK"m !G=FY;UCtD5r;$[9MSh5>jm&Y;MXd@CC(ArharY h[S., J@AhBv3z܌ģ5ϫBA2;~o״@;+=F-Oq34|2?յLy[:/89J{_>%Rod*(%14Υ^5+.N)Q)ɾR ]7GuDIXz Qnm+F0Z.v|1T(Ͽʩ[2KY Ub,=&t8'#FN]"en~kge D,sj[]%cgc8y?DXkǵDl ~_B 0 *{o1 \Pa>voLM֤%R,ݹ \gJMh9[4{[s()^1U lƱ%n8xC^*ɑT~\{ۖyԺMBx0q }7{=b,R¥7 I3uEІSrCscF-b`/}?_[O ֬ mՐ!;Ua۵@*v6ĸ#y<(!3g/߲ެ$6Mc7t4Y\aWl?'@"99gyֈp M/ ѝܠV|:D }󶣻p49{EAWtJC`VR!T bk_;u>s;|n7V6}4qP { .ϞxدԕD*4g$};D7m ݸM;& x rΝ QbȞ}E}B ?tG ~;ȔHf & }9ùPB<ꙍ#{V^v[}Bu5W90>೏CC)q#y/k,Köo} LCB{rxʴ:; 6>F4P@=13uYp @φA)5 T?pHg7oYC:|Y_6 Ϳ ~ƺ_km圮c0@%GxYG]O+xw#V ;n>6IENDB`gherkin-2.12.2/tasks/yard/default/layout/html/footer.erb0000644000004100000410000000033512244512574023245 0ustar www-datawww-data gherkin-2.12.2/tasks/yard/default/layout/html/logo.erb0000644000004100000410000000014312244512574022704 0ustar www-datawww-data

Gherkin <%= GHERKIN_VERSION %>

gherkin-2.12.2/tasks/yard/default/layout/html/layout.erb0000644000004100000410000000123712244512574023266 0ustar www-datawww-data <%= erb(:headers) %>
<%= yieldall %>
<%= erb(:footer) %> gherkin-2.12.2/tasks/yard/default/layout/html/setup.rb0000644000004100000410000000021112244512574022733 0ustar www-datawww-datadef init super options[:serializer].serialize('/images/bubble_32x32.png', IO.read(File.dirname(__FILE__) + '/bubble_32x32.png')) end gherkin-2.12.2/tasks/bench.rake0000644000004100000410000001136112244512574016335 0ustar www-datawww-data%w{/../lib /bench}.each do |l| $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + l) end require 'benchmark' GENERATED_FEATURES = File.expand_path(File.dirname(__FILE__) + "/bench/generated") class RandomFeatureGenerator def initialize(number) require 'faker' require 'feature_builder' @number = number end def generate @number.times do name = catch_phrase feature = FeatureBuilder.new(name) do |f| num_scenarios = rand_in(1..10) num_scenarios.times do f.scenario(bs) do |steps| num_steps = rand_in(3..10) num_steps.times do steps.step(sentence, self) end end end end write feature.to_s, name end end def write(content, name) File.open(GENERATED_FEATURES + "/#{name.downcase.gsub(/[\s\-\/]/, '_')}.feature", "w+") do |file| file << content end end def rand_in(range) ary = range.to_a ary[rand(ary.length - 1)] end def catch_phrase Faker::Company.catch_phrase end def bs Faker::Company.bs.capitalize end def sentence Faker::Lorem.sentence end def table_cell Faker::Lorem.words(rand(2)+1).join(" ") end end class Benchmarker def initialize @features = Dir[GENERATED_FEATURES + "/**/*feature"] end def report(lexer) Benchmark.bm do |x| x.report("#{lexer}:") { send :"run_#{lexer}" } end end def report_all Benchmark.bmbm do |x| x.report("native_gherkin:") { run_native_gherkin } x.report("native_gherkin_no_parser:") { run_native_gherkin_no_parser } x.report("rb_gherkin:") { run_rb_gherkin } x.report("cucumber:") { run_cucumber } x.report("tt:") { run_tt } end end def run_cucumber require 'cucumber' require 'logger' step_mother = Cucumber::StepMother.new logger = Logger.new(STDOUT) logger.level = Logger::INFO step_mother.log = logger step_mother.load_plain_text_features(@features) end def run_tt require 'cucumber' # Using Cucumber's Treetop lexer, but never calling #build to build the AST lexer = Cucumber::Parser::NaturalLanguage.new(nil, 'en').parser @features.each do |file| source = IO.read(file) parse_tree = lexer.parse(source) if parse_tree.nil? raise Cucumber::Parser::SyntaxError.new(lexer, file, 0) end end end def run_rb_gherkin require 'gherkin' require 'null_formatter' parser = Gherkin::Parser::Parser.new(NullFormatter.new, true, "root", true) @features.each do |feature| parser.parse(File.read(feature), feature, 0) end end def run_native_gherkin require 'gherkin' require 'null_listener' parser = Gherkin::Parser::Parser.new(NullFormatter.new, true, "root", false) @features.each do |feature| parser.parse(File.read(feature), feature, 0) end end def run_native_gherkin_no_parser require 'gherkin' require 'gherkin/lexer/i18n_lexer' require 'null_listener' lexer = Gherkin::Lexer::I18nLexer.new(NullListener.new, false) @features.each do |feature| lexer.scan(File.read(feature), feature, 0) end end end desc "Generate 500 random features and benchmark Cucumber, Treetop and Gherkin with them" task :bench => ["bench:clean", "bench:gen"] do benchmarker = Benchmarker.new benchmarker.report_all end namespace :bench do desc "Generate [number] features with random content, or 500 features if number is not provided" task :gen, :number do |t, args| args.with_defaults(:number => 500) generator = RandomFeatureGenerator.new(args.number.to_i) generator.generate end desc "Benchmark Cucumber AST building from the features in tasks/bench/generated" task :cucumber do benchmarker = Benchmarker.new benchmarker.report("cucumber") end desc "Benchmark the Treetop parser with the features in tasks/bench/generated" task :tt do benchmarker = Benchmarker.new benchmarker.report("tt") end desc "Benchmark the Ruby Gherkin lexer+parser with the features in tasks/bench/generated" task :rb_gherkin do benchmarker = Benchmarker.new benchmarker.report("rb_gherkin") end desc "Benchmark the ntive Gherkin lexer+parser with the features in tasks/bench/generated" task :native_gherkin do benchmarker = Benchmarker.new benchmarker.report("native_gherkin") end desc "Benchmark the native Gherkin lexer (no parser) with the features in tasks/bench/generated" task :native_gherkin_no_parser do benchmarker = Benchmarker.new benchmarker.report("native_gherkin_no_parser") end desc "Remove all generated features in tasks/bench/generated" task :clean do rm_f FileList[GENERATED_FEATURES + "/**/*feature"] end end gherkin-2.12.2/tasks/rspec.rake0000644000004100000410000000015012244512574016364 0ustar www-datawww-datarequire 'rspec/core/rake_task' desc "Run RSpec" task :spec do sh "rspec spec --color --warnings" end gherkin-2.12.2/tasks/compile.rake0000755000004100000410000000536012244512574016713 0ustar www-datawww-datarequire File.dirname(__FILE__) + '/ragel_task' BYPASS_NATIVE_IMPL = true require 'gherkin/i18n' CLEAN.include [ 'pkg', 'tmp', '**/*.{o,bundle,jar,so,obj,pdb,lib,def,exp,log,rbc}', 'ext', 'java/target', 'lib/*.dll', 'ext/**/*.c', 'doc' ] desc "Compile the Java extensions" task :jar => 'lib/gherkin.jar' file 'lib/gherkin.jar' => Dir['java/src/main/java/**/*.java'] do sh("mvn -f java/pom.xml package") end desc "Build JavaScript lexers" task :js rl_langs = ENV['RL_LANGS'] ? ENV['RL_LANGS'].split(',') : [] langs = Gherkin::I18n.all.select { |lang| rl_langs.empty? || rl_langs.include?(lang.iso_code) } langs.each do |i18n| java = RagelTask.new('java', i18n) rb = RagelTask.new('rb', i18n) js = RagelTask.new('js', i18n) file 'lib/gherkin.jar' => [java.target] begin if !defined?(JRUBY_VERSION) require 'rake/extensiontask' c = RagelTask.new('c', i18n) extconf = "ext/gherkin_lexer_#{i18n.underscored_iso_code}/extconf.rb" file extconf do FileUtils.mkdir(File.dirname(extconf)) unless File.directory?(File.dirname(extconf)) File.open(extconf, "w") do |io| io.write(<<-EOF) require 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_#{i18n.underscored_iso_code}") have_library("c", "main") create_makefile("gherkin_lexer_#{i18n.underscored_iso_code}") EOF end end Rake::ExtensionTask.new("gherkin_lexer_#{i18n.underscored_iso_code}") do |ext| if ENV['RUBY_CC_VERSION'] ext.cross_compile = true ext.cross_platform = 'x86-mingw32' end end # The way tasks are defined with compile:xxx (but without namespace) in rake-compiler forces us # to use these hacks for setting up dependencies. Ugly! Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(extconf) Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(c.target) Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(rb.target) Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS'] Rake::Task["compile"].prerequisites.unshift(extconf) Rake::Task["compile"].prerequisites.unshift(c.target) Rake::Task["compile"].prerequisites.unshift(rb.target) Rake::Task["compile"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS'] Rake::Task["js"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS'] end rescue LoadError unless defined?($c_warned) warn "WARNING: Rake::ExtensionTask not installed. Skipping C compilation." $c_warned = true task :compile # no-op end end end gherkin-2.12.2/.rbenv-gemsets0000644000004100000410000000001112244512574016035 0ustar www-datawww-datacucumber gherkin-2.12.2/LICENSE0000644000004100000410000000210612244512574014267 0ustar www-datawww-dataCopyright (c) 2009-2013 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy 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. gherkin-2.12.2/.ruby-gemset0000644000004100000410000000001112244512574015517 0ustar www-datawww-datacucumber gherkin-2.12.2/install_mingw_os_x.sh0000755000004100000410000000053712244512574017526 0ustar www-datawww-data#!/bin/sh mkdir -p /usr/local/mingw # We need GCC 4.7 in order to build ruby 1.8.7. When we drop support for that we can use a more recent one cd /usr/local/mingw && curl --silent --location http://downloads.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win32/Automated%20Builds/mingw-w32-1.0-bin_i686-darwin_20120227.tar.bz2 | tar xvj gherkin-2.12.2/History.md0000644000004100000410000011604612244512574015256 0ustar www-datawww-data## [2.12.2](https://github.com/cucumber/gherkin/compare/v2.12.1...v2.12.2) * [Core] Fix Ruby 2.0 warnings ([#265](https://github.com/cucumber/gherkin/issues/265) Aslak Hellesøy) * [Java] Expose ID so that tools can differentiate between runs of scenario examples ([#279](https://github.com/cucumber/gherkin/pull/278) jtnord) * [Java] Ensure PrettyFormatter outputs whole lines and flushed in between ([#277](https://github.com/cucumber/gherkin/pull/277) Ramon Nogueira) * [Java] Durations are Longs not longs as they are optional ([#276](https://github.com/cucumber/gherkin/pull/276) jtnord) * [Core] Added ಕನ್ನಡ kannaḍa language ([#282](https://github.com/cucumber/gherkin/pull/282) Nikhil Lingutla) * [Java] extension of the Formatter interface for more precise lifecycle handling ([#275](https://github.com/cucumber/gherkin/pull/275) Sebastian Gröbler) * Java JSONFormatter should record before hooks in next scenario ([#270](https://github.com/cucumber/gherkin/pull/270) Björn Rasmusson) * [JavaScript] Fix encoding issues ([#272](https://github.com/cucumber/gherkin/pull/272) Lukas Degener, Thorsten Glaser) ## [2.12.1](https://github.com/cucumber/gherkin/compare/v2.12.0...v2.12.1) * Dropped support for ruby 1.8.7 (Aslak Hellesøy) * Added support for ruby 2.0.0 (still supporting 1.9.3) (Aslak Hellesøy) * Random lexing error; native fallback fails. Switch from C lexer to Ruby lexer with `GHERKIN_RUBY=true` ([#245](https://github.com/cucumber/gherkin/issues/245) Aslak Hellesøy) * Problem with Nuget package 2.12.0 ([#254](https://github.com/cucumber/gherkin/issues/254) Aslak Hellesøy) * problem with "gherkin_lexer_en" ([#257](https://github.com/cucumber/gherkin/issues/257) Aslak Hellesøy) * Fix for dissapearing examples tags ([#187](https://github.com/cucumber/gherkin/issues/187) calebTomlinson) * Handle interleaved calls to step, match and result in the java PrettyFormatter ([#261](https://github.com/cucumber/gherkin/pull/261) Björn Rasmusson) * Change the java JSONFormatter to handle embedding text in the report correctly ([#269](https://github.com/cucumber/gherkin/pull/269) Björn Rasmusson) * Updated Hindi language with "pure form", Sanskrit based versions of the words. ([#262](https://github.com/cucumber/gherkin/pull/262) anandpathaksharma) * [Core] Added support for Panjabi/Punjabi language (Gurmukhi Script) ([#267](https://github.com/cucumber/gherkin/pull/267) Arvinder Singh Kang) * [Core] Update i18n.json change Malay translation using suitable words ([#268](https://github.com/cucumber/gherkin/pull/268) CallMeLaNN) * [Core] Fix typos in Malay ([#256](https://github.com/cucumber/gherkin/pull/256) glts) * [Core] Add plural of Given in German ([#255](https://github.com/cucumber/gherkin/pull/255) glts) * [Core] Added Thai (th) ([#253](https://github.com/cucumber/gherkin/pull/253) Twin Panichsombat) ## [2.12.0](https://github.com/cucumber/gherkin/compare/v2.11.8...v2.12.0) * [Java, Ruby] TagExpression.eval() removed (Oleg Sukhodolsky) * [Java, Ruby] Filter.eval() renamed to evaluate() (Oleg Sukhodolsky) * [Java, JRuby] JSONFormatter's java version changed to connect embedding to the recent step the same way as Ruby's one does. (Oleg Sukhodolsky) ## [2.11.8](https://github.com/cucumber/gherkin/compare/v2.11.7...v2.11.8) * [Core] Added Galician (gl) ([#249](https://github.com/cucumber/gherkin/pull/249) son-cativo) * [Java, JRuby] Set default i18n when create Parser ([#229](https://github.com/cucumber/gherkin/pull/229) Tomohiko Himura) * [Java, JRuby] Filter out code keywords starting with a number: `I18n.code_keywords`. (Aslak Hellesøy) ## [2.11.7](https://github.com/cucumber/gherkin/compare/v2.11.6...v2.11.7) * [Java, JRuby] Fix ArrayOutOfBoundException in JSONFormatter ([#239](https://github.com/cucumber/gherkin/issues/239) Joseph Hughes) * [Java, Ruby] JSONFormatter outputs prettyfied json (Oleg Sukhodolsky) * [Java, JRuby] JSONFormatter.appendDuration(), TagExpression.isEmpty() added to match ruby versions ([#234](https://github.com/cucumber/gherkin/issues/234) Oleg Sukhodolsky) * [Core] New: Greek ([#237](https://github.com/cucumber/gherkin/issues/237), [#244](https://github.com/cucumber/gherkin/issues/244) Konstantinos Rousis) * [Core] New: Old English (Englisc) added ([#240](https://github.com/cucumber/gherkin/issues/240), [#241](https://github.com/cucumber/gherkin/issues/241) Sean Miller) * [JRuby] fixed problem with passing StringIO to PrettyFormatter (Oleg Sukhodolsky) * [Ruby] MultiJson is used insted of JSon ([#235](https://github.com/cucumber/gherkin/issues/235) Erik Michaels-Ober) * [Ruby] TagExpression.eval() deprecated, TagExpression.evaluate() added to replace it. ([#238](https://github.com/cucumber/gherkin/issues/238) Oleg Sukhodolsky) * [Ruby] File name is displayed on parse error ([#247](https://github.com/cucumber/gherkin/issues/247), [#248](https://github.com/cucumber/gherkin/issues/248) @lukaso) * [Java, JRuby] Fix IndexOutOfBound exception in PrettyFormatter ([#175](https://github.com/cucumber/gherkin/issues/175), [#242](https://github.com/cucumber/gherkin/issues/242) Matheus Neves, Oleg Sukhodolsky) ## [2.11.6](https://github.com/cucumber/gherkin/compare/v2.11.5...v2.11.6) * [JavaScript] Add duration value to json formatter ([#204](https://github.com/cucumber/gherkin/pull/204) Rick Beyer) * [JavaScript] Fix for JS Lexer ([#215](https://github.com/cucumber/gherkin/pull/215) Alexis Hevia) * [JavaScript] Failing JS Features ([#228](https://github.com/cucumber/gherkin/issues/228) Aslak Hellesøy) * [Core] Better Slovak ([#208](https://github.com/cucumber/gherkin/pull/208) Michal Kvasnicak) * [Core] New: Tatar ([#213](https://github.com/cucumber/gherkin/pull/213) Valeriy Utyaganov) * [Core] New: Telugu ([#218](https://github.com/cucumber/gherkin/pull/218) srinivasvedantam) * [Core] New: Hindi ([#222](https://github.com/cucumber/gherkin/pull/222) Kumar Harsh) * [Java] Fix JSON formatter ([#216](https://github.com/cucumber/gherkin/pull/216), [#195](https://github.com/cucumber/gherkin/pull/195) Joseph Hughes, Rex Hoffman) * [Ruby,Java] Gherkin does not seem to parse BOM when feature contains language specification. ([#211](https://github.com/cucumber/gherkin/issues/211), [#212](https://github.com/cucumber/gherkin/pull/212) Rob Westgeest) * [Java] Fixed a couple of build problems ([#226](https://github.com/cucumber/gherkin/pull/226), [#227](https://github.com/cucumber/gherkin/pull/227) signed) ## [2.11.5](https://github.com/cucumber/gherkin/compare/v2.11.4...v2.11.5) * [Core] Czech translation cleaned a little bit up. ([#202](https://github.com/cucumber/gherkin/pull/202) Jakub Linhart) * [JavaScript] No lexer modules in 2.11.4 NPM package ([#198](https://github.com/cucumber/gherkin/issues/198) Aslak Hellesøy) ## [2.11.4](https://github.com/cucumber/gherkin/compare/v2.11.3...v2.11.4) * [Core] Support for file encodings different from UTF-8 in feature files. ([#158](https://github.com/cucumber/gherkin/issues/158) Aslak Hellesøy) * [Core] Added Persian/Farsi (Sam Naseri) * [JavaScript] Fix lexer instantiation. ([#197](https://github.com/cucumber/gherkin/pull/197) Julien Biezemans) ## [2.11.3](https://github.com/cucumber/gherkin/compare/v2.11.2...v2.11.3) * [.NET] Upgraded IKVM from 0.46.0.1 to 7.1.4532.2 - quite a version bump! (Aslak Hellesøy) * [JavaScript] Added a README to prevent npm warnings. (Aslak Hellesøy) * [Ruby] Don't use C++ style comments. ([#191](https://github.com/cucumber/gherkin/pull/191) Sam Goldman) * [Core] Fix for Australian language support ([#196](https://github.com/cucumber/gherkin/pull/196) hogfish) * [Ruby] Add encoding option to IO.read ([#190](https://github.com/cucumber/gherkin/pull/190), [#192](https://github.com/cucumber/gherkin/issues/192) [#194](https://github.com/cucumber/gherkin/pull/194) HUANG Wei, Levin Alexander) * [JavaScript] Can't run on IE because of `const` keyword ([#186](https://github.com/cucumber/gherkin/issues/186) Aslak Hellesøy) ## [2.11.2](https://github.com/cucumber/gherkin/compare/v2.11.1...v2.11.2) * [Java] Depend on an external gherkin-jvm-deps jar with repackaged dependencies (Aslak Hellesøy, Rex Hoffman) * [Core] Renamed i18n.yml to i18n.json, which simplifies the build system for Java. (Aslak Hellesøy) * [Java Reporter should take embeddings as `byte[]` and not `InputStream` ([#184](https://github.com/cucumber/gherkin/issues/184) Aslak Hellesøy) * [Core] A little addition to russian translation ([#183](https://github.com/cucumber/gherkin/pull/183) Sergey Sytsevich) ## [2.11.1](https://github.com/cucumber/gherkin/compare/v2.11.0...v2.11.1) * [JavaScript] Native implementation of JSONFormatter (Aslak Hellesøy) * [Core] Add more accurate polish translations. ([#181](https://github.com/cucumber/gherkin/pull/181) Adam Stankiewicz) ## [2.11.0](https://github.com/cucumber/gherkin/compare/v2.10.0...v2.11.0) * [Core] Alias Feature with Business Need and Ability. ([#167](https://github.com/cucumber/gherkin/issues/167) Aslak Hellesøy) * [Java] Better exception on bad filter mix. ([#179](https://github.com/cucumber/gherkin/issues/179) Aslak Hellesøy) * [Java, Ruby] Formatters don't deal well with things not associated with a step ([#172](https://github.com/cucumber/gherkin/issues/172) David Kowis, Aslak Hellesøy) * [Java] Make model classes implement `java.io.Serializable` ([#180](https://github.com/cucumber/gherkin/issues/180) Aslak Hellesøy) ## [2.10.0](https://github.com/cucumber/gherkin/compare/v2.9.3...v2.10.0) * [Core] Added Malay language support. ([#176](https://github.com/cucumber/gherkin/pull/176) Choon Siong) * [JRuby] Fixed `I18n.language_table` so that `cucumber --i18n help` works again on JRuby. ([cucumber #272](https://github.com/cucumber/cucumber/issues/272) Aslak Hellesøy) * [Java] Line numbers are Integer instead of int or Long (Aslak Hellesøy) * [Java, Ruby] Fix for exception when an argument is missing. ([#171](https://github.com/cucumber/gherkin/pull/171) Matt Nathan, Aslak Hellesøy) ## [2.9.3](https://github.com/cucumber/gherkin/compare/v2.9.2...v2.9.3) * [Java] Fixed a bug in PrettyFormatter.setMonochrome(false) (Aslak Hellesøy) ## [2.9.2](https://github.com/cucumber/gherkin/compare/v2.9.1...v2.9.2) * [Java] Ability to PrettyFormatter.setMonochrome(false) post construction (Aslak Hellesøy) ## [2.9.1](https://github.com/cucumber/gherkin/compare/v2.9.0...v2.9.1) * [Java] Package gherkin.jar as OSGi bundle ([#166](https://github.com/cucumber/gherkin/pull/166) Jan Stamer) * The build system and instruction has been updated to work on OS X Lion. (Aslak Hellesøy) ## [2.9.0](https://github.com/cucumber/gherkin/compare/v2.8.0...v2.9.0) * Added output to Reporter API (Aslak Hellesøy) * Reporter.embedding takes InputStream instead of byte[], which breaks API hence the minor bump. (Aslak Hellesøy) ## [2.8.0](https://github.com/cucumber/gherkin/compare/v2.7.7...v2.8.0) * [Ruby/Java] TagExpression.eval() now takes a list of Tag instead of a list of String. This slightly breaks the API (minor bump), but helps fix some bugs in Cucumber-JVM. (Aslak Hellesøy) ## [2.7.7](https://github.com/cucumber/gherkin/compare/v2.7.6...v2.7.7) * [C] Allow compilation with clang (datanoise) * [Ruby] Expose AnsiEscapes methods on the class level as well, for easy calling without inclusion ([#161](https://github.com/cucumber/gherkin/pull/161) Ben Woosley) * [Ruby] Lexer load failure fix ([#159](https://github.com/cucumber/gherkin/pull/159) Ben Woosley) ## [2.7.6](https://github.com/cucumber/gherkin/compare/v2.7.5...v2.7.6) * [Java] Previous release accidentally had pretty formatting for both JSONFormatter and JSONPrettyFormatter (Aslak Hellesøy) ## [2.7.5](https://github.com/cucumber/gherkin/compare/v2.7.4...v2.7.5) * [Java] Added Formatter.close() so we can close underlying streams after a call to Formatter.done() (Aslak Hellesøy) * [Java] Switched from JSON simple to GSON (Aslak Hellesøy) * [Java] Added a JSONPrettyFormatter (Aslak Hellesøy) ## [2.7.4](https://github.com/cucumber/gherkin/compare/v2.7.3...v2.7.4) * Declared json and base64 dependencies as provided so they don't get included in dependant projects (Aslak Hellesøy) * Improved Chinese translations ([#155](https://github.com/cucumber/gherkin/pull/155) Riceball LEE) * Improved Czech translations ([#154](https://github.com/cucumber/gherkin/pull/154) Konstantin Kudryashov) ## [2.7.3](https://github.com/cucumber/gherkin/compare/v2.7.2...v2.7.3) * [Java] Make sure Result constructed with a Throwable always has a JSON error_message (Aslak Hellesøy) ## [2.7.2](https://github.com/cucumber/gherkin/compare/v2.7.1...v2.7.2) * [Java] Added gherkin.I18n.getAll() (Aslak Hellesøy) ## [2.7.1](https://github.com/cucumber/gherkin/compare/v2.7.0...v2.7.1) 2.7.0 release got hosed ## [2.7.0](https://github.com/cucumber/gherkin/compare/v2.6.9...v2.7.0) ### Changed Features * Formatter.close no longer closes streams. (Alan Parkinson) * Formatter.close renamed to Formatter.done. (Aslak Hellesøy) ## [2.6.9](https://github.com/cucumber/gherkin/compare/v2.6.8...v2.6.9) ### Changed Features * Pretty formatter always uses \n for newlines, instead of using platform-specific newline. This makes cross-platform testing less fiddly. (Aslak Hellesøy) ## [2.6.8](https://github.com/cucumber/gherkin/compare/v2.6.7...v2.6.8) ### Changed Features * Steps can be empty. The main reason for this is to allow Cukepatch to show an autocomplete right after a keyword. ([#149](https://github.com/cucumber/gherkin/issues/149) Aslak Hellesøy) ## [2.6.7](https://github.com/cucumber/gherkin/compare/v2.6.6...v2.6.7) ### Bugfixes * Fix bad packaging of NuSpec package. ([#148](https://github.com/cucumber/gherkin/issues/148) Aslak Hellesøy) ## [2.6.6](https://github.com/cucumber/gherkin/compare/v2.6.5...v2.6.6) ### New Features * .NET dll is released as a NuGet package instead of being uploaded to https://github.com/cucumber/gherkin/downloads ([#144](https://github.com/cucumber/gherkin/issues/144), [#147](https://github.com/cucumber/gherkin/pull/147) Jeffrey Cameron, Aslak Hellesøy) ### Changed Features * The lib/gherkin.jar that goes into the JRuby gem contains json-simple and base64 classes instead of separate jars (Aslak Hellesøy) * .NET dll, which is based on lib/gherkin.jar also contains json-simple and base64 (Aslak Hellesøy) * gherkin jars published to Maven repo do *not* bundle the json-simple and base64 jars. (Aslak Hellesøy) ### Removed Features * IronRuby gems are no longer published. Nobody seems to be using it, and it's too much pain to test. (Aslak Hellesøy) ## [2.6.5](https://github.com/cucumber/gherkin/compare/v2.6.4...v2.6.5) ### Bugfixes * Bad filtering when Scenario Outline+Examples followed by Scenario ([https://github.com/cucumber/gherkin/issues/145](#145) Aslak Hellesøy) ## [2.6.4](https://github.com/cucumber/gherkin/compare/v2.6.3...v2.6.4) ### Changed Features * [Node.js] No more restrictions about what Node.js version this runs on. (Aslak Hellesøy) ## [2.6.3](https://github.com/cucumber/gherkin/compare/v2.6.2...v2.6.3) ### Changed Features * Windows gems are compiled against 1.9.3 instead of 1.9.2. Should still work on 1.9.3. (Aslak Hellesøy) * NPM package contains UglifyJS-minified scripts (Aslak Hellesøy) * NPM package no longer contains Ace ([#109](https://github.com/cucumber/gherkin/issues/109) Aslak Hellesøy) * JavaScript exports for require.js works in non-AMD mode (needed for Ace) (Aslak Hellesøy) ## [2.6.2](https://github.com/cucumber/gherkin/compare/v2.6.1...v2.6.2) ### Changed Features * [Java] Minor internal API changes needed for better arity mismatch reporting in Cucumber-JVM (Aslak Hellesøy) ## [2.6.1](https://github.com/cucumber/gherkin/compare/v2.6.0...v2.6.1) ### Bugfixes * Fixed a regression on 1.8.7 (Aslak Hellesøy) ## [2.6.0](https://github.com/cucumber/gherkin/compare/v2.5.4...v2.6.0) ### Changed Features * JSON formatter must handle multiple features ([#140](https://github.com/cucumber/gherkin/issues/140) Aslak Hellesøy) ### New Features * Identifiers for Gherkin elements ([#131](https://github.com/cucumber/gherkin/issues/131) Matt Wynne, Aslak Hellesøy) ## [2.5.4](https://github.com/cucumber/gherkin/compare/v2.5.3...v2.5.4) ### New Features * [Java] Rename/add constants in Match and Result. (Aslak Hellesøy) ## [2.5.3](https://github.com/cucumber/gherkin/compare/v2.5.2...v2.5.3) ### New Features * [Java] AnsiEscapes can append to a NiceAppendable. (Aslak Hellesøy) ## [2.5.2](https://github.com/cucumber/gherkin/compare/v2.5.1...v2.5.2) ### New Features * Added synonyms for Portuguese. (Rodrigo Dumont) * Added synonyms for Italian. (Alessandro Mencarini) * Added synonyms for Spanish. (Nahuel Garbezza) * Added synonyms for French. (Julien Biezemans) ## [2.5.1](https://github.com/cucumber/gherkin/compare/v2.5.0...v2.5.1) ### New Features * [Java] Omit transient fields in toMap so we have more control over what goes into JSON. (Aslak Hellesøy) ## [2.5.0](https://github.com/cucumber/gherkin/compare/v2.4.21...v2.5.0) ### Changed Features The JSON representation of features has changed. The difference lies in how Doc Strings and Data Tables are represented. Consider the following steps: Given a Data Table: | Hipster | Ipsum | | Freegan | Vinyl | Given a Doc String: """ Hipster Ipsum """ This is now represented in JSON as: "steps": [ { "keyword": "Given ", "name": "a Data Table" "line": 5, "rows": [ { "cells": ["Hipster", "Ipsum"], "line": 6 }, { "cells": ["Freegan", "Vinyl"], "line": 7 } ] }, { "keyword": "Given ", "name": "a Doc String" "line": 8, "doc_string": { "value": "Hipster\nIpsum" "line": 9, "content_type": "plaintext", } } ] Previously it would be represented in JSON as: "steps": [ { "keyword": "Given ", "name": "a Data Table" "line": 5, "multiline_arg": { "type": "table" "value": [ { "cells": ["Hipster", "Ipsum"], "line": 6 }, { "cells": ["Freegan", "Vinyl"], "line": 7 } ] } }, { "keyword": "Given ", "name": "a Doc String" "line": 8, "multiline_arg": { "type": "doc_string" "value": "Hipster\nIpsum" "line": 9, "content_type": "plaintext", } } ] ### Bugfixes * Java JSONFormatter produces invalid JSON ([#128](https://github.com/cucumber/gherkin/issues/128) Aslak Hellesøy) * Missing matches and results in JSONFormatter output ([#129](https://github.com/cucumber/gherkin/issues/129) Aslak Hellesøy) ## [2.4.21](https://github.com/cucumber/gherkin/compare/v2.4.20...v2.4.21) ### Bugfixes * Revert json dependency back to >= 1.4.6 since many apps still use old json. (Aslak Hellesøy) ## [2.4.20](https://github.com/cucumber/gherkin/compare/v2.4.18...v2.4.20) (The 2.4.19 release got messed up). ### Bugfixes * Filtering on Examples with 0 or 1 row now works ([from mailing list](http://groups.google.com/group/cukes/browse_thread/thread/3e55777ee29c445c) Aslak Hellesøy) * Exclude .gitignore files from packaged gem ([#125](https://github.com/cucumber/gherkin/pull/125) John Hume) ## [2.4.18](https://github.com/cucumber/gherkin/compare/v2.4.17...v2.4.18) ### New Features * Fenced Code Blocks for DocStrings ([#123](https://github.com/cucumber/gherkin/issues/123) Gregory Hnatiuk, Aslak Hellesøy) ## [2.4.17](https://github.com/cucumber/gherkin/compare/v2.4.16...v2.4.17) ### New Features * Jar file is now deployed to Maven central, making installation a little easier (Aslak Hellesøy) * Both Ruby and Java API docs are on cukes.info. See README for details. (Aslak Hellesøy) ## [2.4.16](https://github.com/cucumber/gherkin/compare/v2.4.15...v2.4.16) ### New Features * [Java] TagExpression.eval() takes a Collection instead of List. That lets us pass a Set. (Aslak Hellesøy) ## [2.4.15](https://github.com/cucumber/gherkin/compare/v2.4.14...v2.4.15) ### New Features * [Java] Pretty formatter knows how to print deleted (-) or inserted (+) table rows. (Aslak Hellesøy) ## [2.4.14](https://github.com/cucumber/gherkin/compare/v2.4.13...v2.4.14) ### New Features * [Java] Publish source jars to Maven repo (Aslak Hellesøy) * [Java] Made NiceAppendable public - it's handy for Cucumber-JVM too (Aslak Hellesøy) ## [2.4.13](https://github.com/cucumber/gherkin/compare/v2.4.12...v2.4.13) No changes, but previous release failed while pushing gems (rubygems.org bug?) ## [2.4.12](https://github.com/cucumber/gherkin/compare/v2.4.11...v2.4.12) ### Bugfixes * [Java] Fixed Maven warnings. (Aslak Hellesøy) ### New Features * [Java] Fixed bug in Result.getErrorMessage() when it was created with a Throwable. (Aslak Hellesøy) * [Java] PrettyFormatter and JSONFormatter take Appendable instead of OutputStream/Writer. (Aslak Hellesøy) ### Changed Features * [Java] PrettyFormatter and JSONFormatter no longer flush. Make sure you pass an OutputStream/Writer that autoflushes. (Aslak Hellesøy) ## [2.4.11](https://github.com/cucumber/gherkin/compare/v2.4.10...v2.4.11) ### Bugfixes * Changed rake-compiler version from '~> 1.7.9' to '>= 1.7.9' since the fix in 2.4.10 seemed to have no effect. I hate the Ruby ecosystem today. (Aslak Hellesøy) ## [2.4.10](https://github.com/cucumber/gherkin/compare/v2.4.9...v2.4.10) ### Bugfixes * Changed rake-compiler version from '1.7.9' to '~> 1.7.9' since the fix in 2.4.9 seemed to have no effect. (Aslak Hellesøy) ## [2.4.9](https://github.com/cucumber/gherkin/compare/v2.4.8...v2.4.9) ### Bugfixes * Changed rake-compiler version from '= 1.7.9' to '1.7.9' to work around install problems caused by https://github.com/rubygems/rubygems/pull/121 (Aslak Hellesøy) ## [2.4.8](https://github.com/cucumber/gherkin/compare/v2.4.7...v2.4.8) ### Bugfixes * Remove another awesome_print which was left over from 2.4.7. (Aslak Hellesøy) * Make specs/features pass when LANG=C (or LC_CTYPE=C). (#118 Antonio Terceiro, Aslak Hellesøy) ## [2.4.7](https://github.com/cucumber/gherkin/compare/v2.4.6...v2.4.7) ### Bugfixes * Remove awesome_print (which was used for debuging). (Antonio Terceiro) ### New Features * Added I18n.getLocale() to Java impl. (Aslak Hellesøy) ## [2.4.6](https://github.com/cucumber/gherkin/compare/v2.4.5...v2.4.6) ### Bugfixes * Added Icelandic translation (Ægir Örn Símonarson) * JavaScript: String prototype has no "trimRight" function. Fixes failure in Opera. (Julien Biezemans) ## [2.4.5](https://github.com/cucumber/gherkin/compare/v2.4.4...v2.4.5) No changes, releasing again since the 2.4.4 release failed halfway through. ## [2.4.4](https://github.com/cucumber/gherkin/compare/v2.4.3...v2.4.4) ### Bugfixes * JRuby fixes. Symbols and streams are now properly converted before passing from ruby to java. (Aslak Hellesøy) * json-simple and base64 jar files (used by some of the java classes) are now embedded in the jruby gem (Aslak Hellesøy) ## [2.4.3](https://github.com/cucumber/gherkin/compare/v2.4.2...v2.4.3) ### Changed Features * Added a small hack to the java Result class to work around [Cucumber bug #97](https://github.com/cucumber/cucumber/issues/97) (Aslak Hellesøy) ## [2.4.2](https://github.com/cucumber/gherkin/compare/v2.4.1...v2.4.2) ### Changed Features * Formatter and Reporter are now two distinct interfaces. JSONParser takes one of each in ctor. (Aslak Hellesøy) ## [2.4.1](https://github.com/cucumber/gherkin/compare/v2.4.0...v2.4.1) ### New Features * None - just updated build system to the latest Cucumber (Aslak Hellesøy) ## [2.4.0](https://github.com/cucumber/gherkin/compare/v2.3.10...v2.4.0) ### Bugfixes * Don't use -Werror in production code ([#106](https://github.com/cucumber/gherkin/pull/106) Hans de Graaff) ### New Features * YARD based API docs at http://cukes.info/gherkin/api/ruby/latest/ (Aslak Hellesøy) ### Changed Features * py_string/PyString changed to doc_string/DocString, ref https://github.com/cucumber/cucumber/issues/74 (Aslak Hellesøy) ## [2.3.10](https://github.com/cucumber/gherkin/compare/v2.3.9...v2.3.10) ### Bugfixes * Relax development dependency version on builder. (#105 Aslak Hellesøy). ## [2.3.9](https://github.com/cucumber/gherkin/compare/v2.3.8...v2.3.9) ### New features * Javascript lexers support http://requirejs.org/ modules as well as node.js (Aslak Hellesøy). ## [2.3.8](https://github.com/cucumber/gherkin/compare/v2.3.7...v2.3.8) ### Insignificant changes * Improve build system so we don't need to add generated js lexers to git. ## [2.3.7](https://github.com/cucumber/gherkin/compare/v2.3.6...v2.3.7) * Removed incorrect (and unneeded) case statement that could blow up if V8 is installed. (Aslak Hellesøy, Niklas H) * Added connect support for gherkin.js (Aslak Hellesøy) ## [2.3.6](https://github.com/cucumber/gherkin/compare/v2.3.5...v2.3.6) ### New Features * Javascript implementation (#38 Aslak Hellesøy) ### Bugfixes * Fix compilation error on Arch Linux (#98,#99 Ben Hamill) * Corrected Russian translation (#97 Vagif Abilov) ## [2.3.5](https://github.com/cucumber/gherkin/compare/v2.3.4...v2.3.5) ### Changes * Relaxed gem dependencies to use >=. (Rob Slifka, Aslak Hellesøy) ## [2.3.4](https://github.com/cucumber/gherkin/compare/v2.3.3...v2.3.4) ### Changes * Fixing C90 errors on Ubuntu Natty (#92 Colin Dean) * Romanian (ro) language update, extracted from a real-world project. (Iulian Dogariu) ## [2.3.3](https://github.com/cucumber/gherkin/compare/v2.3.2...v2.3.3) ### Changes * No more dependencies on external ANSI escape libraries (Ruby:term-ansicolor, Java:Jansi). DIY is better! (Aslak Hellesøy) * Added duration (in millseconds) to Result. (Aslak Hellesøy) * Additional Polish aliases (Mike Połtyn) ## [2.3.2](https://github.com/cucumber/gherkin/compare/v2.3.0...v2.3.2) (Somehow 2.3.1 was released improperly shortly after 2.3.0 - not sure what fixes went into that!) ### Bugfixes * Preserve whitespace in descriptions. Leading whitespace in descriptions are stripped upto preceding keyword + 2 spaces (#87 Matt Wynne, Gregory Hnatiuk, Aslak Hellesøy) * Fix incorrect indentation of Examples descriptions (Gregory Hnatiuk) * Can't define new line characters in Example Table Cell's Content. (#85 George Montana Harkin, Aslak Hellesøy) ## [2.3.0](https://github.com/cucumber/gherkin/compare/v2.2.9...v2.3.0) ### New Features * New aliases for Scenario Outline in Swedish, Norwegian and English. (Peter Krantz, Aslak Hellesøy) * Improved build documentation for people who want to contribute. (Aslak Hellesøy) * Results can now be outputted/parsed in JSON. (Aslak Hellesøy) * JSON output now contains optional "match", "result" and "embeddings" elements underneath each step. (Aslak Hellesøy) * Added support for Base64 encoded embeddings in JSON representation. Useful for screenshots etc. (Aslak Hellesøy) ## [2.2.9](https://github.com/cucumber/gherkin/compare/v2.2.8...v2.2.9) ### New Features * PrettyFormatter can format features both with and without ANSI Colors. Using Jansi on Java. (Aslak Hellesøy) * Extended Java Formatter API with a steps(List) method for better reporting in Java (Aslak Hellesøy) ## [2.2.8](https://github.com/cucumber/gherkin/compare/v2.2.7...v2.2.8) ### Removed Features * Trollop based CLI - didn't find a good use for it yet. (Aslak Hellesøy) ## [2.2.7](https://github.com/cucumber/gherkin/compare/v2.2.6...v2.2.7) ### Bugfixes * I18n.getCodeKeywords() on Java didn't strip '!'. Not anymore. (Aslak Hellesøy) ## [2.2.6](https://github.com/cucumber/gherkin/compare/v2.2.5...v2.2.6) ### Bugfixes * I18n.getCodeKeywords() on Java included '*'. Not anymore. (Aslak Hellesøy) ## [2.2.5](https://github.com/cucumber/gherkin/compare/v2.2.4...v2.2.5) ### New Features * Gherkin will scan all top comments for the language comment. (Aslak Hellesøy) ## [2.2.4](https://github.com/cucumber/gherkin/compare/v2.2.3...v2.2.4) ### Bugfixes * C99 features used by gherkin code (#75 Graham Agnew) ## [2.2.3](https://github.com/cucumber/gherkin/compare/v2.2.2...v2.2.3) ### Bugfixes * Add back missing development dependency on cucumber (Aslak Hellesøy) ## [2.2.2](https://github.com/cucumber/gherkin/compare/v2.2.1...v2.2.2) ### New Features * Use json instead of json_pure (Aslak Hellesøy) * JSON formatter and parser can now omit JSON serialization (for speed) and work directly on objects (Aslak Hellesøy) ## [2.2.1](https://github.com/cucumber/gherkin/compare/v2.2.0...v2.2.1) ### New Features * Windows gems are now built against 1.8.6-p287 and 1.9.1-p243, on both mswin32 and mingw32, and should work on 1.8.6, 1.8.7, 1.9.1 and 1.9.2 versions of rubyinstaller.org as well as older windows rubies. (Aslak Hellesøy) ### Changed features * Build system no longer uses Jeweler - only Rake, Bundler and Rubygems (Aslak Hellesøy) ## [2.2.0](https://github.com/cucumber/gherkin/compare/v2.1.5...v2.2.0) This release breaks some APIs since the previous 2.1.5 release. If you install gherkin 2.2.0 you must also upgrade to Cucumber 0.9.0. ### Bugfixes * I18nLexer doesn't recognise language header with \r\n on OS X. (#70 Aslak Hellesøy) ### New Features * Pure Java FilterFormatter. (Aslak Hellesøy) * Pure Java JSONFormatter. (Aslak Hellesøy) ### Changed Features * All formatter events take exactly one argument. Each argument is a single object with all data. (Aslak Hellesøy) * Several java classes have moved to a different package in order to improve separation of concerns. (Aslak Hellesøy) ## [2.1.5](https://github.com/cucumber/gherkin/compare/v2.1.4...v2.1.5) ### Bugfixes * Line filter works on JRuby with Scenarios without steps. (Aslak Hellesøy) ### Changed Features * The JSON schema now puts background inside the "elements" Array. Makes parsing simpler. (Aslak Hellesøy) ## [2.1.4](https://github.com/cucumber/gherkin/compare/v2.1.3...v2.1.4) ### Bugfixes * #steps fails on JRuby with 2.1.3 (#68 Aslak Hellesøy) ## [2.1.3](https://github.com/cucumber/gherkin/compare/v2.1.2...v2.1.3) ### Bugfixes * Examples are not cleared when an ignored Scenario Outline/Examples is followed by a Scenario. (#67 Aslak Hellesøy) ## [2.1.2](https://github.com/cucumber/gherkin/compare/v2.1.1...v2.1.2) ### Bugfixes * Fix some missing require statements that surfaced when gherkin was used outside Cucumber. (Aslak Hellesøy) ## [2.1.1](https://github.com/cucumber/gherkin/compare/v2.1.0...v2.1.1) The previous release had a missing gherkin.jar in the jruby gem. This release fixes that. For good this time! ## [2.1.0](https://github.com/cucumber/gherkin/compare/v2.0.2...v2.1.0) ### New Features * Pirate! (anteaya) * Tag limits for negative tags (Aslak Hellesøy) ### Changed Features * The formatter API has changed and the listener API is now only used internally. (Aslak Hellesøy) ### Removed Features * FilterListener has been replaced with FilterFormatter. Currently only in Ruby (no Java impl yet). (Aslak Hellesøy) ## [2.0.2](https://github.com/cucumber/gherkin/compare/v2.0.1...v2.0.2) ### New Features * New JSON Lexer. (Gregory Hnatiuk) ### Bugfixes * Fixed incorrect indentation for descriptions in Java. (Aslak Hellesøy) * Fixed support for xx-yy languages and Hebrew and Indonesian (JDK bugs). (Aslak Hellesøy) ### Changed Features * Examples are now nested inside the Scenario Outline in the JSON format. (Gregory Hnatiuk) ## [2.0.1](https://github.com/cucumber/gherkin/compare/v2.0.0...v2.0.1) The previous release had a missing gherkin.jar in the jruby gem. This release fixes that. ## [2.0.0](https://github.com/cucumber/gherkin/compare/v1.0.30...v2.0.0) We're breaking the old listener API in this release, and added a new JSON formatter, which calls for a new major version. ### New Features * New JSON formatter. (Aslak Hellesøy, Joseph Wilk) * New synonyms for Hungarian (Bence Golda) * Upgraded to use RSpec 2.0.0 (Aslak Hellesøy) ### Bugfixes * undefined method `<=>' on JRuby (#52 Aslak Hellesøy) * Include link to explanation of LexingError (Mike Sassak) ### Changed Features * The formatter API has completely changed. There is a Gherkin Listener API and a Formatter API. The FormatterListener acts as an adapter between them. (Aslak Hellesøy) * The listener API now has an additional argument for description (text following the first line of Feature:, Scenario: etc.) (Gregroy Hnatiuk, Matt Wynne) ## [1.0.30](https://github.com/cucumber/gherkin/compare/v1.0.29...v1.0.30) ### New Features * Native gems for IronRuby. Bundles IKVM OpenJDK dlls as well as ikvmc-compiled gherkin.dll. Experimental! (Aslak Hellesøy) ## [1.0.29](https://github.com/cucumber/gherkin/compare/v1.0.28...v1.0.29) ### Bugfixes * Use I18n.class' class loader instead of context class loader to load Java lexers. Hoping this fixes loading bug for good. (Aslak Hellesøy) ## [1.0.28](https://github.com/cucumber/gherkin/compare/v1.0.27...v1.0.28) ### Bugfixes * Use context class loader instead of boot class loader to load Java lexers. (Aslak Hellesøy) * Only add gcc flags when the compiler is gcc. (#60 Aslak Hellesøy, Christian Höltje) ## [1.0.27](https://github.com/cucumber/gherkin/compare/v1.0.26...v1.0.27) ### New Features * Table cells can now contain escaped bars - \| and escaped backslashes - \\. (#48. Gregory Hnatiuk, Aslak Hellesøy) * Luxemburgish (lu) added. (Christoph König) ## [1.0.26](https://github.com/cucumber/gherkin/compare/v1.0.25...v1.0.26) ### New Features * Ignore the BOM that many retarded Windows editors insist on sticking in the beginning of a file. (Aslak Hellesøy) ## [1.0.25](https://github.com/cucumber/gherkin/compare/v1.0.24...v1.0.25) ### Bugfixes * Allow fallback to a slower ruby lexer if the C lexer can't be loaded for some reason. * Can't run specs in gherkin 1.0.24 (#59 Aslak Hellesøy) ## [1.0.24](https://github.com/cucumber/gherkin/compare/v1.0.23...v1.0.24) ### Bugfixes * hard tabs crazy indentation for pystrings in formatter (#55 Aslak Hellesøy) ## [1.0.23](https://github.com/cucumber/gherkin/compare/v1.0.22...v1.0.23) ### Changed Features * Java API now uses camelCased method names instead of underscored (more Java-like) (Aslak Hellesøy) ## [1.0.22](https://github.com/cucumber/gherkin/compare/v1.0.21...v1.0.22) ### Bugfixes * Make prebuilt binaries work on both Ruby 1.8.x and 1.9.x on Windows (#54 Luis Lavena, Aslak Hellesøy) ## [1.0.21](https://github.com/cucumber/gherkin/compare/v1.0.20...v1.0.21) ### Bugfixes * Fix compile warning on ruby 1.9.2dev (2009-07-18 trunk 24186) (#53 Aslak Hellesøy) ## [1.0.20](https://github.com/cucumber/gherkin/compare/v1.0.19...v1.0.20) ### Bugfixes * The gherkin CLI is working again (Gregory Hnatiuk) ## [1.0.19](https://github.com/cucumber/gherkin/compare/v1.0.18...v1.0.19) ### New Features * Works with JRuby 1.5.0.RC1 (Aslak Hellesøy) ### Changed Features * I18n.code_keywords now return And and But as well, making Cucumber StepDefs a little more flexible (Aslak Hellesøy) ## [1.0.18](https://github.com/cucumber/gherkin/compare/v1.0.17...v1.0.18) ### Bugfixes * Explicitly use UTF-8 encoding when scanning source with Java lexer. (Aslak Hellesøy) ## [1.0.17](https://github.com/cucumber/gherkin/compare/v1.0.16...v1.0.17) ### Bugfixes * Gherkin::I18n.keyword_regexp was broken (used for 3rd party code generation). (#51 Aslak Hellesøy) ## [1.0.16](https://github.com/cucumber/gherkin/compare/v1.0.15...v1.0.16) (Something went wrong when releasing 1.0.15) ### Bugfixes * Reduced risk of halfway botched releases. (Aslak Hellesøy) ## [1.0.15](https://github.com/cucumber/gherkin/compare/v1.0.14...v1.0.15) ### New Features * Implemented more functionality in I18n.java. (Aslak Hellesøy) ### Changed Features * Java methods are no longer throwing Exception (but RuntimeException). (Aslak Hellesøy) ## [1.0.14](https://github.com/cucumber/gherkin/compare/v1.0.13...v1.0.14) (Something went wrong when releasing 1.0.13) ## [1.0.13](https://github.com/cucumber/gherkin/compare/v1.0.12...v1.0.13) ### New Features * Filter on Background name. (Aslak Hellesøy) ## [1.0.12](https://github.com/cucumber/gherkin/compare/v1.0.11...v1.0.12) ### Bugfixes * Fixed incorrect filtering of pystring in Background. (Mike Sassak) ## [1.0.11](https://github.com/cucumber/gherkin/compare/v1.0.10...v1.0.11) ### Bugfixes * Fixed bad packaging (C files were not packaged in POSIX gem) ## [1.0.10](https://github.com/cucumber/gherkin/compare/v1.0.09...v1.0.10) ### New Features * Added Esperanto and added a Russian synonym for Feature. (Antono Vasiljev) * Pure Java implementation of FilterListener and TagExpression (Mike Gaffney, Aslak Hellesøy) ### Changed Features * TagExpression takes array args instead of varargs. (Aslak Hellesøy) ## [1.0.9](https://github.com/cucumber/gherkin/compare/v1.0.8...v1.0.9) ### Bugfixes * Triple escaped quotes (\"\"\") in PyStrings are unescaped to """. (Aslak Hellesøy) ## [1.0.8](https://github.com/cucumber/gherkin/compare/v1.0.7...v1.0.8) ### Bugfixes * Removed illegal comma from Ukrainian synonym. (Aslak Hellesøy) ## [1.0.7](https://github.com/cucumber/gherkin/compare/v1.0.6...v1.0.7) ### Bugfixes * Fixed problems with packaging of 1.0.6 release. (Aslak Hellesøy) ## [1.0.6](https://github.com/cucumber/gherkin/compare/v1.0.5...v1.0.6) ### New Features * Fully automated release process. (Aslak Hellesøy) ### Changed Features * Made generated classes use a more uniform naming convention. (Aslak Hellesøy) ### Removed Features * Removed C# port, obsoleted by IKVM build from 1.0.5. (Aslak Hellesøy) ## [1.0.5](https://github.com/cucumber/gherkin/compare/v1.0.4...v1.0.5) ### New Features * New .NET build of gherkin - an ikvmc build of gherkin.jar to gherkin.dll. (Aslak Hellesøy) ### Bugfixes * Made parsers reusable so that the same instance can parse several features. (Aslak Hellesøy) ## [1.0.4](https://github.com/cucumber/gherkin/compare/v1.0.3...v1.0.4) ### New features * Pure java releases of Gherkin at http://cukes.info/maven * A FilterListener in Ruby that is the last missing piece to plug Gherkin into Cucumber. (Gregory Hnatiuk, Aslak Hellesøy, Matt Wynne, Mike Sassak) ### Changed features * The Lexer now emits the '@' for tags. (Aslak Hellesøy) ## [1.0.3](https://github.com/cucumber/gherkin/compare/v1.0.2...v1.0.3) ### Bugfixes * The C lexer correctly instantiates a new array for each table, instead of reusing the old one. (Aslak Hellesøy) * Emit keywords with space instead of stripping (< keywords are emmitted without space) (Aslak Hellesøy) * gherkin reformat now prints comments, and does it with proper indentation (Aslak Hellesøy) * .NET resource files are now automatically copied into the .dll (#46 Aslak Hellesøy) ### New features * The Pure Java implementation now has a simple main method that pretty prints a feature. (#39 Aslak Hellesøy) * Writing code generated i18n syntax highlighters for Gherkin is a lot easier thanks to several convenience methods in Gherkin::I18n. (Aslak Hellesøy) * .NET (C#) port (#36, #37 Attila Sztupak) * Tables parsed and sent by row rather than by table. (Mike Sassak) ### Changed features * Switced to ISO 639-1 (language) and ISO 3166 alpha-2 (region - if applicable). Applies to Catalan, Swedish, Welsh, Romanian and Serbian. (Aslak Hellesøy) ## [1.0.2](https://github.com/cucumber/gherkin/compare/v1.0.1...v1.0.2) ### Bugfixes * Build passes on Ruby 1.9.2 (Aslak Hellesøy) ### New features * New command line based on trollop. Commands: reformat, stats. (Aslak Hellesøy) * I18nLexer#scan sets #language to the I18n for the language scanned (Mike Sassak) * I18n#adverbs, brings I18n to parity with Cucumber::Parser::NaturalLanguage (Mike Sassak) gherkin-2.12.2/checksums.yaml.gz0000444000004100000410000000041612244512574016552 0ustar www-datawww-data=qYRe9@ D9\`gd[8=!(YTU~^߾s/?~j@X8m>w3yh9:)Xq=_{oU;򌵙lTf%LFyFIw`vɽXѴm$:p5\ ǔ `"!b; ߫p#ؚD`U\)"jBJC$0䭈Gʥ6uܾ8mLQ2!gherkin-2.12.2/ext/0000755000004100000410000000000012244512574014063 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_th/0000755000004100000410000000000012244512574017404 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_th/extconf.rb0000644000004100000410000000035612244512574021403 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_th") have_library("c", "main") create_makefile("gherkin_lexer_th") gherkin-2.12.2/ext/gherkin_lexer_th/gherkin_lexer_th.c0000644000004100000410000026723712244512574023112 0ustar www-datawww-data #line 1 "ragel/i18n/th.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/th.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_th/gherkin_lexer_th.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 14, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 56, 57, 58, 60, 62, 67, 72, 77, 82, 86, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 112, 119, 124, 128, 134, 137, 139, 145, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 225, 228, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 753, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1040, 1043, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1278, 1280, 1282, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1437, 1438, 1439, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1483, 1486, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1574, 1576, 1578, 1580, 1582, 1584, 1586, 1588, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1742, 1744, 1746, 1748, 1750, 1752, 1754, 1756, 1758, 1760, 1762, 1764, 1766, 1768, 1770, 1772, 1774, 1776, 1778, 1780, 1782, 1784, 1786, 1788, 1790, 1794, 1796, 1798, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, 1823, 1827, 1829, 1831, 1833, 1835, 1837, 1839, 1841, 1843, 1845, 1847, 1849, 1851, 1853, 1855, 1857, 1859, 1861, 1863, 1865, 1867, 1869, 1871, 1873, 1875, 1877, 1879, 1881, 1883, 1885, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902, 1904, 1906, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922, 1924, 1926, 1928, 1930, 1932, 1934, 1936, 1938, 1940, 1942, 1944, 1946, 1948, 1950, 1952, 1954, 1956, 1958, 1960, 1962, 1964, 1966, 1968, 1970, 1972, 1974, 1976, 1977, 1978, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2008, 2011, 2016, 2018, 2020, 2022, 2024, 2026, 2028, 2030, 2032, 2034, 2036, 2038, 2040, 2042, 2044, 2046, 2048, 2050, 2052, 2054, 2056, 2058, 2060, 2062, 2064, 2066, 2068, 2070, 2072, 2074, 2076, 2078, 2080, 2082, 2085, 2087, 2089, 2091, 2093, 2095, 2097, 2099, 2101, 2103, 2105, 2107, 2109, 2111, 2113, 2115, 2117, 2119, 2121, 2123, 2125, 2127, 2129, 2131, 2133, 2135, 2137, 2139, 2141, 2143, 2145, 2147, 2149, 2151, 2153, 2155, 2157, 2159, 2161, 2163, 2165, 2167, 2169, 2171, 2173, 2175, 2177, 2179, 2181, 2183, 2185, 2187, 2189, 2191, 2193, 2195, 2197, 2199, 2201, 2203, 2205, 2207, 2209, 2211, 2213, 2215, 2217, 2219, 2221, 2223, 2225, 2227, 2229, 2231, 2233, 2235, 2237, 2239, 2241, 2243, 2245, 2247, 2249, 2251, 2253, 2255, 2257, 2259, 2261, 2263, 2265, 2267, 2269, 2271, 2273, 2275, 2277, 2279, 2281, 2283, 2285, 2287, 2289, 2291, 2293, 2295, 2297, 2299, 2301, 2303, 2305, 2307, 2309, 2311, 2313, 2315, 2319, 2321, 2323, 2326, 2328, 2330, 2332, 2334, 2336, 2338, 2340, 2342, 2344, 2346, 2348, 2351, 2353, 2355, 2357, 2359, 2361, 2363, 2365, 2367, 2369, 2371, 2373, 2375, 2377, 2379, 2381, 2383, 2385, 2388, 2390, 2392, 2394, 2396, 2398, 2400, 2402, 2404, 2406, 2408, 2410, 2412, 2414, 2416, 2418, 2420, 2422, 2424, 2426, 2428, 2430, 2432, 2434, 2436, 2438, 2440, 2442, 2444, 2446, 2448, 2450, 2452, 2454, 2456, 2458, 2460, 2462, 2464, 2466, 2468, 2470, 2472, 2474, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524 }; static const char _lexer_trans_keys[] = { -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -72, -71, -127, -124, -118, -108, -86, -32, -72, -77, -32, -72, -85, -32, -72, -103, -32, -72, -108, -32, -71, -125, -32, -72, -85, -32, -71, -119, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -72, -89, -32, -72, -78, -32, -72, -95, -32, -72, -107, -86, -32, -71, -119, -32, -72, -83, -32, -72, -121, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -105, -32, -72, -78, -32, -72, -121, -32, -72, -104, -32, -72, -72, -32, -72, -93, -32, -72, -127, -32, -72, -76, -32, -72, -120, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -72, -71, 10, -124, -118, -86, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -108, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, -71, 10, -107, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -94, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -128, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -101, 10, -32, 10, -71, 10, -128, -127, -126, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -108, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -86, -85, 10, -32, 10, -72, 10, -93, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -32, -72, -78, -32, -72, -95, -32, -72, -78, -32, -72, -93, -32, -72, -106, -32, -72, -72, -32, -72, -108, -32, -72, -126, -32, -72, -83, -32, -72, -121, -32, -72, -71, -107, -32, -72, -79, -32, -72, -89, -32, -72, -83, -32, -72, -94, -32, -71, -120, -32, -72, -78, -32, -72, -121, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -72, -71, 10, -124, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -126, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, -128, -32, -72, -85, -32, -72, -107, -32, -72, -72, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -109, -32, -71, -116, -32, -72, -79, -32, -72, -121, -32, -72, -103, -32, -72, -79, -32, -71, -119, -32, -72, -103, -32, -72, -93, -32, -72, -72, -32, -72, -101, -32, -71, -128, -32, -72, -85, -32, -72, -107, -32, -72, -72, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -109, -32, -71, -116, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -72, -71, 10, -127, -124, -108, 10, -32, 10, -72, 10, -77, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -108, 10, -32, 10, -71, 10, -125, 10, -32, 10, -72, 10, -85, 10, -32, 10, -71, 10, -119, 10, 10, 32, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -79, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -103, 10, -128, -127, -126, 10, -32, 10, -72, 10, -95, -85, 10, -32, 10, -72, 10, -73, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -32, 10, -72, 10, -107, -91, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -80, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -128, -127, -126, -32, -72, -95, -85, -32, -72, -73, -32, -71, -120, -32, -72, -83, -32, -72, -107, -32, -72, -72, -32, -72, -127, -32, -72, -78, -32, -72, -93, -32, -72, -109, -32, -71, -116, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -72, -71, 10, -127, -124, -108, -86, 10, -32, 10, -72, 10, -77, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -108, 10, -32, 10, -71, 10, -125, 10, -32, 10, -72, 10, -85, 10, -32, 10, -71, 10, -119, 10, 10, 32, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -79, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -101, 10, -32, 10, -71, 10, -128, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -128, -127, -126, 10, -32, 10, -72, 10, -95, -85, 10, -32, 10, -72, 10, -73, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -107, -103, -91, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -108, 10, -32, 10, -72, 10, -80, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -86, -85, 10, -32, 10, -72, 10, -93, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -32, -72, -107, -103, -91, -32, -71, -120, -32, -72, -89, -32, -72, -124, -32, -72, -76, -32, -72, -108, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -72, -71, 10, -127, -124, -108, -86, 10, -32, 10, -72, 10, -77, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -108, 10, -32, 10, -71, 10, -125, 10, -32, 10, -72, 10, -85, 10, -32, 10, -71, 10, -119, 10, 10, 32, -32, 10, -72, 10, -89, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -107, -86, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -105, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -104, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -76, 10, -32, 10, -72, 10, -120, 10, 10, 58, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -95, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -106, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -79, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -103, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -101, 10, -32, 10, -71, 10, -128, 10, -32, 10, -72, 10, -85, 10, -32, 10, -72, 10, -107, 10, -32, 10, -72, 10, -72, 10, -32, 10, -72, 10, -127, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -109, 10, -32, 10, -71, 10, -116, 10, -128, -127, -126, 10, -32, 10, -72, 10, -95, -85, 10, -32, 10, -72, 10, -73, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -107, -91, 10, -32, 10, -71, 10, -120, 10, -32, 10, -72, 10, -80, 10, -32, 10, -72, 10, -124, 10, -32, 10, -72, 10, -93, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -86, -85, 10, -32, 10, -72, 10, -93, 10, -32, 10, -71, 10, -119, 10, -32, 10, -72, 10, -78, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -126, 10, -32, 10, -72, 10, -83, 10, -32, 10, -72, 10, -121, 10, -32, 10, -72, 10, -91, 10, -32, 10, -72, 10, -79, 10, -32, 10, -72, 10, -127, 10, 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, -32, -72, -80, -32, -72, -124, -32, -72, -93, -32, -72, -121, -32, -72, -86, -85, -32, -72, -93, -32, -71, -119, -32, -72, -78, -32, -72, -121, -32, -72, -126, -32, -72, -83, -32, -72, -121, -32, -72, -91, -32, -72, -79, -32, -72, -127, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 2, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 3, 4, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 3, 4, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 3, 5, 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, 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, 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, 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, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 3, 5, 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, 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, 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, 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, 2, 2, 3, 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, 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, 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, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 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, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 15, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 68, 71, 82, 84, 86, 89, 92, 97, 102, 107, 112, 116, 120, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 158, 165, 170, 174, 180, 184, 187, 193, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 333, 337, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1140, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1606, 1610, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1960, 1963, 1966, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2066, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2197, 2199, 2201, 2204, 2206, 2208, 2210, 2212, 2214, 2216, 2218, 2220, 2222, 2224, 2226, 2228, 2230, 2232, 2234, 2236, 2238, 2240, 2242, 2244, 2246, 2248, 2250, 2252, 2254, 2256, 2258, 2260, 2262, 2264, 2266, 2268, 2270, 2279, 2283, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2392, 2395, 2398, 2401, 2404, 2407, 2410, 2413, 2416, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494, 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, 2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638, 2641, 2644, 2647, 2650, 2653, 2656, 2659, 2662, 2665, 2668, 2671, 2674, 2677, 2680, 2683, 2686, 2689, 2692, 2695, 2698, 2701, 2704, 2707, 2710, 2713, 2716, 2719, 2722, 2725, 2728, 2731, 2734, 2737, 2742, 2745, 2748, 2752, 2755, 2758, 2761, 2764, 2767, 2770, 2773, 2776, 2779, 2782, 2785, 2790, 2793, 2796, 2799, 2802, 2805, 2808, 2811, 2814, 2817, 2820, 2823, 2826, 2829, 2832, 2835, 2838, 2841, 2844, 2847, 2850, 2853, 2856, 2859, 2862, 2865, 2868, 2871, 2874, 2877, 2881, 2884, 2887, 2890, 2893, 2896, 2899, 2902, 2905, 2908, 2911, 2914, 2917, 2920, 2923, 2926, 2929, 2932, 2935, 2938, 2941, 2944, 2947, 2950, 2953, 2956, 2959, 2962, 2965, 2968, 2971, 2974, 2977, 2980, 2983, 2986, 2989, 2992, 2995, 2998, 3001, 3004, 3007, 3010, 3013, 3015, 3017, 3021, 3023, 3025, 3027, 3029, 3031, 3033, 3035, 3037, 3039, 3041, 3043, 3045, 3047, 3049, 3051, 3053, 3055, 3057, 3066, 3070, 3076, 3079, 3082, 3085, 3088, 3091, 3094, 3097, 3100, 3103, 3106, 3109, 3112, 3115, 3118, 3121, 3124, 3127, 3130, 3133, 3136, 3139, 3142, 3145, 3148, 3151, 3154, 3157, 3160, 3163, 3166, 3169, 3172, 3175, 3179, 3182, 3185, 3188, 3191, 3194, 3197, 3200, 3203, 3206, 3209, 3212, 3215, 3218, 3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3245, 3248, 3251, 3254, 3257, 3260, 3263, 3266, 3269, 3272, 3275, 3278, 3281, 3284, 3287, 3290, 3293, 3296, 3299, 3302, 3305, 3308, 3311, 3314, 3317, 3320, 3323, 3326, 3329, 3332, 3335, 3338, 3341, 3344, 3347, 3350, 3353, 3356, 3359, 3362, 3365, 3368, 3371, 3374, 3377, 3380, 3383, 3386, 3389, 3392, 3395, 3398, 3401, 3404, 3407, 3410, 3413, 3416, 3419, 3422, 3425, 3428, 3431, 3434, 3437, 3440, 3443, 3446, 3449, 3452, 3455, 3458, 3461, 3464, 3467, 3470, 3473, 3476, 3479, 3482, 3485, 3488, 3491, 3494, 3497, 3500, 3503, 3506, 3509, 3512, 3515, 3518, 3521, 3524, 3529, 3532, 3535, 3539, 3542, 3545, 3548, 3551, 3554, 3557, 3560, 3563, 3566, 3569, 3572, 3576, 3579, 3582, 3585, 3588, 3591, 3594, 3597, 3600, 3603, 3606, 3609, 3612, 3615, 3618, 3621, 3624, 3627, 3631, 3634, 3637, 3640, 3643, 3646, 3649, 3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 3751, 3754, 3757, 3760, 3763, 3765, 3767, 3769, 3771, 3773, 3775, 3777, 3779, 3781, 3783, 3785, 3787, 3789, 3791, 3794, 3796, 3798, 3800, 3802, 3804, 3806, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824, 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3840, 3842, 3844, 3846, 3848, 3850, 3852, 3854, 3856, 3858 }; static const short _lexer_trans_targs[] = { 2, 1354, 28, 28, 29, 39, 41, 25, 55, 58, 28, 0, 3, 779, 0, 4, 64, 363, 528, 546, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 28, 40, 27, 28, 40, 27, 2, 28, 28, 29, 39, 41, 25, 55, 58, 28, 0, 30, 0, 31, 0, 33, 32, 32, 33, 32, 32, 34, 34, 35, 34, 34, 34, 34, 35, 34, 34, 34, 34, 36, 34, 34, 34, 34, 37, 34, 34, 28, 38, 38, 0, 28, 38, 38, 0, 28, 40, 39, 28, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 1356, 0, 0, 0, 0, 0, 56, 57, 28, 57, 57, 55, 56, 56, 28, 57, 55, 57, 0, 58, 59, 58, 0, 63, 62, 61, 59, 62, 60, 0, 61, 59, 60, 0, 61, 60, 63, 62, 61, 59, 62, 60, 2, 63, 63, 29, 39, 41, 25, 55, 58, 63, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 348, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 124, 123, 124, 123, 125, 124, 124, 28, 334, 28, 124, 123, 126, 276, 124, 123, 127, 201, 265, 124, 123, 128, 124, 123, 129, 124, 123, 130, 124, 123, 131, 124, 123, 132, 124, 123, 133, 124, 123, 134, 124, 123, 135, 124, 123, 136, 124, 123, 137, 124, 123, 138, 124, 123, 139, 186, 124, 123, 140, 124, 123, 141, 124, 123, 142, 124, 123, 143, 124, 123, 144, 124, 123, 145, 124, 123, 146, 124, 123, 147, 124, 123, 148, 124, 123, 149, 124, 123, 150, 124, 123, 151, 124, 123, 152, 124, 123, 153, 124, 123, 154, 124, 123, 155, 124, 123, 156, 124, 123, 157, 124, 123, 158, 124, 123, 159, 124, 123, 160, 124, 123, 161, 124, 123, 162, 124, 123, 163, 124, 123, 164, 124, 123, 165, 124, 123, 166, 124, 123, 167, 124, 123, 168, 124, 123, 169, 124, 123, 170, 124, 123, 171, 124, 123, 172, 124, 123, 173, 124, 123, 174, 124, 123, 175, 124, 123, 176, 124, 123, 177, 124, 123, 178, 124, 123, 179, 124, 123, 180, 124, 123, 181, 124, 123, 182, 124, 123, 183, 124, 123, 184, 124, 123, 124, 185, 123, 2, 28, 28, 29, 39, 41, 25, 55, 58, 28, 0, 187, 124, 123, 188, 124, 123, 189, 124, 123, 190, 124, 123, 191, 124, 123, 192, 124, 123, 193, 124, 123, 194, 124, 123, 195, 124, 123, 196, 124, 123, 197, 124, 123, 198, 124, 123, 199, 124, 123, 200, 124, 123, 184, 124, 123, 202, 124, 123, 203, 124, 123, 204, 124, 123, 205, 124, 123, 206, 124, 123, 207, 124, 123, 208, 124, 123, 209, 124, 123, 210, 124, 123, 211, 124, 123, 212, 124, 123, 213, 124, 123, 214, 124, 123, 215, 124, 123, 216, 124, 123, 217, 124, 123, 218, 240, 124, 123, 219, 124, 123, 220, 124, 123, 221, 124, 123, 222, 124, 123, 223, 124, 123, 224, 124, 123, 225, 124, 123, 226, 124, 123, 227, 124, 123, 228, 124, 123, 229, 124, 123, 230, 124, 123, 231, 124, 123, 232, 124, 123, 233, 124, 123, 234, 124, 123, 235, 124, 123, 236, 124, 123, 237, 124, 123, 238, 124, 123, 239, 124, 123, 184, 124, 123, 241, 124, 123, 242, 124, 123, 243, 124, 123, 244, 124, 123, 245, 124, 123, 246, 124, 123, 247, 124, 123, 248, 124, 123, 249, 124, 123, 250, 124, 123, 251, 124, 123, 252, 124, 123, 253, 124, 123, 254, 124, 123, 255, 124, 123, 256, 124, 123, 257, 124, 123, 258, 124, 123, 259, 124, 123, 260, 124, 123, 261, 124, 123, 262, 124, 123, 263, 124, 123, 264, 124, 123, 184, 124, 123, 266, 124, 123, 267, 124, 123, 268, 124, 123, 269, 124, 123, 270, 124, 123, 271, 124, 123, 272, 124, 123, 273, 124, 123, 274, 124, 123, 275, 124, 123, 240, 124, 123, 241, 277, 292, 124, 123, 278, 124, 123, 279, 124, 123, 280, 124, 123, 281, 124, 123, 282, 124, 123, 283, 124, 123, 284, 124, 123, 285, 124, 123, 286, 124, 123, 287, 124, 123, 288, 124, 123, 289, 124, 123, 290, 124, 123, 291, 124, 123, 184, 124, 123, 293, 124, 123, 294, 124, 123, 295, 124, 123, 296, 124, 123, 297, 124, 123, 298, 124, 123, 299, 124, 123, 300, 124, 123, 301, 124, 123, 302, 124, 123, 303, 124, 123, 304, 325, 124, 123, 305, 124, 123, 306, 124, 123, 307, 124, 123, 308, 124, 123, 309, 124, 123, 310, 124, 123, 311, 124, 123, 312, 124, 123, 313, 124, 123, 314, 124, 123, 315, 124, 123, 316, 124, 123, 317, 124, 123, 318, 124, 123, 319, 124, 123, 320, 124, 123, 321, 124, 123, 322, 124, 123, 323, 124, 123, 324, 124, 123, 274, 124, 123, 326, 124, 123, 327, 124, 123, 328, 124, 123, 329, 124, 123, 330, 124, 123, 331, 124, 123, 332, 124, 123, 333, 124, 123, 184, 124, 123, 124, 335, 123, 124, 336, 123, 124, 337, 123, 124, 338, 123, 124, 339, 123, 124, 340, 123, 124, 341, 123, 124, 342, 123, 124, 343, 123, 124, 344, 123, 124, 345, 123, 124, 346, 123, 124, 347, 123, 124, 28, 123, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 121, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 503, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 401, 0, 402, 0, 403, 0, 405, 404, 405, 404, 406, 405, 405, 28, 28, 405, 404, 407, 481, 405, 404, 408, 405, 404, 409, 405, 404, 410, 405, 404, 411, 405, 404, 412, 405, 404, 413, 405, 404, 414, 405, 404, 415, 405, 404, 416, 405, 404, 417, 405, 404, 418, 405, 404, 419, 405, 404, 420, 466, 405, 404, 421, 405, 404, 422, 405, 404, 423, 405, 404, 424, 405, 404, 425, 405, 404, 426, 405, 404, 427, 405, 404, 428, 405, 404, 429, 405, 404, 430, 405, 404, 431, 405, 404, 432, 405, 404, 433, 405, 404, 434, 405, 404, 435, 405, 404, 436, 405, 404, 437, 405, 404, 438, 405, 404, 439, 405, 404, 440, 405, 404, 441, 405, 404, 442, 405, 404, 443, 405, 404, 444, 405, 404, 445, 405, 404, 446, 405, 404, 447, 405, 404, 448, 405, 404, 449, 405, 404, 450, 405, 404, 451, 405, 404, 452, 405, 404, 453, 405, 404, 454, 405, 404, 455, 405, 404, 456, 405, 404, 457, 405, 404, 458, 405, 404, 459, 405, 404, 460, 405, 404, 461, 405, 404, 462, 405, 404, 463, 405, 404, 464, 405, 404, 465, 405, 404, 405, 185, 404, 467, 405, 404, 468, 405, 404, 469, 405, 404, 470, 405, 404, 471, 405, 404, 472, 405, 404, 473, 405, 404, 474, 405, 404, 475, 405, 404, 476, 405, 404, 477, 405, 404, 478, 405, 404, 479, 405, 404, 480, 405, 404, 465, 405, 404, 482, 405, 404, 483, 405, 404, 484, 405, 404, 485, 405, 404, 486, 405, 404, 487, 405, 404, 488, 405, 404, 489, 405, 404, 490, 405, 404, 491, 405, 404, 492, 405, 404, 493, 405, 404, 494, 405, 404, 495, 405, 404, 496, 405, 404, 497, 405, 404, 498, 405, 404, 499, 405, 404, 500, 405, 404, 501, 405, 404, 502, 405, 404, 465, 405, 404, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 402, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 25, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 585, 584, 585, 584, 586, 585, 585, 28, 765, 609, 28, 585, 584, 587, 701, 585, 584, 588, 610, 683, 585, 584, 589, 585, 584, 590, 585, 584, 591, 585, 584, 592, 585, 584, 593, 585, 584, 594, 585, 584, 595, 585, 584, 596, 585, 584, 597, 585, 584, 598, 585, 584, 599, 585, 584, 600, 585, 584, 601, 585, 584, 602, 585, 584, 603, 585, 584, 604, 585, 584, 605, 585, 584, 606, 585, 584, 607, 585, 584, 608, 585, 584, 609, 585, 584, 585, 185, 584, 611, 585, 584, 612, 585, 584, 613, 585, 584, 614, 585, 584, 615, 585, 584, 616, 585, 584, 617, 585, 584, 618, 585, 584, 619, 585, 584, 620, 585, 584, 621, 585, 584, 622, 668, 585, 584, 623, 585, 584, 624, 585, 584, 625, 585, 584, 626, 585, 584, 627, 585, 584, 628, 585, 584, 629, 585, 584, 630, 585, 584, 631, 585, 584, 632, 585, 584, 633, 585, 584, 634, 585, 584, 635, 585, 584, 636, 585, 584, 637, 585, 584, 638, 585, 584, 639, 585, 584, 640, 585, 584, 641, 585, 584, 642, 585, 584, 643, 585, 584, 644, 585, 584, 645, 585, 584, 646, 585, 584, 647, 585, 584, 648, 585, 584, 649, 585, 584, 650, 585, 584, 651, 585, 584, 652, 585, 584, 653, 585, 584, 654, 585, 584, 655, 585, 584, 656, 585, 584, 657, 585, 584, 658, 585, 584, 659, 585, 584, 660, 585, 584, 661, 585, 584, 662, 585, 584, 663, 585, 584, 664, 585, 584, 665, 585, 584, 666, 585, 584, 667, 585, 584, 585, 185, 584, 669, 585, 584, 670, 585, 584, 671, 585, 584, 672, 585, 584, 673, 585, 584, 674, 585, 584, 675, 585, 584, 676, 585, 584, 677, 585, 584, 678, 585, 584, 679, 585, 584, 680, 585, 584, 681, 585, 584, 682, 585, 584, 667, 585, 584, 684, 585, 584, 685, 585, 584, 686, 585, 584, 687, 585, 584, 688, 585, 584, 689, 585, 584, 690, 585, 584, 691, 585, 584, 692, 585, 584, 693, 585, 584, 694, 585, 584, 695, 585, 584, 696, 585, 584, 697, 585, 584, 698, 585, 584, 699, 585, 584, 700, 585, 584, 609, 585, 584, 702, 735, 744, 585, 584, 703, 585, 584, 704, 585, 584, 705, 714, 585, 584, 706, 585, 584, 707, 585, 584, 708, 585, 584, 709, 585, 584, 710, 585, 584, 711, 585, 584, 712, 585, 584, 713, 585, 584, 609, 585, 584, 715, 585, 584, 716, 585, 584, 717, 585, 584, 718, 585, 584, 719, 585, 584, 720, 585, 584, 721, 585, 584, 722, 585, 584, 723, 585, 584, 724, 585, 584, 725, 585, 584, 726, 585, 584, 727, 585, 584, 728, 585, 584, 729, 585, 584, 730, 585, 584, 731, 585, 584, 732, 585, 584, 733, 585, 584, 734, 585, 584, 667, 585, 584, 736, 585, 584, 737, 585, 584, 738, 741, 585, 584, 739, 585, 584, 740, 585, 584, 609, 585, 584, 742, 585, 584, 743, 585, 584, 609, 585, 584, 745, 585, 584, 746, 585, 584, 747, 585, 584, 748, 585, 584, 749, 585, 584, 750, 585, 584, 751, 585, 584, 752, 585, 584, 753, 585, 584, 754, 585, 584, 755, 585, 584, 756, 585, 584, 757, 585, 584, 758, 585, 584, 759, 585, 584, 760, 585, 584, 761, 585, 584, 762, 585, 584, 763, 585, 584, 764, 585, 584, 667, 585, 584, 585, 766, 584, 585, 767, 584, 585, 768, 584, 585, 769, 584, 585, 770, 584, 585, 771, 584, 585, 772, 584, 585, 773, 584, 585, 774, 584, 585, 775, 584, 585, 776, 584, 585, 777, 584, 585, 778, 584, 585, 28, 584, 780, 1058, 1312, 0, 781, 0, 782, 0, 783, 792, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 0, 789, 0, 790, 0, 791, 0, 25, 0, 793, 0, 794, 0, 795, 0, 796, 0, 797, 0, 798, 0, 799, 0, 800, 0, 801, 0, 802, 0, 803, 0, 804, 0, 805, 0, 806, 0, 807, 0, 808, 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 816, 815, 816, 815, 817, 816, 816, 28, 1044, 840, 28, 816, 815, 818, 968, 816, 815, 819, 841, 914, 932, 816, 815, 820, 816, 815, 821, 816, 815, 822, 816, 815, 823, 816, 815, 824, 816, 815, 825, 816, 815, 826, 816, 815, 827, 816, 815, 828, 816, 815, 829, 816, 815, 830, 816, 815, 831, 816, 815, 832, 816, 815, 833, 816, 815, 834, 816, 815, 835, 816, 815, 836, 816, 815, 837, 816, 815, 838, 816, 815, 839, 816, 815, 840, 816, 815, 816, 185, 815, 842, 816, 815, 843, 816, 815, 844, 816, 815, 845, 816, 815, 846, 816, 815, 847, 816, 815, 848, 816, 815, 849, 816, 815, 850, 816, 815, 851, 816, 815, 852, 816, 815, 853, 899, 816, 815, 854, 816, 815, 855, 816, 815, 856, 816, 815, 857, 816, 815, 858, 816, 815, 859, 816, 815, 860, 816, 815, 861, 816, 815, 862, 816, 815, 863, 816, 815, 864, 816, 815, 865, 816, 815, 866, 816, 815, 867, 816, 815, 868, 816, 815, 869, 816, 815, 870, 816, 815, 871, 816, 815, 872, 816, 815, 873, 816, 815, 874, 816, 815, 875, 816, 815, 876, 816, 815, 877, 816, 815, 878, 816, 815, 879, 816, 815, 880, 816, 815, 881, 816, 815, 882, 816, 815, 883, 816, 815, 884, 816, 815, 885, 816, 815, 886, 816, 815, 887, 816, 815, 888, 816, 815, 889, 816, 815, 890, 816, 815, 891, 816, 815, 892, 816, 815, 893, 816, 815, 894, 816, 815, 895, 816, 815, 896, 816, 815, 897, 816, 815, 898, 816, 815, 816, 185, 815, 900, 816, 815, 901, 816, 815, 902, 816, 815, 903, 816, 815, 904, 816, 815, 905, 816, 815, 906, 816, 815, 907, 816, 815, 908, 816, 815, 909, 816, 815, 910, 816, 815, 911, 816, 815, 912, 816, 815, 913, 816, 815, 898, 816, 815, 915, 816, 815, 916, 816, 815, 917, 816, 815, 918, 816, 815, 919, 816, 815, 920, 816, 815, 921, 816, 815, 922, 816, 815, 923, 816, 815, 924, 816, 815, 925, 816, 815, 926, 816, 815, 927, 816, 815, 928, 816, 815, 929, 816, 815, 930, 816, 815, 931, 816, 815, 840, 816, 815, 933, 816, 815, 934, 816, 815, 935, 816, 815, 936, 816, 815, 937, 816, 815, 938, 816, 815, 939, 816, 815, 940, 816, 815, 941, 816, 815, 942, 816, 815, 943, 816, 815, 944, 816, 815, 945, 816, 815, 946, 816, 815, 947, 816, 815, 948, 816, 815, 949, 816, 815, 950, 816, 815, 951, 816, 815, 952, 816, 815, 953, 816, 815, 954, 816, 815, 955, 816, 815, 956, 816, 815, 957, 816, 815, 958, 816, 815, 959, 816, 815, 960, 816, 815, 961, 816, 815, 962, 816, 815, 963, 816, 815, 964, 816, 815, 965, 816, 815, 966, 816, 815, 967, 816, 815, 898, 816, 815, 969, 981, 1002, 816, 815, 970, 816, 815, 971, 816, 815, 972, 947, 816, 815, 973, 816, 815, 974, 816, 815, 975, 816, 815, 976, 816, 815, 977, 816, 815, 978, 816, 815, 979, 816, 815, 980, 816, 815, 840, 816, 815, 982, 816, 815, 983, 816, 815, 984, 987, 999, 816, 815, 985, 816, 815, 986, 816, 815, 840, 816, 815, 988, 816, 815, 989, 816, 815, 990, 816, 815, 991, 816, 815, 992, 816, 815, 993, 816, 815, 994, 816, 815, 995, 816, 815, 996, 816, 815, 997, 816, 815, 998, 816, 815, 898, 816, 815, 1000, 816, 815, 1001, 816, 815, 840, 816, 815, 1003, 816, 815, 1004, 816, 815, 1005, 816, 815, 1006, 816, 815, 1007, 816, 815, 1008, 816, 815, 1009, 816, 815, 1010, 816, 815, 1011, 816, 815, 1012, 816, 815, 1013, 816, 815, 1014, 1035, 816, 815, 1015, 816, 815, 1016, 816, 815, 1017, 816, 815, 1018, 816, 815, 1019, 816, 815, 1020, 816, 815, 1021, 816, 815, 1022, 816, 815, 1023, 816, 815, 1024, 816, 815, 1025, 816, 815, 1026, 816, 815, 1027, 816, 815, 1028, 816, 815, 1029, 816, 815, 1030, 816, 815, 1031, 816, 815, 1032, 816, 815, 1033, 816, 815, 1034, 816, 815, 941, 816, 815, 1036, 816, 815, 1037, 816, 815, 1038, 816, 815, 1039, 816, 815, 1040, 816, 815, 1041, 816, 815, 1042, 816, 815, 1043, 816, 815, 898, 816, 815, 816, 1045, 815, 816, 1046, 815, 816, 1047, 815, 816, 1048, 815, 816, 1049, 815, 816, 1050, 815, 816, 1051, 815, 816, 1052, 815, 816, 1053, 815, 816, 1054, 815, 816, 1055, 815, 816, 1056, 815, 816, 1057, 815, 816, 28, 815, 1059, 0, 1060, 0, 1061, 1064, 1309, 0, 1062, 0, 1063, 0, 25, 0, 1065, 0, 1066, 0, 1067, 0, 1068, 0, 1069, 0, 1070, 0, 1071, 0, 1072, 0, 1073, 0, 1074, 0, 1075, 0, 1076, 0, 1077, 0, 1079, 1078, 1079, 1078, 1080, 1079, 1079, 28, 1295, 1103, 28, 1079, 1078, 1081, 1231, 1079, 1078, 1082, 1104, 1177, 1195, 1079, 1078, 1083, 1079, 1078, 1084, 1079, 1078, 1085, 1079, 1078, 1086, 1079, 1078, 1087, 1079, 1078, 1088, 1079, 1078, 1089, 1079, 1078, 1090, 1079, 1078, 1091, 1079, 1078, 1092, 1079, 1078, 1093, 1079, 1078, 1094, 1079, 1078, 1095, 1079, 1078, 1096, 1079, 1078, 1097, 1079, 1078, 1098, 1079, 1078, 1099, 1079, 1078, 1100, 1079, 1078, 1101, 1079, 1078, 1102, 1079, 1078, 1103, 1079, 1078, 1079, 185, 1078, 1105, 1079, 1078, 1106, 1079, 1078, 1107, 1079, 1078, 1108, 1079, 1078, 1109, 1079, 1078, 1110, 1079, 1078, 1111, 1079, 1078, 1112, 1079, 1078, 1113, 1079, 1078, 1114, 1079, 1078, 1115, 1079, 1078, 1116, 1162, 1079, 1078, 1117, 1079, 1078, 1118, 1079, 1078, 1119, 1079, 1078, 1120, 1079, 1078, 1121, 1079, 1078, 1122, 1079, 1078, 1123, 1079, 1078, 1124, 1079, 1078, 1125, 1079, 1078, 1126, 1079, 1078, 1127, 1079, 1078, 1128, 1079, 1078, 1129, 1079, 1078, 1130, 1079, 1078, 1131, 1079, 1078, 1132, 1079, 1078, 1133, 1079, 1078, 1134, 1079, 1078, 1135, 1079, 1078, 1136, 1079, 1078, 1137, 1079, 1078, 1138, 1079, 1078, 1139, 1079, 1078, 1140, 1079, 1078, 1141, 1079, 1078, 1142, 1079, 1078, 1143, 1079, 1078, 1144, 1079, 1078, 1145, 1079, 1078, 1146, 1079, 1078, 1147, 1079, 1078, 1148, 1079, 1078, 1149, 1079, 1078, 1150, 1079, 1078, 1151, 1079, 1078, 1152, 1079, 1078, 1153, 1079, 1078, 1154, 1079, 1078, 1155, 1079, 1078, 1156, 1079, 1078, 1157, 1079, 1078, 1158, 1079, 1078, 1159, 1079, 1078, 1160, 1079, 1078, 1161, 1079, 1078, 1079, 185, 1078, 1163, 1079, 1078, 1164, 1079, 1078, 1165, 1079, 1078, 1166, 1079, 1078, 1167, 1079, 1078, 1168, 1079, 1078, 1169, 1079, 1078, 1170, 1079, 1078, 1171, 1079, 1078, 1172, 1079, 1078, 1173, 1079, 1078, 1174, 1079, 1078, 1175, 1079, 1078, 1176, 1079, 1078, 1161, 1079, 1078, 1178, 1079, 1078, 1179, 1079, 1078, 1180, 1079, 1078, 1181, 1079, 1078, 1182, 1079, 1078, 1183, 1079, 1078, 1184, 1079, 1078, 1185, 1079, 1078, 1186, 1079, 1078, 1187, 1079, 1078, 1188, 1079, 1078, 1189, 1079, 1078, 1190, 1079, 1078, 1191, 1079, 1078, 1192, 1079, 1078, 1193, 1079, 1078, 1194, 1079, 1078, 1103, 1079, 1078, 1196, 1079, 1078, 1197, 1079, 1078, 1198, 1079, 1078, 1199, 1079, 1078, 1200, 1079, 1078, 1201, 1079, 1078, 1202, 1079, 1078, 1203, 1079, 1078, 1204, 1079, 1078, 1205, 1079, 1078, 1206, 1079, 1078, 1207, 1079, 1078, 1208, 1079, 1078, 1209, 1079, 1078, 1210, 1079, 1078, 1211, 1079, 1078, 1212, 1079, 1078, 1213, 1079, 1078, 1214, 1079, 1078, 1215, 1079, 1078, 1216, 1079, 1078, 1217, 1079, 1078, 1218, 1079, 1078, 1219, 1079, 1078, 1220, 1079, 1078, 1221, 1079, 1078, 1222, 1079, 1078, 1223, 1079, 1078, 1224, 1079, 1078, 1225, 1079, 1078, 1226, 1079, 1078, 1227, 1079, 1078, 1228, 1079, 1078, 1229, 1079, 1078, 1230, 1079, 1078, 1161, 1079, 1078, 1232, 1244, 1253, 1079, 1078, 1233, 1079, 1078, 1234, 1079, 1078, 1235, 1210, 1079, 1078, 1236, 1079, 1078, 1237, 1079, 1078, 1238, 1079, 1078, 1239, 1079, 1078, 1240, 1079, 1078, 1241, 1079, 1078, 1242, 1079, 1078, 1243, 1079, 1078, 1103, 1079, 1078, 1245, 1079, 1078, 1246, 1079, 1078, 1247, 1250, 1079, 1078, 1248, 1079, 1078, 1249, 1079, 1078, 1103, 1079, 1078, 1251, 1079, 1078, 1252, 1079, 1078, 1103, 1079, 1078, 1254, 1079, 1078, 1255, 1079, 1078, 1256, 1079, 1078, 1257, 1079, 1078, 1258, 1079, 1078, 1259, 1079, 1078, 1260, 1079, 1078, 1261, 1079, 1078, 1262, 1079, 1078, 1263, 1079, 1078, 1264, 1079, 1078, 1265, 1286, 1079, 1078, 1266, 1079, 1078, 1267, 1079, 1078, 1268, 1079, 1078, 1269, 1079, 1078, 1270, 1079, 1078, 1271, 1079, 1078, 1272, 1079, 1078, 1273, 1079, 1078, 1274, 1079, 1078, 1275, 1079, 1078, 1276, 1079, 1078, 1277, 1079, 1078, 1278, 1079, 1078, 1279, 1079, 1078, 1280, 1079, 1078, 1281, 1079, 1078, 1282, 1079, 1078, 1283, 1079, 1078, 1284, 1079, 1078, 1285, 1079, 1078, 1204, 1079, 1078, 1287, 1079, 1078, 1288, 1079, 1078, 1289, 1079, 1078, 1290, 1079, 1078, 1291, 1079, 1078, 1292, 1079, 1078, 1293, 1079, 1078, 1294, 1079, 1078, 1161, 1079, 1078, 1079, 1296, 1078, 1079, 1297, 1078, 1079, 1298, 1078, 1079, 1299, 1078, 1079, 1300, 1078, 1079, 1301, 1078, 1079, 1302, 1078, 1079, 1303, 1078, 1079, 1304, 1078, 1079, 1305, 1078, 1079, 1306, 1078, 1079, 1307, 1078, 1079, 1308, 1078, 1079, 28, 1078, 1310, 0, 1311, 0, 25, 0, 1313, 0, 1314, 0, 1315, 0, 1316, 0, 1317, 0, 1318, 0, 1319, 0, 1320, 0, 1321, 0, 1322, 0, 1323, 0, 1324, 1345, 0, 1325, 0, 1326, 0, 1327, 0, 1328, 0, 1329, 0, 1330, 0, 1331, 0, 1332, 0, 1333, 0, 1334, 0, 1335, 0, 1336, 0, 1337, 0, 1338, 0, 1339, 0, 1340, 0, 1341, 0, 1342, 0, 1343, 0, 1344, 0, 555, 0, 1346, 0, 1347, 0, 1348, 0, 1349, 0, 1350, 0, 1351, 0, 1352, 0, 1353, 0, 121, 0, 1355, 0, 28, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 43, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 1356; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/th.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 2444 "ext/gherkin_lexer_th/gherkin_lexer_th.c" { cs = lexer_start; } #line 425 "ragel/i18n/th.c.rl" #line 2451 "ext/gherkin_lexer_th/gherkin_lexer_th.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/th.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/th.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/th.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/th.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/th.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/th.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/th.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/th.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/th.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/th.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/th.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/th.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/th.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/th.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/th.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/th.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/th.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/th.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/th.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/th.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/th.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/th.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/th.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/th.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2741 "ext/gherkin_lexer_th/gherkin_lexer_th.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/th.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2804 "ext/gherkin_lexer_th/gherkin_lexer_th.c" } } } _out: {} } #line 426 "ragel/i18n/th.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_th() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Th", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_pt/0000755000004100000410000000000012244512574017414 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_pt/extconf.rb0000644000004100000410000000035612244512574021413 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_pt") have_library("c", "main") create_makefile("gherkin_lexer_pt") gherkin-2.12.2/ext/gherkin_lexer_pt/gherkin_lexer_pt.c0000644000004100000410000014466112244512574023125 0ustar www-datawww-data #line 1 "ragel/i18n/pt.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/pt.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 171, 173, 175, 177, 179, 181, 183, 186, 188, 190, 192, 194, 196, 198, 200, 216, 218, 219, 221, 223, 224, 225, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 296, 298, 300, 302, 304, 306, 308, 311, 313, 315, 317, 319, 321, 323, 325, 327, 330, 332, 334, 336, 338, 340, 342, 345, 348, 351, 353, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 448, 450, 452, 454, 456, 458, 460, 462, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 506, 507, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 570, 572, 574, 576, 578, 580, 582, 585, 587, 589, 591, 593, 595, 597, 599, 601, 604, 606, 608, 610, 612, 615, 617, 620, 623, 625, 627, 629, 631, 633, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 684, 686, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 754, 755, 756, 757, 758, 759, 763, 769, 772, 774, 780, 796, 798, 801, 803, 805, 807, 809, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 934, 936, 938, 940, 942, 944, 946, 948, 950, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 974, 976, 977, 978, 979, 980, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1074, 1076, 1078, 1080, 1082, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1114, 1116, 1119, 1122, 1124, 1126, 1128, 1130, 1132, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1189, 1191, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1225, 1227, 1229, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1265, 1266, 1267, 1268, 1269 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 97, 101, 111, 114, 97, 99, 116, 101, 114, -61, 105, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 67, 68, 69, 70, 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, 101, 111, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 124, 9, 13, 97, 101, 100, 97, 111, 32, 115, 108, 105, 110, 101, 97, -61, 99, -89, -61, -93, 111, 32, 100, 111, 32, 67, 101, 110, -61, -95, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 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, 97, 101, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 10, 116, -61, 10, 97, -93, 10, 10, 111, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 10, 97, 10, 115, 10, 117, 10, 97, 10, 110, 10, 100, 97, 111, 32, 100, 111, 32, 67, 101, 110, 97, 32, 110, 115, 120, 116, -61, 97, -93, 111, 113, 117, 101, 109, 97, 32, 100, 111, 32, 67, 101, 110, -61, 97, 101, 109, 112, 108, 111, 115, 58, 10, 10, 10, 32, 35, 67, 70, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 117, 110, 99, 100, 105, 111, 110, 97, 108, 105, 100, 97, 100, 101, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 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, 97, 101, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 97, 101, 10, 100, 10, 97, 111, 10, 32, 115, 10, 108, 10, 105, 10, 110, 10, 101, 10, 97, -61, 10, 99, -89, 10, -61, 10, -93, 10, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, 10, 97, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, 10, 97, 10, 32, 110, 115, 10, 116, -61, 10, 97, -93, 10, 10, 111, 10, 113, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 10, 97, 10, 115, 10, 117, 10, 97, 10, 110, 10, 100, 97, 115, 117, 97, 110, 100, 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, 67, 68, 69, 70, 77, 81, 124, 9, 13, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 32, 58, 115, 10, 100, 10, 101, 10, 32, 10, 70, 10, 117, 10, 110, 10, 100, 10, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 101, 10, 108, 10, 105, 10, 110, 10, 101, 10, 97, -61, 10, 99, -89, 10, -61, 10, -93, 10, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 105, 10, 97, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, 10, 97, 10, 115, 120, 10, 113, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, 97, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 115, 10, 117, 10, 110, 10, 99, 100, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 110, -61, 97, -95, 114, 105, 111, 32, 58, 115, 100, 101, 32, 70, 117, 110, 100, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 70, 77, 81, 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, 97, 101, 111, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, 105, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, -61, 10, 97, -95, 10, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 100, 10, 101, 10, 32, 10, 70, 10, 117, 10, 110, 10, 100, 10, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 97, 101, 10, 100, 10, 97, 111, 10, 32, 115, 10, 108, 10, 105, 10, 110, 10, 101, 10, 97, -61, 10, 99, -89, 10, -61, 10, -93, 10, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 105, 10, 97, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, 10, 97, 10, 32, 110, 115, 10, 116, -61, 10, 97, -93, 10, 10, 111, 10, 113, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 111, 10, 32, 10, 67, 10, 101, 10, 110, -61, 10, 97, 10, 117, 10, 110, 10, 99, 100, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 100, 10, 97, 10, 100, 10, 101, 10, 97, 10, 115, 10, 117, 10, 97, 10, 110, 10, 100, 110, 116, 101, 120, 116, 0 }; static const char _lexer_single_lengths[] = { 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 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, 4, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 14, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 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, 1, 1, 4, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 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, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3, 3, 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, 4, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 14, 2, 3, 2, 2, 2, 2, 4, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 3, 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, 4, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 137, 139, 141, 143, 145, 147, 149, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 228, 231, 234, 237, 240, 243, 246, 250, 253, 256, 259, 262, 265, 268, 271, 287, 290, 292, 295, 298, 300, 302, 304, 306, 308, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 412, 415, 418, 421, 424, 427, 430, 434, 437, 440, 443, 446, 449, 452, 455, 458, 462, 465, 468, 471, 474, 477, 480, 484, 488, 492, 495, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 587, 589, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 649, 652, 655, 658, 661, 664, 667, 670, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 736, 738, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 832, 835, 838, 841, 844, 847, 850, 854, 857, 860, 863, 866, 869, 872, 875, 878, 882, 885, 888, 891, 894, 898, 901, 905, 909, 912, 915, 918, 921, 924, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 999, 1002, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1118, 1124, 1128, 1131, 1137, 1153, 1156, 1160, 1163, 1166, 1169, 1172, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1417, 1420, 1422, 1424, 1426, 1428, 1432, 1434, 1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1564, 1567, 1570, 1573, 1576, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1623, 1626, 1630, 1634, 1637, 1640, 1643, 1646, 1649, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1733, 1736, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1786, 1789, 1792, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1846, 1848, 1850, 1852, 1854 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 607, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 463, 602, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 46, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 54, 53, 54, 53, 54, 54, 4, 55, 4, 69, 398, 430, 450, 54, 53, 54, 56, 53, 54, 57, 53, 54, 58, 53, 54, 59, 53, 54, 60, 53, 54, 61, 53, 54, 62, 53, 54, 63, 53, 54, 64, 53, 54, 65, 53, 54, 66, 53, 54, 67, 53, 54, 68, 53, 54, 4, 53, 54, 70, 378, 393, 53, 54, 71, 53, 54, 72, 53, 54, 73, 53, 54, 74, 53, 54, 75, 53, 54, 76, 53, 77, 54, 78, 53, 78, 54, 53, 54, 79, 53, 54, 80, 53, 54, 81, 53, 54, 82, 53, 54, 83, 53, 54, 84, 53, 4, 4, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 4, 0, 86, 89, 0, 87, 0, 88, 88, 0, 32, 31, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 179, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 114, 113, 114, 113, 114, 114, 4, 115, 129, 4, 130, 151, 155, 160, 173, 175, 114, 113, 114, 116, 113, 114, 117, 113, 114, 118, 113, 114, 119, 113, 114, 120, 113, 114, 121, 113, 114, 122, 113, 114, 123, 113, 114, 124, 113, 114, 125, 113, 114, 126, 113, 114, 127, 113, 114, 128, 113, 114, 4, 113, 114, 84, 113, 114, 131, 145, 113, 114, 132, 113, 114, 133, 113, 114, 134, 113, 114, 135, 113, 114, 136, 113, 114, 137, 113, 138, 114, 139, 113, 139, 114, 113, 114, 140, 113, 114, 141, 113, 114, 142, 113, 114, 143, 113, 114, 144, 113, 114, 84, 113, 114, 146, 113, 147, 114, 148, 113, 148, 114, 113, 114, 149, 113, 114, 150, 113, 114, 144, 113, 114, 152, 113, 114, 153, 113, 114, 154, 154, 113, 114, 84, 129, 113, 114, 84, 156, 113, 114, 157, 113, 158, 114, 159, 113, 159, 114, 113, 114, 129, 113, 114, 161, 113, 114, 162, 113, 114, 163, 113, 114, 164, 113, 114, 165, 113, 114, 166, 113, 114, 167, 113, 114, 168, 113, 114, 169, 113, 114, 170, 113, 114, 171, 113, 114, 172, 113, 114, 144, 113, 114, 174, 113, 114, 129, 113, 114, 176, 113, 114, 177, 113, 114, 178, 113, 114, 159, 113, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 108, 0, 32, 190, 194, 207, 0, 191, 0, 192, 193, 0, 193, 0, 31, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 107, 108, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 216, 215, 216, 215, 216, 216, 4, 217, 232, 4, 216, 215, 216, 218, 215, 216, 219, 215, 216, 220, 215, 216, 221, 215, 216, 222, 215, 216, 223, 215, 216, 224, 215, 225, 216, 226, 215, 226, 216, 215, 216, 227, 215, 216, 228, 215, 216, 229, 215, 216, 230, 215, 216, 231, 215, 216, 84, 215, 216, 233, 215, 216, 234, 215, 216, 235, 215, 216, 236, 215, 216, 237, 215, 216, 238, 215, 216, 239, 215, 216, 240, 215, 216, 241, 215, 216, 242, 215, 216, 243, 215, 216, 244, 215, 216, 231, 215, 246, 0, 247, 0, 248, 258, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 51, 0, 259, 0, 260, 0, 262, 261, 262, 261, 262, 262, 4, 263, 277, 4, 278, 299, 331, 347, 360, 362, 262, 261, 262, 264, 261, 262, 265, 261, 262, 266, 261, 262, 267, 261, 262, 268, 261, 262, 269, 261, 262, 270, 261, 262, 271, 261, 262, 272, 261, 262, 273, 261, 262, 274, 261, 262, 275, 261, 262, 276, 261, 262, 4, 261, 262, 84, 261, 262, 279, 293, 261, 262, 280, 261, 262, 281, 261, 262, 282, 261, 262, 283, 261, 262, 284, 261, 262, 285, 261, 286, 262, 287, 261, 287, 262, 261, 262, 288, 261, 262, 289, 261, 262, 290, 261, 262, 291, 261, 262, 292, 261, 262, 84, 261, 262, 294, 261, 295, 262, 296, 261, 296, 262, 261, 262, 297, 261, 262, 298, 261, 262, 292, 261, 262, 300, 303, 261, 262, 301, 261, 262, 302, 302, 261, 262, 84, 277, 261, 262, 304, 261, 262, 305, 261, 262, 306, 261, 262, 307, 261, 262, 308, 261, 309, 262, 321, 261, 310, 262, 261, 311, 262, 261, 312, 262, 261, 262, 313, 261, 262, 314, 261, 262, 315, 261, 262, 316, 261, 262, 317, 261, 262, 318, 261, 262, 319, 261, 262, 320, 261, 295, 262, 261, 262, 322, 261, 262, 323, 261, 262, 324, 261, 262, 325, 261, 262, 326, 261, 262, 327, 261, 262, 328, 261, 262, 329, 261, 262, 330, 261, 262, 296, 261, 262, 84, 332, 336, 261, 262, 333, 261, 334, 262, 335, 261, 335, 262, 261, 262, 277, 261, 262, 337, 261, 262, 338, 261, 262, 339, 261, 262, 340, 261, 262, 341, 261, 262, 342, 261, 262, 343, 261, 262, 344, 261, 262, 345, 261, 262, 346, 261, 262, 293, 261, 262, 348, 261, 262, 349, 261, 262, 350, 261, 262, 351, 261, 262, 352, 261, 262, 353, 261, 262, 354, 261, 262, 355, 261, 262, 356, 261, 262, 357, 261, 262, 358, 261, 262, 359, 261, 262, 292, 261, 262, 361, 261, 262, 277, 261, 262, 363, 261, 262, 364, 261, 262, 365, 261, 262, 335, 261, 367, 0, 31, 0, 369, 0, 370, 0, 371, 0, 193, 0, 372, 373, 372, 0, 377, 376, 375, 373, 376, 374, 0, 375, 373, 374, 0, 375, 374, 377, 376, 375, 373, 376, 374, 377, 377, 5, 15, 17, 31, 34, 37, 85, 189, 245, 366, 368, 372, 377, 0, 54, 379, 53, 380, 54, 381, 53, 381, 54, 53, 54, 382, 53, 54, 383, 53, 54, 384, 53, 54, 385, 84, 83, 53, 54, 386, 53, 54, 387, 53, 54, 388, 53, 54, 389, 53, 54, 390, 53, 54, 391, 53, 54, 392, 53, 54, 83, 53, 54, 394, 53, 54, 395, 53, 54, 396, 53, 54, 397, 53, 54, 392, 53, 54, 399, 53, 54, 400, 53, 54, 401, 53, 54, 402, 53, 54, 403, 53, 54, 404, 53, 405, 54, 420, 53, 406, 54, 53, 407, 54, 53, 408, 54, 53, 54, 409, 53, 54, 410, 53, 54, 411, 53, 54, 412, 53, 54, 413, 53, 54, 414, 53, 54, 415, 53, 54, 416, 53, 417, 54, 53, 418, 54, 53, 54, 419, 53, 54, 392, 53, 54, 421, 53, 54, 422, 53, 54, 423, 53, 54, 424, 53, 54, 425, 53, 54, 426, 53, 54, 427, 53, 54, 428, 53, 54, 429, 53, 54, 418, 53, 54, 431, 444, 53, 54, 432, 53, 54, 433, 53, 54, 434, 53, 54, 435, 53, 54, 436, 53, 54, 437, 53, 54, 438, 53, 54, 439, 53, 54, 440, 53, 54, 441, 53, 54, 442, 53, 54, 443, 53, 417, 54, 418, 53, 54, 445, 53, 54, 446, 53, 54, 447, 53, 54, 448, 53, 54, 449, 53, 54, 83, 53, 54, 451, 53, 54, 452, 53, 54, 453, 392, 53, 54, 454, 53, 54, 455, 53, 54, 456, 53, 54, 457, 53, 54, 458, 53, 54, 459, 53, 54, 460, 53, 54, 461, 53, 54, 462, 53, 54, 83, 53, 464, 0, 465, 466, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 477, 213, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 476, 0, 258, 0, 479, 478, 479, 478, 479, 479, 4, 480, 494, 4, 495, 530, 565, 583, 596, 598, 479, 478, 479, 481, 478, 479, 482, 478, 479, 483, 478, 479, 484, 478, 479, 485, 478, 479, 486, 478, 479, 487, 478, 479, 488, 478, 479, 489, 478, 479, 490, 478, 479, 491, 478, 479, 492, 478, 479, 493, 478, 479, 4, 478, 479, 84, 478, 479, 496, 510, 525, 478, 479, 497, 478, 479, 498, 478, 479, 499, 478, 479, 500, 478, 479, 501, 478, 479, 502, 478, 503, 479, 504, 478, 504, 479, 478, 479, 505, 478, 479, 506, 478, 479, 507, 478, 479, 508, 478, 479, 509, 478, 479, 84, 478, 479, 511, 478, 512, 479, 513, 478, 513, 479, 478, 479, 514, 478, 479, 515, 478, 479, 516, 478, 479, 517, 84, 478, 479, 518, 478, 479, 519, 478, 479, 520, 478, 479, 521, 478, 479, 522, 478, 479, 523, 478, 479, 524, 478, 479, 509, 478, 479, 526, 478, 479, 527, 478, 479, 528, 478, 479, 529, 478, 479, 524, 478, 479, 531, 534, 478, 479, 532, 478, 479, 533, 533, 478, 479, 84, 494, 478, 479, 535, 478, 479, 536, 478, 479, 537, 478, 479, 538, 478, 479, 539, 478, 540, 479, 555, 478, 541, 479, 478, 542, 479, 478, 543, 479, 478, 479, 544, 478, 479, 545, 478, 479, 546, 478, 479, 547, 478, 479, 548, 478, 479, 549, 478, 479, 550, 478, 479, 551, 478, 552, 479, 478, 553, 479, 478, 479, 554, 478, 479, 524, 478, 479, 556, 478, 479, 557, 478, 479, 558, 478, 479, 559, 478, 479, 560, 478, 479, 561, 478, 479, 562, 478, 479, 563, 478, 479, 564, 478, 479, 553, 478, 479, 84, 566, 570, 478, 479, 567, 478, 568, 479, 569, 478, 569, 479, 478, 479, 494, 478, 479, 571, 478, 479, 572, 478, 479, 573, 478, 479, 574, 478, 479, 575, 478, 479, 576, 478, 479, 577, 478, 479, 578, 478, 479, 579, 478, 479, 580, 478, 479, 581, 478, 479, 582, 478, 552, 479, 553, 478, 479, 584, 478, 479, 585, 478, 479, 586, 524, 478, 479, 587, 478, 479, 588, 478, 479, 589, 478, 479, 590, 478, 479, 591, 478, 479, 592, 478, 479, 593, 478, 479, 594, 478, 479, 595, 478, 479, 509, 478, 479, 597, 478, 479, 494, 478, 479, 599, 478, 479, 600, 478, 479, 601, 478, 479, 569, 478, 603, 0, 604, 0, 605, 0, 606, 0, 258, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 19, 0, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 607; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/pt.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1315 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c" { cs = lexer_start; } #line 425 "ragel/i18n/pt.c.rl" #line 1322 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/pt.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/pt.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/pt.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/pt.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/pt.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/pt.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/pt.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/pt.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/pt.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/pt.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/pt.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/pt.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/pt.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/pt.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/pt.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/pt.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/pt.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/pt.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/pt.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/pt.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/pt.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/pt.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/pt.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/pt.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1612 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/pt.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1675 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c" } } } _out: {} } #line 426 "ragel/i18n/pt.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_pt() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Pt", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_el/0000755000004100000410000000000012244512574017371 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_el/extconf.rb0000644000004100000410000000035612244512574021370 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_el") have_library("c", "main") create_makefile("gherkin_lexer_el") gherkin-2.12.2/ext/gherkin_lexer_el/gherkin_lexer_el.c0000644000004100000410000016354712244512574023063 0ustar www-datawww-data #line 1 "ragel/i18n/el.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/el.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_el/gherkin_lexer_el.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 99, 106, 111, 115, 121, 124, 126, 132, 143, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 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, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 514, 517, 519, 521, 523, 525, 527, 529, 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, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 630, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 850, 851, 852, 853, 862, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1193, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1468, 1469 }; static const char _lexer_trans_keys[] = { -50, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -116, -111, -108, -102, -101, -96, -93, -92, -91, -49, -124, -50, -79, -50, -67, 32, 10, 13, 10, 13, -50, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -50, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -50, -69, -50, -69, -50, -84, -50, -49, -75, -50, -76, -50, -65, -50, -68, -50, -83, -50, -67, -50, -65, -49, -123, -123, -50, -67, -50, -79, -49, -124, -49, -116, -49, -124, -50, -73, -49, -124, -50, -79, 58, 10, 10, -50, 10, 32, 35, 37, 64, 9, 13, -108, -101, -96, -93, -91, 10, -49, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -79, -75, 10, -49, 10, -127, 10, -50, 10, -79, 10, -50, 10, -76, 10, -50, 10, -75, 10, -50, 10, -81, 10, -50, 10, -77, 10, -50, 10, -68, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -77, 10, -49, 10, -127, 10, -50, 10, -79, 10, -49, 10, -122, 10, -50, 10, -82, 10, 10, 32, -50, 10, -93, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -81, 10, -50, 10, -65, 10, -49, 10, -123, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -79, -65, 10, -49, 10, -128, 10, -49, 10, -116, 10, -50, 10, -78, 10, -50, 10, -79, 10, -50, 10, -72, 10, -49, 10, -127, 10, -50, 10, -65, 10, 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, -50, -79, -50, -71, -50, -75, -50, -71, -49, -124, -50, -65, -49, -123, -49, -127, -50, -77, -50, -81, -50, -79, -75, -49, -127, -50, -79, -50, -76, -50, -75, -50, -81, -50, -77, -50, -68, -50, -79, -49, -124, -50, -79, 58, 10, 10, -50, 10, 32, 35, 124, 9, 13, -108, -101, 10, -49, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -49, -127, -50, -71, -50, -77, -49, -127, -50, -79, -49, -122, -50, -82, 32, -50, -93, -50, -75, -50, -67, -50, -79, -49, -127, -50, -81, -50, -65, -49, -123, 58, 10, 10, -50, 10, 32, 35, 37, 42, 64, 9, 13, -116, -111, -108, -102, -101, -93, -92, 10, -49, 10, -124, 10, -50, 10, -79, 10, -50, 10, -67, 10, 10, 32, -50, 10, -69, 10, -50, 10, -69, 10, -50, 10, -84, 10, -50, -49, 10, -75, 10, -50, 10, -76, 10, -50, 10, -65, 10, -50, 10, -68, 10, -50, 10, -83, 10, -50, 10, -67, 10, -50, 10, -65, 10, -49, 10, -123, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -79, 10, -50, 10, -71, 10, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -65, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -75, 10, 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, -50, -75, -50, -67, -50, -84, -49, -127, -50, -71, -50, -79, -65, 58, 10, 10, -50, 10, 32, 35, 37, 42, 64, 9, 13, -116, -111, -108, -102, -101, -96, -93, -92, -91, 10, -49, 10, -124, 10, -50, 10, -79, 10, -50, 10, -67, 10, 10, 32, -50, 10, -69, 10, -50, 10, -69, 10, -50, 10, -84, 10, -50, -49, 10, -75, 10, -50, 10, -76, 10, -50, 10, -65, 10, -50, 10, -68, 10, -50, 10, -83, 10, -50, 10, -67, 10, -50, 10, -65, 10, -49, 10, -123, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -79, 10, -50, 10, -71, 10, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -75, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -77, 10, -49, 10, -127, 10, -50, 10, -79, 10, -49, 10, -122, 10, -50, 10, -82, 10, 10, 32, -50, 10, -93, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -81, 10, -50, 10, -65, 10, -49, 10, -123, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -65, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -75, 10, -49, 10, -128, 10, -49, 10, -116, 10, -50, 10, -78, 10, -50, 10, -79, 10, -50, 10, -72, 10, -49, 10, -127, 10, 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, -49, -116, -49, -124, -50, -75, -49, -128, -49, -116, -50, -78, -50, -79, -50, -72, -49, -127, -50, -65, 58, 10, 10, -50, 10, 32, 35, 37, 42, 64, 9, 13, -116, -111, -108, -102, -101, -96, -93, -92, 10, -49, 10, -124, 10, -50, 10, -79, 10, -50, 10, -67, 10, 10, 32, -50, 10, -69, 10, -50, 10, -69, 10, -50, 10, -84, 10, -50, -49, 10, -75, 10, -50, 10, -76, 10, -50, 10, -65, 10, -50, 10, -68, 10, -50, 10, -83, 10, -50, 10, -67, 10, -50, 10, -65, 10, -49, 10, -123, 10, -123, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -124, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -73, 10, -49, 10, -124, 10, -50, 10, -79, 10, 10, 58, -50, 10, -79, 10, -50, 10, -71, 10, -50, 10, -75, 10, -50, 10, -71, 10, -49, 10, -124, 10, -50, 10, -65, 10, -49, 10, -123, 10, -49, 10, -127, 10, -50, 10, -77, 10, -50, 10, -81, 10, -50, 10, -75, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -77, 10, -49, 10, -127, 10, -50, 10, -79, 10, -49, 10, -122, 10, -50, 10, -82, 10, 10, 32, -50, 10, -93, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -79, 10, -49, 10, -127, 10, -50, 10, -81, 10, -50, 10, -65, 10, -49, 10, -123, 10, -50, 10, -75, 10, -50, 10, -67, 10, -50, 10, -84, 10, -49, 10, -127, 10, -50, 10, -71, 10, -50, 10, -65, 10, -49, 10, -116, 10, -49, 10, -124, 10, -50, 10, -75, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 9, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 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, 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, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 7, 10, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 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, 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, 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, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 22, 24, 26, 28, 30, 32, 34, 36, 39, 42, 53, 55, 57, 60, 63, 68, 73, 78, 83, 87, 91, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 129, 136, 141, 145, 151, 155, 158, 164, 175, 177, 179, 181, 183, 185, 187, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 268, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 758, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 944, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1276, 1278, 1280, 1282, 1291, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489, 1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1737, 1739, 1741, 1743, 1745, 1747, 1749, 1751, 1753, 1755, 1757, 1759, 1761, 1763, 1765, 1767, 1769, 1771, 1773, 1775, 1777, 1779, 1781, 1790, 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 1839, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1984, 1987, 1990, 1993, 1996, 1999, 2002, 2005, 2008, 2011, 2014, 2017, 2020, 2023, 2026, 2029, 2032, 2035, 2038, 2041, 2044, 2047, 2050, 2053, 2056, 2059, 2062, 2065, 2068, 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092, 2095, 2098, 2101, 2104, 2107, 2110, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2161, 2164, 2167, 2170, 2173, 2176, 2179, 2182, 2185, 2188, 2191, 2194, 2197, 2199, 2201 }; static const short _lexer_trans_targs[] = { 2, 752, 12, 12, 13, 23, 25, 9, 39, 42, 12, 0, 3, 48, 54, 217, 221, 237, 434, 595, 601, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 12, 24, 11, 12, 24, 11, 2, 12, 12, 13, 23, 25, 9, 39, 42, 12, 0, 14, 0, 15, 0, 17, 16, 16, 17, 16, 16, 18, 18, 19, 18, 18, 18, 18, 19, 18, 18, 18, 18, 20, 18, 18, 18, 18, 21, 18, 18, 12, 22, 22, 0, 12, 22, 22, 0, 12, 24, 23, 12, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 754, 0, 0, 0, 0, 0, 40, 41, 12, 41, 41, 39, 40, 40, 12, 41, 39, 41, 0, 42, 43, 42, 0, 47, 46, 45, 43, 46, 44, 0, 45, 43, 44, 0, 45, 44, 47, 46, 45, 43, 46, 44, 2, 47, 47, 13, 23, 25, 9, 39, 42, 47, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 9, 0, 55, 70, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 9, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 90, 89, 90, 89, 91, 90, 90, 12, 203, 12, 90, 89, 92, 112, 128, 177, 189, 90, 89, 93, 90, 89, 94, 90, 89, 95, 90, 89, 96, 90, 89, 97, 90, 89, 98, 90, 89, 99, 90, 89, 100, 90, 89, 101, 90, 89, 102, 90, 89, 103, 90, 89, 104, 90, 89, 105, 90, 89, 106, 90, 89, 107, 90, 89, 108, 90, 89, 109, 90, 89, 110, 90, 89, 90, 111, 89, 2, 12, 12, 13, 23, 25, 9, 39, 42, 12, 0, 113, 90, 89, 114, 90, 89, 115, 90, 89, 116, 90, 89, 117, 90, 89, 118, 90, 89, 119, 90, 89, 120, 90, 89, 121, 90, 89, 122, 90, 89, 123, 90, 89, 124, 90, 89, 125, 90, 89, 126, 90, 89, 127, 90, 89, 108, 90, 89, 129, 90, 89, 130, 146, 90, 89, 131, 90, 89, 132, 90, 89, 133, 90, 89, 134, 90, 89, 135, 90, 89, 136, 90, 89, 137, 90, 89, 138, 90, 89, 139, 90, 89, 140, 90, 89, 141, 90, 89, 142, 90, 89, 143, 90, 89, 144, 90, 89, 145, 90, 89, 106, 90, 89, 147, 90, 89, 148, 90, 89, 149, 90, 89, 150, 90, 89, 151, 90, 89, 152, 90, 89, 153, 90, 89, 154, 90, 89, 155, 90, 89, 156, 90, 89, 157, 90, 89, 158, 90, 89, 159, 90, 89, 160, 90, 89, 90, 161, 89, 162, 90, 89, 163, 90, 89, 164, 90, 89, 165, 90, 89, 166, 90, 89, 167, 90, 89, 168, 90, 89, 169, 90, 89, 170, 90, 89, 171, 90, 89, 172, 90, 89, 173, 90, 89, 174, 90, 89, 175, 90, 89, 176, 90, 89, 110, 90, 89, 178, 90, 89, 179, 90, 89, 180, 90, 89, 181, 90, 89, 182, 90, 89, 183, 90, 89, 184, 90, 89, 185, 90, 89, 186, 90, 89, 187, 90, 89, 188, 90, 89, 110, 110, 90, 89, 190, 90, 89, 191, 90, 89, 192, 90, 89, 193, 90, 89, 194, 90, 89, 195, 90, 89, 196, 90, 89, 197, 90, 89, 198, 90, 89, 199, 90, 89, 200, 90, 89, 201, 90, 89, 202, 90, 89, 110, 90, 89, 90, 204, 89, 90, 205, 89, 90, 206, 89, 90, 207, 89, 90, 208, 89, 90, 209, 89, 90, 210, 89, 90, 211, 89, 90, 212, 89, 90, 213, 89, 90, 214, 89, 90, 215, 89, 90, 216, 89, 90, 12, 89, 218, 0, 219, 0, 220, 0, 9, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 85, 0, 238, 0, 239, 299, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 262, 261, 262, 261, 263, 262, 262, 12, 12, 262, 261, 264, 283, 262, 261, 265, 262, 261, 266, 262, 261, 267, 262, 261, 268, 262, 261, 269, 262, 261, 270, 262, 261, 271, 262, 261, 272, 262, 261, 273, 262, 261, 274, 262, 261, 275, 262, 261, 276, 262, 261, 277, 262, 261, 278, 262, 261, 279, 262, 261, 280, 262, 261, 281, 262, 261, 282, 262, 261, 262, 111, 261, 284, 262, 261, 285, 262, 261, 286, 262, 261, 287, 262, 261, 288, 262, 261, 289, 262, 261, 290, 262, 261, 291, 262, 261, 292, 262, 261, 293, 262, 261, 294, 262, 261, 295, 262, 261, 296, 262, 261, 297, 262, 261, 298, 262, 261, 280, 262, 261, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 333, 332, 333, 332, 334, 333, 333, 12, 420, 341, 12, 333, 332, 335, 342, 348, 382, 386, 402, 414, 333, 332, 336, 333, 332, 337, 333, 332, 338, 333, 332, 339, 333, 332, 340, 333, 332, 341, 333, 332, 333, 111, 332, 343, 333, 332, 344, 333, 332, 345, 333, 332, 346, 333, 332, 347, 333, 332, 341, 333, 332, 349, 364, 333, 332, 350, 333, 332, 351, 333, 332, 352, 333, 332, 353, 333, 332, 354, 333, 332, 355, 333, 332, 356, 333, 332, 357, 333, 332, 358, 333, 332, 359, 333, 332, 360, 333, 332, 361, 333, 332, 362, 333, 332, 363, 333, 332, 341, 333, 332, 365, 333, 332, 366, 333, 332, 367, 333, 332, 368, 333, 332, 369, 333, 332, 370, 333, 332, 371, 333, 332, 372, 333, 332, 373, 333, 332, 374, 333, 332, 375, 333, 332, 376, 333, 332, 377, 333, 332, 378, 333, 332, 379, 333, 332, 380, 333, 332, 381, 333, 332, 333, 111, 332, 383, 333, 332, 384, 333, 332, 385, 333, 332, 341, 333, 332, 387, 333, 332, 388, 333, 332, 389, 333, 332, 390, 333, 332, 391, 333, 332, 392, 333, 332, 393, 333, 332, 394, 333, 332, 395, 333, 332, 396, 333, 332, 397, 333, 332, 398, 333, 332, 399, 333, 332, 400, 333, 332, 401, 333, 332, 379, 333, 332, 403, 333, 332, 404, 333, 332, 405, 333, 332, 406, 333, 332, 407, 333, 332, 408, 333, 332, 409, 333, 332, 410, 333, 332, 411, 333, 332, 412, 333, 332, 413, 333, 332, 381, 333, 332, 415, 333, 332, 416, 333, 332, 417, 333, 332, 418, 333, 332, 419, 333, 332, 341, 333, 332, 333, 421, 332, 333, 422, 332, 333, 423, 332, 333, 424, 332, 333, 425, 332, 333, 426, 332, 333, 427, 332, 333, 428, 332, 333, 429, 332, 333, 430, 332, 333, 431, 332, 333, 432, 332, 333, 433, 332, 333, 12, 332, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, 259, 446, 0, 447, 0, 449, 448, 449, 448, 450, 449, 449, 12, 581, 457, 12, 449, 448, 451, 458, 464, 498, 502, 518, 551, 563, 569, 449, 448, 452, 449, 448, 453, 449, 448, 454, 449, 448, 455, 449, 448, 456, 449, 448, 457, 449, 448, 449, 111, 448, 459, 449, 448, 460, 449, 448, 461, 449, 448, 462, 449, 448, 463, 449, 448, 457, 449, 448, 465, 480, 449, 448, 466, 449, 448, 467, 449, 448, 468, 449, 448, 469, 449, 448, 470, 449, 448, 471, 449, 448, 472, 449, 448, 473, 449, 448, 474, 449, 448, 475, 449, 448, 476, 449, 448, 477, 449, 448, 478, 449, 448, 479, 449, 448, 457, 449, 448, 481, 449, 448, 482, 449, 448, 483, 449, 448, 484, 449, 448, 485, 449, 448, 486, 449, 448, 487, 449, 448, 488, 449, 448, 489, 449, 448, 490, 449, 448, 491, 449, 448, 492, 449, 448, 493, 449, 448, 494, 449, 448, 495, 449, 448, 496, 449, 448, 497, 449, 448, 449, 111, 448, 499, 449, 448, 500, 449, 448, 501, 449, 448, 457, 449, 448, 503, 449, 448, 504, 449, 448, 505, 449, 448, 506, 449, 448, 507, 449, 448, 508, 449, 448, 509, 449, 448, 510, 449, 448, 511, 449, 448, 512, 449, 448, 513, 449, 448, 514, 449, 448, 515, 449, 448, 516, 449, 448, 517, 449, 448, 495, 449, 448, 519, 449, 448, 520, 449, 448, 521, 449, 448, 522, 449, 448, 523, 449, 448, 524, 449, 448, 525, 449, 448, 526, 449, 448, 527, 449, 448, 528, 449, 448, 529, 449, 448, 530, 449, 448, 531, 449, 448, 532, 449, 448, 533, 449, 448, 534, 449, 448, 449, 535, 448, 536, 449, 448, 537, 449, 448, 538, 449, 448, 539, 449, 448, 540, 449, 448, 541, 449, 448, 542, 449, 448, 543, 449, 448, 544, 449, 448, 545, 449, 448, 546, 449, 448, 547, 449, 448, 548, 449, 448, 549, 449, 448, 550, 449, 448, 497, 449, 448, 552, 449, 448, 553, 449, 448, 554, 449, 448, 555, 449, 448, 556, 449, 448, 557, 449, 448, 558, 449, 448, 559, 449, 448, 560, 449, 448, 561, 449, 448, 562, 449, 448, 497, 449, 448, 564, 449, 448, 565, 449, 448, 566, 449, 448, 567, 449, 448, 568, 449, 448, 457, 449, 448, 570, 449, 448, 571, 449, 448, 572, 449, 448, 573, 449, 448, 574, 449, 448, 575, 449, 448, 576, 449, 448, 577, 449, 448, 578, 449, 448, 579, 449, 448, 580, 449, 448, 561, 449, 448, 449, 582, 448, 449, 583, 448, 449, 584, 448, 449, 585, 448, 449, 586, 448, 449, 587, 448, 449, 588, 448, 449, 589, 448, 449, 590, 448, 449, 591, 448, 449, 592, 448, 449, 593, 448, 449, 594, 448, 449, 12, 448, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 9, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 615, 0, 616, 0, 618, 617, 618, 617, 619, 618, 618, 12, 738, 626, 12, 618, 617, 620, 627, 633, 667, 671, 687, 720, 732, 618, 617, 621, 618, 617, 622, 618, 617, 623, 618, 617, 624, 618, 617, 625, 618, 617, 626, 618, 617, 618, 111, 617, 628, 618, 617, 629, 618, 617, 630, 618, 617, 631, 618, 617, 632, 618, 617, 626, 618, 617, 634, 649, 618, 617, 635, 618, 617, 636, 618, 617, 637, 618, 617, 638, 618, 617, 639, 618, 617, 640, 618, 617, 641, 618, 617, 642, 618, 617, 643, 618, 617, 644, 618, 617, 645, 618, 617, 646, 618, 617, 647, 618, 617, 648, 618, 617, 626, 618, 617, 650, 618, 617, 651, 618, 617, 652, 618, 617, 653, 618, 617, 654, 618, 617, 655, 618, 617, 656, 618, 617, 657, 618, 617, 658, 618, 617, 659, 618, 617, 660, 618, 617, 661, 618, 617, 662, 618, 617, 663, 618, 617, 664, 618, 617, 665, 618, 617, 666, 618, 617, 618, 111, 617, 668, 618, 617, 669, 618, 617, 670, 618, 617, 626, 618, 617, 672, 618, 617, 673, 618, 617, 674, 618, 617, 675, 618, 617, 676, 618, 617, 677, 618, 617, 678, 618, 617, 679, 618, 617, 680, 618, 617, 681, 618, 617, 682, 618, 617, 683, 618, 617, 684, 618, 617, 685, 618, 617, 686, 618, 617, 664, 618, 617, 688, 618, 617, 689, 618, 617, 690, 618, 617, 691, 618, 617, 692, 618, 617, 693, 618, 617, 694, 618, 617, 695, 618, 617, 696, 618, 617, 697, 618, 617, 698, 618, 617, 699, 618, 617, 700, 618, 617, 701, 618, 617, 702, 618, 617, 703, 618, 617, 618, 704, 617, 705, 618, 617, 706, 618, 617, 707, 618, 617, 708, 618, 617, 709, 618, 617, 710, 618, 617, 711, 618, 617, 712, 618, 617, 713, 618, 617, 714, 618, 617, 715, 618, 617, 716, 618, 617, 717, 618, 617, 718, 618, 617, 719, 618, 617, 666, 618, 617, 721, 618, 617, 722, 618, 617, 723, 618, 617, 724, 618, 617, 725, 618, 617, 726, 618, 617, 727, 618, 617, 728, 618, 617, 729, 618, 617, 730, 618, 617, 731, 618, 617, 666, 618, 617, 733, 618, 617, 734, 618, 617, 735, 618, 617, 736, 618, 617, 737, 618, 617, 626, 618, 617, 618, 739, 617, 618, 740, 617, 618, 741, 617, 618, 742, 617, 618, 743, 617, 618, 744, 617, 618, 745, 617, 618, 746, 617, 618, 747, 617, 618, 748, 617, 618, 749, 617, 618, 750, 617, 618, 751, 617, 618, 12, 617, 753, 0, 12, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 754; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/el.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1523 "ext/gherkin_lexer_el/gherkin_lexer_el.c" { cs = lexer_start; } #line 425 "ragel/i18n/el.c.rl" #line 1530 "ext/gherkin_lexer_el/gherkin_lexer_el.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/el.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/el.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/el.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/el.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/el.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/el.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/el.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/el.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/el.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/el.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/el.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/el.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/el.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/el.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/el.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/el.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/el.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/el.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/el.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/el.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/el.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/el.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/el.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/el.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1820 "ext/gherkin_lexer_el/gherkin_lexer_el.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/el.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1883 "ext/gherkin_lexer_el/gherkin_lexer_el.c" } } } _out: {} } #line 426 "ragel/i18n/el.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_el() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "El", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_cy_gb/0000755000004100000410000000000012244512574020054 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_cy_gb/extconf.rb0000644000004100000410000000036412244512574022052 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_cy_gb") have_library("c", "main") create_makefile("gherkin_lexer_cy_gb") gherkin-2.12.2/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c0000644000004100000410000010675012244512574024222 0ustar www-datawww-data #line 1 "ragel/i18n/cy_gb.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/cy_gb.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 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, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 353, 355, 357, 359, 361, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 493, 494, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 632, 636, 642, 645, 647, 653, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 79, 80, 83, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 79, 80, 83, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 110, 114, 114, 104, 101, 103, 101, 100, 105, 103, 32, 97, 119, 101, 100, 100, 58, 10, 10, 10, 32, 35, 37, 64, 65, 67, 69, 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, 114, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 79, 80, 83, 89, 124, 9, 13, 101, 102, 110, 100, 105, 114, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 79, 80, 83, 89, 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, 110, 114, 10, 114, 10, 104, 10, 101, 10, 103, 10, 101, 10, 100, 10, 105, 10, 103, 10, 32, 10, 97, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 110, 10, 100, 10, 114, 10, 121, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 65, 10, 109, 10, 108, 10, 105, 10, 110, 10, 101, 10, 108, 10, 108, 10, 111, 10, 108, 10, 110, 110, 103, 104, 114, 101, 105, 102, 102, 116, 105, 97, 117, 58, 10, 10, 10, 32, 35, 65, 124, 9, 13, 10, 114, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 110, 100, 114, 121, 99, 101, 110, 97, 114, 105, 111, 32, 58, 65, 109, 108, 105, 110, 101, 108, 108, 111, 108, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 79, 80, 83, 89, 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, 110, 114, 10, 114, 10, 104, 10, 101, 10, 103, 10, 101, 10, 100, 10, 105, 10, 103, 10, 32, 10, 97, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 110, 10, 100, 10, 114, 10, 121, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 110, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 79, 80, 83, 89, 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, 110, 114, 10, 114, 10, 104, 10, 101, 10, 103, 10, 101, 10, 100, 10, 105, 10, 103, 10, 32, 10, 97, 10, 119, 10, 101, 10, 100, 10, 100, 10, 58, 10, 101, 10, 102, 10, 110, 10, 100, 10, 105, 10, 114, 10, 110, 10, 100, 10, 114, 10, 121, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 65, 10, 109, 10, 108, 10, 105, 10, 110, 10, 101, 10, 108, 10, 108, 10, 111, 10, 108, 10, 110, 110, 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, 67, 69, 79, 80, 83, 89, 124, 9, 13, 10, 101, 10, 102, 10, 110, 10, 100, 10, 105, 10, 114, 10, 110, 10, 103, 10, 104, 10, 114, 10, 101, 10, 105, 10, 102, 10, 102, 10, 116, 10, 105, 10, 97, 10, 117, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 65, 10, 109, 10, 108, 10, 105, 10, 110, 10, 101, 10, 108, 10, 108, 10, 111, 10, 108, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 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, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 4, 3, 2, 4, 15, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 235, 238, 241, 244, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 494, 497, 500, 503, 506, 509, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 709, 711, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 910, 914, 920, 924, 927, 933, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 338, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 32, 38, 48, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 31, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 55, 54, 55, 54, 55, 55, 4, 56, 4, 70, 302, 308, 320, 55, 54, 55, 57, 54, 55, 58, 54, 55, 59, 54, 55, 60, 54, 55, 61, 54, 55, 62, 54, 55, 63, 54, 55, 64, 54, 55, 65, 54, 55, 66, 54, 55, 67, 54, 55, 68, 54, 55, 69, 54, 55, 4, 54, 55, 71, 54, 55, 72, 54, 55, 73, 54, 55, 74, 54, 55, 75, 54, 55, 76, 54, 4, 4, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 4, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 86, 85, 86, 85, 86, 86, 4, 87, 101, 4, 102, 118, 120, 122, 140, 86, 85, 86, 88, 85, 86, 89, 85, 86, 90, 85, 86, 91, 85, 86, 92, 85, 86, 93, 85, 86, 94, 85, 86, 95, 85, 86, 96, 85, 86, 97, 85, 86, 98, 85, 86, 99, 85, 86, 100, 85, 86, 4, 85, 86, 76, 85, 86, 76, 103, 113, 85, 86, 104, 85, 86, 105, 85, 86, 106, 85, 86, 107, 85, 86, 108, 85, 86, 109, 85, 86, 110, 85, 86, 111, 85, 86, 112, 85, 86, 101, 85, 86, 114, 85, 86, 115, 85, 86, 116, 85, 86, 117, 85, 86, 76, 85, 86, 119, 85, 86, 101, 85, 86, 121, 85, 86, 119, 85, 86, 123, 85, 86, 124, 85, 86, 125, 85, 86, 126, 85, 86, 127, 85, 86, 128, 85, 86, 129, 85, 86, 130, 76, 85, 86, 131, 85, 86, 132, 85, 86, 133, 85, 86, 134, 85, 86, 135, 85, 86, 136, 85, 86, 137, 85, 86, 138, 85, 86, 139, 85, 86, 117, 85, 86, 112, 85, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 156, 155, 156, 155, 156, 156, 4, 157, 4, 156, 155, 156, 158, 155, 156, 159, 155, 156, 160, 155, 156, 161, 155, 156, 162, 155, 156, 76, 155, 164, 0, 31, 0, 166, 0, 164, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 232, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 188, 187, 188, 187, 188, 188, 4, 189, 203, 4, 204, 220, 222, 224, 231, 188, 187, 188, 190, 187, 188, 191, 187, 188, 192, 187, 188, 193, 187, 188, 194, 187, 188, 195, 187, 188, 196, 187, 188, 197, 187, 188, 198, 187, 188, 199, 187, 188, 200, 187, 188, 201, 187, 188, 202, 187, 188, 4, 187, 188, 76, 187, 188, 76, 205, 215, 187, 188, 206, 187, 188, 207, 187, 188, 208, 187, 188, 209, 187, 188, 210, 187, 188, 211, 187, 188, 212, 187, 188, 213, 187, 188, 214, 187, 188, 203, 187, 188, 216, 187, 188, 217, 187, 188, 218, 187, 188, 219, 187, 188, 76, 187, 188, 221, 187, 188, 203, 187, 188, 223, 187, 188, 221, 187, 188, 225, 187, 188, 226, 187, 188, 227, 187, 188, 228, 187, 188, 229, 187, 188, 230, 187, 188, 219, 187, 188, 214, 187, 234, 233, 234, 233, 234, 234, 4, 235, 249, 4, 250, 266, 272, 274, 276, 294, 234, 233, 234, 236, 233, 234, 237, 233, 234, 238, 233, 234, 239, 233, 234, 240, 233, 234, 241, 233, 234, 242, 233, 234, 243, 233, 234, 244, 233, 234, 245, 233, 234, 246, 233, 234, 247, 233, 234, 248, 233, 234, 4, 233, 234, 76, 233, 234, 76, 251, 261, 233, 234, 252, 233, 234, 253, 233, 234, 254, 233, 234, 255, 233, 234, 256, 233, 234, 257, 233, 234, 258, 233, 234, 259, 233, 234, 260, 233, 234, 249, 233, 234, 262, 233, 234, 263, 233, 234, 264, 233, 234, 265, 233, 234, 76, 233, 234, 267, 233, 234, 268, 233, 234, 269, 233, 234, 270, 233, 234, 271, 233, 234, 265, 233, 234, 273, 233, 234, 249, 233, 234, 275, 233, 234, 273, 233, 234, 277, 233, 234, 278, 233, 234, 279, 233, 234, 280, 233, 234, 281, 233, 234, 282, 233, 234, 283, 233, 234, 284, 76, 233, 234, 285, 233, 234, 286, 233, 234, 287, 233, 234, 288, 233, 234, 289, 233, 234, 290, 233, 234, 291, 233, 234, 292, 233, 234, 293, 233, 234, 265, 233, 234, 260, 233, 47, 0, 296, 297, 296, 0, 301, 300, 299, 297, 300, 298, 0, 299, 297, 298, 0, 299, 298, 301, 300, 299, 297, 300, 298, 301, 301, 5, 15, 17, 31, 34, 37, 77, 141, 163, 165, 167, 295, 296, 301, 0, 55, 303, 54, 55, 304, 54, 55, 305, 54, 55, 306, 54, 55, 307, 54, 55, 75, 54, 55, 309, 54, 55, 310, 54, 55, 311, 54, 55, 312, 54, 55, 313, 54, 55, 314, 54, 55, 315, 54, 55, 316, 54, 55, 317, 54, 55, 318, 54, 55, 319, 54, 55, 75, 54, 55, 321, 54, 55, 322, 54, 55, 323, 54, 55, 324, 54, 55, 325, 54, 55, 326, 54, 55, 327, 54, 55, 328, 76, 54, 55, 329, 54, 55, 330, 54, 55, 331, 54, 55, 332, 54, 55, 333, 54, 55, 334, 54, 55, 335, 54, 55, 336, 54, 55, 337, 54, 55, 75, 54, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 15, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 19, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 17, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 338; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/cy_gb.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 886 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c" { cs = lexer_start; } #line 425 "ragel/i18n/cy_gb.c.rl" #line 893 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/cy_gb.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/cy_gb.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/cy_gb.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/cy_gb.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/cy_gb.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/cy_gb.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/cy_gb.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/cy_gb.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/cy_gb.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/cy_gb.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/cy_gb.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/cy_gb.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/cy_gb.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/cy_gb.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/cy_gb.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/cy_gb.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/cy_gb.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/cy_gb.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/cy_gb.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/cy_gb.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/cy_gb.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/cy_gb.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/cy_gb.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/cy_gb.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1183 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/cy_gb.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1246 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c" } } } _out: {} } #line 426 "ragel/i18n/cy_gb.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_cy_gb() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Cy_gb", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_it/0000755000004100000410000000000012244512574017405 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_it/extconf.rb0000644000004100000410000000035612244512574021404 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_it") have_library("c", "main") create_makefile("gherkin_lexer_it") gherkin-2.12.2/ext/gherkin_lexer_it/gherkin_lexer_it.c0000644000004100000410000011274612244512574023106 0ustar www-datawww-data #line 1 "ragel/i18n/it.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/it.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_it/gherkin_lexer_it.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 190, 191, 192, 196, 198, 199, 200, 201, 202, 203, 204, 205, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 382, 383, 384, 385, 386, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 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, 473, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 690, 696, 699, 701, 707, 725, 727, 729, 731, 733, 735, 737, 739, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 108, 111, 114, 97, 111, 110, 116, 101, 115, 116, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 77, 81, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, 97, 116, 97, 101, 105, 111, 32, 115, 101, 109, 112, 105, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 58, 117, 110, 122, 105, 111, 110, 97, 108, 105, 116, -61, -96, 58, 10, 10, 10, 32, 35, 37, 64, 67, 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, 111, 10, 110, 10, 116, 10, 101, 10, 115, 10, 116, 10, 111, 10, 58, 10, 115, 10, 101, 10, 109, 10, 112, 10, 105, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 99, 10, 101, 104, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 108, 10, 111, 10, 32, 10, 115, 10, 99, 10, 101, 117, 97, 110, 100, 111, 99, 101, 104, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 77, 81, 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, 32, 10, 108, 10, 108, 10, 111, 10, 114, 10, 97, 10, 111, 10, 110, 10, 116, 10, 101, 10, 115, 10, 116, 10, 111, 10, 58, 10, 97, 10, 116, 10, 97, 101, 105, 111, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 117, 10, 97, 10, 110, 10, 100, 10, 111, 10, 99, 10, 101, 104, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 108, 10, 111, 10, 32, 10, 115, 10, 99, 10, 101, 101, 109, 97, 32, 100, 101, 108, 108, 111, 32, 115, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 77, 81, 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, 32, 10, 108, 10, 108, 10, 111, 10, 114, 10, 97, 10, 97, 10, 116, 10, 97, 101, 105, 111, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 58, 10, 117, 10, 97, 10, 110, 10, 100, 10, 111, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 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, 67, 68, 69, 70, 77, 81, 83, 124, 9, 13, 10, 108, 10, 108, 10, 111, 10, 114, 10, 97, 10, 97, 10, 116, 10, 97, 101, 105, 111, 10, 117, 10, 110, 10, 122, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -96, 10, 10, 58, 10, 117, 10, 97, 10, 110, 10, 100, 10, 111, 10, 99, 10, 101, 104, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 108, 10, 111, 10, 32, 10, 115, 10, 99, 10, 101, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 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, 4, 2, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 5, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 5, 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, 4, 16, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 182, 185, 188, 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 245, 247, 249, 254, 257, 259, 261, 263, 265, 267, 269, 271, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 535, 537, 539, 541, 543, 545, 548, 550, 552, 554, 556, 558, 560, 562, 564, 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, 667, 670, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 993, 999, 1003, 1006, 1012, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 373, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 39, 0, 40, 0, 41, 0, 31, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 52, 51, 52, 51, 52, 52, 4, 53, 67, 4, 327, 332, 67, 335, 331, 348, 353, 52, 51, 52, 54, 51, 52, 55, 51, 52, 56, 51, 52, 57, 51, 52, 58, 51, 52, 59, 51, 52, 60, 51, 52, 61, 51, 52, 62, 51, 52, 63, 51, 52, 64, 51, 52, 65, 51, 52, 66, 51, 52, 4, 51, 52, 68, 51, 4, 4, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 4, 0, 70, 0, 71, 0, 31, 31, 31, 31, 0, 32, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 80, 79, 80, 79, 80, 80, 4, 81, 4, 80, 79, 80, 82, 79, 80, 83, 79, 80, 84, 79, 80, 85, 79, 80, 86, 79, 80, 87, 79, 80, 88, 79, 80, 89, 79, 80, 90, 79, 80, 91, 79, 92, 80, 79, 93, 80, 79, 80, 68, 79, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 109, 108, 109, 108, 109, 109, 4, 110, 4, 124, 132, 137, 149, 109, 108, 109, 111, 108, 109, 112, 108, 109, 113, 108, 109, 114, 108, 109, 115, 108, 109, 116, 108, 109, 117, 108, 109, 118, 108, 109, 119, 108, 109, 120, 108, 109, 121, 108, 109, 122, 108, 109, 123, 108, 109, 4, 108, 109, 125, 108, 109, 126, 108, 109, 127, 108, 109, 128, 108, 109, 129, 108, 109, 130, 108, 109, 131, 108, 109, 68, 108, 109, 133, 108, 109, 134, 108, 109, 135, 108, 109, 136, 108, 109, 131, 108, 109, 138, 108, 109, 139, 108, 109, 140, 108, 109, 141, 108, 109, 142, 108, 109, 143, 108, 109, 144, 108, 109, 145, 108, 109, 146, 108, 109, 147, 108, 148, 109, 108, 131, 109, 108, 109, 150, 108, 109, 151, 155, 108, 109, 152, 108, 109, 153, 108, 109, 154, 108, 109, 130, 108, 109, 156, 108, 109, 157, 108, 109, 158, 108, 109, 159, 108, 109, 160, 108, 109, 161, 108, 109, 162, 108, 109, 163, 108, 109, 164, 108, 109, 165, 108, 109, 166, 108, 109, 167, 108, 109, 151, 108, 169, 0, 170, 0, 171, 0, 172, 0, 31, 0, 174, 0, 175, 251, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 183, 182, 183, 182, 183, 183, 4, 184, 198, 4, 199, 204, 212, 198, 215, 203, 227, 232, 183, 182, 183, 185, 182, 183, 186, 182, 183, 187, 182, 183, 188, 182, 183, 189, 182, 183, 190, 182, 183, 191, 182, 183, 192, 182, 183, 193, 182, 183, 194, 182, 183, 195, 182, 183, 196, 182, 183, 197, 182, 183, 4, 182, 183, 68, 182, 183, 200, 182, 183, 201, 182, 183, 202, 182, 183, 203, 182, 183, 198, 182, 183, 205, 182, 183, 206, 182, 183, 207, 182, 183, 208, 182, 183, 209, 182, 183, 210, 182, 183, 211, 182, 183, 68, 182, 183, 213, 182, 183, 214, 182, 183, 198, 198, 198, 198, 182, 183, 216, 182, 183, 217, 182, 183, 218, 182, 183, 219, 182, 183, 220, 182, 183, 221, 182, 183, 222, 182, 183, 223, 182, 183, 224, 182, 183, 225, 182, 226, 183, 182, 211, 183, 182, 183, 228, 182, 183, 229, 182, 183, 230, 182, 183, 231, 182, 183, 198, 182, 183, 233, 182, 183, 234, 238, 182, 183, 235, 182, 183, 236, 182, 183, 237, 182, 183, 210, 182, 183, 239, 182, 183, 240, 182, 183, 241, 182, 183, 242, 182, 183, 243, 182, 183, 244, 182, 183, 245, 182, 183, 246, 182, 183, 247, 182, 183, 248, 182, 183, 249, 182, 183, 250, 182, 183, 234, 182, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 272, 271, 272, 271, 272, 272, 4, 273, 287, 4, 288, 293, 287, 296, 292, 309, 314, 272, 271, 272, 274, 271, 272, 275, 271, 272, 276, 271, 272, 277, 271, 272, 278, 271, 272, 279, 271, 272, 280, 271, 272, 281, 271, 272, 282, 271, 272, 283, 271, 272, 284, 271, 272, 285, 271, 272, 286, 271, 272, 4, 271, 272, 68, 271, 272, 289, 271, 272, 290, 271, 272, 291, 271, 272, 292, 271, 272, 287, 271, 272, 294, 271, 272, 295, 271, 272, 287, 287, 287, 287, 271, 272, 297, 271, 272, 298, 271, 272, 299, 271, 272, 300, 271, 272, 301, 271, 272, 302, 271, 272, 303, 271, 272, 304, 271, 272, 305, 271, 272, 306, 271, 307, 272, 271, 308, 272, 271, 272, 68, 271, 272, 310, 271, 272, 311, 271, 272, 312, 271, 272, 313, 271, 272, 287, 271, 272, 315, 271, 272, 316, 271, 272, 317, 271, 272, 318, 271, 272, 319, 271, 272, 320, 271, 272, 308, 271, 321, 322, 321, 0, 326, 325, 324, 322, 325, 323, 0, 324, 322, 323, 0, 324, 323, 326, 325, 324, 322, 325, 323, 326, 326, 5, 15, 17, 31, 34, 37, 42, 69, 72, 94, 41, 168, 173, 321, 326, 0, 52, 328, 51, 52, 329, 51, 52, 330, 51, 52, 331, 51, 52, 67, 51, 52, 333, 51, 52, 334, 51, 52, 67, 67, 67, 67, 51, 52, 336, 51, 52, 337, 51, 52, 338, 51, 52, 339, 51, 52, 340, 51, 52, 341, 51, 52, 342, 51, 52, 343, 51, 52, 344, 51, 52, 345, 51, 346, 52, 51, 347, 52, 51, 52, 68, 51, 52, 349, 51, 52, 350, 51, 52, 351, 51, 52, 352, 51, 52, 67, 51, 52, 354, 51, 52, 355, 360, 51, 52, 356, 51, 52, 357, 51, 52, 358, 51, 52, 359, 51, 52, 347, 51, 52, 361, 51, 52, 362, 51, 52, 363, 51, 52, 364, 51, 52, 365, 51, 52, 366, 51, 52, 367, 51, 52, 368, 51, 52, 369, 51, 52, 370, 51, 52, 371, 51, 52, 372, 51, 52, 355, 51, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 0, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 373; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/it.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 944 "ext/gherkin_lexer_it/gherkin_lexer_it.c" { cs = lexer_start; } #line 425 "ragel/i18n/it.c.rl" #line 951 "ext/gherkin_lexer_it/gherkin_lexer_it.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/it.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/it.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/it.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/it.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/it.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/it.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/it.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/it.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/it.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/it.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/it.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/it.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/it.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/it.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/it.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/it.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/it.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/it.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/it.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/it.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/it.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/it.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/it.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/it.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1241 "ext/gherkin_lexer_it/gherkin_lexer_it.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/it.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1304 "ext/gherkin_lexer_it/gherkin_lexer_it.c" } } } _out: {} } #line 426 "ragel/i18n/it.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_it() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "It", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_bm/0000755000004100000410000000000012244512574017367 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_bm/extconf.rb0000644000004100000410000000035612244512574021366 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_bm") have_library("c", "main") create_makefile("gherkin_lexer_bm") gherkin-2.12.2/ext/gherkin_lexer_bm/gherkin_lexer_bm.c0000644000004100000410000012665412244512574023055 0ustar www-datawww-data #line 1 "ragel/i18n/bm.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/bm.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 21, 22, 23, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 111, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 140, 142, 144, 146, 148, 150, 152, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 354, 355, 357, 358, 359, 360, 361, 362, 363, 364, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 543, 545, 547, 549, 552, 554, 557, 559, 561, 563, 565, 567, 569, 572, 574, 576, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 690, 692, 694, 696, 698, 700, 702, 704, 706, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 750, 752, 754, 756, 759, 761, 764, 766, 768, 770, 772, 774, 776, 779, 781, 783, 785, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 924, 926, 928, 930, 932, 934, 936, 938, 940, 943, 945, 947, 949, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 962, 963, 965, 966, 967, 968, 969, 970, 971, 973, 974, 975, 976, 977, 978, 979, 981, 982, 983, 984, 985, 986, 990, 996, 999, 1001, 1007, 1027 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 112, 97, 98, 105, 108, 97, 97, 103, 105, 111, 110, 116, 111, 104, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, 97, 105, 110, 98, 101, 114, 117, 110, 103, 115, 105, 58, 10, 10, 10, 32, 35, 37, 64, 67, 70, 75, 76, 77, 83, 84, 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, 111, 10, 110, 10, 116, 10, 111, 10, 104, 10, 58, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 101, 10, 97, 10, 100, 10, 97, 10, 97, 10, 110, 10, 97, 10, 116, 10, 97, 10, 114, 10, 32, 10, 66, 10, 101, 10, 108, 10, 97, 10, 107, 10, 97, 10, 110, 10, 103, 10, 101, 10, 110, 10, 103, 10, 103, 10, 97, 10, 114, 10, 105, 10, 115, 10, 107, 10, 97, 10, 110, 10, 32, 10, 83, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 105, 10, 116, 10, 117, 10, 97, 10, 101, 10, 109, 10, 112, 10, 108, 10, 97, 10, 116, 10, 101, 10, 32, 10, 75, 83, 101, 97, 109, 100, 97, 97, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 75, 76, 77, 83, 84, 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, 112, 10, 97, 10, 98, 10, 105, 10, 108, 10, 97, 10, 97, 10, 103, 10, 105, 10, 97, 105, 10, 110, 10, 98, 10, 101, 10, 114, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 101, 10, 97, 109, 10, 100, 10, 97, 10, 97, 10, 110, 10, 117, 10, 100, 10, 105, 10, 97, 10, 97, 10, 116, 10, 97, 10, 114, 10, 32, 10, 66, 10, 101, 10, 108, 10, 97, 10, 107, 10, 97, 10, 110, 10, 103, 10, 97, 101, 10, 107, 10, 110, 10, 103, 10, 103, 10, 97, 10, 114, 10, 105, 10, 115, 10, 107, 10, 97, 10, 110, 10, 32, 10, 83, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 105, 10, 116, 10, 117, 10, 97, 10, 97, 101, 10, 112, 10, 109, 116, 10, 112, 10, 108, 10, 97, 10, 116, 10, 101, 10, 32, 10, 75, 83, 10, 101, 10, 97, 10, 97, 117, 100, 105, 97, 97, 116, 97, 114, 32, 66, 101, 108, 97, 107, 97, 110, 103, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 75, 77, 83, 84, 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, 112, 10, 97, 10, 98, 10, 105, 10, 108, 10, 97, 10, 97, 10, 103, 10, 105, 10, 97, 105, 10, 110, 10, 98, 10, 101, 10, 114, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 101, 10, 97, 109, 10, 100, 10, 97, 10, 97, 10, 110, 10, 117, 10, 100, 10, 105, 10, 97, 10, 97, 101, 10, 107, 10, 110, 10, 103, 10, 103, 10, 97, 10, 114, 10, 105, 10, 115, 10, 107, 10, 97, 10, 110, 10, 32, 10, 83, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 105, 10, 116, 10, 117, 10, 97, 10, 97, 101, 10, 112, 10, 109, 116, 10, 112, 10, 108, 10, 97, 10, 116, 10, 101, 10, 32, 10, 75, 83, 10, 101, 10, 97, 10, 97, 97, 101, 107, 110, 103, 103, 97, 114, 105, 115, 107, 97, 110, 32, 83, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 75, 77, 83, 84, 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, 112, 10, 97, 10, 98, 10, 105, 10, 108, 10, 97, 10, 97, 10, 103, 10, 105, 10, 97, 105, 10, 110, 10, 98, 10, 101, 10, 114, 10, 117, 10, 110, 10, 103, 10, 115, 10, 105, 10, 58, 10, 101, 10, 97, 109, 10, 100, 10, 97, 10, 97, 10, 110, 10, 117, 10, 100, 10, 105, 10, 97, 10, 97, 10, 107, 10, 101, 105, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 116, 10, 117, 10, 97, 10, 97, 101, 10, 112, 10, 116, 10, 97, 101, 105, 110, 97, 114, 105, 111, 116, 117, 97, 105, 97, 101, 112, 109, 116, 112, 108, 97, 116, 101, 32, 75, 83, 101, 97, 100, 97, 97, 110, 101, 105, 116, 117, 97, 105, 97, 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, 67, 68, 70, 75, 76, 77, 83, 84, 124, 9, 13, 0 }; static const char _lexer_single_lengths[] = { 0, 19, 1, 1, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 18, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 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, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 15, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 18, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 21, 23, 25, 45, 47, 49, 52, 55, 60, 65, 70, 75, 79, 83, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 121, 124, 129, 136, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 182, 185, 188, 191, 194, 197, 200, 220, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 491, 493, 496, 498, 500, 502, 504, 506, 508, 510, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 768, 771, 774, 777, 781, 784, 788, 791, 794, 797, 800, 803, 806, 810, 813, 816, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1077, 1080, 1083, 1086, 1090, 1093, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1119, 1122, 1125, 1128, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1366, 1369, 1372, 1375, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1399, 1401, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1434, 1436, 1438, 1440, 1442, 1444, 1448, 1454, 1458, 1461, 1467, 1487 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 482, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 31, 0, 44, 0, 45, 0, 31, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 54, 53, 54, 53, 54, 54, 4, 55, 4, 54, 53, 54, 56, 53, 54, 57, 53, 54, 58, 53, 54, 59, 53, 54, 60, 53, 54, 61, 53, 4, 4, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 4, 0, 63, 64, 0, 31, 0, 65, 0, 66, 0, 45, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 75, 74, 75, 74, 75, 75, 4, 76, 4, 90, 96, 101, 107, 120, 139, 143, 75, 74, 75, 77, 74, 75, 78, 74, 75, 79, 74, 75, 80, 74, 75, 81, 74, 75, 82, 74, 75, 83, 74, 75, 84, 74, 75, 85, 74, 75, 86, 74, 75, 87, 74, 75, 88, 74, 75, 89, 74, 75, 4, 74, 75, 91, 74, 75, 92, 74, 75, 93, 74, 75, 94, 74, 75, 95, 74, 75, 61, 74, 75, 97, 74, 75, 98, 74, 75, 99, 74, 75, 100, 74, 75, 95, 74, 75, 102, 74, 75, 103, 74, 75, 104, 74, 75, 105, 74, 75, 106, 74, 75, 95, 74, 75, 108, 74, 75, 109, 74, 75, 110, 74, 75, 111, 74, 75, 112, 74, 75, 113, 74, 75, 114, 74, 75, 115, 74, 75, 116, 74, 75, 117, 74, 75, 118, 74, 75, 119, 74, 75, 95, 74, 75, 121, 74, 75, 122, 74, 75, 123, 74, 75, 124, 74, 75, 125, 74, 75, 126, 74, 75, 127, 74, 75, 128, 74, 75, 129, 74, 75, 130, 74, 75, 131, 74, 75, 132, 74, 75, 133, 74, 75, 134, 74, 75, 135, 74, 75, 136, 74, 75, 137, 74, 75, 138, 74, 75, 95, 74, 75, 134, 140, 74, 75, 141, 74, 75, 142, 74, 75, 100, 74, 75, 144, 74, 75, 145, 74, 75, 146, 74, 75, 147, 74, 75, 148, 74, 75, 149, 74, 75, 150, 74, 75, 151, 74, 75, 101, 139, 74, 153, 0, 154, 257, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 161, 160, 161, 160, 161, 161, 4, 162, 176, 4, 177, 183, 186, 191, 197, 207, 220, 240, 244, 161, 160, 161, 163, 160, 161, 164, 160, 161, 165, 160, 161, 166, 160, 161, 167, 160, 161, 168, 160, 161, 169, 160, 161, 170, 160, 161, 171, 160, 161, 172, 160, 161, 173, 160, 161, 174, 160, 161, 175, 160, 161, 4, 160, 161, 61, 160, 161, 178, 160, 161, 179, 160, 161, 180, 160, 161, 181, 160, 161, 182, 160, 161, 176, 160, 161, 184, 160, 161, 185, 160, 161, 176, 160, 161, 187, 188, 160, 161, 176, 160, 161, 189, 160, 161, 190, 160, 161, 185, 160, 161, 192, 160, 161, 193, 160, 161, 194, 160, 161, 195, 160, 161, 196, 160, 161, 61, 160, 161, 198, 160, 161, 199, 203, 160, 161, 200, 160, 161, 201, 160, 161, 202, 160, 161, 196, 160, 161, 204, 160, 161, 205, 160, 161, 206, 160, 161, 187, 160, 161, 208, 160, 161, 209, 160, 161, 210, 160, 161, 211, 160, 161, 212, 160, 161, 213, 160, 161, 214, 160, 161, 215, 160, 161, 216, 160, 161, 217, 160, 161, 218, 160, 161, 219, 160, 161, 196, 160, 161, 221, 222, 160, 161, 182, 160, 161, 223, 160, 161, 224, 160, 161, 225, 160, 161, 226, 160, 161, 227, 160, 161, 228, 160, 161, 229, 160, 161, 230, 160, 161, 231, 160, 161, 232, 160, 161, 233, 160, 161, 234, 160, 161, 235, 160, 161, 236, 160, 161, 237, 160, 161, 238, 160, 161, 239, 160, 161, 196, 160, 161, 235, 241, 160, 161, 242, 160, 161, 243, 160, 161, 195, 160, 161, 245, 246, 160, 161, 185, 160, 161, 247, 256, 160, 161, 248, 160, 161, 249, 160, 161, 250, 160, 161, 251, 160, 161, 252, 160, 161, 253, 160, 161, 254, 240, 160, 161, 255, 160, 161, 199, 160, 161, 245, 160, 258, 0, 259, 0, 260, 0, 63, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 277, 276, 277, 276, 277, 277, 4, 278, 292, 4, 293, 299, 302, 307, 313, 323, 343, 347, 277, 276, 277, 279, 276, 277, 280, 276, 277, 281, 276, 277, 282, 276, 277, 283, 276, 277, 284, 276, 277, 285, 276, 277, 286, 276, 277, 287, 276, 277, 288, 276, 277, 289, 276, 277, 290, 276, 277, 291, 276, 277, 4, 276, 277, 61, 276, 277, 294, 276, 277, 295, 276, 277, 296, 276, 277, 297, 276, 277, 298, 276, 277, 292, 276, 277, 300, 276, 277, 301, 276, 277, 292, 276, 277, 303, 304, 276, 277, 292, 276, 277, 305, 276, 277, 306, 276, 277, 301, 276, 277, 308, 276, 277, 309, 276, 277, 310, 276, 277, 311, 276, 277, 312, 276, 277, 61, 276, 277, 314, 276, 277, 315, 319, 276, 277, 316, 276, 277, 317, 276, 277, 318, 276, 277, 312, 276, 277, 320, 276, 277, 321, 276, 277, 322, 276, 277, 303, 276, 277, 324, 325, 276, 277, 298, 276, 277, 326, 276, 277, 327, 276, 277, 328, 276, 277, 329, 276, 277, 330, 276, 277, 331, 276, 277, 332, 276, 277, 333, 276, 277, 334, 276, 277, 335, 276, 277, 336, 276, 277, 337, 276, 277, 338, 276, 277, 339, 276, 277, 340, 276, 277, 341, 276, 277, 342, 276, 277, 312, 276, 277, 338, 344, 276, 277, 345, 276, 277, 346, 276, 277, 311, 276, 277, 348, 349, 276, 277, 301, 276, 277, 350, 359, 276, 277, 351, 276, 277, 352, 276, 277, 353, 276, 277, 354, 276, 277, 355, 276, 277, 356, 276, 277, 357, 343, 276, 277, 358, 276, 277, 315, 276, 277, 348, 276, 361, 362, 0, 42, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 383, 382, 383, 382, 383, 383, 4, 384, 398, 4, 399, 405, 408, 413, 419, 429, 431, 440, 383, 382, 383, 385, 382, 383, 386, 382, 383, 387, 382, 383, 388, 382, 383, 389, 382, 383, 390, 382, 383, 391, 382, 383, 392, 382, 383, 393, 382, 383, 394, 382, 383, 395, 382, 383, 396, 382, 383, 397, 382, 383, 4, 382, 383, 61, 382, 383, 400, 382, 383, 401, 382, 383, 402, 382, 383, 403, 382, 383, 404, 382, 383, 398, 382, 383, 406, 382, 383, 407, 382, 383, 398, 382, 383, 409, 410, 382, 383, 398, 382, 383, 411, 382, 383, 412, 382, 383, 407, 382, 383, 414, 382, 383, 415, 382, 383, 416, 382, 383, 417, 382, 383, 418, 382, 383, 61, 382, 383, 420, 382, 383, 421, 425, 382, 383, 422, 382, 383, 423, 382, 383, 424, 382, 383, 418, 382, 383, 426, 382, 383, 427, 382, 383, 428, 382, 383, 409, 382, 383, 430, 382, 383, 404, 382, 383, 432, 437, 382, 383, 433, 382, 383, 434, 382, 383, 435, 382, 383, 436, 382, 383, 418, 382, 383, 438, 382, 383, 439, 382, 383, 417, 382, 383, 441, 442, 382, 383, 407, 382, 383, 443, 382, 383, 441, 382, 445, 450, 0, 446, 0, 447, 0, 448, 0, 449, 0, 158, 0, 451, 0, 452, 0, 453, 0, 158, 0, 455, 456, 0, 45, 0, 457, 475, 0, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 463, 0, 464, 470, 0, 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 380, 0, 375, 471, 0, 472, 0, 473, 0, 474, 0, 380, 0, 455, 0, 476, 477, 476, 0, 481, 480, 479, 477, 480, 478, 0, 479, 477, 478, 0, 479, 478, 481, 480, 479, 477, 480, 478, 481, 481, 5, 15, 17, 31, 34, 37, 43, 46, 62, 67, 152, 261, 360, 444, 454, 476, 481, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 482; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/bm.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1120 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c" { cs = lexer_start; } #line 425 "ragel/i18n/bm.c.rl" #line 1127 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/bm.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/bm.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/bm.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/bm.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/bm.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/bm.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/bm.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/bm.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/bm.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/bm.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/bm.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/bm.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/bm.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/bm.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/bm.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/bm.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/bm.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/bm.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/bm.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/bm.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/bm.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/bm.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/bm.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/bm.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1417 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/bm.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1480 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c" } } } _out: {} } #line 426 "ragel/i18n/bm.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_bm() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Bm", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_es/0000755000004100000410000000000012244512574017400 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_es/gherkin_lexer_es.c0000644000004100000410000011660512244512574023072 0ustar www-datawww-data #line 1 "ragel/i18n/es.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/es.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_es/gherkin_lexer_es.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 181, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 292, 294, 296, 298, 300, 302, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 342, 343, 344, 345, 346, 347, 349, 351, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 401, 402, 403, 404, 405, 406, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 529, 532, 535, 537, 539, 541, 543, 545, 547, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 700, 703, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 737, 738, 742, 748, 751, 753, 759, 775, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 821, 824, 827, 829, 831, 833, 835, 837, 839, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 80, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 80, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 110, 116, 101, 99, 101, 100, 101, 110, 116, 101, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 80, 89, 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, 67, 68, 69, 80, 89, 124, 9, 13, 97, 117, 114, 97, 99, 116, 101, 114, -61, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 65, 67, 69, 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, 110, 10, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 101, 10, 115, 10, 58, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 106, 115, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 32, 10, 101, 10, 115, 10, 99, 97, 110, 100, 111, 97, 100, 97, 111, 32, 115, 106, 110, 115, 101, 109, 112, 108, 111, 115, 58, 10, 10, 10, 32, 35, 67, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 116, 111, 110, 99, 101, 115, 99, 113, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 80, 89, 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, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 101, 10, 115, 10, 58, 10, 97, 117, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 97, 10, 110, 10, 100, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 110, 115, 10, 116, 10, 111, 10, 110, 10, 99, 10, 101, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 114, 117, 101, 109, 97, 32, 100, 101, 108, 32, 101, 115, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 80, 89, 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, 97, 117, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 110, 10, 100, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 110, 115, 10, 116, 10, 111, 10, 110, 10, 99, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 10, 114, 101, 114, 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, 67, 68, 69, 80, 89, 124, 9, 13, 10, 97, 117, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 110, 10, 100, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 110, 115, 10, 116, 10, 111, 10, 110, 10, 99, 10, 101, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 108, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 114, 0 }; static const char _lexer_single_lengths[] = { 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 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, 3, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 4, 3, 2, 4, 14, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 235, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 404, 407, 410, 413, 416, 419, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 479, 481, 483, 485, 487, 489, 492, 495, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 571, 573, 575, 577, 579, 581, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 762, 766, 770, 773, 776, 779, 782, 785, 788, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1020, 1024, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1075, 1077, 1081, 1087, 1091, 1094, 1100, 1116, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1184, 1188, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 31, 357, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 31, 357, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 414, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 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, 51, 50, 51, 50, 51, 51, 4, 52, 66, 4, 363, 382, 386, 412, 66, 51, 50, 51, 53, 50, 51, 54, 50, 51, 55, 50, 51, 56, 50, 51, 57, 50, 51, 58, 50, 51, 59, 50, 51, 60, 50, 51, 61, 50, 51, 62, 50, 51, 63, 50, 51, 64, 50, 51, 65, 50, 51, 4, 50, 51, 67, 50, 4, 4, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 31, 357, 4, 0, 69, 151, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 85, 84, 85, 84, 85, 85, 4, 86, 4, 100, 112, 126, 85, 84, 85, 87, 84, 85, 88, 84, 85, 89, 84, 85, 90, 84, 85, 91, 84, 85, 92, 84, 85, 93, 84, 85, 94, 84, 85, 95, 84, 85, 96, 84, 85, 97, 84, 85, 98, 84, 85, 99, 84, 85, 4, 84, 85, 101, 84, 85, 102, 84, 85, 103, 84, 85, 104, 84, 85, 105, 84, 85, 106, 84, 85, 107, 84, 85, 108, 84, 85, 109, 84, 85, 110, 84, 85, 111, 84, 85, 67, 84, 85, 113, 84, 85, 114, 84, 85, 115, 84, 85, 116, 84, 85, 117, 84, 85, 118, 84, 85, 119, 84, 120, 85, 84, 121, 85, 84, 85, 122, 84, 85, 123, 84, 85, 124, 84, 85, 125, 84, 85, 111, 84, 85, 127, 132, 84, 85, 128, 84, 85, 129, 84, 85, 130, 84, 85, 131, 84, 85, 110, 84, 85, 133, 139, 84, 85, 134, 84, 85, 135, 84, 85, 136, 84, 85, 137, 84, 85, 138, 84, 85, 111, 84, 85, 140, 84, 85, 141, 84, 85, 142, 84, 85, 143, 84, 85, 144, 84, 85, 145, 84, 85, 146, 84, 85, 147, 84, 85, 148, 84, 85, 149, 84, 85, 150, 84, 85, 133, 84, 152, 0, 153, 0, 154, 0, 31, 0, 156, 0, 157, 0, 158, 158, 0, 32, 31, 0, 160, 185, 191, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 169, 168, 169, 168, 169, 169, 4, 170, 4, 169, 168, 169, 171, 168, 169, 172, 168, 169, 173, 168, 169, 174, 168, 169, 175, 168, 169, 176, 168, 169, 177, 168, 178, 169, 168, 179, 169, 168, 169, 180, 168, 169, 181, 168, 169, 182, 168, 169, 183, 168, 169, 184, 168, 169, 67, 168, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 31, 0, 192, 279, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 201, 200, 201, 200, 201, 201, 4, 202, 216, 4, 217, 229, 247, 251, 277, 216, 201, 200, 201, 203, 200, 201, 204, 200, 201, 205, 200, 201, 206, 200, 201, 207, 200, 201, 208, 200, 201, 209, 200, 201, 210, 200, 201, 211, 200, 201, 212, 200, 201, 213, 200, 201, 214, 200, 201, 215, 200, 201, 4, 200, 201, 67, 200, 201, 218, 200, 201, 219, 200, 201, 220, 200, 201, 221, 200, 201, 222, 200, 201, 223, 200, 201, 224, 200, 201, 225, 200, 201, 226, 200, 201, 227, 200, 201, 228, 200, 201, 67, 200, 201, 230, 243, 200, 201, 231, 200, 201, 232, 200, 201, 233, 200, 201, 234, 200, 201, 235, 200, 201, 236, 200, 237, 201, 200, 238, 201, 200, 201, 239, 200, 201, 240, 200, 201, 241, 200, 201, 242, 200, 201, 228, 200, 201, 244, 200, 201, 245, 200, 201, 246, 200, 201, 216, 200, 201, 248, 200, 201, 249, 200, 201, 250, 250, 200, 201, 67, 216, 200, 201, 252, 258, 200, 201, 253, 200, 201, 254, 200, 201, 255, 200, 201, 256, 200, 201, 257, 200, 201, 216, 200, 201, 259, 265, 200, 201, 260, 200, 201, 261, 200, 201, 262, 200, 201, 263, 200, 201, 264, 200, 201, 228, 200, 201, 266, 200, 201, 267, 200, 201, 268, 200, 201, 269, 200, 201, 270, 200, 201, 271, 200, 201, 272, 200, 201, 273, 200, 201, 274, 200, 201, 275, 200, 201, 276, 200, 201, 259, 200, 201, 278, 200, 201, 246, 200, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 300, 299, 300, 299, 300, 300, 4, 301, 315, 4, 316, 335, 339, 353, 315, 300, 299, 300, 302, 299, 300, 303, 299, 300, 304, 299, 300, 305, 299, 300, 306, 299, 300, 307, 299, 300, 308, 299, 300, 309, 299, 300, 310, 299, 300, 311, 299, 300, 312, 299, 300, 313, 299, 300, 314, 299, 300, 4, 299, 300, 67, 299, 300, 317, 331, 299, 300, 318, 299, 300, 319, 299, 300, 320, 299, 300, 321, 299, 300, 322, 299, 300, 323, 299, 324, 300, 299, 325, 300, 299, 300, 326, 299, 300, 327, 299, 300, 328, 299, 300, 329, 299, 300, 330, 299, 300, 67, 299, 300, 332, 299, 300, 333, 299, 300, 334, 299, 300, 315, 299, 300, 336, 299, 300, 337, 299, 300, 338, 338, 299, 300, 67, 315, 299, 300, 340, 346, 299, 300, 341, 299, 300, 342, 299, 300, 343, 299, 300, 344, 299, 300, 345, 299, 300, 315, 299, 300, 347, 299, 300, 348, 299, 300, 349, 299, 300, 350, 299, 300, 351, 299, 300, 352, 299, 300, 330, 299, 300, 354, 299, 300, 334, 299, 356, 0, 154, 0, 357, 358, 357, 0, 362, 361, 360, 358, 361, 359, 0, 360, 358, 359, 0, 360, 359, 362, 361, 360, 358, 361, 359, 362, 362, 5, 15, 17, 31, 34, 37, 68, 155, 159, 355, 31, 357, 362, 0, 51, 364, 378, 50, 51, 365, 50, 51, 366, 50, 51, 367, 50, 51, 368, 50, 51, 369, 50, 51, 370, 50, 371, 51, 50, 372, 51, 50, 51, 373, 50, 51, 374, 50, 51, 375, 50, 51, 376, 50, 51, 377, 50, 51, 67, 50, 51, 379, 50, 51, 380, 50, 51, 381, 50, 51, 66, 50, 51, 383, 50, 51, 384, 50, 51, 385, 385, 50, 51, 67, 66, 50, 51, 387, 393, 50, 51, 388, 50, 51, 389, 50, 51, 390, 50, 51, 391, 50, 51, 392, 50, 51, 66, 50, 51, 394, 400, 50, 51, 395, 50, 51, 396, 50, 51, 397, 50, 51, 398, 50, 51, 399, 50, 51, 377, 50, 51, 401, 50, 51, 402, 50, 51, 403, 50, 51, 404, 50, 51, 405, 50, 51, 406, 50, 51, 407, 50, 51, 408, 50, 51, 409, 50, 51, 410, 50, 51, 411, 50, 51, 394, 50, 51, 413, 50, 51, 381, 50, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 15, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 414; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/es.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1003 "ext/gherkin_lexer_es/gherkin_lexer_es.c" { cs = lexer_start; } #line 425 "ragel/i18n/es.c.rl" #line 1010 "ext/gherkin_lexer_es/gherkin_lexer_es.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/es.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/es.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/es.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/es.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/es.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/es.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/es.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/es.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/es.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/es.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/es.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/es.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/es.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/es.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/es.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/es.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/es.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/es.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/es.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/es.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/es.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/es.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/es.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/es.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1300 "ext/gherkin_lexer_es/gherkin_lexer_es.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/es.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1363 "ext/gherkin_lexer_es/gherkin_lexer_es.c" } } } _out: {} } #line 426 "ragel/i18n/es.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_es() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Es", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_es/extconf.rb0000644000004100000410000000035612244512574021377 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_es") have_library("c", "main") create_makefile("gherkin_lexer_es") gherkin-2.12.2/ext/gherkin_lexer_ru/0000755000004100000410000000000012244512574017417 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_ru/extconf.rb0000644000004100000410000000035612244512574021416 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_ru") have_library("c", "main") create_makefile("gherkin_lexer_ru") gherkin-2.12.2/ext/gherkin_lexer_ru/gherkin_lexer_ru.c0000644000004100000410000017641312244512574023133 0ustar www-datawww-data #line 1 "ragel/i18n/ru.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/ru.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 22, 23, 25, 27, 38, 39, 40, 42, 44, 49, 54, 59, 64, 68, 72, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 94, 101, 106, 110, 116, 119, 121, 127, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 195, 206, 208, 219, 221, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 452, 454, 456, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 540, 541, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 577, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 633, 635, 637, 639, 641, 643, 645, 647, 649, 650, 651, 652, 653, 654, 655, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 681, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 989, 1000, 1002, 1004, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1172, 1174, 1176, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1270, 1281, 1283, 1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1335, 1337, 1339, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, 1472, 1474, 1476, 1478, 1480, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1562, 1564, 1566, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1637, 1639, 1640, 1641, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666 }; static const char _lexer_trans_keys[] = { -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -80, -66, -48, -67, -48, -66, -48, -65, -47, -125, -47, -127, -47, -126, -48, -72, -48, -68, -47, -127, -48, -69, -48, -72, -48, 32, -66, -48, -77, -67, -48, -76, -48, -80, -47, -126, -48, -75, -48, -70, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, -80, -66, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -47, 10, -127, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, 32, -66, 10, -48, 10, -77, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -66, 10, -48, 10, -68, 10, -47, 10, -125, 10, 10, 32, -48, 10, -74, 10, -48, 10, -75, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -116, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, 10, 58, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, -70, 10, -48, 10, 32, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -47, -126, -48, -66, -48, -68, -47, -125, 32, -48, -74, -48, -75, -47, -128, -125, -48, -75, -72, -48, -76, -47, -117, -47, -127, -47, -126, -48, -66, -47, -128, -48, -72, -47, -113, -48, -68, -48, -75, -47, -128, -47, -117, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -95, -92, 10, -48, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, 10, 58, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -113, 10, -47, -127, -47, -126, -47, -116, -48, -47, -78, -48, -66, -48, -71, -47, -127, -47, -126, -48, -78, -48, -66, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -102, -97, -95, -92, 10, -48, 10, -66, 10, -48, 10, -67, 10, -47, 10, -126, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -47, 10, -128, 10, -48, 10, -75, -72, 10, -48, 10, -76, 10, -47, 10, -117, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -47, 10, -117, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -126, -122, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -47, -113, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 10, 10, 32, -48, 10, -80, -66, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -47, 10, -127, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, 32, -66, 10, -48, 10, -77, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -66, 10, -48, 10, -68, 10, -47, 10, -125, 10, 10, 32, -48, 10, -74, 10, -48, 10, -75, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -116, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, 10, 58, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, -70, 10, -48, 10, 32, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -113, 10, 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, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -108, -107, -104, -102, -99, -97, -95, -94, -92, 10, 10, 32, -48, 10, -80, -66, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -47, 10, -127, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, 32, -66, 10, -48, 10, -77, -67, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -47, 10, -126, 10, -48, 10, -66, 10, -48, 10, -68, 10, -47, 10, -125, 10, 10, 32, -48, 10, -74, 10, -48, 10, -75, 10, -47, 10, -128, -125, 10, -48, 10, -75, 10, -48, 10, -76, 10, -47, 10, -117, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -116, 10, -48, -47, 10, -78, 10, -48, 10, -66, 10, -48, 10, -71, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -78, 10, -48, 10, -66, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, -70, 10, -48, 10, 32, -77, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -80, -66, -48, -70, -48, 32, -77, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -47, -66, -48, -67, -48, -80, -48, -69, -113, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 10, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 2, 9, 2, 3, 2, 2, 2, 2, 2, 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, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 5, 2, 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, 3, 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, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 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, 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, 2, 3, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 3, 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, 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, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 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, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 23, 25, 28, 31, 42, 44, 46, 49, 52, 57, 62, 67, 72, 76, 80, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 118, 125, 130, 134, 140, 144, 147, 153, 164, 166, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 216, 218, 220, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 266, 278, 281, 292, 295, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 350, 353, 356, 359, 362, 365, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 639, 642, 645, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 777, 779, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 843, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 926, 929, 932, 935, 938, 941, 944, 947, 950, 952, 954, 956, 958, 960, 962, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 1005, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 1396, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1476, 1488, 1491, 1494, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1744, 1747, 1750, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1788, 1791, 1794, 1797, 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 1839, 1842, 1845, 1848, 1851, 1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, 1882, 1884, 1893, 1905, 1908, 1911, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1985, 1988, 1991, 1995, 1998, 2001, 2004, 2007, 2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2086, 2089, 2092, 2095, 2098, 2101, 2104, 2107, 2110, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2162, 2165, 2168, 2171, 2174, 2177, 2180, 2183, 2186, 2189, 2192, 2195, 2198, 2201, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2323, 2326, 2329, 2333, 2336, 2339, 2342, 2345, 2348, 2351, 2354, 2357, 2360, 2363, 2366, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, 2424, 2427, 2430, 2433, 2435, 2438, 2440, 2442, 2445, 2447, 2449, 2451, 2453, 2455, 2457, 2459, 2461, 2463, 2465, 2467, 2470, 2472, 2474, 2476, 2478, 2480, 2482, 2484, 2486, 2488, 2490 }; static const short _lexer_trans_targs[] = { 2, 844, 6, 6, 7, 17, 19, 3, 33, 36, 6, 0, 3, 42, 60, 3, 66, 46, 253, 326, 819, 825, 0, 4, 0, 6, 18, 5, 6, 18, 5, 2, 6, 6, 7, 17, 19, 3, 33, 36, 6, 0, 8, 0, 9, 0, 11, 10, 10, 11, 10, 10, 12, 12, 13, 12, 12, 12, 12, 13, 12, 12, 12, 12, 14, 12, 12, 12, 12, 15, 12, 12, 6, 16, 16, 0, 6, 16, 16, 0, 6, 18, 17, 6, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 846, 0, 0, 0, 0, 0, 34, 35, 6, 35, 35, 33, 34, 34, 6, 35, 33, 35, 0, 36, 37, 36, 0, 41, 40, 39, 37, 40, 38, 0, 39, 37, 38, 0, 39, 38, 41, 40, 39, 37, 40, 38, 2, 41, 41, 7, 17, 19, 3, 33, 36, 41, 0, 43, 0, 44, 48, 0, 45, 0, 46, 0, 47, 0, 3, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 3, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 3, 0, 67, 240, 0, 68, 0, 69, 0, 70, 74, 0, 71, 0, 72, 0, 73, 0, 3, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 87, 86, 88, 87, 87, 6, 226, 89, 6, 87, 86, 89, 91, 109, 89, 115, 95, 136, 144, 203, 208, 87, 86, 87, 90, 86, 2, 6, 6, 7, 17, 19, 3, 33, 36, 6, 0, 92, 87, 86, 93, 97, 87, 86, 94, 87, 86, 95, 87, 86, 96, 87, 86, 89, 87, 86, 98, 87, 86, 99, 87, 86, 100, 87, 86, 101, 87, 86, 102, 87, 86, 103, 87, 86, 104, 87, 86, 105, 87, 86, 106, 87, 86, 107, 87, 86, 108, 87, 86, 89, 87, 86, 110, 87, 86, 111, 87, 86, 112, 87, 86, 113, 87, 86, 114, 87, 86, 89, 87, 86, 116, 87, 123, 86, 117, 87, 86, 118, 87, 86, 119, 87, 86, 120, 87, 86, 121, 87, 86, 122, 87, 86, 89, 87, 86, 124, 87, 86, 125, 87, 86, 126, 87, 86, 127, 87, 86, 128, 87, 86, 129, 87, 86, 130, 87, 86, 131, 87, 86, 87, 132, 86, 133, 87, 86, 134, 87, 86, 135, 87, 86, 89, 87, 86, 137, 87, 86, 138, 87, 86, 139, 87, 86, 140, 87, 86, 141, 87, 86, 142, 87, 86, 143, 87, 86, 89, 87, 86, 145, 159, 87, 86, 146, 87, 86, 147, 87, 86, 148, 87, 86, 149, 87, 86, 150, 87, 86, 151, 87, 86, 152, 87, 86, 153, 87, 86, 154, 87, 86, 155, 87, 86, 156, 87, 86, 157, 87, 86, 158, 87, 86, 87, 90, 86, 160, 191, 87, 86, 161, 87, 86, 162, 87, 86, 163, 87, 86, 164, 87, 86, 165, 87, 86, 166, 87, 86, 167, 87, 86, 168, 87, 86, 169, 87, 86, 170, 87, 86, 171, 87, 86, 172, 87, 86, 173, 87, 86, 174, 87, 86, 87, 175, 86, 176, 87, 86, 177, 87, 86, 178, 87, 86, 179, 87, 86, 180, 87, 86, 181, 87, 86, 182, 87, 86, 183, 87, 86, 184, 87, 86, 185, 87, 86, 186, 87, 86, 187, 87, 86, 188, 87, 86, 189, 87, 86, 190, 87, 86, 158, 87, 86, 192, 87, 86, 193, 87, 86, 194, 87, 86, 195, 87, 86, 196, 87, 86, 197, 87, 86, 198, 87, 86, 199, 87, 86, 200, 87, 86, 201, 87, 86, 202, 87, 86, 158, 87, 86, 204, 87, 86, 205, 207, 87, 86, 206, 87, 86, 132, 87, 86, 118, 87, 90, 86, 209, 87, 86, 210, 87, 86, 211, 87, 86, 212, 87, 86, 213, 87, 86, 214, 87, 86, 215, 87, 86, 216, 87, 86, 217, 87, 86, 218, 87, 86, 219, 190, 87, 86, 220, 87, 86, 221, 87, 86, 222, 87, 86, 223, 87, 86, 224, 87, 86, 225, 87, 86, 158, 87, 86, 87, 227, 86, 87, 228, 86, 87, 229, 86, 87, 230, 86, 87, 231, 86, 87, 232, 86, 87, 233, 86, 87, 234, 86, 87, 235, 86, 87, 236, 86, 87, 237, 86, 87, 238, 86, 87, 239, 86, 87, 6, 86, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 3, 0, 254, 0, 255, 320, 0, 256, 0, 257, 273, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 84, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 284, 283, 284, 283, 285, 284, 284, 6, 6, 284, 283, 286, 301, 284, 283, 287, 284, 283, 288, 284, 283, 289, 284, 283, 290, 284, 283, 291, 284, 283, 292, 284, 283, 293, 284, 283, 294, 284, 283, 295, 284, 283, 296, 284, 283, 297, 284, 283, 298, 284, 283, 299, 284, 283, 300, 284, 283, 284, 90, 283, 302, 284, 283, 303, 284, 283, 304, 284, 283, 305, 284, 283, 306, 284, 283, 307, 284, 283, 308, 284, 283, 309, 284, 283, 310, 284, 283, 311, 284, 283, 312, 319, 284, 283, 313, 284, 283, 314, 284, 283, 315, 284, 283, 316, 284, 283, 317, 284, 283, 318, 284, 283, 300, 284, 283, 300, 284, 283, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 3, 0, 327, 472, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 343, 342, 343, 342, 344, 343, 343, 6, 458, 6, 343, 342, 345, 360, 388, 440, 343, 342, 346, 343, 342, 347, 343, 342, 348, 343, 342, 349, 343, 342, 350, 343, 342, 351, 343, 342, 352, 343, 342, 353, 343, 342, 354, 343, 342, 355, 343, 342, 356, 343, 342, 357, 343, 342, 358, 343, 342, 359, 343, 342, 343, 90, 342, 361, 343, 342, 362, 343, 342, 363, 343, 342, 364, 380, 343, 342, 365, 343, 342, 366, 343, 342, 367, 343, 342, 368, 343, 342, 369, 343, 342, 370, 343, 342, 371, 343, 342, 372, 343, 342, 373, 343, 342, 374, 343, 342, 375, 343, 342, 376, 343, 342, 377, 343, 342, 378, 343, 342, 379, 343, 342, 359, 343, 342, 381, 343, 342, 382, 343, 342, 383, 343, 342, 384, 343, 342, 385, 343, 342, 386, 343, 342, 387, 343, 342, 359, 343, 342, 389, 402, 343, 342, 390, 343, 342, 391, 343, 342, 392, 343, 342, 393, 343, 342, 394, 343, 342, 395, 343, 342, 396, 343, 342, 397, 343, 342, 398, 343, 342, 399, 343, 342, 400, 343, 342, 401, 343, 342, 359, 343, 342, 403, 428, 343, 342, 404, 343, 342, 405, 343, 342, 406, 343, 342, 407, 343, 342, 408, 343, 342, 409, 343, 342, 410, 343, 342, 411, 343, 342, 412, 343, 342, 413, 343, 342, 414, 343, 342, 415, 343, 342, 416, 343, 342, 417, 343, 342, 343, 418, 342, 419, 343, 342, 420, 343, 342, 421, 343, 342, 422, 343, 342, 423, 343, 342, 424, 343, 342, 425, 343, 342, 426, 343, 342, 427, 343, 342, 374, 343, 342, 429, 343, 342, 430, 343, 342, 431, 343, 342, 432, 343, 342, 433, 343, 342, 434, 343, 342, 435, 343, 342, 436, 343, 342, 437, 343, 342, 438, 343, 342, 439, 343, 342, 359, 343, 342, 441, 343, 342, 442, 343, 342, 443, 343, 342, 444, 343, 342, 445, 343, 342, 446, 343, 342, 447, 343, 342, 448, 343, 342, 449, 343, 342, 450, 343, 342, 451, 379, 343, 342, 452, 343, 342, 453, 343, 342, 454, 343, 342, 455, 343, 342, 456, 343, 342, 457, 343, 342, 359, 343, 342, 343, 459, 342, 343, 460, 342, 343, 461, 342, 343, 462, 342, 343, 463, 342, 343, 464, 342, 343, 465, 342, 343, 466, 342, 343, 467, 342, 343, 468, 342, 343, 469, 342, 343, 470, 342, 343, 471, 342, 343, 6, 342, 473, 629, 0, 474, 0, 475, 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 507, 506, 507, 506, 508, 507, 507, 6, 615, 509, 6, 507, 506, 509, 510, 528, 509, 534, 514, 555, 563, 591, 596, 507, 506, 507, 90, 506, 511, 507, 506, 512, 516, 507, 506, 513, 507, 506, 514, 507, 506, 515, 507, 506, 509, 507, 506, 517, 507, 506, 518, 507, 506, 519, 507, 506, 520, 507, 506, 521, 507, 506, 522, 507, 506, 523, 507, 506, 524, 507, 506, 525, 507, 506, 526, 507, 506, 527, 507, 506, 509, 507, 506, 529, 507, 506, 530, 507, 506, 531, 507, 506, 532, 507, 506, 533, 507, 506, 509, 507, 506, 535, 507, 542, 506, 536, 507, 506, 537, 507, 506, 538, 507, 506, 539, 507, 506, 540, 507, 506, 541, 507, 506, 509, 507, 506, 543, 507, 506, 544, 507, 506, 545, 507, 506, 546, 507, 506, 547, 507, 506, 548, 507, 506, 549, 507, 506, 550, 507, 506, 507, 551, 506, 552, 507, 506, 553, 507, 506, 554, 507, 506, 509, 507, 506, 556, 507, 506, 557, 507, 506, 558, 507, 506, 559, 507, 506, 560, 507, 506, 561, 507, 506, 562, 507, 506, 509, 507, 506, 564, 578, 507, 506, 565, 507, 506, 566, 507, 506, 567, 507, 506, 568, 507, 506, 569, 507, 506, 570, 507, 506, 571, 507, 506, 572, 507, 506, 573, 507, 506, 574, 507, 506, 575, 507, 506, 576, 507, 506, 577, 507, 506, 507, 90, 506, 579, 507, 506, 580, 507, 506, 581, 507, 506, 582, 507, 506, 583, 507, 506, 584, 507, 506, 585, 507, 506, 586, 507, 506, 587, 507, 506, 588, 507, 506, 589, 507, 506, 590, 507, 506, 577, 507, 506, 592, 507, 506, 593, 595, 507, 506, 594, 507, 506, 551, 507, 506, 537, 507, 90, 506, 597, 507, 506, 598, 507, 506, 599, 507, 506, 600, 507, 506, 601, 507, 506, 602, 507, 506, 603, 507, 506, 604, 507, 506, 605, 507, 506, 606, 507, 506, 607, 614, 507, 506, 608, 507, 506, 609, 507, 506, 610, 507, 506, 611, 507, 506, 612, 507, 506, 613, 507, 506, 577, 507, 506, 577, 507, 506, 507, 616, 506, 507, 617, 506, 507, 618, 506, 507, 619, 506, 507, 620, 506, 507, 621, 506, 507, 622, 506, 507, 623, 506, 507, 624, 506, 507, 625, 506, 507, 626, 506, 507, 627, 506, 507, 628, 506, 507, 6, 506, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 644, 643, 644, 643, 645, 644, 644, 6, 805, 646, 6, 644, 643, 646, 647, 665, 646, 671, 651, 703, 729, 781, 787, 644, 643, 644, 90, 643, 648, 644, 643, 649, 653, 644, 643, 650, 644, 643, 651, 644, 643, 652, 644, 643, 646, 644, 643, 654, 644, 643, 655, 644, 643, 656, 644, 643, 657, 644, 643, 658, 644, 643, 659, 644, 643, 660, 644, 643, 661, 644, 643, 662, 644, 643, 663, 644, 643, 664, 644, 643, 646, 644, 643, 666, 644, 643, 667, 644, 643, 668, 644, 643, 669, 644, 643, 670, 644, 643, 646, 644, 643, 672, 644, 690, 643, 673, 644, 643, 674, 644, 643, 675, 679, 644, 643, 676, 644, 643, 677, 644, 643, 678, 644, 643, 646, 644, 643, 680, 644, 643, 681, 644, 643, 682, 644, 643, 683, 644, 643, 684, 644, 643, 685, 644, 643, 686, 644, 643, 687, 644, 643, 688, 644, 643, 689, 644, 643, 644, 90, 643, 691, 644, 643, 692, 644, 643, 693, 644, 643, 694, 644, 643, 695, 644, 643, 696, 644, 643, 697, 644, 643, 698, 644, 643, 644, 699, 643, 700, 644, 643, 701, 644, 643, 702, 644, 643, 646, 644, 643, 704, 644, 643, 705, 723, 644, 643, 706, 644, 643, 707, 644, 643, 708, 644, 643, 709, 644, 643, 710, 644, 643, 711, 644, 643, 712, 644, 643, 713, 644, 643, 714, 644, 643, 715, 644, 643, 716, 644, 643, 717, 644, 643, 718, 644, 643, 719, 644, 643, 720, 644, 643, 721, 644, 643, 722, 644, 643, 689, 644, 643, 724, 644, 643, 725, 644, 643, 726, 644, 643, 727, 644, 643, 728, 644, 643, 646, 644, 643, 730, 743, 644, 643, 731, 644, 643, 732, 644, 643, 733, 644, 643, 734, 644, 643, 735, 644, 643, 736, 644, 643, 737, 644, 643, 738, 644, 643, 739, 644, 643, 740, 644, 643, 741, 644, 643, 742, 644, 643, 689, 644, 643, 744, 769, 644, 643, 745, 644, 643, 746, 644, 643, 747, 644, 643, 748, 644, 643, 749, 644, 643, 750, 644, 643, 751, 644, 643, 752, 644, 643, 753, 644, 643, 754, 644, 643, 755, 644, 643, 756, 644, 643, 757, 644, 643, 758, 644, 643, 644, 759, 643, 760, 644, 643, 761, 644, 643, 762, 644, 643, 763, 644, 643, 764, 644, 643, 765, 644, 643, 766, 644, 643, 767, 644, 643, 768, 644, 643, 717, 644, 643, 770, 644, 643, 771, 644, 643, 772, 644, 643, 773, 644, 643, 774, 644, 643, 775, 644, 643, 776, 644, 643, 777, 644, 643, 778, 644, 643, 779, 644, 643, 780, 644, 643, 689, 644, 643, 782, 644, 643, 783, 785, 644, 643, 784, 644, 643, 699, 644, 643, 786, 644, 90, 643, 675, 644, 643, 788, 644, 643, 789, 644, 643, 790, 644, 643, 791, 644, 643, 792, 644, 643, 793, 644, 643, 794, 644, 643, 795, 644, 643, 796, 644, 643, 797, 644, 643, 798, 722, 644, 643, 799, 644, 643, 800, 644, 643, 801, 644, 643, 802, 644, 643, 803, 644, 643, 804, 644, 643, 689, 644, 643, 644, 806, 643, 644, 807, 643, 644, 808, 643, 644, 809, 643, 644, 810, 643, 644, 811, 643, 644, 812, 643, 644, 813, 643, 644, 814, 643, 644, 815, 643, 644, 816, 643, 644, 817, 643, 644, 818, 643, 644, 6, 643, 820, 0, 821, 823, 0, 822, 0, 249, 0, 824, 4, 0, 70, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 0, 832, 0, 833, 0, 834, 0, 835, 0, 836, 843, 0, 837, 0, 838, 0, 839, 0, 840, 0, 841, 0, 842, 0, 340, 0, 340, 0, 845, 0, 6, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 846; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/ru.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1675 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c" { cs = lexer_start; } #line 425 "ragel/i18n/ru.c.rl" #line 1682 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/ru.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/ru.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/ru.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/ru.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/ru.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/ru.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/ru.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/ru.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/ru.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/ru.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/ru.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/ru.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/ru.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/ru.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/ru.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/ru.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/ru.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/ru.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/ru.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/ru.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/ru.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/ru.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/ru.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/ru.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1972 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/ru.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2035 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c" } } } _out: {} } #line 426 "ragel/i18n/ru.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_ru() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Ru", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_lt/0000755000004100000410000000000012244512574017410 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_lt/extconf.rb0000644000004100000410000000035612244512574021407 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_lt") have_library("c", "main") create_makefile("gherkin_lexer_lt") gherkin-2.12.2/ext/gherkin_lexer_lt/gherkin_lexer_lt.c0000644000004100000410000010760712244512574023114 0ustar www-datawww-data #line 1 "ragel/i18n/lt.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/lt.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 215, 217, 219, 221, 223, 225, 227, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, 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, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 346, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 380, 381, 382, 383, 384, 385, 387, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 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, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 501, 502, 503, 504, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 638, 639, 640, 641, 642, 643, 644, 645, 649, 655, 658, 660, 666, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 116, 117, 111, 116, 97, 114, 97, 111, 105, 110, 116, 101, 107, 115, 116, 97, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 68, 73, 75, 83, 84, 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, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, 97, 118, 121, 122, 100, -59, -66, 105, 97, 105, 58, 10, 10, 10, 32, 35, 83, 124, 9, 13, 10, 97, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 58, 97, 99, 118, 121, 98, -60, -105, 58, 10, 10, 10, 32, 35, 37, 64, 75, 80, 83, 86, 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, 111, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 97, 10, 115, 10, 58, 10, 97, 10, 118, 10, 121, 10, 122, 10, 100, -59, 10, -66, 10, 10, 105, 10, 97, 10, 105, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 117, 10, 105, 117, 10, 115, 10, 32, -59, 10, -95, 10, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 97, 10, 114, 10, 105, 10, 97, 10, 110, 10, 116, 101, 110, 97, 114, 105, 106, 97, 117, 105, 117, 115, 32, -59, -95, 97, 98, 108, 111, 110, 97, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 68, 73, 75, 83, 84, 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, 101, 10, 116, 10, 117, 10, 111, 10, 116, 10, 97, 10, 114, 10, 97, 10, 105, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 58, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 117, 10, 115, 10, 97, 10, 100, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 68, 73, 75, 83, 84, 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, 101, 10, 116, 10, 117, 10, 111, 10, 116, 10, 97, 10, 114, 10, 97, 111, 10, 105, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 97, 10, 115, 10, 58, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 117, 10, 117, 10, 115, 10, 32, -59, 10, -95, 10, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 97, 10, 100, 97, 100, 97, 114, 105, 97, 110, 116, 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, 66, 68, 73, 75, 80, 83, 84, 86, 124, 9, 13, 10, 101, 10, 116, 10, 117, 10, 111, 10, 116, 10, 97, 10, 114, 10, 97, 10, 105, 10, 97, 99, 10, 118, 10, 121, 10, 98, -60, 10, -105, 10, 10, 58, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 117, 10, 117, 10, 115, 10, 32, -59, 10, -95, 10, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 97, 10, 115, 10, 97, 10, 100, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 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, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 288, 291, 294, 297, 300, 303, 306, 309, 312, 314, 316, 318, 320, 322, 324, 326, 328, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 533, 535, 537, 539, 541, 543, 546, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 717, 719, 721, 723, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 916, 918, 920, 922, 924, 926, 928, 930, 934, 940, 944, 947, 953, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 346, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 31, 0, 40, 0, 41, 0, 42, 0, 31, 0, 31, 0, 45, 46, 0, 31, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 56, 57, 56, 57, 57, 4, 58, 72, 4, 309, 311, 315, 316, 318, 344, 57, 56, 57, 59, 56, 57, 60, 56, 57, 61, 56, 57, 62, 56, 57, 63, 56, 57, 64, 56, 57, 65, 56, 57, 66, 56, 57, 67, 56, 57, 68, 56, 57, 69, 56, 57, 70, 56, 57, 71, 56, 57, 4, 56, 57, 73, 56, 4, 4, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 4, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 87, 86, 87, 87, 4, 88, 4, 87, 86, 87, 89, 86, 87, 90, 86, 87, 91, 86, 87, 92, 86, 93, 87, 86, 94, 87, 86, 87, 73, 86, 96, 168, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 104, 103, 104, 103, 104, 104, 4, 105, 4, 119, 129, 139, 162, 104, 103, 104, 106, 103, 104, 107, 103, 104, 108, 103, 104, 109, 103, 104, 110, 103, 104, 111, 103, 104, 112, 103, 104, 113, 103, 104, 114, 103, 104, 115, 103, 104, 116, 103, 104, 117, 103, 104, 118, 103, 104, 4, 103, 104, 120, 103, 104, 121, 103, 104, 122, 103, 104, 123, 103, 104, 124, 103, 104, 125, 103, 104, 126, 103, 104, 127, 103, 104, 128, 103, 104, 73, 103, 104, 130, 103, 104, 131, 103, 104, 132, 103, 104, 133, 103, 104, 134, 103, 135, 104, 103, 136, 104, 103, 104, 137, 103, 104, 138, 103, 104, 128, 103, 104, 140, 145, 103, 104, 141, 103, 104, 142, 103, 104, 143, 103, 144, 104, 103, 128, 104, 103, 104, 146, 103, 104, 147, 103, 104, 148, 103, 104, 149, 103, 104, 150, 103, 104, 151, 103, 104, 152, 127, 103, 104, 128, 153, 103, 104, 154, 103, 104, 155, 103, 156, 104, 103, 157, 104, 103, 104, 158, 103, 104, 159, 103, 104, 160, 103, 104, 161, 103, 104, 126, 103, 104, 163, 103, 104, 164, 103, 104, 165, 103, 104, 166, 103, 104, 167, 103, 104, 137, 103, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 232, 0, 84, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 190, 189, 190, 189, 190, 190, 4, 191, 205, 4, 206, 208, 212, 213, 215, 230, 190, 189, 190, 192, 189, 190, 193, 189, 190, 194, 189, 190, 195, 189, 190, 196, 189, 190, 197, 189, 190, 198, 189, 190, 199, 189, 190, 200, 189, 190, 201, 189, 190, 202, 189, 190, 203, 189, 190, 204, 189, 190, 4, 189, 190, 73, 189, 190, 207, 189, 190, 205, 189, 190, 209, 189, 190, 210, 189, 190, 211, 189, 190, 205, 189, 190, 205, 189, 190, 214, 189, 190, 205, 189, 190, 216, 222, 189, 190, 217, 189, 190, 218, 189, 190, 219, 189, 220, 190, 189, 221, 190, 189, 190, 73, 189, 190, 223, 189, 190, 224, 189, 190, 225, 189, 190, 226, 189, 190, 227, 189, 190, 228, 189, 190, 229, 189, 190, 221, 189, 190, 231, 189, 190, 211, 189, 233, 0, 234, 0, 236, 235, 236, 235, 236, 236, 4, 237, 251, 4, 252, 254, 258, 259, 270, 293, 236, 235, 236, 238, 235, 236, 239, 235, 236, 240, 235, 236, 241, 235, 236, 242, 235, 236, 243, 235, 236, 244, 235, 236, 245, 235, 236, 246, 235, 236, 247, 235, 236, 248, 235, 236, 249, 235, 236, 250, 235, 236, 4, 235, 236, 73, 235, 236, 253, 235, 236, 251, 235, 236, 255, 235, 236, 256, 235, 236, 257, 235, 236, 251, 235, 236, 251, 235, 236, 260, 261, 235, 236, 251, 235, 236, 262, 235, 236, 263, 235, 236, 264, 235, 236, 265, 235, 236, 266, 235, 236, 267, 235, 236, 268, 235, 236, 269, 235, 236, 73, 235, 236, 271, 276, 235, 236, 272, 235, 236, 273, 235, 236, 274, 235, 275, 236, 235, 269, 236, 235, 236, 277, 235, 236, 278, 235, 236, 279, 235, 236, 280, 235, 236, 281, 235, 236, 282, 235, 236, 283, 268, 235, 236, 284, 235, 236, 285, 235, 236, 286, 235, 287, 236, 235, 288, 236, 235, 236, 289, 235, 236, 290, 235, 236, 291, 235, 236, 292, 235, 236, 267, 235, 236, 294, 235, 236, 257, 235, 296, 0, 42, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 82, 0, 303, 304, 303, 0, 308, 307, 306, 304, 307, 305, 0, 306, 304, 305, 0, 306, 305, 308, 307, 306, 304, 307, 305, 308, 308, 5, 15, 17, 31, 34, 37, 39, 43, 44, 74, 95, 295, 297, 303, 308, 0, 57, 310, 56, 57, 72, 56, 57, 312, 56, 57, 313, 56, 57, 314, 56, 57, 72, 56, 57, 72, 56, 57, 317, 56, 57, 72, 56, 57, 319, 325, 56, 57, 320, 56, 57, 321, 56, 57, 322, 56, 323, 57, 56, 324, 57, 56, 57, 73, 56, 57, 326, 56, 57, 327, 56, 57, 328, 56, 57, 329, 56, 57, 330, 56, 57, 331, 56, 57, 332, 343, 56, 57, 333, 56, 57, 334, 56, 57, 335, 56, 336, 57, 56, 337, 57, 56, 57, 338, 56, 57, 339, 56, 57, 340, 56, 57, 341, 56, 57, 342, 56, 57, 343, 56, 57, 324, 56, 57, 345, 56, 57, 314, 56, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 346; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/lt.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 900 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c" { cs = lexer_start; } #line 425 "ragel/i18n/lt.c.rl" #line 907 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/lt.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/lt.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/lt.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/lt.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/lt.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/lt.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/lt.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/lt.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/lt.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/lt.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/lt.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/lt.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/lt.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/lt.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/lt.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/lt.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/lt.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/lt.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/lt.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/lt.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/lt.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/lt.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/lt.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/lt.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1197 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/lt.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1260 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c" } } } _out: {} } #line 426 "ragel/i18n/lt.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_lt() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Lt", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_kn/0000755000004100000410000000000012244512574017401 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_kn/extconf.rb0000644000004100000410000000035612244512574021400 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_kn") have_library("c", "main") create_makefile("gherkin_lexer_kn") gherkin-2.12.2/ext/gherkin_lexer_kn/gherkin_lexer_kn.c0000644000004100000410000016740612244512574023101 0ustar www-datawww-data #line 1 "ragel/i18n/kn.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/kn.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_kn/gherkin_lexer_kn.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 13, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 46, 47, 48, 50, 52, 57, 62, 67, 72, 76, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 102, 109, 114, 118, 124, 127, 129, 135, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 266, 268, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 589, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 649, 651, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 968, 970, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1281, 1283, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1514, 1515 }; static const char _lexer_trans_keys[] = { -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -78, -122, -119, -107, -88, -82, -75, -72, -71, -32, -78, -90, -32, -78, -80, -32, -77, -122, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -78, -90, -32, -78, -66, -32, -78, -71, -32, -78, -80, -32, -78, -93, -32, -77, -122, -32, -78, -105, -32, -78, -77, -32, -77, -127, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -78, 10, -71, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -78, -91, -32, -78, -66, -32, -78, -72, -32, -78, -66, -32, -78, -80, -32, -78, -66, -32, -78, -126, -32, -78, -74, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -78, 10, -122, -107, -88, -82, -75, -72, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -122, 10, 10, 32, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, 10, 58, -32, 10, -78, 10, -126, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -107, 10, -32, 10, -78, 10, -95, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -127, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -75, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -81, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -78, -77, 10, -65, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -78, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -32, -78, -126, -65, -32, -78, -92, -32, -78, -80, -32, -77, -107, -32, -78, -95, -32, -78, -65, -32, -78, -90, -32, -78, -92, -32, -77, -115, -32, -78, -92, -32, -77, -127, -32, -78, -65, -32, -78, -75, -32, -78, -80, -32, -78, -93, -32, -77, -122, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -78, 10, -122, -107, -88, -82, -72, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -122, 10, 10, 32, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, 10, 58, -32, 10, -78, 10, -126, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -107, 10, -32, 10, -78, 10, -95, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -127, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -81, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -32, -77, -115, -32, -78, -91, -32, -78, -65, -32, -78, -92, -32, -78, -65, -32, -78, -81, -32, -78, -88, -32, -77, -115, -32, -78, -88, -32, -78, -77, -65, -32, -78, -88, -32, -77, -115, -32, -78, -88, -32, -77, -122, -32, -78, -78, -32, -77, -122, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -78, 10, -122, -107, -88, -82, -75, -72, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -122, 10, 10, 32, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, 10, 58, -32, 10, -78, 10, -126, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -80, 10, -32, 10, -77, 10, -107, 10, -32, 10, -78, 10, -95, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -92, 10, -32, 10, -77, 10, -127, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -75, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -92, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -81, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -122, -32, -78, -102, -32, -77, -115, -32, -78, -102, -32, -78, -77, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -78, 10, -119, -107, -75, -71, 10, -32, 10, -78, 10, -90, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -71, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -105, 10, -32, 10, -78, 10, -77, 10, -32, 10, -77, 10, -127, 10, 10, 58, -32, 10, -78, 10, -91, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -72, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -66, 10, -32, 10, -78, 10, -126, 10, -32, 10, -78, 10, -74, 10, -32, 10, -78, 10, -65, 10, -32, 10, -78, 10, -75, 10, -32, 10, -78, 10, -80, 10, -32, 10, -78, 10, -93, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, -77, 10, -65, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -88, 10, -32, 10, -77, 10, -122, 10, -32, 10, -78, 10, -78, 10, -122, 10, -32, 10, -78, 10, -102, 10, -32, 10, -77, 10, -115, 10, -32, 10, -78, 10, -102, 10, -32, 10, -78, 10, -77, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 7, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 5, 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, 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, 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, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 14, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 46, 49, 60, 62, 64, 67, 70, 75, 80, 85, 90, 94, 98, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 136, 143, 148, 152, 158, 162, 165, 171, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 377, 380, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 858, 860, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 968, 971, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1464, 1467, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1896, 1898, 1900, 1902, 1904, 1906, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922, 1924, 1926, 1934, 1937, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2066, 2069, 2072, 2075, 2078, 2081, 2084, 2087, 2090, 2093, 2096, 2099, 2102, 2105, 2108, 2111, 2114, 2117, 2120, 2123, 2126, 2129, 2132, 2135, 2138, 2141, 2144, 2147, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2282, 2284 }; static const short _lexer_trans_targs[] = { 2, 789, 16, 16, 17, 27, 29, 13, 43, 46, 16, 0, 3, 0, 4, 52, 102, 287, 308, 320, 465, 492, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 16, 28, 15, 16, 28, 15, 2, 16, 16, 17, 27, 29, 13, 43, 46, 16, 0, 18, 0, 19, 0, 21, 20, 20, 21, 20, 20, 22, 22, 23, 22, 22, 22, 22, 23, 22, 22, 22, 22, 24, 22, 22, 22, 22, 25, 22, 22, 16, 26, 26, 0, 16, 26, 26, 0, 16, 28, 27, 16, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 791, 0, 0, 0, 0, 0, 44, 45, 16, 45, 45, 43, 44, 44, 16, 45, 43, 45, 0, 46, 47, 46, 0, 51, 50, 49, 47, 50, 48, 0, 49, 47, 48, 0, 49, 48, 51, 50, 49, 47, 50, 48, 2, 51, 51, 17, 27, 29, 13, 43, 46, 51, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 82, 81, 82, 81, 83, 82, 82, 16, 16, 82, 81, 84, 82, 81, 85, 82, 81, 86, 82, 81, 87, 82, 81, 88, 82, 81, 89, 82, 81, 90, 82, 81, 91, 82, 81, 92, 82, 81, 93, 82, 81, 94, 82, 81, 95, 82, 81, 96, 82, 81, 97, 82, 81, 98, 82, 81, 99, 82, 81, 100, 82, 81, 82, 101, 81, 2, 16, 16, 17, 27, 29, 13, 43, 46, 16, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 129, 128, 129, 128, 130, 129, 129, 16, 273, 141, 16, 129, 128, 131, 129, 128, 132, 142, 167, 188, 200, 215, 242, 129, 128, 133, 129, 128, 134, 129, 128, 135, 129, 128, 136, 129, 128, 137, 129, 128, 138, 129, 128, 139, 129, 128, 140, 129, 128, 141, 129, 128, 129, 101, 128, 143, 129, 128, 144, 129, 128, 145, 129, 128, 146, 129, 128, 147, 129, 128, 148, 129, 128, 149, 129, 128, 150, 129, 128, 151, 129, 128, 152, 129, 128, 153, 129, 128, 154, 129, 128, 155, 129, 128, 156, 129, 128, 157, 129, 128, 158, 129, 128, 159, 129, 128, 160, 129, 128, 161, 129, 128, 162, 129, 128, 163, 129, 128, 164, 129, 128, 165, 129, 128, 166, 129, 128, 129, 101, 128, 168, 129, 128, 169, 129, 128, 170, 176, 129, 128, 171, 129, 128, 172, 129, 128, 173, 129, 128, 174, 129, 128, 175, 129, 128, 141, 129, 128, 177, 129, 128, 178, 129, 128, 179, 129, 128, 180, 129, 128, 181, 129, 128, 182, 129, 128, 183, 129, 128, 184, 129, 128, 185, 129, 128, 186, 129, 128, 187, 129, 128, 141, 129, 128, 189, 129, 128, 190, 129, 128, 191, 129, 128, 192, 129, 128, 193, 129, 128, 194, 129, 128, 195, 129, 128, 196, 129, 128, 197, 129, 128, 198, 129, 128, 199, 129, 128, 141, 129, 128, 201, 129, 128, 202, 129, 128, 203, 129, 128, 204, 129, 128, 205, 129, 128, 206, 129, 128, 207, 129, 128, 208, 129, 128, 209, 129, 128, 210, 129, 128, 211, 129, 128, 212, 129, 128, 213, 129, 128, 214, 129, 128, 166, 129, 128, 216, 129, 128, 217, 129, 128, 218, 129, 128, 219, 129, 128, 220, 129, 128, 221, 129, 128, 222, 129, 128, 223, 129, 128, 224, 129, 128, 225, 129, 128, 226, 129, 128, 227, 129, 128, 228, 129, 128, 229, 129, 128, 230, 129, 128, 231, 129, 128, 232, 129, 128, 233, 129, 128, 234, 129, 128, 235, 129, 128, 236, 129, 128, 237, 129, 128, 238, 129, 128, 239, 129, 128, 240, 129, 128, 241, 129, 128, 197, 129, 128, 243, 129, 128, 244, 260, 129, 128, 245, 129, 128, 246, 129, 128, 247, 129, 128, 248, 129, 128, 249, 129, 128, 250, 129, 128, 251, 129, 128, 252, 129, 128, 253, 129, 128, 254, 129, 128, 255, 129, 128, 256, 129, 128, 257, 129, 128, 258, 129, 128, 259, 129, 128, 212, 129, 128, 261, 129, 128, 262, 129, 128, 263, 129, 128, 264, 129, 128, 265, 129, 128, 266, 129, 128, 267, 129, 128, 268, 129, 128, 269, 129, 128, 270, 129, 128, 271, 129, 128, 272, 129, 128, 166, 129, 128, 129, 274, 128, 129, 275, 128, 129, 276, 128, 129, 277, 128, 129, 278, 128, 129, 279, 128, 129, 280, 128, 129, 281, 128, 129, 282, 128, 129, 283, 128, 129, 284, 128, 129, 285, 128, 129, 286, 128, 129, 16, 128, 288, 0, 289, 0, 290, 296, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 13, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 13, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 13, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 338, 337, 338, 337, 339, 338, 338, 16, 451, 350, 16, 338, 337, 340, 338, 337, 341, 351, 376, 397, 409, 436, 338, 337, 342, 338, 337, 343, 338, 337, 344, 338, 337, 345, 338, 337, 346, 338, 337, 347, 338, 337, 348, 338, 337, 349, 338, 337, 350, 338, 337, 338, 101, 337, 352, 338, 337, 353, 338, 337, 354, 338, 337, 355, 338, 337, 356, 338, 337, 357, 338, 337, 358, 338, 337, 359, 338, 337, 360, 338, 337, 361, 338, 337, 362, 338, 337, 363, 338, 337, 364, 338, 337, 365, 338, 337, 366, 338, 337, 367, 338, 337, 368, 338, 337, 369, 338, 337, 370, 338, 337, 371, 338, 337, 372, 338, 337, 373, 338, 337, 374, 338, 337, 375, 338, 337, 338, 101, 337, 377, 338, 337, 378, 338, 337, 379, 385, 338, 337, 380, 338, 337, 381, 338, 337, 382, 338, 337, 383, 338, 337, 384, 338, 337, 350, 338, 337, 386, 338, 337, 387, 338, 337, 388, 338, 337, 389, 338, 337, 390, 338, 337, 391, 338, 337, 392, 338, 337, 393, 338, 337, 394, 338, 337, 395, 338, 337, 396, 338, 337, 350, 338, 337, 398, 338, 337, 399, 338, 337, 400, 338, 337, 401, 338, 337, 402, 338, 337, 403, 338, 337, 404, 338, 337, 405, 338, 337, 406, 338, 337, 407, 338, 337, 408, 338, 337, 350, 338, 337, 410, 338, 337, 411, 338, 337, 412, 338, 337, 413, 338, 337, 414, 338, 337, 415, 338, 337, 416, 338, 337, 417, 338, 337, 418, 338, 337, 419, 338, 337, 420, 338, 337, 421, 338, 337, 422, 338, 337, 423, 338, 337, 424, 338, 337, 425, 338, 337, 426, 338, 337, 427, 338, 337, 428, 338, 337, 429, 338, 337, 430, 338, 337, 431, 338, 337, 432, 338, 337, 433, 338, 337, 434, 338, 337, 435, 338, 337, 406, 338, 337, 437, 338, 337, 438, 338, 337, 439, 338, 337, 440, 338, 337, 441, 338, 337, 442, 338, 337, 443, 338, 337, 444, 338, 337, 445, 338, 337, 446, 338, 337, 447, 338, 337, 448, 338, 337, 449, 338, 337, 450, 338, 337, 375, 338, 337, 338, 452, 337, 338, 453, 337, 338, 454, 337, 338, 455, 337, 338, 456, 337, 338, 457, 337, 338, 458, 337, 338, 459, 337, 338, 460, 337, 338, 461, 337, 338, 462, 337, 338, 463, 337, 338, 464, 337, 338, 16, 337, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 317, 0, 493, 0, 494, 658, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 516, 515, 516, 515, 517, 516, 516, 16, 644, 528, 16, 516, 515, 518, 516, 515, 519, 529, 554, 575, 587, 602, 629, 516, 515, 520, 516, 515, 521, 516, 515, 522, 516, 515, 523, 516, 515, 524, 516, 515, 525, 516, 515, 526, 516, 515, 527, 516, 515, 528, 516, 515, 516, 101, 515, 530, 516, 515, 531, 516, 515, 532, 516, 515, 533, 516, 515, 534, 516, 515, 535, 516, 515, 536, 516, 515, 537, 516, 515, 538, 516, 515, 539, 516, 515, 540, 516, 515, 541, 516, 515, 542, 516, 515, 543, 516, 515, 544, 516, 515, 545, 516, 515, 546, 516, 515, 547, 516, 515, 548, 516, 515, 549, 516, 515, 550, 516, 515, 551, 516, 515, 552, 516, 515, 553, 516, 515, 516, 101, 515, 555, 516, 515, 556, 516, 515, 557, 563, 516, 515, 558, 516, 515, 559, 516, 515, 560, 516, 515, 561, 516, 515, 562, 516, 515, 528, 516, 515, 564, 516, 515, 565, 516, 515, 566, 516, 515, 567, 516, 515, 568, 516, 515, 569, 516, 515, 570, 516, 515, 571, 516, 515, 572, 516, 515, 573, 516, 515, 574, 516, 515, 528, 516, 515, 576, 516, 515, 577, 516, 515, 578, 516, 515, 579, 516, 515, 580, 516, 515, 581, 516, 515, 582, 516, 515, 583, 516, 515, 584, 516, 515, 585, 516, 515, 586, 516, 515, 528, 516, 515, 588, 516, 515, 589, 516, 515, 590, 516, 515, 591, 516, 515, 592, 516, 515, 593, 516, 515, 594, 516, 515, 595, 516, 515, 596, 516, 515, 597, 516, 515, 598, 516, 515, 599, 516, 515, 600, 516, 515, 601, 516, 515, 553, 516, 515, 603, 516, 515, 604, 516, 515, 605, 516, 515, 606, 516, 515, 607, 516, 515, 608, 516, 515, 609, 516, 515, 610, 516, 515, 611, 516, 515, 612, 516, 515, 613, 516, 515, 614, 516, 515, 615, 516, 515, 616, 516, 515, 617, 516, 515, 618, 516, 515, 619, 516, 515, 620, 516, 515, 621, 516, 515, 622, 516, 515, 623, 516, 515, 624, 516, 515, 625, 516, 515, 626, 516, 515, 627, 516, 515, 628, 516, 515, 584, 516, 515, 630, 516, 515, 631, 516, 515, 632, 516, 515, 633, 516, 515, 634, 516, 515, 635, 516, 515, 636, 516, 515, 637, 516, 515, 638, 516, 515, 639, 516, 515, 640, 516, 515, 641, 516, 515, 642, 516, 515, 643, 516, 515, 553, 516, 515, 516, 645, 515, 516, 646, 515, 516, 647, 515, 516, 648, 515, 516, 649, 515, 516, 650, 515, 516, 651, 515, 516, 652, 515, 516, 653, 515, 516, 654, 515, 516, 655, 515, 516, 656, 515, 516, 657, 515, 516, 16, 515, 659, 0, 660, 0, 661, 0, 662, 0, 663, 0, 664, 0, 665, 0, 666, 0, 667, 0, 668, 0, 669, 0, 670, 0, 671, 0, 672, 0, 674, 673, 674, 673, 675, 674, 674, 16, 775, 16, 674, 673, 676, 674, 673, 677, 705, 729, 744, 674, 673, 678, 674, 673, 679, 674, 673, 680, 674, 673, 681, 674, 673, 682, 674, 673, 683, 674, 673, 684, 674, 673, 685, 674, 673, 686, 674, 673, 687, 674, 673, 688, 674, 673, 689, 674, 673, 690, 674, 673, 691, 674, 673, 692, 674, 673, 693, 674, 673, 694, 674, 673, 695, 674, 673, 696, 674, 673, 697, 674, 673, 698, 674, 673, 699, 674, 673, 700, 674, 673, 701, 674, 673, 702, 674, 673, 703, 674, 673, 704, 674, 673, 674, 101, 673, 706, 674, 673, 707, 674, 673, 708, 674, 673, 709, 674, 673, 710, 674, 673, 711, 674, 673, 712, 674, 673, 713, 674, 673, 714, 674, 673, 715, 674, 673, 716, 674, 673, 717, 674, 673, 718, 674, 673, 719, 674, 673, 720, 674, 673, 721, 674, 673, 722, 674, 673, 723, 674, 673, 724, 674, 673, 725, 674, 673, 726, 674, 673, 727, 674, 673, 728, 674, 673, 704, 674, 673, 730, 674, 673, 731, 674, 673, 732, 674, 673, 733, 674, 673, 734, 674, 673, 735, 674, 673, 736, 674, 673, 737, 674, 673, 738, 674, 673, 739, 674, 673, 740, 674, 673, 741, 674, 673, 742, 674, 673, 743, 674, 673, 704, 674, 673, 745, 674, 673, 746, 762, 674, 673, 747, 674, 673, 748, 674, 673, 749, 674, 673, 750, 674, 673, 751, 674, 673, 752, 674, 673, 753, 674, 673, 754, 674, 673, 755, 674, 673, 756, 674, 673, 757, 674, 673, 758, 674, 673, 759, 674, 673, 760, 674, 673, 761, 674, 673, 741, 674, 673, 763, 674, 673, 764, 674, 673, 765, 674, 673, 766, 674, 673, 767, 674, 673, 768, 674, 673, 769, 674, 673, 770, 674, 673, 771, 674, 673, 772, 674, 673, 773, 674, 673, 774, 674, 673, 704, 674, 673, 674, 776, 673, 674, 777, 673, 674, 778, 673, 674, 779, 673, 674, 780, 673, 674, 781, 673, 674, 782, 673, 674, 783, 673, 674, 784, 673, 674, 785, 673, 674, 786, 673, 674, 787, 673, 674, 788, 673, 674, 16, 673, 790, 0, 16, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 791; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/kn.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1569 "ext/gherkin_lexer_kn/gherkin_lexer_kn.c" { cs = lexer_start; } #line 425 "ragel/i18n/kn.c.rl" #line 1576 "ext/gherkin_lexer_kn/gherkin_lexer_kn.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/kn.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/kn.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/kn.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/kn.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/kn.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/kn.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/kn.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/kn.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/kn.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/kn.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/kn.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/kn.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/kn.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/kn.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/kn.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/kn.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/kn.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/kn.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/kn.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/kn.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/kn.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/kn.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/kn.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/kn.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1866 "ext/gherkin_lexer_kn/gherkin_lexer_kn.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/kn.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1929 "ext/gherkin_lexer_kn/gherkin_lexer_kn.c" } } } _out: {} } #line 426 "ragel/i18n/kn.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_kn() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Kn", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_hi/0000755000004100000410000000000012244512574017371 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_hi/extconf.rb0000644000004100000410000000035612244512574021370 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_hi") have_library("c", "main") create_makefile("gherkin_lexer_hi") gherkin-2.12.2/ext/gherkin_lexer_hi/gherkin_lexer_hi.c0000644000004100000410000015701712244512574023056 0ustar www-datawww-data #line 1 "ragel/i18n/hi.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/hi.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_hi/gherkin_lexer_hi.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 13, 23, 24, 25, 26, 27, 28, 29, 30, 32, 34, 45, 46, 47, 49, 51, 56, 61, 66, 71, 75, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 101, 108, 113, 117, 123, 126, 128, 134, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 258, 259, 261, 262, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 317, 319, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 418, 420, 422, 424, 427, 429, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 531, 532, 541, 543, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 642, 644, 647, 649, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 878, 880, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 979, 981, 983, 985, 988, 990, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1166, 1168, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1397, 1398 }; static const char _lexer_trans_keys[] = { -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -92, -123, -119, -108, -107, -102, -100, -92, -86, -81, -80, -32, -92, -105, -32, -92, -80, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -92, -90, -32, -92, -66, -32, -92, -71, -32, -92, -80, -32, -92, -93, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -92, -90, -65, -32, -92, -66, -32, -92, -88, -32, -91, -115, -32, -92, -92, -32, -91, -127, -32, -91, -126, -32, -92, -126, -32, -92, -107, -32, -92, -65, -32, -92, -84, -32, -92, -84, -91, -90, -32, -92, -91, -80, -32, 32, -92, -88, -65, -32, -92, -90, -32, -91, -125, -32, -92, -74, -32, -91, -115, -32, -92, -81, 32, 58, -32, -92, -80, -32, -91, -126, -32, -92, -86, -32, -92, -80, -32, -91, -121, -32, -92, -106, -32, -92, -66, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -92, 10, -123, -108, -107, -102, -100, -92, -86, -81, -80, 10, -32, 10, -92, 10, -105, 10, -32, 10, -92, 10, -80, 10, 10, 32, -32, 10, -92, 10, -90, -65, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -88, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -92, 10, -32, 10, -91, 10, -127, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -126, 10, -32, 10, -92, 10, -107, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -84, 10, -32, 10, -92, 10, -84, 10, -91, -90, -32, 10, -92, 10, -80, 10, -32, 10, 32, -92, 10, -88, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 58, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -92, 10, -123, -108, -107, -102, -100, -92, -86, -81, -80, 10, -32, 10, -92, 10, -105, 10, -32, 10, -92, 10, -80, 10, 10, 32, -32, 10, -92, 10, -90, -65, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -88, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -92, 10, -32, 10, -91, 10, -127, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -126, 10, -32, 10, -92, 10, -107, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -84, 10, -32, 10, -92, 10, -84, 10, -91, -90, -32, 10, -92, -91, 10, -80, 10, -32, 10, 32, -92, 10, -88, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 32, 58, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, -32, 10, -92, 10, -66, 10, 10, 58, -125, 10, -32, 10, -92, 10, -73, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -96, 10, -32, 10, -92, 10, -83, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -82, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, -125, -32, -92, -73, -32, -91, -115, -32, -92, -96, -32, -92, -83, -32, -91, -126, -32, -92, -82, -32, -92, -65, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -92, 10, -123, -108, -107, -102, -100, -92, -86, -81, -80, 10, -32, 10, -92, 10, -105, 10, -32, 10, -92, 10, -80, 10, 10, 32, -32, 10, -92, 10, -90, -65, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -88, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -92, 10, -32, 10, -91, 10, -127, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -126, 10, -32, 10, -92, 10, -107, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -84, 10, -32, 10, -92, 10, -84, 10, -91, -90, -32, 10, -92, 10, -80, 10, -32, 10, 32, -92, 10, -88, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 32, 58, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, -32, 10, -92, 10, -66, 10, 10, 58, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, -32, -92, -90, -32, -91, -126, -32, -92, -86, 32, -32, -92, -78, -32, -91, -121, -32, -92, -106, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -92, 10, -119, -86, -80, 10, -32, 10, -92, 10, -90, 10, -32, 10, -92, 10, -66, 10, -32, 10, -92, 10, -71, 10, -32, 10, -92, 10, -80, 10, -32, 10, -92, 10, -93, 10, 10, 58, -32, 10, -92, -91, 10, -80, 10, -32, 10, -92, 10, -65, 10, -32, 10, -92, 10, -90, 10, -32, 10, -91, 10, -125, 10, -32, 10, -92, 10, -74, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -81, 10, 10, 32, 58, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, -32, 10, -92, 10, -80, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, -32, 10, -92, 10, -66, 10, -125, 10, -32, 10, -92, 10, -73, 10, -32, 10, -91, 10, -115, 10, -32, 10, -92, 10, -96, 10, -32, 10, -92, 10, -83, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -82, 10, -32, 10, -92, 10, -65, 10, -32, 10, -91, 10, -126, 10, -32, 10, -92, 10, -86, 10, 10, 32, -32, 10, -92, 10, -78, 10, -32, 10, -91, 10, -121, 10, -32, 10, -92, 10, -106, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 1, 10, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 7, 2, 10, 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, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 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, 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, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 4, 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, 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, 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, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 14, 25, 27, 29, 31, 33, 35, 37, 39, 42, 45, 56, 58, 60, 63, 66, 71, 76, 81, 86, 90, 94, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 132, 139, 144, 148, 154, 158, 161, 167, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 221, 224, 227, 230, 233, 236, 239, 242, 245, 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, 289, 291, 293, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 363, 365, 368, 370, 373, 375, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 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, 468, 471, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 613, 616, 619, 622, 626, 629, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 782, 784, 793, 796, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 938, 941, 945, 948, 952, 955, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1298, 1301, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1443, 1446, 1449, 1452, 1456, 1459, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1679, 1681, 1683, 1685, 1687, 1689, 1691, 1693, 1695, 1697, 1699, 1701, 1703, 1705, 1707, 1709, 1711, 1713, 1715, 1717, 1719, 1721, 1729, 1732, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1785, 1788, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2066, 2069, 2072, 2074, 2076 }; static const short _lexer_trans_targs[] = { 2, 702, 13, 13, 14, 24, 26, 10, 40, 43, 13, 0, 3, 0, 4, 49, 7, 88, 106, 118, 121, 124, 566, 569, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 13, 25, 12, 13, 25, 12, 2, 13, 13, 14, 24, 26, 10, 40, 43, 13, 0, 15, 0, 16, 0, 18, 17, 17, 18, 17, 17, 19, 19, 20, 19, 19, 19, 19, 20, 19, 19, 19, 19, 21, 19, 19, 19, 19, 22, 19, 19, 13, 23, 23, 0, 13, 23, 23, 0, 13, 25, 24, 13, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 704, 0, 0, 0, 0, 0, 41, 42, 13, 42, 42, 40, 41, 41, 13, 42, 40, 42, 0, 43, 44, 43, 0, 48, 47, 46, 44, 47, 45, 0, 46, 44, 45, 0, 46, 45, 48, 47, 46, 44, 47, 45, 2, 48, 48, 14, 24, 26, 10, 40, 43, 48, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 67, 66, 67, 66, 68, 67, 67, 13, 13, 67, 66, 69, 67, 66, 70, 67, 66, 71, 67, 66, 72, 67, 66, 73, 67, 66, 74, 67, 66, 75, 67, 66, 76, 67, 66, 67, 77, 66, 78, 67, 66, 79, 67, 66, 80, 67, 66, 81, 67, 66, 82, 67, 66, 83, 67, 66, 84, 67, 66, 85, 67, 66, 86, 67, 66, 67, 87, 66, 2, 13, 13, 14, 24, 26, 10, 40, 43, 13, 0, 89, 0, 90, 0, 91, 94, 0, 92, 0, 93, 0, 10, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 10, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 10, 0, 119, 0, 120, 0, 10, 0, 122, 0, 123, 0, 10, 91, 0, 125, 0, 126, 418, 0, 127, 0, 128, 11, 0, 129, 0, 97, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 271, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 170, 169, 170, 169, 171, 170, 170, 13, 257, 179, 13, 170, 169, 172, 170, 169, 173, 176, 180, 198, 210, 213, 216, 238, 241, 170, 169, 174, 170, 169, 175, 170, 169, 176, 170, 169, 177, 170, 169, 178, 170, 169, 179, 170, 169, 170, 87, 169, 181, 170, 169, 182, 170, 169, 183, 186, 170, 169, 184, 170, 169, 185, 170, 169, 179, 170, 169, 187, 170, 169, 188, 170, 169, 189, 170, 169, 190, 170, 169, 191, 170, 169, 192, 170, 169, 193, 170, 169, 194, 170, 169, 195, 170, 169, 196, 170, 169, 197, 170, 169, 179, 170, 169, 199, 170, 169, 200, 170, 169, 201, 170, 169, 202, 170, 169, 203, 170, 169, 204, 170, 169, 205, 170, 169, 206, 170, 169, 207, 170, 169, 208, 170, 169, 209, 170, 169, 179, 170, 169, 211, 170, 169, 212, 170, 169, 179, 170, 169, 214, 170, 169, 215, 170, 169, 179, 170, 183, 169, 217, 170, 169, 218, 170, 169, 219, 170, 169, 220, 170, 87, 169, 221, 170, 169, 189, 222, 170, 169, 223, 170, 169, 224, 170, 169, 225, 170, 169, 226, 170, 169, 227, 170, 169, 228, 170, 169, 229, 170, 169, 230, 170, 169, 231, 170, 169, 232, 170, 169, 233, 170, 169, 234, 170, 169, 235, 170, 169, 236, 170, 169, 237, 170, 169, 170, 87, 169, 239, 170, 169, 240, 170, 169, 207, 170, 169, 242, 170, 169, 243, 170, 169, 244, 170, 169, 245, 170, 169, 246, 170, 169, 247, 170, 169, 170, 248, 169, 249, 170, 169, 250, 170, 169, 251, 170, 169, 252, 170, 169, 253, 170, 169, 254, 170, 169, 255, 170, 169, 256, 170, 169, 237, 170, 169, 170, 258, 169, 170, 259, 169, 170, 260, 169, 170, 261, 169, 170, 262, 169, 170, 263, 169, 170, 264, 169, 170, 265, 169, 170, 266, 169, 170, 267, 169, 170, 268, 169, 170, 269, 169, 170, 270, 169, 170, 13, 169, 273, 272, 273, 272, 274, 273, 273, 13, 404, 282, 13, 273, 272, 275, 273, 272, 276, 279, 283, 301, 313, 316, 319, 385, 388, 273, 272, 277, 273, 272, 278, 273, 272, 279, 273, 272, 280, 273, 272, 281, 273, 272, 282, 273, 272, 273, 87, 272, 284, 273, 272, 285, 273, 272, 286, 289, 273, 272, 287, 273, 272, 288, 273, 272, 282, 273, 272, 290, 273, 272, 291, 273, 272, 292, 273, 272, 293, 273, 272, 294, 273, 272, 295, 273, 272, 296, 273, 272, 297, 273, 272, 298, 273, 272, 299, 273, 272, 300, 273, 272, 282, 273, 272, 302, 273, 272, 303, 273, 272, 304, 273, 272, 305, 273, 272, 306, 273, 272, 307, 273, 272, 308, 273, 272, 309, 273, 272, 310, 273, 272, 311, 273, 272, 312, 273, 272, 282, 273, 272, 314, 273, 272, 315, 273, 272, 282, 273, 272, 317, 273, 272, 318, 273, 272, 282, 273, 286, 272, 320, 273, 272, 321, 363, 273, 272, 322, 273, 272, 323, 273, 87, 272, 324, 273, 272, 292, 325, 273, 272, 326, 273, 272, 327, 273, 272, 328, 273, 272, 329, 273, 272, 330, 273, 272, 331, 273, 272, 332, 273, 272, 333, 273, 272, 334, 273, 272, 335, 273, 272, 336, 273, 272, 337, 273, 272, 338, 273, 272, 339, 273, 272, 340, 273, 272, 273, 341, 87, 272, 342, 273, 272, 343, 273, 272, 344, 273, 272, 345, 273, 272, 346, 273, 272, 347, 273, 272, 348, 273, 272, 349, 273, 272, 350, 273, 272, 351, 273, 272, 352, 273, 272, 353, 273, 272, 354, 273, 272, 355, 273, 272, 356, 273, 272, 357, 273, 272, 358, 273, 272, 359, 273, 272, 360, 273, 272, 361, 273, 272, 362, 273, 272, 273, 87, 272, 364, 273, 272, 365, 273, 272, 366, 273, 272, 367, 273, 272, 368, 273, 272, 369, 273, 272, 370, 273, 272, 371, 273, 272, 372, 273, 272, 373, 273, 272, 374, 273, 272, 375, 273, 272, 376, 273, 272, 377, 273, 272, 378, 273, 272, 379, 273, 272, 380, 273, 272, 381, 273, 272, 382, 273, 272, 383, 273, 272, 384, 273, 272, 362, 273, 272, 386, 273, 272, 387, 273, 272, 310, 273, 272, 389, 273, 272, 390, 273, 272, 391, 273, 272, 392, 273, 272, 393, 273, 272, 394, 273, 272, 273, 395, 272, 396, 273, 272, 397, 273, 272, 398, 273, 272, 399, 273, 272, 400, 273, 272, 401, 273, 272, 402, 273, 272, 403, 273, 272, 362, 273, 272, 273, 405, 272, 273, 406, 272, 273, 407, 272, 273, 408, 272, 273, 409, 272, 273, 410, 272, 273, 411, 272, 273, 412, 272, 273, 413, 272, 273, 414, 272, 273, 415, 272, 273, 416, 272, 273, 417, 272, 273, 13, 272, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 443, 442, 443, 442, 444, 443, 443, 13, 552, 452, 13, 443, 442, 445, 443, 442, 446, 449, 453, 471, 483, 486, 489, 533, 536, 443, 442, 447, 443, 442, 448, 443, 442, 449, 443, 442, 450, 443, 442, 451, 443, 442, 452, 443, 442, 443, 87, 442, 454, 443, 442, 455, 443, 442, 456, 459, 443, 442, 457, 443, 442, 458, 443, 442, 452, 443, 442, 460, 443, 442, 461, 443, 442, 462, 443, 442, 463, 443, 442, 464, 443, 442, 465, 443, 442, 466, 443, 442, 467, 443, 442, 468, 443, 442, 469, 443, 442, 470, 443, 442, 452, 443, 442, 472, 443, 442, 473, 443, 442, 474, 443, 442, 475, 443, 442, 476, 443, 442, 477, 443, 442, 478, 443, 442, 479, 443, 442, 480, 443, 442, 481, 443, 442, 482, 443, 442, 452, 443, 442, 484, 443, 442, 485, 443, 442, 452, 443, 442, 487, 443, 442, 488, 443, 442, 452, 443, 456, 442, 490, 443, 442, 491, 443, 442, 492, 443, 442, 493, 443, 87, 442, 494, 443, 442, 462, 495, 443, 442, 496, 443, 442, 497, 443, 442, 498, 443, 442, 499, 443, 442, 500, 443, 442, 501, 443, 442, 502, 443, 442, 503, 443, 442, 504, 443, 442, 505, 443, 442, 506, 443, 442, 507, 443, 442, 508, 443, 442, 509, 443, 442, 510, 443, 442, 443, 511, 87, 442, 512, 443, 442, 513, 443, 442, 514, 443, 442, 515, 443, 442, 516, 443, 442, 517, 443, 442, 518, 443, 442, 519, 443, 442, 520, 443, 442, 521, 443, 442, 522, 443, 442, 523, 443, 442, 524, 443, 442, 525, 443, 442, 526, 443, 442, 527, 443, 442, 528, 443, 442, 529, 443, 442, 530, 443, 442, 531, 443, 442, 532, 443, 442, 443, 87, 442, 534, 443, 442, 535, 443, 442, 480, 443, 442, 537, 443, 442, 538, 443, 442, 539, 443, 442, 540, 443, 442, 541, 443, 442, 542, 443, 442, 443, 543, 442, 544, 443, 442, 545, 443, 442, 546, 443, 442, 547, 443, 442, 548, 443, 442, 549, 443, 442, 550, 443, 442, 551, 443, 442, 532, 443, 442, 443, 553, 442, 443, 554, 442, 443, 555, 442, 443, 556, 442, 443, 557, 442, 443, 558, 442, 443, 559, 442, 443, 560, 442, 443, 561, 442, 443, 562, 442, 443, 563, 442, 443, 564, 442, 443, 565, 442, 443, 13, 442, 567, 0, 568, 0, 115, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 588, 587, 588, 587, 589, 588, 588, 13, 688, 13, 588, 587, 590, 588, 587, 591, 607, 672, 588, 587, 592, 588, 587, 593, 588, 587, 594, 588, 587, 595, 588, 587, 596, 588, 587, 597, 588, 587, 598, 588, 587, 599, 588, 587, 600, 588, 587, 601, 588, 587, 602, 588, 587, 603, 588, 587, 604, 588, 587, 605, 588, 587, 606, 588, 587, 588, 87, 587, 608, 588, 587, 609, 650, 588, 587, 610, 588, 587, 611, 588, 587, 612, 588, 587, 613, 588, 587, 614, 588, 587, 615, 588, 587, 616, 588, 587, 617, 588, 587, 618, 588, 587, 619, 588, 587, 620, 588, 587, 621, 588, 587, 622, 588, 587, 623, 588, 587, 624, 588, 587, 625, 588, 587, 626, 588, 587, 627, 588, 587, 628, 588, 587, 588, 629, 87, 587, 630, 588, 587, 631, 588, 587, 632, 588, 587, 633, 588, 587, 634, 588, 587, 635, 588, 587, 636, 588, 587, 637, 588, 587, 638, 588, 587, 639, 588, 587, 640, 588, 587, 641, 588, 587, 642, 588, 587, 643, 588, 587, 644, 588, 587, 645, 588, 587, 646, 588, 587, 647, 588, 587, 648, 588, 587, 649, 588, 587, 606, 588, 587, 651, 588, 587, 652, 588, 587, 653, 588, 587, 654, 588, 587, 655, 588, 587, 656, 588, 587, 657, 588, 587, 658, 588, 587, 659, 588, 587, 660, 588, 587, 661, 588, 587, 662, 588, 587, 663, 588, 587, 664, 588, 587, 665, 588, 587, 666, 588, 587, 667, 588, 587, 668, 588, 587, 669, 588, 587, 670, 588, 587, 671, 588, 587, 606, 588, 587, 673, 588, 587, 674, 588, 587, 675, 588, 587, 676, 588, 587, 677, 588, 587, 678, 588, 587, 588, 679, 587, 680, 588, 587, 681, 588, 587, 682, 588, 587, 683, 588, 587, 684, 588, 587, 685, 588, 587, 686, 588, 587, 687, 588, 587, 606, 588, 587, 588, 689, 587, 588, 690, 587, 588, 691, 587, 588, 692, 587, 588, 693, 587, 588, 694, 587, 588, 695, 587, 588, 696, 587, 588, 697, 587, 588, 698, 587, 588, 699, 587, 588, 700, 587, 588, 701, 587, 588, 13, 587, 703, 0, 13, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 704; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/hi.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1452 "ext/gherkin_lexer_hi/gherkin_lexer_hi.c" { cs = lexer_start; } #line 425 "ragel/i18n/hi.c.rl" #line 1459 "ext/gherkin_lexer_hi/gherkin_lexer_hi.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/hi.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/hi.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/hi.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/hi.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/hi.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/hi.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/hi.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/hi.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/hi.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/hi.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/hi.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/hi.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/hi.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/hi.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/hi.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/hi.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/hi.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/hi.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/hi.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/hi.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/hi.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/hi.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/hi.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/hi.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1749 "ext/gherkin_lexer_hi/gherkin_lexer_hi.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/hi.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1812 "ext/gherkin_lexer_hi/gherkin_lexer_hi.c" } } } _out: {} } #line 426 "ragel/i18n/hi.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_hi() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Hi", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en_pirate/0000755000004100000410000000000012244512574020737 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en_pirate/extconf.rb0000644000004100000410000000037412244512574022736 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en_pirate") have_library("c", "main") create_makefile("gherkin_lexer_en_pirate") gherkin-2.12.2/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c0000644000004100000410000012444612244512574025772 0ustar www-datawww-data #line 1 "ragel/i18n/en_pirate.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en_pirate.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 824, 830, 833, 835, 841, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 958, 959, 960, 961 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 71, 72, 76, 83, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 71, 72, 76, 83, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 104, 118, 121, 111, 121, 32, 109, 97, 116, 101, 121, 33, 58, 10, 10, 10, 32, 35, 37, 64, 65, 68, 72, 83, 89, 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, 104, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 71, 72, 76, 83, 89, 124, 9, 13, 108, 105, 109, 101, 121, 33, 101, 97, 100, 32, 109, 101, 110, 32, 116, 101, 108, 108, 32, 110, 111, 32, 116, 97, 108, 101, 115, 58, 10, 10, 10, 32, 35, 65, 124, 9, 13, 10, 104, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 97, 110, 103, 119, 97, 101, 97, 118, 101, 32, 116, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 71, 72, 76, 83, 89, 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, 104, 118, 121, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 97, 10, 115, 10, 116, 10, 33, 10, 101, 10, 108, 10, 105, 10, 109, 10, 101, 10, 121, 10, 97, 10, 110, 10, 103, 10, 119, 10, 97, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 101, 10, 116, 10, 32, 10, 103, 10, 111, 10, 32, 10, 97, 10, 110, 10, 100, 10, 32, 10, 104, 10, 97, 10, 117, 10, 108, 10, 104, 10, 105, 10, 118, 10, 101, 10, 114, 10, 32, 10, 109, 10, 101, 10, 32, 10, 116, 10, 105, 10, 109, 10, 98, 10, 101, 10, 114, 10, 115, 10, 111, 10, 45, 10, 104, 10, 111, 10, 45, 10, 104, 101, 116, 32, 103, 111, 32, 97, 110, 100, 32, 104, 97, 117, 108, 104, 105, 118, 101, 114, 32, 109, 101, 32, 116, 105, 109, 98, 101, 114, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 71, 72, 76, 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, 104, 118, 121, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 97, 10, 115, 10, 116, 10, 33, 10, 101, 10, 108, 10, 105, 10, 109, 10, 101, 10, 121, 10, 97, 10, 110, 10, 103, 10, 119, 10, 97, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 101, 10, 116, 10, 32, 10, 103, 10, 111, 10, 32, 10, 97, 10, 110, 10, 100, 10, 32, 10, 104, 10, 97, 10, 117, 10, 108, 111, 45, 104, 111, 45, 104, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 71, 72, 76, 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, 32, 10, 104, 118, 121, 10, 111, 10, 121, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 121, 10, 33, 10, 58, 10, 97, 10, 115, 10, 116, 10, 33, 10, 101, 10, 108, 10, 105, 10, 109, 10, 101, 10, 121, 10, 97, 10, 110, 10, 103, 10, 119, 10, 97, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 101, 10, 116, 10, 32, 10, 103, 10, 111, 10, 32, 10, 97, 10, 110, 10, 100, 10, 32, 10, 104, 10, 97, 10, 117, 10, 108, 10, 104, 10, 105, 10, 118, 10, 101, 10, 114, 10, 32, 10, 109, 10, 101, 10, 32, 10, 116, 10, 105, 10, 109, 10, 98, 10, 101, 10, 114, 10, 115, 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, 68, 71, 72, 76, 83, 89, 124, 9, 13, 10, 101, 10, 97, 10, 100, 10, 32, 10, 109, 10, 101, 10, 110, 10, 32, 10, 116, 10, 101, 10, 108, 10, 108, 10, 32, 10, 110, 10, 111, 10, 32, 10, 116, 10, 97, 10, 108, 10, 101, 10, 115, 10, 101, 10, 97, 10, 118, 10, 101, 10, 32, 10, 116, 10, 111, 10, 104, 10, 105, 10, 118, 10, 101, 10, 114, 10, 32, 10, 109, 10, 101, 10, 32, 10, 116, 10, 105, 10, 109, 10, 98, 10, 101, 10, 114, 10, 111, 10, 45, 10, 104, 10, 111, 10, 45, 10, 104, 97, 115, 116, 101, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 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, 4, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 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, 328, 330, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1210, 1216, 1220, 1223, 1229, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1396, 1398, 1400, 1402 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 463, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 459, 462, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 50, 49, 50, 49, 50, 50, 4, 51, 4, 65, 410, 431, 438, 453, 50, 49, 50, 52, 49, 50, 53, 49, 50, 54, 49, 50, 55, 49, 50, 56, 49, 50, 57, 49, 50, 58, 49, 50, 59, 49, 50, 60, 49, 50, 61, 49, 50, 62, 49, 50, 63, 49, 50, 64, 49, 50, 4, 49, 50, 66, 49, 50, 67, 49, 50, 68, 49, 50, 69, 49, 50, 70, 49, 50, 71, 49, 50, 72, 49, 50, 73, 49, 50, 74, 49, 50, 75, 49, 50, 76, 49, 4, 4, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 4, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 31, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 107, 106, 107, 106, 107, 107, 4, 108, 4, 107, 106, 107, 109, 106, 107, 110, 106, 107, 111, 106, 107, 112, 106, 107, 113, 106, 107, 114, 106, 107, 115, 106, 107, 116, 106, 107, 117, 106, 107, 118, 106, 107, 76, 106, 120, 0, 121, 0, 122, 0, 123, 0, 81, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 134, 133, 134, 133, 134, 134, 4, 135, 149, 4, 150, 166, 171, 176, 183, 197, 213, 134, 133, 134, 136, 133, 134, 137, 133, 134, 138, 133, 134, 139, 133, 134, 140, 133, 134, 141, 133, 134, 142, 133, 134, 143, 133, 134, 144, 133, 134, 145, 133, 134, 146, 133, 134, 147, 133, 134, 148, 133, 134, 4, 133, 134, 76, 133, 134, 151, 161, 165, 133, 134, 152, 133, 134, 153, 133, 134, 154, 133, 134, 155, 133, 134, 156, 133, 134, 157, 133, 134, 158, 133, 134, 159, 133, 134, 160, 133, 134, 76, 133, 134, 162, 133, 134, 163, 133, 134, 164, 133, 134, 149, 133, 134, 149, 133, 134, 167, 133, 134, 168, 133, 134, 169, 133, 134, 170, 133, 134, 164, 133, 134, 172, 133, 134, 173, 133, 134, 174, 133, 134, 175, 133, 134, 170, 133, 134, 177, 133, 134, 178, 133, 134, 179, 133, 134, 180, 133, 134, 181, 133, 134, 182, 133, 134, 160, 133, 134, 184, 133, 134, 185, 133, 134, 186, 133, 134, 187, 133, 134, 188, 133, 134, 189, 133, 134, 190, 133, 134, 191, 133, 134, 192, 133, 134, 193, 133, 134, 194, 133, 134, 195, 133, 134, 196, 133, 134, 149, 133, 134, 198, 133, 134, 199, 133, 134, 200, 133, 134, 201, 133, 134, 202, 133, 134, 203, 133, 134, 204, 133, 134, 205, 133, 134, 206, 133, 134, 207, 133, 134, 208, 133, 134, 209, 133, 134, 210, 133, 134, 211, 133, 134, 212, 133, 134, 160, 133, 134, 214, 133, 134, 215, 133, 134, 216, 133, 134, 217, 133, 134, 218, 133, 134, 182, 133, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 31, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 252, 251, 252, 251, 252, 252, 4, 253, 267, 4, 268, 284, 289, 294, 301, 252, 251, 252, 254, 251, 252, 255, 251, 252, 256, 251, 252, 257, 251, 252, 258, 251, 252, 259, 251, 252, 260, 251, 252, 261, 251, 252, 262, 251, 252, 263, 251, 252, 264, 251, 252, 265, 251, 252, 266, 251, 252, 4, 251, 252, 76, 251, 252, 269, 279, 283, 251, 252, 270, 251, 252, 271, 251, 252, 272, 251, 252, 273, 251, 252, 274, 251, 252, 275, 251, 252, 276, 251, 252, 277, 251, 252, 278, 251, 252, 76, 251, 252, 280, 251, 252, 281, 251, 252, 282, 251, 252, 267, 251, 252, 267, 251, 252, 285, 251, 252, 286, 251, 252, 287, 251, 252, 288, 251, 252, 282, 251, 252, 290, 251, 252, 291, 251, 252, 292, 251, 252, 293, 251, 252, 288, 251, 252, 295, 251, 252, 296, 251, 252, 297, 251, 252, 298, 251, 252, 299, 251, 252, 300, 251, 252, 278, 251, 252, 302, 251, 252, 303, 251, 252, 304, 251, 252, 305, 251, 252, 306, 251, 252, 307, 251, 252, 308, 251, 252, 309, 251, 252, 310, 251, 252, 311, 251, 252, 312, 251, 252, 313, 251, 252, 314, 251, 252, 267, 251, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 325, 324, 325, 324, 325, 325, 4, 326, 340, 4, 341, 357, 362, 367, 374, 388, 325, 324, 325, 327, 324, 325, 328, 324, 325, 329, 324, 325, 330, 324, 325, 331, 324, 325, 332, 324, 325, 333, 324, 325, 334, 324, 325, 335, 324, 325, 336, 324, 325, 337, 324, 325, 338, 324, 325, 339, 324, 325, 4, 324, 325, 76, 324, 325, 342, 352, 356, 324, 325, 343, 324, 325, 344, 324, 325, 345, 324, 325, 346, 324, 325, 347, 324, 325, 348, 324, 325, 349, 324, 325, 350, 324, 325, 351, 324, 325, 76, 324, 325, 353, 324, 325, 354, 324, 325, 355, 324, 325, 340, 324, 325, 340, 324, 325, 358, 324, 325, 359, 324, 325, 360, 324, 325, 361, 324, 325, 355, 324, 325, 363, 324, 325, 364, 324, 325, 365, 324, 325, 366, 324, 325, 361, 324, 325, 368, 324, 325, 369, 324, 325, 370, 324, 325, 371, 324, 325, 372, 324, 325, 373, 324, 325, 351, 324, 325, 375, 324, 325, 376, 324, 325, 377, 324, 325, 378, 324, 325, 379, 324, 325, 380, 324, 325, 381, 324, 325, 382, 324, 325, 383, 324, 325, 384, 324, 325, 385, 324, 325, 386, 324, 325, 387, 324, 325, 340, 324, 325, 389, 324, 325, 390, 324, 325, 391, 324, 325, 392, 324, 325, 393, 324, 325, 394, 324, 325, 395, 324, 325, 396, 324, 325, 397, 324, 325, 398, 324, 325, 399, 324, 325, 400, 324, 325, 401, 324, 325, 402, 324, 325, 403, 324, 325, 351, 324, 404, 405, 404, 0, 409, 408, 407, 405, 408, 406, 0, 407, 405, 406, 0, 407, 406, 409, 408, 407, 405, 408, 406, 409, 409, 5, 15, 17, 31, 34, 37, 77, 83, 119, 124, 219, 233, 315, 404, 409, 0, 50, 411, 49, 50, 412, 49, 50, 413, 49, 50, 414, 49, 50, 415, 49, 50, 416, 49, 50, 417, 49, 50, 418, 49, 50, 419, 49, 50, 420, 49, 50, 421, 49, 50, 422, 49, 50, 423, 49, 50, 424, 49, 50, 425, 49, 50, 426, 49, 50, 427, 49, 50, 428, 49, 50, 429, 49, 50, 430, 49, 50, 75, 49, 50, 432, 49, 50, 433, 49, 50, 434, 49, 50, 435, 49, 50, 436, 49, 50, 437, 49, 50, 75, 49, 50, 439, 49, 50, 440, 49, 50, 441, 49, 50, 442, 49, 50, 443, 49, 50, 444, 49, 50, 445, 49, 50, 446, 49, 50, 447, 49, 50, 448, 49, 50, 449, 49, 50, 450, 49, 50, 451, 49, 50, 452, 49, 50, 430, 49, 50, 454, 49, 50, 455, 49, 50, 456, 49, 50, 457, 49, 50, 458, 49, 50, 437, 49, 460, 0, 461, 0, 82, 0, 31, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 463; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en_pirate.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1075 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c" { cs = lexer_start; } #line 425 "ragel/i18n/en_pirate.c.rl" #line 1082 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en_pirate.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en_pirate.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en_pirate.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en_pirate.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en_pirate.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en_pirate.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en_pirate.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en_pirate.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en_pirate.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en_pirate.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en_pirate.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en_pirate.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en_pirate.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en_pirate.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en_pirate.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en_pirate.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en_pirate.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en_pirate.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en_pirate.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en_pirate.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en_pirate.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en_pirate.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en_pirate.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en_pirate.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1372 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en_pirate.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1435 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c" } } } _out: {} } #line 426 "ragel/i18n/en_pirate.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en_pirate() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En_pirate", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_hu/0000755000004100000410000000000012244512574017405 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_hu/gherkin_lexer_hu.c0000644000004100000410000011504412244512574023100 0ustar www-datawww-data #line 1 "ragel/i18n/hu.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/hu.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 22, 24, 26, 44, 45, 46, 48, 50, 55, 60, 65, 70, 74, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 100, 107, 112, 115, 116, 117, 118, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 171, 173, 175, 177, 195, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 259, 261, 263, 265, 267, 269, 271, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 540, 546, 549, 551, 557, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 607, 609, 611, 613, 615, 617, 619, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 691, 692, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 745, 747, 749, 751, 753, 755, 757, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 805, 807, 809, 811, 813, 815, 817, 819, 821, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 859, 860 }; static const char _lexer_trans_keys[] = { -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 9, 13, -119, 115, 32, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 100, 107, 109, 111, 116, 116, 107, 111, 114, 101, 105, 110, 110, 121, 105, 98, 101, 110, 101, 111, 114, 103, 97, 116, -61, -77, 107, -61, -74, 110, 121, 118, 32, 58, 118, -61, -95, 122, 108, 97, 116, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 9, 13, -119, 10, 10, 115, 10, 32, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 9, 13, -61, 97, -95, 116, 116, -61, -87, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 9, 13, -119, 10, 10, 115, 10, 32, 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, 100, 107, 109, 10, 111, 10, 116, 10, 116, 10, 107, 10, 111, 10, 114, 10, 101, 105, 10, 110, 10, 110, 10, 121, 10, 105, 10, 98, 10, 101, 10, 110, 10, 101, 10, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 32, 58, 10, 118, -61, 10, -95, 10, 10, 122, 10, 108, 10, 97, 10, 116, 10, 58, 10, 97, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 97, 10, 106, 10, 100, 101, 108, 108, 101, 109, 122, -59, -111, 58, 10, 10, 10, 32, 35, 37, 64, 70, 72, 74, 80, 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, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 32, 58, 10, 118, -61, 10, -95, 10, 10, 122, 10, 108, 10, 97, 10, 116, 10, 58, -61, 10, -95, 10, 10, 116, 10, 116, -61, 10, -87, 10, 10, 114, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, -61, 10, -87, 10, 10, 108, 10, 100, -61, 10, -95, 10, 10, 107, 97, 106, 100, -61, -87, 108, 100, -61, -95, 107, 58, 10, 10, 10, 32, 35, 74, 124, 9, 13, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 58, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 80, 124, 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, 100, 107, 109, 10, 111, 10, 116, 10, 116, 10, 107, 10, 111, 10, 114, 10, 101, 105, 10, 110, 10, 110, 10, 121, 10, 105, 10, 98, 10, 101, 10, 110, 10, 101, 10, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 58, 10, 97, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 97, 10, 106, 10, 100, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 70, 72, 74, 77, 9, 13, -119, 10, 10, 115, 10, 32, 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, 100, 107, 109, 10, 111, 10, 116, 10, 116, 10, 107, 10, 111, 10, 114, 10, 101, 105, 10, 110, 10, 110, 10, 121, 10, 105, 10, 98, 10, 101, 10, 110, 10, 101, 10, 111, 10, 114, 10, 103, 10, 97, 10, 116, -61, 10, -77, 10, 10, 107, -61, 10, -74, 10, 10, 110, 10, 121, 10, 118, 10, 32, 58, 10, 118, -61, 10, -95, 10, 10, 122, 10, 108, 10, 97, 10, 116, 10, 58, -61, 10, 97, -95, 10, 10, 116, 10, 116, -61, 10, -87, 10, 10, 114, 10, 101, 10, 108, 10, 108, 10, 101, 10, 109, 10, 122, -59, 10, -111, 10, 10, 97, 10, 106, 10, 100, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 1, 2, 2, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 2, 2, 16, 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, 4, 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, 3, 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, 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, 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, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 2, 2, 1, 1, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 3, 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, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 25, 28, 31, 49, 51, 53, 56, 59, 64, 69, 74, 79, 83, 87, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 125, 132, 137, 141, 143, 145, 147, 149, 151, 153, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 236, 239, 242, 245, 263, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 350, 355, 358, 361, 364, 367, 370, 373, 377, 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 776, 782, 786, 789, 795, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 860, 863, 866, 869, 872, 875, 878, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 986, 988, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1229, 1231 }; static const short _lexer_trans_targs[] = { 2, 391, 7, 7, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 7, 0, 3, 0, 4, 0, 5, 0, 7, 19, 6, 7, 19, 6, 2, 7, 7, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 7, 0, 9, 0, 10, 0, 12, 11, 11, 12, 11, 11, 13, 13, 14, 13, 13, 13, 13, 14, 13, 13, 13, 13, 15, 13, 13, 13, 13, 16, 13, 13, 7, 17, 17, 0, 7, 17, 17, 0, 7, 19, 18, 7, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 393, 0, 0, 0, 0, 0, 35, 36, 7, 36, 36, 34, 35, 35, 7, 36, 34, 36, 0, 38, 41, 44, 0, 39, 0, 40, 0, 4, 0, 42, 0, 43, 0, 4, 0, 45, 41, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 4, 0, 4, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 315, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 77, 76, 77, 76, 78, 77, 77, 7, 259, 80, 7, 273, 288, 289, 303, 304, 312, 77, 76, 79, 77, 76, 77, 80, 76, 77, 81, 76, 2, 7, 7, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 7, 0, 83, 4, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 92, 91, 92, 91, 93, 92, 92, 7, 96, 95, 7, 110, 125, 126, 148, 149, 157, 92, 91, 94, 92, 91, 92, 95, 91, 92, 81, 91, 92, 97, 91, 92, 98, 91, 92, 99, 91, 92, 100, 91, 92, 101, 91, 92, 102, 91, 92, 103, 91, 92, 104, 91, 92, 105, 91, 92, 106, 91, 92, 107, 91, 92, 108, 91, 92, 109, 91, 92, 7, 91, 92, 111, 114, 117, 91, 92, 112, 91, 92, 113, 91, 92, 95, 91, 92, 115, 91, 92, 116, 91, 92, 95, 91, 92, 118, 114, 91, 92, 119, 91, 92, 120, 91, 92, 121, 91, 92, 122, 91, 92, 123, 91, 92, 124, 91, 92, 95, 91, 92, 95, 91, 92, 127, 91, 92, 128, 91, 92, 129, 91, 92, 130, 91, 92, 131, 91, 132, 92, 91, 133, 92, 91, 92, 134, 91, 135, 92, 91, 136, 92, 91, 92, 137, 91, 92, 138, 91, 92, 139, 91, 92, 140, 81, 91, 92, 141, 91, 142, 92, 91, 143, 92, 91, 92, 144, 91, 92, 145, 91, 92, 146, 91, 92, 147, 91, 92, 81, 91, 92, 95, 91, 92, 150, 91, 92, 151, 91, 92, 152, 91, 92, 153, 91, 92, 154, 91, 92, 155, 91, 156, 92, 91, 147, 92, 91, 92, 158, 91, 92, 159, 91, 92, 95, 91, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 171, 170, 171, 170, 171, 171, 7, 172, 7, 186, 208, 215, 223, 171, 170, 171, 173, 170, 171, 174, 170, 171, 175, 170, 171, 176, 170, 171, 177, 170, 171, 178, 170, 171, 179, 170, 171, 180, 170, 171, 181, 170, 171, 182, 170, 171, 183, 170, 171, 184, 170, 171, 185, 170, 171, 7, 170, 171, 187, 170, 171, 188, 170, 171, 189, 170, 171, 190, 170, 171, 191, 170, 192, 171, 170, 193, 171, 170, 171, 194, 170, 195, 171, 170, 196, 171, 170, 171, 197, 170, 171, 198, 170, 171, 199, 170, 171, 200, 81, 170, 171, 201, 170, 202, 171, 170, 203, 171, 170, 171, 204, 170, 171, 205, 170, 171, 206, 170, 171, 207, 170, 171, 81, 170, 209, 171, 170, 210, 171, 170, 171, 211, 170, 171, 212, 170, 213, 171, 170, 214, 171, 170, 171, 207, 170, 171, 216, 170, 171, 217, 170, 171, 218, 170, 171, 219, 170, 171, 220, 170, 171, 221, 170, 222, 171, 170, 207, 171, 170, 224, 171, 170, 225, 171, 170, 171, 226, 170, 171, 227, 170, 228, 171, 170, 229, 171, 170, 171, 207, 170, 231, 0, 232, 0, 4, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 243, 242, 243, 242, 243, 243, 7, 244, 7, 243, 242, 243, 245, 242, 243, 246, 242, 243, 247, 242, 243, 248, 242, 243, 249, 242, 243, 250, 242, 251, 243, 242, 252, 243, 242, 243, 81, 242, 253, 254, 253, 0, 258, 257, 256, 254, 257, 255, 0, 256, 254, 255, 0, 256, 255, 258, 257, 256, 254, 257, 255, 2, 258, 258, 8, 18, 20, 4, 34, 37, 52, 53, 82, 160, 230, 233, 253, 258, 0, 77, 260, 76, 77, 261, 76, 77, 262, 76, 77, 263, 76, 77, 264, 76, 77, 265, 76, 77, 266, 76, 77, 267, 76, 77, 268, 76, 77, 269, 76, 77, 270, 76, 77, 271, 76, 77, 272, 76, 77, 7, 76, 77, 274, 277, 280, 76, 77, 275, 76, 77, 276, 76, 77, 80, 76, 77, 278, 76, 77, 279, 76, 77, 80, 76, 77, 281, 277, 76, 77, 282, 76, 77, 283, 76, 77, 284, 76, 77, 285, 76, 77, 286, 76, 77, 287, 76, 77, 80, 76, 77, 80, 76, 77, 290, 76, 77, 291, 76, 77, 292, 76, 77, 293, 76, 77, 294, 76, 295, 77, 76, 296, 77, 76, 77, 297, 76, 298, 77, 76, 299, 77, 76, 77, 300, 76, 77, 301, 76, 77, 302, 76, 77, 81, 76, 77, 80, 76, 77, 305, 76, 77, 306, 76, 77, 307, 76, 77, 308, 76, 77, 309, 76, 77, 310, 76, 311, 77, 76, 302, 77, 76, 77, 313, 76, 77, 314, 76, 77, 80, 76, 317, 316, 317, 316, 318, 317, 317, 7, 321, 320, 7, 335, 350, 351, 373, 380, 388, 317, 316, 319, 317, 316, 317, 320, 316, 317, 81, 316, 317, 322, 316, 317, 323, 316, 317, 324, 316, 317, 325, 316, 317, 326, 316, 317, 327, 316, 317, 328, 316, 317, 329, 316, 317, 330, 316, 317, 331, 316, 317, 332, 316, 317, 333, 316, 317, 334, 316, 317, 7, 316, 317, 336, 339, 342, 316, 317, 337, 316, 317, 338, 316, 317, 320, 316, 317, 340, 316, 317, 341, 316, 317, 320, 316, 317, 343, 339, 316, 317, 344, 316, 317, 345, 316, 317, 346, 316, 317, 347, 316, 317, 348, 316, 317, 349, 316, 317, 320, 316, 317, 320, 316, 317, 352, 316, 317, 353, 316, 317, 354, 316, 317, 355, 316, 317, 356, 316, 357, 317, 316, 358, 317, 316, 317, 359, 316, 360, 317, 316, 361, 317, 316, 317, 362, 316, 317, 363, 316, 317, 364, 316, 317, 365, 81, 316, 317, 366, 316, 367, 317, 316, 368, 317, 316, 317, 369, 316, 317, 370, 316, 317, 371, 316, 317, 372, 316, 317, 81, 316, 374, 317, 320, 316, 375, 317, 316, 317, 376, 316, 317, 377, 316, 378, 317, 316, 379, 317, 316, 317, 372, 316, 317, 381, 316, 317, 382, 316, 317, 383, 316, 317, 384, 316, 317, 385, 316, 317, 386, 316, 387, 317, 316, 372, 317, 316, 317, 389, 316, 317, 390, 316, 317, 320, 316, 392, 0, 7, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 63, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 393; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/hu.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 980 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c" { cs = lexer_start; } #line 425 "ragel/i18n/hu.c.rl" #line 987 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/hu.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/hu.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/hu.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/hu.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/hu.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/hu.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/hu.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/hu.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/hu.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/hu.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/hu.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/hu.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/hu.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/hu.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/hu.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/hu.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/hu.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/hu.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/hu.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/hu.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/hu.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/hu.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/hu.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/hu.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1277 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/hu.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1340 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c" } } } _out: {} } #line 426 "ragel/i18n/hu.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_hu() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Hu", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_hu/extconf.rb0000644000004100000410000000035612244512574021404 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_hu") have_library("c", "main") create_makefile("gherkin_lexer_hu") gherkin-2.12.2/ext/gherkin_lexer_en_au/0000755000004100000410000000000012244512574020060 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c0000644000004100000410000015040612244512574024227 0ustar www-datawww-data #line 1 "ragel/i18n/en_au.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en_au.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 957, 958, 959, 960, 961, 962, 963, 964, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1023, 1029, 1032, 1034, 1040, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 70, 73, 80, 82, 84, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 70, 73, 80, 82, 84, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 119, 119, 119, 44, 32, 108, 111, 111, 107, 32, 109, 97, 116, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 70, 73, 80, 82, 84, 89, 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, 70, 73, 80, 82, 84, 89, 124, 9, 13, 117, 116, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, 32, 100, 97, 121, 32, 73, 32, 114, 101, 99, 107, 111, 110, 105, 114, 115, 116, 32, 111, 102, 102, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 73, 80, 82, 84, 89, 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, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 117, 10, 116, 10, 32, 10, 97, 10, 116, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 101, 10, 110, 10, 100, 10, 32, 10, 111, 10, 102, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 100, 10, 97, 10, 121, 10, 32, 10, 73, 10, 32, 10, 114, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 116, 10, 39, 10, 115, 10, 32, 10, 106, 10, 117, 10, 115, 10, 116, 10, 32, 10, 117, 10, 110, 10, 98, 10, 101, 10, 108, 10, 105, 10, 101, 10, 118, 10, 97, 10, 98, 10, 108, 10, 101, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 32, 10, 105, 10, 116, 10, 39, 10, 115, 10, 32, 10, 108, 10, 105, 10, 107, 10, 111, 10, 111, 10, 32, 10, 114, 10, 105, 10, 103, 10, 104, 10, 116, 10, 39, 101, 10, 107, 10, 110, 10, 111, 10, 119, 10, 97, 10, 104, 10, 32, 10, 110, 10, 97, 10, 104, 116, 39, 115, 32, 106, 117, 115, 116, 32, 117, 110, 98, 101, 108, 105, 101, 118, 97, 98, 108, 101, 114, 101, 116, 116, 121, 32, 109, 117, 99, 104, 58, 10, 10, 10, 32, 35, 37, 64, 65, 70, 80, 82, 89, 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, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 105, 10, 114, 10, 115, 10, 116, 10, 32, 10, 111, 10, 102, 10, 102, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 32, 10, 105, 10, 116, 10, 39, 10, 115, 10, 32, 10, 108, 10, 105, 10, 107, 10, 111, 10, 117, 10, 39, 10, 108, 10, 108, 10, 32, 10, 119, 10, 97, 10, 110, 10, 110, 10, 97, 101, 99, 107, 111, 110, 32, 105, 116, 39, 115, 32, 108, 105, 107, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 73, 80, 84, 89, 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, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 117, 10, 116, 10, 32, 10, 97, 10, 116, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 101, 10, 110, 10, 100, 10, 32, 10, 111, 10, 102, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 100, 10, 97, 10, 121, 10, 32, 10, 73, 10, 32, 10, 114, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 116, 10, 39, 10, 115, 10, 32, 10, 106, 10, 117, 10, 115, 10, 116, 10, 32, 10, 117, 10, 110, 10, 98, 10, 101, 10, 108, 10, 105, 10, 101, 10, 118, 10, 97, 10, 98, 10, 108, 10, 101, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 111, 10, 111, 10, 32, 10, 114, 10, 105, 10, 103, 10, 104, 10, 116, 10, 39, 101, 10, 107, 10, 110, 10, 111, 10, 119, 10, 97, 10, 104, 10, 32, 10, 110, 10, 97, 10, 104, 111, 111, 32, 114, 105, 103, 104, 116, 39, 101, 111, 107, 110, 111, 119, 97, 104, 32, 110, 97, 104, 117, 39, 108, 108, 32, 119, 97, 110, 110, 97, 58, 10, 10, 10, 32, 35, 80, 124, 9, 13, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 58, 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, 70, 73, 80, 82, 84, 89, 124, 9, 13, 10, 119, 10, 119, 10, 119, 10, 44, 10, 32, 10, 108, 10, 111, 10, 111, 10, 107, 10, 32, 10, 109, 10, 97, 10, 116, 10, 101, 10, 58, 10, 117, 10, 116, 10, 32, 10, 97, 10, 116, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 101, 10, 110, 10, 100, 10, 32, 10, 111, 10, 102, 10, 32, 10, 116, 10, 104, 10, 101, 10, 32, 10, 100, 10, 97, 10, 121, 10, 32, 10, 73, 10, 32, 10, 114, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 105, 10, 114, 10, 115, 10, 116, 10, 32, 10, 111, 10, 102, 10, 102, 10, 116, 10, 39, 10, 115, 10, 32, 10, 106, 10, 117, 10, 115, 10, 116, 10, 32, 10, 117, 10, 110, 10, 98, 10, 101, 10, 108, 10, 105, 10, 101, 10, 118, 10, 97, 10, 98, 10, 108, 10, 101, 10, 114, 10, 101, 10, 116, 10, 116, 10, 121, 10, 32, 10, 109, 10, 117, 10, 99, 10, 104, 10, 101, 10, 99, 10, 107, 10, 111, 10, 110, 10, 32, 10, 105, 10, 116, 10, 39, 10, 115, 10, 32, 10, 108, 10, 105, 10, 107, 10, 111, 10, 111, 10, 32, 10, 114, 10, 105, 10, 103, 10, 104, 10, 116, 10, 39, 101, 10, 107, 10, 110, 10, 111, 10, 119, 10, 97, 10, 104, 10, 32, 10, 110, 10, 97, 10, 104, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 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, 328, 330, 332, 334, 336, 338, 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, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1531, 1537, 1541, 1544, 1550, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1899, 1902, 1905, 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 652, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 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, 51, 0, 52, 0, 54, 53, 54, 53, 54, 54, 4, 55, 69, 4, 532, 547, 580, 588, 609, 619, 633, 641, 54, 53, 54, 56, 53, 54, 57, 53, 54, 58, 53, 54, 59, 53, 54, 60, 53, 54, 61, 53, 54, 62, 53, 54, 63, 53, 54, 64, 53, 54, 65, 53, 54, 66, 53, 54, 67, 53, 54, 68, 53, 54, 4, 53, 54, 70, 53, 4, 4, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 4, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 31, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 115, 114, 115, 114, 115, 115, 4, 116, 130, 4, 131, 146, 179, 200, 210, 224, 232, 115, 114, 115, 117, 114, 115, 118, 114, 115, 119, 114, 115, 120, 114, 115, 121, 114, 115, 122, 114, 115, 123, 114, 115, 124, 114, 115, 125, 114, 115, 126, 114, 115, 127, 114, 115, 128, 114, 115, 129, 114, 115, 4, 114, 115, 70, 114, 115, 132, 114, 115, 133, 114, 115, 134, 114, 115, 135, 114, 115, 136, 114, 115, 137, 114, 115, 138, 114, 115, 139, 114, 115, 140, 114, 115, 141, 114, 115, 142, 114, 115, 143, 114, 115, 144, 114, 115, 145, 114, 115, 70, 114, 115, 147, 114, 115, 148, 114, 115, 149, 114, 115, 150, 114, 115, 151, 114, 115, 152, 114, 115, 153, 114, 115, 154, 114, 115, 155, 114, 115, 156, 114, 115, 157, 114, 115, 158, 114, 115, 159, 114, 115, 160, 114, 115, 161, 114, 115, 162, 114, 115, 163, 114, 115, 164, 114, 115, 165, 114, 115, 166, 114, 115, 167, 114, 115, 168, 114, 115, 169, 114, 115, 170, 114, 115, 171, 114, 115, 172, 114, 115, 173, 114, 115, 174, 114, 115, 175, 114, 115, 176, 114, 115, 177, 114, 115, 178, 114, 115, 130, 114, 115, 180, 114, 115, 181, 114, 115, 182, 114, 115, 183, 114, 115, 184, 114, 115, 185, 114, 115, 186, 114, 115, 187, 114, 115, 188, 114, 115, 189, 114, 115, 190, 114, 115, 191, 114, 115, 192, 114, 115, 193, 114, 115, 194, 114, 115, 195, 114, 115, 196, 114, 115, 197, 114, 115, 198, 114, 115, 199, 114, 115, 130, 114, 115, 201, 114, 115, 202, 114, 115, 203, 114, 115, 204, 114, 115, 205, 114, 115, 206, 114, 115, 207, 114, 115, 208, 114, 115, 209, 114, 115, 145, 114, 115, 211, 114, 115, 212, 114, 115, 213, 114, 115, 214, 114, 115, 215, 114, 115, 216, 114, 115, 217, 114, 115, 218, 114, 115, 219, 114, 115, 220, 114, 115, 221, 114, 115, 222, 114, 115, 223, 114, 115, 144, 114, 115, 225, 114, 115, 226, 114, 115, 227, 114, 115, 228, 114, 115, 229, 114, 115, 230, 114, 115, 231, 114, 115, 130, 114, 115, 233, 237, 114, 115, 234, 114, 115, 235, 114, 115, 236, 114, 115, 130, 114, 115, 238, 114, 115, 239, 114, 115, 240, 114, 115, 241, 114, 115, 242, 114, 115, 130, 114, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 31, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 277, 276, 277, 276, 277, 277, 4, 278, 4, 292, 307, 315, 325, 339, 277, 276, 277, 279, 276, 277, 280, 276, 277, 281, 276, 277, 282, 276, 277, 283, 276, 277, 284, 276, 277, 285, 276, 277, 286, 276, 277, 287, 276, 277, 288, 276, 277, 289, 276, 277, 290, 276, 277, 291, 276, 277, 4, 276, 277, 293, 276, 277, 294, 276, 277, 295, 276, 277, 296, 276, 277, 297, 276, 277, 298, 276, 277, 299, 276, 277, 300, 276, 277, 301, 276, 277, 302, 276, 277, 303, 276, 277, 304, 276, 277, 305, 276, 277, 306, 276, 277, 70, 276, 277, 308, 276, 277, 309, 276, 277, 310, 276, 277, 311, 276, 277, 312, 276, 277, 313, 276, 277, 314, 276, 277, 306, 276, 277, 316, 276, 277, 317, 276, 277, 318, 276, 277, 319, 276, 277, 320, 276, 277, 321, 276, 277, 322, 276, 277, 323, 276, 277, 324, 276, 277, 306, 276, 277, 326, 276, 277, 327, 276, 277, 328, 276, 277, 329, 276, 277, 330, 276, 277, 331, 276, 277, 332, 276, 277, 333, 276, 277, 334, 276, 277, 335, 276, 277, 336, 276, 277, 337, 276, 277, 338, 276, 277, 305, 276, 277, 340, 276, 277, 341, 276, 277, 342, 276, 277, 343, 276, 277, 344, 276, 277, 345, 276, 277, 346, 276, 277, 347, 276, 277, 348, 276, 277, 349, 276, 277, 306, 276, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 368, 367, 368, 367, 368, 368, 4, 369, 383, 4, 384, 399, 432, 453, 463, 471, 368, 367, 368, 370, 367, 368, 371, 367, 368, 372, 367, 368, 373, 367, 368, 374, 367, 368, 375, 367, 368, 376, 367, 368, 377, 367, 368, 378, 367, 368, 379, 367, 368, 380, 367, 368, 381, 367, 368, 382, 367, 368, 4, 367, 368, 70, 367, 368, 385, 367, 368, 386, 367, 368, 387, 367, 368, 388, 367, 368, 389, 367, 368, 390, 367, 368, 391, 367, 368, 392, 367, 368, 393, 367, 368, 394, 367, 368, 395, 367, 368, 396, 367, 368, 397, 367, 368, 398, 367, 368, 70, 367, 368, 400, 367, 368, 401, 367, 368, 402, 367, 368, 403, 367, 368, 404, 367, 368, 405, 367, 368, 406, 367, 368, 407, 367, 368, 408, 367, 368, 409, 367, 368, 410, 367, 368, 411, 367, 368, 412, 367, 368, 413, 367, 368, 414, 367, 368, 415, 367, 368, 416, 367, 368, 417, 367, 368, 418, 367, 368, 419, 367, 368, 420, 367, 368, 421, 367, 368, 422, 367, 368, 423, 367, 368, 424, 367, 368, 425, 367, 368, 426, 367, 368, 427, 367, 368, 428, 367, 368, 429, 367, 368, 430, 367, 368, 431, 367, 368, 383, 367, 368, 433, 367, 368, 434, 367, 368, 435, 367, 368, 436, 367, 368, 437, 367, 368, 438, 367, 368, 439, 367, 368, 440, 367, 368, 441, 367, 368, 442, 367, 368, 443, 367, 368, 444, 367, 368, 445, 367, 368, 446, 367, 368, 447, 367, 368, 448, 367, 368, 449, 367, 368, 450, 367, 368, 451, 367, 368, 452, 367, 368, 383, 367, 368, 454, 367, 368, 455, 367, 368, 456, 367, 368, 457, 367, 368, 458, 367, 368, 459, 367, 368, 460, 367, 368, 461, 367, 368, 462, 367, 368, 398, 367, 368, 464, 367, 368, 465, 367, 368, 466, 367, 368, 467, 367, 368, 468, 367, 368, 469, 367, 368, 470, 367, 368, 383, 367, 368, 472, 476, 367, 368, 473, 367, 368, 474, 367, 368, 475, 367, 368, 383, 367, 368, 477, 367, 368, 478, 367, 368, 479, 367, 368, 480, 367, 368, 481, 367, 368, 383, 367, 483, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 31, 0, 491, 495, 501, 0, 492, 0, 493, 0, 494, 0, 31, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 31, 0, 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 514, 513, 514, 513, 514, 514, 4, 515, 4, 514, 513, 514, 516, 513, 514, 517, 513, 514, 518, 513, 514, 519, 513, 514, 520, 513, 514, 521, 513, 514, 522, 513, 514, 523, 513, 514, 524, 513, 514, 525, 513, 514, 70, 513, 526, 527, 526, 0, 531, 530, 529, 527, 530, 528, 0, 529, 527, 528, 0, 529, 528, 531, 530, 529, 527, 530, 528, 531, 531, 5, 15, 17, 31, 34, 37, 71, 104, 243, 264, 350, 482, 490, 526, 531, 0, 54, 533, 53, 54, 534, 53, 54, 535, 53, 54, 536, 53, 54, 537, 53, 54, 538, 53, 54, 539, 53, 54, 540, 53, 54, 541, 53, 54, 542, 53, 54, 543, 53, 54, 544, 53, 54, 545, 53, 54, 546, 53, 54, 70, 53, 54, 548, 53, 54, 549, 53, 54, 550, 53, 54, 551, 53, 54, 552, 53, 54, 553, 53, 54, 554, 53, 54, 555, 53, 54, 556, 53, 54, 557, 53, 54, 558, 53, 54, 559, 53, 54, 560, 53, 54, 561, 53, 54, 562, 53, 54, 563, 53, 54, 564, 53, 54, 565, 53, 54, 566, 53, 54, 567, 53, 54, 568, 53, 54, 569, 53, 54, 570, 53, 54, 571, 53, 54, 572, 53, 54, 573, 53, 54, 574, 53, 54, 575, 53, 54, 576, 53, 54, 577, 53, 54, 578, 53, 54, 579, 53, 54, 69, 53, 54, 581, 53, 54, 582, 53, 54, 583, 53, 54, 584, 53, 54, 585, 53, 54, 586, 53, 54, 587, 53, 54, 546, 53, 54, 589, 53, 54, 590, 53, 54, 591, 53, 54, 592, 53, 54, 593, 53, 54, 594, 53, 54, 595, 53, 54, 596, 53, 54, 597, 53, 54, 598, 53, 54, 599, 53, 54, 600, 53, 54, 601, 53, 54, 602, 53, 54, 603, 53, 54, 604, 53, 54, 605, 53, 54, 606, 53, 54, 607, 53, 54, 608, 53, 54, 69, 53, 54, 610, 53, 54, 611, 53, 54, 612, 53, 54, 613, 53, 54, 614, 53, 54, 615, 53, 54, 616, 53, 54, 617, 53, 54, 618, 53, 54, 546, 53, 54, 620, 53, 54, 621, 53, 54, 622, 53, 54, 623, 53, 54, 624, 53, 54, 625, 53, 54, 626, 53, 54, 627, 53, 54, 628, 53, 54, 629, 53, 54, 630, 53, 54, 631, 53, 54, 632, 53, 54, 545, 53, 54, 634, 53, 54, 635, 53, 54, 636, 53, 54, 637, 53, 54, 638, 53, 54, 639, 53, 54, 640, 53, 54, 69, 53, 54, 642, 646, 53, 54, 643, 53, 54, 644, 53, 54, 645, 53, 54, 69, 53, 54, 647, 53, 54, 648, 53, 54, 649, 53, 54, 650, 53, 54, 651, 53, 54, 69, 53, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 652; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en_au.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1369 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c" { cs = lexer_start; } #line 425 "ragel/i18n/en_au.c.rl" #line 1376 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en_au.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en_au.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en_au.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en_au.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en_au.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en_au.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en_au.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en_au.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en_au.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en_au.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en_au.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en_au.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en_au.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en_au.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en_au.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en_au.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en_au.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en_au.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en_au.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en_au.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en_au.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en_au.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en_au.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en_au.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1666 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en_au.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1729 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c" } } } _out: {} } #line 426 "ragel/i18n/en_au.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en_au() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En_au", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en_au/extconf.rb0000644000004100000410000000036412244512574022056 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en_au") have_library("c", "main") create_makefile("gherkin_lexer_en_au") gherkin-2.12.2/ext/gherkin_lexer_en_lol/0000755000004100000410000000000012244512574020241 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en_lol/extconf.rb0000644000004100000410000000036612244512574022241 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en_lol") have_library("c", "main") create_makefile("gherkin_lexer_en_lol") gherkin-2.12.2/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c0000644000004100000410000007746712244512574024610 0ustar www-datawww-data #line 1 "ragel/i18n/en_lol.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en_lol.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 115, 116, 117, 118, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 198, 200, 202, 204, 206, 208, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 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, 325, 326, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 531, 537, 540, 542, 548, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 626 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 73, 77, 79, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 73, 77, 79, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 78, 52, 85, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 73, 77, 79, 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, 68, 69, 73, 77, 79, 87, 124, 9, 13, 69, 88, 65, 77, 80, 76, 90, 58, 10, 10, 10, 32, 35, 79, 124, 9, 13, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 10, 58, 32, 67, 65, 78, 32, 72, 65, 90, 73, 83, 72, 85, 78, 32, 58, 83, 82, 83, 76, 89, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 73, 77, 79, 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, 78, 10, 85, 10, 84, 10, 69, 10, 32, 10, 67, 10, 65, 10, 78, 10, 32, 10, 72, 10, 65, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 58, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 73, 77, 79, 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, 78, 10, 52, 85, 10, 58, 10, 84, 10, 69, 10, 32, 10, 67, 10, 65, 10, 78, 10, 32, 10, 72, 10, 65, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 32, 58, 10, 83, 10, 82, 10, 83, 10, 76, 10, 89, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 72, 32, 72, 65, 73, 58, 10, 10, 10, 32, 35, 37, 64, 66, 69, 77, 79, 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, 52, 10, 58, 10, 88, 10, 65, 10, 77, 10, 80, 10, 76, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 32, 58, 10, 83, 10, 82, 10, 83, 10, 76, 10, 89, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 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, 68, 69, 73, 77, 79, 87, 124, 9, 13, 10, 78, 10, 85, 10, 84, 10, 69, 10, 32, 10, 67, 10, 65, 10, 78, 10, 32, 10, 72, 10, 65, 10, 90, 10, 73, 10, 83, 10, 72, 10, 85, 10, 78, 10, 32, 58, 10, 83, 10, 82, 10, 83, 10, 76, 10, 89, 10, 58, 10, 72, 10, 32, 10, 72, 10, 65, 10, 73, 84, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 13, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 16, 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, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 142, 144, 146, 148, 163, 166, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 253, 256, 259, 262, 265, 268, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 300, 302, 304, 306, 308, 310, 312, 314, 316, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 447, 449, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598, 600, 602, 604, 606, 608, 610, 612, 614, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 744, 750, 754, 757, 763, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 871 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 59, 231, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 59, 231, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 267, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 31, 0, 39, 266, 0, 40, 0, 42, 41, 42, 41, 42, 42, 4, 43, 57, 4, 237, 238, 240, 241, 249, 261, 240, 42, 41, 42, 44, 41, 42, 45, 41, 42, 46, 41, 42, 47, 41, 42, 48, 41, 42, 49, 41, 42, 50, 41, 42, 51, 41, 42, 52, 41, 42, 53, 41, 42, 54, 41, 42, 55, 41, 42, 56, 41, 42, 4, 41, 42, 58, 41, 4, 4, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 59, 231, 4, 0, 37, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 69, 68, 69, 68, 69, 69, 4, 70, 4, 69, 68, 69, 71, 68, 69, 72, 68, 69, 73, 68, 69, 74, 68, 69, 75, 68, 69, 58, 68, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 31, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 137, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 98, 97, 98, 97, 98, 98, 4, 99, 113, 4, 114, 115, 117, 118, 126, 132, 117, 98, 97, 98, 100, 97, 98, 101, 97, 98, 102, 97, 98, 103, 97, 98, 104, 97, 98, 105, 97, 98, 106, 97, 98, 107, 97, 98, 108, 97, 98, 109, 97, 98, 110, 97, 98, 111, 97, 98, 112, 97, 98, 4, 97, 98, 58, 97, 98, 113, 97, 98, 116, 97, 98, 113, 97, 98, 114, 97, 98, 119, 97, 98, 120, 97, 98, 121, 97, 98, 122, 97, 98, 123, 97, 98, 124, 97, 98, 125, 97, 98, 113, 97, 98, 127, 97, 98, 128, 97, 98, 129, 97, 98, 130, 97, 98, 131, 97, 98, 58, 97, 98, 133, 97, 98, 134, 97, 98, 135, 97, 98, 136, 97, 98, 131, 97, 139, 138, 139, 138, 139, 139, 4, 140, 154, 4, 155, 156, 159, 160, 168, 179, 159, 139, 138, 139, 141, 138, 139, 142, 138, 139, 143, 138, 139, 144, 138, 139, 145, 138, 139, 146, 138, 139, 147, 138, 139, 148, 138, 139, 149, 138, 139, 150, 138, 139, 151, 138, 139, 152, 138, 139, 153, 138, 139, 4, 138, 139, 58, 138, 139, 154, 138, 139, 157, 158, 138, 139, 58, 138, 139, 154, 138, 139, 155, 138, 139, 161, 138, 139, 162, 138, 139, 163, 138, 139, 164, 138, 139, 165, 138, 139, 166, 138, 139, 167, 138, 139, 154, 138, 139, 169, 138, 139, 170, 138, 139, 171, 138, 139, 172, 138, 139, 173, 138, 139, 174, 58, 138, 139, 175, 138, 139, 176, 138, 139, 177, 138, 139, 178, 138, 139, 157, 138, 139, 180, 138, 139, 181, 138, 139, 182, 138, 139, 183, 138, 139, 157, 138, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 192, 191, 192, 191, 192, 192, 4, 193, 4, 207, 209, 215, 226, 192, 191, 192, 194, 191, 192, 195, 191, 192, 196, 191, 192, 197, 191, 192, 198, 191, 192, 199, 191, 192, 200, 191, 192, 201, 191, 192, 202, 191, 192, 203, 191, 192, 204, 191, 192, 205, 191, 192, 206, 191, 192, 4, 191, 192, 208, 191, 192, 58, 191, 192, 210, 191, 192, 211, 191, 192, 212, 191, 192, 213, 191, 192, 214, 191, 192, 208, 191, 192, 216, 191, 192, 217, 191, 192, 218, 191, 192, 219, 191, 192, 220, 191, 192, 221, 58, 191, 192, 222, 191, 192, 223, 191, 192, 224, 191, 192, 225, 191, 192, 208, 191, 192, 227, 191, 192, 228, 191, 192, 229, 191, 192, 230, 191, 192, 208, 191, 231, 232, 231, 0, 236, 235, 234, 232, 235, 233, 0, 234, 232, 233, 0, 234, 233, 236, 235, 234, 232, 235, 233, 236, 236, 5, 15, 17, 31, 34, 37, 38, 59, 60, 76, 84, 184, 59, 231, 236, 0, 42, 57, 41, 42, 239, 41, 42, 57, 41, 42, 237, 41, 42, 242, 41, 42, 243, 41, 42, 244, 41, 42, 245, 41, 42, 246, 41, 42, 247, 41, 42, 248, 41, 42, 57, 41, 42, 250, 41, 42, 251, 41, 42, 252, 41, 42, 253, 41, 42, 254, 41, 42, 255, 58, 41, 42, 256, 41, 42, 257, 41, 42, 258, 41, 42, 259, 41, 42, 260, 41, 42, 58, 41, 42, 262, 41, 42, 263, 41, 42, 264, 41, 42, 265, 41, 42, 260, 41, 31, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 267; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en_lol.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 781 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c" { cs = lexer_start; } #line 425 "ragel/i18n/en_lol.c.rl" #line 788 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en_lol.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en_lol.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en_lol.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en_lol.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en_lol.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en_lol.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en_lol.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en_lol.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en_lol.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en_lol.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en_lol.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en_lol.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en_lol.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en_lol.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en_lol.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en_lol.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en_lol.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en_lol.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en_lol.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en_lol.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en_lol.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en_lol.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en_lol.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en_lol.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1078 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en_lol.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1141 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c" } } } _out: {} } #line 426 "ragel/i18n/en_lol.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en_lol() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En_lol", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_vi/0000755000004100000410000000000012244512574017407 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_vi/extconf.rb0000644000004100000410000000035612244512574021406 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_vi") have_library("c", "main") create_makefile("gherkin_lexer_vi") gherkin-2.12.2/ext/gherkin_lexer_vi/gherkin_lexer_vi.c0000644000004100000410000012305312244512574023103 0ustar www-datawww-data #line 1 "ragel/i18n/vi.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/vi.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 352, 354, 356, 358, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 400, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 426, 427, 428, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 542, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 604, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 775, 777, 779, 781, 783, 785, 787, 788, 789, 790, 791, 795, 801, 804, 806, 812, 829, 831, 833, 835, 837, 839, 841, 843, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 919, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 943, 944, 945, 946 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, -31, 105, -69, -111, 105, 32, 99, -31, -70, -93, 110, 104, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 67, 75, 78, 84, 86, 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, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, 104, 111, -31, -69, -81, 32, 108, 105, -31, -69, -121, 117, 58, 10, 10, 10, 32, 35, 84, 124, 9, 13, -61, 10, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, 10, 110, 10, 103, 10, 58, -31, 104, -69, -117, 99, 104, 32, 98, -31, -70, -93, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 67, 75, 78, 84, 86, 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, -31, 10, 105, -69, 10, -111, 10, 10, 105, 10, 32, 10, 99, -31, 10, -70, 10, -93, 10, 10, 110, 10, 104, 10, 58, -31, 10, -70, 10, -65, 10, 10, 116, 10, 104, 10, 111, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 105, 117, 10, 110, 10, 103, 10, 32, 10, 107, 116, -31, 10, -61, 10, -84, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, 10, 104, -58, 10, -80, 10, 10, 110, 10, 103, -61, 10, 104, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, 10, -84, 10, -61, 10, -96, 10, 105, 117, 110, 103, 32, 107, 116, -31, -69, -117, 99, 104, 32, 98, -31, -70, -93, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 67, 75, 78, 84, 86, 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, 105, -31, 10, -70, 10, -65, 10, 10, 116, 10, 104, 10, 111, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 58, 10, 105, 10, 104, -58, 10, -80, 10, 10, 110, 10, 103, -61, 10, 104, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, 10, -84, 10, -61, 10, -96, 10, -61, -84, 110, 104, 32, 104, 117, -31, -69, -111, 110, 103, 104, -58, -80, 110, 103, -61, 104, -84, -83, 110, 104, 32, 104, 117, -31, -69, -111, 110, 103, 110, 104, 32, 110, -60, -125, 110, 103, 58, 10, 10, 10, 32, 35, 37, 64, 66, 68, 75, 84, 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, -31, 10, -69, 10, -111, 10, 10, 105, 10, 32, 10, 99, -31, 10, -70, 10, -93, 10, 10, 110, 10, 104, 10, 58, -31, 10, -69, 10, -81, 10, 10, 32, 10, 108, 10, 105, -31, 10, -69, 10, -121, 10, 10, 117, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 117, 10, 110, 10, 103, 10, 32, 10, 107, 116, -31, 10, -61, 10, -84, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, -61, 10, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, -84, -61, -96, 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, 66, 67, 68, 75, 78, 84, 86, 124, 9, 13, 10, 105, -31, 10, -70, 10, -65, 10, 10, 116, 10, 104, 10, 111, -31, 10, 104, -69, 10, -117, 10, 10, 99, 10, 104, 10, 32, 10, 98, -31, 10, -70, 10, -93, 10, 10, 110, 10, 58, 10, 105, 117, 10, 110, 10, 103, 10, 32, 10, 107, 116, -31, 10, -61, 10, -84, 10, 10, 110, 10, 104, 10, 32, 10, 104, 10, 117, -31, 10, -69, 10, -111, 10, 10, 110, 10, 103, 10, 104, -58, 10, -80, 10, 10, 110, 10, 103, -61, 10, 104, -84, -83, 10, 10, 110, 10, 104, 10, 32, 10, 110, -60, 10, -125, 10, -61, 10, -84, 10, -61, 10, -96, 10, -31, -70, -65, 116, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 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, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 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, 3, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 3, 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, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 4, 3, 2, 4, 15, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 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, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 353, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 491, 494, 497, 500, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 562, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 601, 603, 605, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 775, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 876, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1156, 1158, 1160, 1162, 1166, 1172, 1176, 1179, 1185, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1264, 1267, 1270, 1273, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1335, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1371, 1373, 1375, 1377 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 453, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 449, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 51, 50, 51, 50, 51, 51, 4, 52, 66, 4, 395, 400, 402, 432, 437, 447, 51, 50, 51, 53, 50, 51, 54, 50, 51, 55, 50, 51, 56, 50, 51, 57, 50, 51, 58, 50, 51, 59, 50, 51, 60, 50, 51, 61, 50, 51, 62, 50, 51, 63, 50, 51, 64, 50, 51, 65, 50, 51, 4, 50, 51, 67, 50, 4, 4, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 4, 0, 69, 0, 31, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 83, 82, 83, 82, 83, 83, 4, 84, 4, 83, 82, 85, 83, 82, 86, 83, 82, 83, 87, 82, 83, 88, 82, 83, 89, 82, 83, 90, 82, 91, 83, 82, 92, 83, 82, 83, 93, 82, 83, 94, 82, 83, 67, 82, 96, 189, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 109, 108, 109, 108, 109, 109, 4, 110, 124, 4, 125, 141, 143, 172, 177, 187, 109, 108, 109, 111, 108, 109, 112, 108, 109, 113, 108, 109, 114, 108, 109, 115, 108, 109, 116, 108, 109, 117, 108, 109, 118, 108, 109, 119, 108, 109, 120, 108, 109, 121, 108, 109, 122, 108, 109, 123, 108, 109, 4, 108, 109, 67, 108, 126, 109, 137, 108, 127, 109, 108, 128, 109, 108, 109, 129, 108, 109, 130, 108, 109, 131, 108, 132, 109, 108, 133, 109, 108, 134, 109, 108, 109, 135, 108, 109, 136, 108, 109, 67, 108, 138, 109, 108, 139, 109, 108, 140, 109, 108, 109, 124, 108, 109, 142, 108, 109, 124, 108, 144, 109, 154, 108, 145, 109, 108, 146, 109, 108, 109, 147, 108, 109, 148, 108, 109, 149, 108, 109, 150, 108, 151, 109, 108, 152, 109, 108, 153, 109, 108, 109, 136, 108, 109, 124, 155, 108, 109, 156, 108, 109, 157, 108, 109, 158, 108, 109, 159, 160, 108, 144, 109, 108, 161, 109, 108, 162, 109, 108, 109, 163, 108, 109, 164, 108, 109, 165, 108, 109, 166, 108, 109, 167, 108, 168, 109, 108, 169, 109, 108, 170, 109, 108, 109, 171, 108, 109, 136, 108, 109, 173, 108, 174, 109, 108, 175, 109, 108, 109, 176, 108, 109, 124, 108, 178, 109, 185, 108, 162, 179, 109, 108, 109, 180, 108, 109, 181, 108, 109, 182, 108, 109, 183, 108, 184, 109, 108, 170, 109, 108, 186, 109, 108, 124, 109, 108, 188, 109, 108, 124, 109, 108, 31, 190, 0, 191, 0, 192, 0, 193, 0, 194, 271, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 208, 207, 208, 207, 208, 208, 4, 209, 223, 4, 224, 229, 231, 244, 249, 269, 208, 207, 208, 210, 207, 208, 211, 207, 208, 212, 207, 208, 213, 207, 208, 214, 207, 208, 215, 207, 208, 216, 207, 208, 217, 207, 208, 218, 207, 208, 219, 207, 208, 220, 207, 208, 221, 207, 208, 222, 207, 208, 4, 207, 208, 67, 207, 208, 225, 207, 226, 208, 207, 227, 208, 207, 228, 208, 207, 208, 223, 207, 208, 230, 207, 208, 223, 207, 232, 208, 243, 207, 233, 208, 207, 234, 208, 207, 208, 235, 207, 208, 236, 207, 208, 237, 207, 208, 238, 207, 239, 208, 207, 240, 208, 207, 241, 208, 207, 208, 242, 207, 208, 67, 207, 208, 223, 207, 208, 245, 207, 246, 208, 207, 247, 208, 207, 208, 248, 207, 208, 223, 207, 250, 208, 267, 207, 251, 261, 208, 207, 208, 252, 207, 208, 253, 207, 208, 254, 207, 208, 255, 207, 208, 256, 207, 257, 208, 207, 258, 208, 207, 259, 208, 207, 208, 260, 207, 208, 242, 207, 208, 262, 207, 208, 263, 207, 208, 264, 207, 208, 265, 207, 266, 208, 207, 259, 208, 207, 268, 208, 207, 223, 208, 207, 270, 208, 207, 223, 208, 207, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 205, 0, 284, 0, 285, 0, 286, 0, 287, 0, 31, 0, 289, 385, 0, 290, 300, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 106, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 311, 310, 311, 310, 311, 311, 4, 312, 4, 326, 338, 348, 377, 311, 310, 311, 313, 310, 311, 314, 310, 311, 315, 310, 311, 316, 310, 311, 317, 310, 311, 318, 310, 311, 319, 310, 311, 320, 310, 311, 321, 310, 311, 322, 310, 311, 323, 310, 311, 324, 310, 311, 325, 310, 311, 4, 310, 327, 311, 310, 328, 311, 310, 329, 311, 310, 311, 330, 310, 311, 331, 310, 311, 332, 310, 333, 311, 310, 334, 311, 310, 335, 311, 310, 311, 336, 310, 311, 337, 310, 311, 67, 310, 339, 311, 310, 340, 311, 310, 341, 311, 310, 311, 342, 310, 311, 343, 310, 311, 344, 310, 345, 311, 310, 346, 311, 310, 347, 311, 310, 311, 337, 310, 349, 311, 359, 310, 350, 311, 310, 351, 311, 310, 311, 352, 310, 311, 353, 310, 311, 354, 310, 311, 355, 310, 356, 311, 310, 357, 311, 310, 358, 311, 310, 311, 337, 310, 311, 360, 310, 311, 361, 310, 311, 362, 310, 311, 363, 310, 311, 364, 365, 310, 349, 311, 310, 366, 311, 310, 367, 311, 310, 311, 368, 310, 311, 369, 310, 311, 370, 310, 311, 371, 310, 311, 372, 310, 373, 311, 310, 374, 311, 310, 375, 311, 310, 311, 376, 310, 311, 337, 310, 378, 311, 310, 367, 379, 311, 310, 311, 380, 310, 311, 381, 310, 311, 382, 310, 311, 383, 310, 384, 311, 310, 375, 311, 310, 386, 0, 31, 0, 388, 0, 31, 0, 389, 390, 389, 0, 394, 393, 392, 390, 393, 391, 0, 392, 390, 391, 0, 392, 391, 394, 393, 392, 390, 393, 391, 394, 394, 5, 15, 17, 31, 34, 37, 68, 70, 95, 283, 288, 387, 389, 394, 0, 51, 396, 50, 397, 51, 50, 398, 51, 50, 399, 51, 50, 51, 66, 50, 51, 401, 50, 51, 66, 50, 403, 51, 414, 50, 404, 51, 50, 405, 51, 50, 51, 406, 50, 51, 407, 50, 51, 408, 50, 51, 409, 50, 410, 51, 50, 411, 51, 50, 412, 51, 50, 51, 413, 50, 51, 67, 50, 51, 66, 415, 50, 51, 416, 50, 51, 417, 50, 51, 418, 50, 51, 419, 420, 50, 403, 51, 50, 421, 51, 50, 422, 51, 50, 51, 423, 50, 51, 424, 50, 51, 425, 50, 51, 426, 50, 51, 427, 50, 428, 51, 50, 429, 51, 50, 430, 51, 50, 51, 431, 50, 51, 413, 50, 51, 433, 50, 434, 51, 50, 435, 51, 50, 51, 436, 50, 51, 66, 50, 438, 51, 445, 50, 422, 439, 51, 50, 51, 440, 50, 51, 441, 50, 51, 442, 50, 51, 443, 50, 444, 51, 50, 430, 51, 50, 446, 51, 50, 66, 51, 50, 448, 51, 50, 66, 51, 50, 450, 0, 451, 0, 452, 0, 31, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 453; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/vi.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1062 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c" { cs = lexer_start; } #line 425 "ragel/i18n/vi.c.rl" #line 1069 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/vi.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/vi.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/vi.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/vi.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/vi.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/vi.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/vi.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/vi.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/vi.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/vi.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/vi.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/vi.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/vi.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/vi.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/vi.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/vi.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/vi.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/vi.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/vi.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/vi.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/vi.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/vi.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/vi.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/vi.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1359 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/vi.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1422 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c" } } } _out: {} } #line 426 "ragel/i18n/vi.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_vi() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Vi", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_bg/0000755000004100000410000000000012244512574017361 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_bg/extconf.rb0000644000004100000410000000035612244512574021360 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_bg") have_library("c", "main") create_makefile("gherkin_lexer_bg") gherkin-2.12.2/ext/gherkin_lexer_bg/gherkin_lexer_bg.c0000644000004100000410000014104112244512574023024 0ustar www-datawww-data #line 1 "ragel/i18n/bg.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/bg.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 47, 48, 49, 51, 53, 58, 63, 68, 73, 77, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 103, 110, 115, 119, 125, 128, 130, 136, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 188, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 230, 232, 234, 236, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 504, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 686, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 953, 958, 960, 962, 964, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1158, 1159 }; static const char _lexer_trans_keys[] = { -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -108, -104, -102, -99, -97, -96, -95, -94, -92, -48, -80, -48, -76, -48, -75, -48, -67, -48, -66, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -66, -48, -77, -48, -80, -47, -126, -47, -128, -48, -75, -72, -48, -76, -48, -72, -47, -127, -47, -126, -48, -66, -47, -128, -48, -72, -47, -113, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -108, -104, -102, -99, -96, -95, -94, -92, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -66, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, -66, 10, -48, 10, -77, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -80, 10, 10, 32, -48, 10, -67, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 58, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -48, -68, -48, -75, -47, -128, -48, -72, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -92, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, -80, -48, -68, -48, -70, -48, -80, 32, -48, -67, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -108, -104, -102, -99, -95, -94, -92, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -66, 10, 10, 32, -48, 10, -66, 10, -48, 10, -77, 10, -48, 10, -80, 10, -47, 10, -126, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 58, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -108, -104, -102, -99, -97, -96, -95, -94, -92, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -66, 10, 10, 32, -48, 10, -66, 10, -48, 10, -77, 10, -48, 10, -80, 10, -47, 10, -126, 10, -47, 10, -128, 10, -48, 10, -75, 10, -48, 10, -76, 10, -48, 10, -72, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, 10, 58, -48, 10, -80, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -80, 10, 10, 32, -48, 10, -67, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -66, -48, -67, -48, -80, -48, -69, -48, -67, -48, -66, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -97, -96, -95, -92, 10, -47, 10, -128, 10, -48, 10, -75, -72, 10, -48, 10, -76, 10, -48, 10, -72, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -66, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -113, 10, 10, 58, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -80, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -80, 10, 10, 32, -48, 10, -67, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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, 1, 1, 1, 5, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 10, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 5, 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, 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, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 47, 50, 61, 63, 65, 68, 71, 76, 81, 86, 91, 95, 99, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 137, 144, 149, 153, 159, 163, 166, 172, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 255, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 734, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1008, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1415, 1421, 1424, 1427, 1430, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1721, 1723 }; static const short _lexer_trans_targs[] = { 2, 584, 16, 16, 17, 27, 29, 13, 43, 46, 16, 0, 3, 13, 52, 11, 60, 216, 325, 11, 454, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 16, 28, 15, 16, 28, 15, 2, 16, 16, 17, 27, 29, 13, 43, 46, 16, 0, 18, 0, 19, 0, 21, 20, 20, 21, 20, 20, 22, 22, 23, 22, 22, 22, 22, 23, 22, 22, 22, 22, 24, 22, 22, 22, 22, 25, 22, 22, 16, 26, 26, 0, 16, 26, 26, 0, 16, 28, 27, 16, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 586, 0, 0, 0, 0, 0, 44, 45, 16, 45, 45, 43, 44, 44, 16, 45, 43, 45, 0, 46, 47, 46, 0, 51, 50, 49, 47, 50, 48, 0, 49, 47, 48, 0, 49, 48, 51, 50, 49, 47, 50, 48, 2, 51, 51, 17, 27, 29, 13, 43, 46, 51, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 11, 0, 61, 0, 62, 0, 63, 0, 64, 176, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 83, 82, 83, 82, 84, 83, 83, 16, 162, 95, 16, 83, 82, 85, 95, 97, 93, 105, 121, 93, 136, 83, 82, 86, 83, 82, 87, 83, 82, 88, 83, 82, 89, 83, 82, 90, 83, 82, 91, 83, 82, 92, 83, 82, 93, 83, 82, 94, 83, 82, 95, 83, 82, 83, 96, 82, 2, 16, 16, 17, 27, 29, 13, 43, 46, 16, 0, 98, 83, 82, 99, 83, 82, 100, 83, 82, 101, 83, 82, 102, 83, 82, 103, 83, 82, 104, 83, 82, 93, 83, 82, 106, 83, 82, 107, 83, 82, 108, 83, 82, 109, 83, 82, 110, 83, 82, 111, 83, 82, 112, 83, 82, 113, 83, 82, 83, 114, 82, 115, 83, 82, 116, 83, 82, 117, 83, 82, 118, 83, 82, 83, 119, 82, 120, 83, 82, 121, 83, 82, 122, 83, 82, 123, 83, 82, 124, 83, 82, 125, 83, 82, 126, 83, 82, 127, 83, 82, 128, 83, 82, 129, 83, 82, 130, 83, 82, 131, 83, 82, 132, 83, 82, 133, 83, 82, 134, 83, 82, 135, 83, 82, 83, 96, 82, 137, 83, 82, 138, 83, 82, 139, 83, 82, 140, 83, 82, 141, 83, 82, 142, 83, 82, 143, 83, 82, 144, 83, 82, 145, 83, 82, 146, 83, 82, 147, 83, 82, 148, 83, 82, 149, 83, 82, 150, 83, 82, 151, 83, 82, 152, 83, 82, 153, 83, 82, 154, 83, 82, 155, 83, 82, 156, 83, 82, 157, 83, 82, 158, 83, 82, 159, 83, 82, 160, 83, 82, 161, 83, 82, 135, 83, 82, 83, 163, 82, 83, 164, 82, 83, 165, 82, 83, 166, 82, 83, 167, 82, 83, 168, 82, 83, 169, 82, 83, 170, 82, 83, 171, 82, 83, 172, 82, 83, 173, 82, 83, 174, 82, 83, 175, 82, 83, 16, 82, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 187, 186, 187, 186, 188, 187, 187, 16, 16, 187, 186, 189, 187, 186, 190, 187, 186, 191, 187, 186, 192, 187, 186, 193, 187, 186, 194, 187, 186, 195, 187, 186, 196, 187, 186, 197, 187, 186, 198, 187, 186, 199, 187, 186, 200, 187, 186, 201, 187, 186, 202, 187, 186, 203, 187, 186, 204, 187, 186, 205, 187, 186, 206, 187, 186, 207, 187, 186, 208, 187, 186, 209, 187, 186, 210, 187, 186, 211, 187, 186, 212, 187, 186, 213, 187, 186, 214, 187, 186, 215, 187, 186, 187, 96, 186, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 249, 248, 249, 248, 250, 249, 249, 16, 311, 261, 16, 249, 248, 251, 261, 262, 259, 270, 259, 285, 249, 248, 252, 249, 248, 253, 249, 248, 254, 249, 248, 255, 249, 248, 256, 249, 248, 257, 249, 248, 258, 249, 248, 259, 249, 248, 260, 249, 248, 261, 249, 248, 249, 96, 248, 263, 249, 248, 264, 249, 248, 265, 249, 248, 266, 249, 248, 267, 249, 248, 268, 249, 248, 269, 249, 248, 259, 249, 248, 271, 249, 248, 272, 249, 248, 273, 249, 248, 274, 249, 248, 275, 249, 248, 276, 249, 248, 277, 249, 248, 278, 249, 248, 279, 249, 248, 280, 249, 248, 281, 249, 248, 282, 249, 248, 283, 249, 248, 284, 249, 248, 249, 96, 248, 286, 249, 248, 287, 249, 248, 288, 249, 248, 289, 249, 248, 290, 249, 248, 291, 249, 248, 292, 249, 248, 293, 249, 248, 294, 249, 248, 295, 249, 248, 296, 249, 248, 297, 249, 248, 298, 249, 248, 299, 249, 248, 300, 249, 248, 301, 249, 248, 302, 249, 248, 303, 249, 248, 304, 249, 248, 305, 249, 248, 306, 249, 248, 307, 249, 248, 308, 249, 248, 309, 249, 248, 310, 249, 248, 284, 249, 248, 249, 312, 248, 249, 313, 248, 249, 314, 248, 249, 315, 248, 249, 316, 248, 249, 317, 248, 249, 318, 248, 249, 319, 248, 249, 320, 248, 249, 321, 248, 249, 322, 248, 249, 323, 248, 249, 324, 248, 249, 16, 248, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 342, 341, 342, 341, 343, 342, 342, 16, 440, 354, 16, 342, 341, 344, 354, 355, 352, 363, 384, 400, 352, 414, 342, 341, 345, 342, 341, 346, 342, 341, 347, 342, 341, 348, 342, 341, 349, 342, 341, 350, 342, 341, 351, 342, 341, 352, 342, 341, 353, 342, 341, 354, 342, 341, 342, 96, 341, 356, 342, 341, 357, 342, 341, 358, 342, 341, 359, 342, 341, 360, 342, 341, 361, 342, 341, 362, 342, 341, 352, 342, 341, 364, 342, 341, 365, 342, 341, 366, 342, 341, 367, 342, 341, 368, 342, 341, 369, 342, 341, 370, 342, 341, 371, 342, 341, 372, 342, 341, 373, 342, 341, 374, 342, 341, 375, 342, 341, 376, 342, 341, 377, 342, 341, 378, 342, 341, 379, 342, 341, 380, 342, 341, 381, 342, 341, 382, 342, 341, 383, 342, 341, 342, 96, 341, 385, 342, 341, 386, 342, 341, 387, 342, 341, 388, 342, 341, 389, 342, 341, 390, 342, 341, 391, 342, 341, 392, 342, 341, 342, 393, 341, 394, 342, 341, 395, 342, 341, 396, 342, 341, 397, 342, 341, 342, 398, 341, 399, 342, 341, 400, 342, 341, 401, 342, 341, 402, 342, 341, 403, 342, 341, 404, 342, 341, 405, 342, 341, 406, 342, 341, 407, 342, 341, 408, 342, 341, 409, 342, 341, 410, 342, 341, 411, 342, 341, 412, 342, 341, 413, 342, 341, 383, 342, 341, 415, 342, 341, 416, 342, 341, 417, 342, 341, 418, 342, 341, 419, 342, 341, 420, 342, 341, 421, 342, 341, 422, 342, 341, 423, 342, 341, 424, 342, 341, 425, 342, 341, 426, 342, 341, 427, 342, 341, 428, 342, 341, 429, 342, 341, 430, 342, 341, 431, 342, 341, 432, 342, 341, 433, 342, 341, 434, 342, 341, 435, 342, 341, 436, 342, 341, 437, 342, 341, 438, 342, 341, 439, 342, 341, 383, 342, 341, 342, 441, 341, 342, 442, 341, 342, 443, 341, 342, 444, 341, 342, 445, 341, 342, 446, 341, 342, 447, 341, 342, 448, 341, 342, 449, 341, 342, 450, 341, 342, 451, 341, 342, 452, 341, 342, 453, 341, 342, 16, 341, 455, 0, 456, 0, 457, 0, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 463, 0, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0, 481, 0, 483, 482, 483, 482, 484, 483, 483, 16, 570, 16, 483, 482, 485, 514, 530, 544, 483, 482, 486, 483, 482, 487, 483, 482, 488, 483, 482, 489, 506, 483, 482, 490, 483, 482, 491, 483, 482, 492, 483, 482, 493, 483, 482, 494, 483, 482, 495, 483, 482, 496, 483, 482, 497, 483, 482, 498, 483, 482, 499, 483, 482, 500, 483, 482, 501, 483, 482, 502, 483, 482, 503, 483, 482, 504, 483, 482, 505, 483, 482, 483, 96, 482, 507, 483, 482, 508, 483, 482, 509, 483, 482, 510, 483, 482, 511, 483, 482, 512, 483, 482, 513, 483, 482, 505, 483, 482, 515, 483, 482, 516, 483, 482, 517, 483, 482, 518, 483, 482, 519, 483, 482, 520, 483, 482, 521, 483, 482, 522, 483, 482, 483, 523, 482, 524, 483, 482, 525, 483, 482, 526, 483, 482, 527, 483, 482, 483, 528, 482, 529, 483, 482, 530, 483, 482, 531, 483, 482, 532, 483, 482, 533, 483, 482, 534, 483, 482, 535, 483, 482, 536, 483, 482, 537, 483, 482, 538, 483, 482, 539, 483, 482, 540, 483, 482, 541, 483, 482, 542, 483, 482, 543, 483, 482, 505, 483, 482, 545, 483, 482, 546, 483, 482, 547, 483, 482, 548, 483, 482, 549, 483, 482, 550, 483, 482, 551, 483, 482, 552, 483, 482, 553, 483, 482, 554, 483, 482, 555, 483, 482, 556, 483, 482, 557, 483, 482, 558, 483, 482, 559, 483, 482, 560, 483, 482, 561, 483, 482, 562, 483, 482, 563, 483, 482, 564, 483, 482, 565, 483, 482, 566, 483, 482, 567, 483, 482, 568, 483, 482, 569, 483, 482, 505, 483, 482, 483, 571, 482, 483, 572, 482, 483, 573, 482, 483, 574, 482, 483, 575, 482, 483, 576, 482, 483, 577, 482, 483, 578, 482, 483, 579, 482, 483, 580, 482, 483, 581, 482, 483, 582, 482, 483, 583, 482, 483, 16, 482, 585, 0, 16, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 586; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/bg.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1259 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c" { cs = lexer_start; } #line 425 "ragel/i18n/bg.c.rl" #line 1266 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/bg.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/bg.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/bg.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/bg.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/bg.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/bg.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/bg.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/bg.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/bg.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/bg.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/bg.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/bg.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/bg.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/bg.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/bg.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/bg.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/bg.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/bg.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/bg.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/bg.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/bg.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/bg.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/bg.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/bg.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1556 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/bg.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1619 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c" } } } _out: {} } #line 426 "ragel/i18n/bg.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_bg() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Bg", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_fi/0000755000004100000410000000000012244512574017367 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_fi/extconf.rb0000644000004100000410000000035612244512574021366 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_fi") have_library("c", "main") create_makefile("gherkin_lexer_fi") gherkin-2.12.2/ext/gherkin_lexer_fi/gherkin_lexer_fi.c0000644000004100000410000010237212244512574023044 0ustar www-datawww-data #line 1 "ragel/i18n/fi.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/fi.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 208, 209, 211, 212, 213, 215, 216, 217, 218, 219, 220, 221, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 251, 252, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 350, 352, 354, 356, 359, 361, 363, 365, 367, 369, 371, 373, 374, 375, 376, 377, 378, 379, 380, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 480, 481, 482, 483, 484, 485, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 591, 593, 595, 597, 599, 603, 609, 612, 614, 620, 636, 638, 641, 643, 645, 648, 650, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 97, 117, 110, 117, 116, 116, 105, 105, 108, 109, 101, 116, 101, 116, 97, 97, 105, 110, 97, 105, 115, 117, 117, 115, 58, 10, 10, 10, 32, 35, 37, 64, 79, 84, 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, 109, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 32, 34, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 124, 9, 13, 97, 112, 117, 97, 117, 107, 115, 115, 101, 116, 58, 10, 10, 10, 32, 35, 79, 124, 9, 13, 10, 109, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 58, 97, 10, 10, 10, 32, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 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, 97, 10, 117, 10, 110, 10, 117, 10, 116, 10, 116, 10, 105, 10, 105, 10, 108, 109, 10, 101, 10, 116, 10, 101, 10, 116, 10, 97, 10, 97, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 97, 10, 112, 117, 10, 97, 10, 117, 10, 115, 10, 58, 97, 10, 105, 10, 104, 10, 105, 10, 111, 10, 115, 10, 116, 10, 97, 105, 104, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 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, 97, 10, 117, 10, 110, 10, 117, 10, 116, 10, 116, 10, 105, 10, 105, 10, 108, 109, 10, 101, 10, 116, 10, 101, 10, 116, 10, 97, 10, 97, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 97, 10, 112, 10, 97, 115, 116, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 74, 75, 77, 78, 79, 84, 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, 97, 10, 117, 10, 110, 10, 117, 10, 116, 10, 116, 10, 105, 10, 105, 10, 108, 109, 10, 101, 10, 116, 10, 101, 10, 116, 10, 97, 10, 97, 10, 105, 10, 110, 10, 97, 10, 105, 10, 115, 10, 117, 10, 117, 10, 115, 10, 58, 10, 97, 10, 112, 10, 97, 10, 117, 10, 115, 10, 58, 97, 10, 105, 10, 104, 10, 105, 10, 111, 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, 74, 75, 77, 78, 79, 84, 124, 9, 13, 10, 97, 10, 112, 117, 10, 97, 10, 117, 10, 107, 115, 10, 115, 10, 101, 10, 116, 10, 58, 97, 10, 105, 10, 104, 10, 105, 10, 111, 10, 115, 10, 116, 10, 97, 0 }; static const char _lexer_single_lengths[] = { 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 12, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 12, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 4, 3, 2, 4, 14, 2, 3, 2, 2, 3, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 135, 137, 139, 141, 143, 145, 147, 149, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 283, 285, 288, 290, 292, 295, 297, 299, 301, 303, 305, 307, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 349, 351, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 490, 493, 496, 499, 503, 506, 509, 512, 515, 518, 521, 524, 526, 528, 530, 532, 534, 536, 538, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 681, 683, 685, 687, 689, 691, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 842, 845, 848, 851, 854, 858, 864, 868, 871, 877, 893, 896, 900, 903, 906, 910, 913, 916, 919, 923, 926, 929, 932, 935, 938, 941, 944 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 295, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 31, 0, 39, 0, 31, 0, 41, 0, 42, 0, 37, 0, 44, 0, 39, 0, 46, 52, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 39, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 63, 62, 63, 62, 63, 63, 4, 64, 4, 78, 279, 63, 62, 63, 65, 62, 63, 66, 62, 63, 67, 62, 63, 68, 62, 63, 69, 62, 63, 70, 62, 63, 71, 62, 63, 72, 62, 63, 73, 62, 63, 74, 62, 63, 75, 62, 63, 76, 62, 63, 77, 62, 63, 4, 62, 63, 79, 62, 63, 80, 62, 63, 81, 62, 63, 82, 62, 63, 83, 62, 63, 84, 62, 63, 85, 62, 63, 86, 62, 63, 87, 62, 63, 88, 62, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 4, 0, 90, 0, 91, 217, 0, 92, 0, 93, 0, 94, 111, 0, 95, 0, 96, 0, 97, 0, 98, 0, 100, 99, 100, 99, 100, 100, 4, 101, 4, 100, 99, 100, 102, 99, 100, 103, 99, 100, 104, 99, 100, 105, 99, 100, 106, 99, 100, 107, 99, 100, 108, 99, 100, 109, 99, 100, 110, 99, 100, 88, 99, 112, 167, 0, 114, 113, 114, 113, 114, 114, 4, 115, 129, 4, 130, 131, 133, 136, 138, 154, 114, 113, 114, 116, 113, 114, 117, 113, 114, 118, 113, 114, 119, 113, 114, 120, 113, 114, 121, 113, 114, 122, 113, 114, 123, 113, 114, 124, 113, 114, 125, 113, 114, 126, 113, 114, 127, 113, 114, 128, 113, 114, 4, 113, 114, 88, 113, 114, 129, 113, 114, 132, 113, 114, 129, 113, 114, 134, 113, 114, 135, 113, 114, 130, 113, 114, 137, 113, 114, 132, 113, 114, 139, 145, 113, 114, 140, 113, 114, 141, 113, 114, 142, 113, 114, 143, 113, 114, 144, 113, 114, 132, 113, 114, 146, 113, 114, 147, 113, 114, 148, 113, 114, 149, 113, 114, 150, 113, 114, 151, 113, 114, 152, 113, 114, 153, 113, 114, 88, 113, 114, 155, 113, 114, 156, 164, 113, 114, 157, 113, 114, 158, 113, 114, 159, 113, 114, 88, 160, 113, 114, 161, 113, 114, 162, 113, 114, 163, 113, 114, 153, 113, 114, 165, 113, 114, 166, 113, 114, 153, 113, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 174, 173, 174, 173, 174, 174, 4, 175, 189, 4, 190, 191, 193, 196, 198, 214, 174, 173, 174, 176, 173, 174, 177, 173, 174, 178, 173, 174, 179, 173, 174, 180, 173, 174, 181, 173, 174, 182, 173, 174, 183, 173, 174, 184, 173, 174, 185, 173, 174, 186, 173, 174, 187, 173, 174, 188, 173, 174, 4, 173, 174, 88, 173, 174, 189, 173, 174, 192, 173, 174, 189, 173, 174, 194, 173, 174, 195, 173, 174, 190, 173, 174, 197, 173, 174, 192, 173, 174, 199, 205, 173, 174, 200, 173, 174, 201, 173, 174, 202, 173, 174, 203, 173, 174, 204, 173, 174, 192, 173, 174, 206, 173, 174, 207, 173, 174, 208, 173, 174, 209, 173, 174, 210, 173, 174, 211, 173, 174, 212, 173, 174, 213, 173, 174, 88, 173, 174, 215, 173, 174, 216, 173, 174, 211, 173, 218, 0, 219, 0, 220, 0, 221, 0, 223, 222, 223, 222, 223, 223, 4, 224, 238, 4, 239, 240, 242, 245, 247, 263, 223, 222, 223, 225, 222, 223, 226, 222, 223, 227, 222, 223, 228, 222, 223, 229, 222, 223, 230, 222, 223, 231, 222, 223, 232, 222, 223, 233, 222, 223, 234, 222, 223, 235, 222, 223, 236, 222, 223, 237, 222, 223, 4, 222, 223, 88, 222, 223, 238, 222, 223, 241, 222, 223, 238, 222, 223, 243, 222, 223, 244, 222, 223, 239, 222, 223, 246, 222, 223, 241, 222, 223, 248, 254, 222, 223, 249, 222, 223, 250, 222, 223, 251, 222, 223, 252, 222, 223, 253, 222, 223, 241, 222, 223, 255, 222, 223, 256, 222, 223, 257, 222, 223, 258, 222, 223, 259, 222, 223, 260, 222, 223, 261, 222, 223, 262, 222, 223, 88, 222, 223, 264, 222, 223, 265, 222, 223, 266, 222, 223, 267, 222, 223, 268, 222, 223, 88, 269, 222, 223, 270, 222, 223, 271, 222, 223, 272, 222, 223, 262, 222, 273, 274, 273, 0, 278, 277, 276, 274, 277, 275, 0, 276, 274, 275, 0, 276, 275, 278, 277, 276, 274, 277, 275, 278, 278, 5, 15, 17, 31, 34, 37, 38, 40, 43, 45, 89, 273, 278, 0, 63, 280, 62, 63, 281, 292, 62, 63, 282, 62, 63, 283, 62, 63, 284, 287, 62, 63, 285, 62, 63, 286, 62, 63, 87, 62, 63, 88, 288, 62, 63, 289, 62, 63, 290, 62, 63, 291, 62, 63, 87, 62, 63, 293, 62, 63, 294, 62, 63, 87, 62, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 295; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/fi.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 819 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c" { cs = lexer_start; } #line 425 "ragel/i18n/fi.c.rl" #line 826 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/fi.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/fi.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/fi.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/fi.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/fi.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/fi.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/fi.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/fi.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/fi.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/fi.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/fi.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/fi.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/fi.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/fi.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/fi.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/fi.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/fi.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/fi.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/fi.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/fi.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/fi.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/fi.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/fi.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/fi.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1116 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/fi.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1179 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c" } } } _out: {} } #line 426 "ragel/i18n/fi.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_fi() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Fi", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en_tx/0000755000004100000410000000000012244512574020106 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en_tx/extconf.rb0000644000004100000410000000036412244512574022104 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en_tx") have_library("c", "main") create_makefile("gherkin_lexer_en_tx") gherkin-2.12.2/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c0000644000004100000410000010576112244512574024307 0ustar www-datawww-data #line 1 "ragel/i18n/en_tx.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en_tx.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 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, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 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, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 342, 344, 346, 348, 350, 352, 354, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 473, 475, 477, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 631, 635, 641, 644, 646, 652, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 729 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 110, 108, 32, 121, 39, 97, 108, 108, 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, 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, 108, 110, 10, 108, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 58, 10, 100, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 117, 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, 104, 116, 32, 121, 39, 97, 108, 108, 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, 65, 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, 108, 10, 108, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 58, 10, 97, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 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, 105, 118, 101, 110, 99, 101, 110, 97, 114, 105, 111, 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, 108, 110, 10, 108, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 58, 10, 100, 10, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 10, 97, 117, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 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, 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, 32, 10, 121, 10, 39, 10, 97, 10, 108, 10, 108, 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, 100, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 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, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 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, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 238, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 473, 476, 479, 482, 485, 488, 491, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 904, 908, 914, 918, 921, 927, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1034 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 290, 291, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 290, 291, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 327, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 326, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 48, 47, 48, 47, 48, 48, 4, 49, 63, 4, 297, 305, 307, 314, 318, 325, 325, 48, 47, 48, 50, 47, 48, 51, 47, 48, 52, 47, 48, 53, 47, 48, 54, 47, 48, 55, 47, 48, 56, 47, 48, 57, 47, 48, 58, 47, 48, 59, 47, 48, 60, 47, 48, 61, 47, 48, 62, 47, 48, 4, 47, 48, 64, 47, 4, 4, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 290, 291, 4, 0, 66, 129, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 77, 76, 77, 76, 77, 77, 4, 78, 92, 4, 93, 109, 111, 117, 121, 128, 128, 77, 76, 77, 79, 76, 77, 80, 76, 77, 81, 76, 77, 82, 76, 77, 83, 76, 77, 84, 76, 77, 85, 76, 77, 86, 76, 77, 87, 76, 77, 88, 76, 77, 89, 76, 77, 90, 76, 77, 91, 76, 77, 4, 76, 77, 64, 76, 77, 94, 102, 76, 77, 95, 76, 77, 96, 76, 77, 97, 76, 77, 98, 76, 77, 99, 76, 77, 100, 76, 77, 101, 76, 77, 64, 76, 77, 103, 76, 77, 104, 76, 77, 105, 76, 77, 106, 76, 77, 107, 76, 77, 108, 76, 77, 92, 76, 77, 110, 76, 77, 103, 76, 77, 112, 76, 77, 113, 76, 77, 114, 76, 77, 115, 76, 77, 116, 76, 77, 101, 76, 77, 118, 76, 77, 119, 76, 77, 120, 76, 77, 103, 76, 77, 122, 76, 77, 123, 76, 77, 124, 76, 77, 125, 76, 77, 126, 76, 77, 127, 76, 77, 101, 76, 77, 119, 76, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 31, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 146, 145, 146, 145, 146, 146, 4, 147, 4, 146, 145, 146, 148, 145, 146, 149, 145, 146, 150, 145, 146, 151, 145, 146, 152, 145, 146, 153, 145, 146, 64, 145, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 163, 162, 163, 162, 163, 163, 4, 164, 4, 178, 187, 196, 203, 209, 163, 162, 163, 165, 162, 163, 166, 162, 163, 167, 162, 163, 168, 162, 163, 169, 162, 163, 170, 162, 163, 171, 162, 163, 172, 162, 163, 173, 162, 163, 174, 162, 163, 175, 162, 163, 176, 162, 163, 177, 162, 163, 4, 162, 163, 179, 162, 163, 180, 162, 163, 181, 162, 163, 182, 162, 163, 183, 162, 163, 184, 162, 163, 185, 162, 163, 186, 162, 163, 64, 162, 163, 188, 162, 163, 189, 162, 163, 190, 162, 163, 191, 162, 163, 192, 162, 163, 193, 162, 163, 194, 162, 163, 195, 162, 163, 186, 162, 163, 197, 162, 163, 198, 162, 163, 199, 162, 163, 200, 162, 163, 201, 162, 163, 202, 162, 163, 186, 162, 163, 204, 162, 163, 205, 162, 163, 206, 162, 163, 207, 162, 163, 208, 162, 163, 186, 162, 163, 210, 162, 163, 211, 162, 163, 212, 162, 163, 213, 162, 163, 214, 162, 163, 215, 162, 163, 186, 162, 217, 0, 218, 0, 219, 0, 130, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 230, 229, 230, 229, 230, 230, 4, 231, 245, 4, 246, 262, 272, 278, 282, 289, 289, 230, 229, 230, 232, 229, 230, 233, 229, 230, 234, 229, 230, 235, 229, 230, 236, 229, 230, 237, 229, 230, 238, 229, 230, 239, 229, 230, 240, 229, 230, 241, 229, 230, 242, 229, 230, 243, 229, 230, 244, 229, 230, 4, 229, 230, 64, 229, 230, 247, 255, 229, 230, 248, 229, 230, 249, 229, 230, 250, 229, 230, 251, 229, 230, 252, 229, 230, 253, 229, 230, 254, 229, 230, 64, 229, 230, 256, 229, 230, 257, 229, 230, 258, 229, 230, 259, 229, 230, 260, 229, 230, 261, 229, 230, 245, 229, 230, 263, 271, 229, 230, 264, 229, 230, 265, 229, 230, 266, 229, 230, 267, 229, 230, 268, 229, 230, 269, 229, 230, 270, 229, 230, 254, 229, 230, 256, 229, 230, 273, 229, 230, 274, 229, 230, 275, 229, 230, 276, 229, 230, 277, 229, 230, 254, 229, 230, 279, 229, 230, 280, 229, 230, 281, 229, 230, 256, 229, 230, 283, 229, 230, 284, 229, 230, 285, 229, 230, 286, 229, 230, 287, 229, 230, 288, 229, 230, 254, 229, 230, 280, 229, 218, 0, 291, 292, 291, 0, 296, 295, 294, 292, 295, 293, 0, 294, 292, 293, 0, 294, 293, 296, 295, 294, 292, 295, 293, 296, 296, 5, 15, 17, 31, 34, 37, 65, 136, 154, 216, 220, 290, 290, 291, 296, 0, 48, 298, 47, 48, 299, 47, 48, 300, 47, 48, 301, 47, 48, 302, 47, 48, 303, 47, 48, 304, 47, 48, 63, 47, 48, 306, 47, 48, 299, 47, 48, 308, 47, 48, 309, 47, 48, 310, 47, 48, 311, 47, 48, 312, 47, 48, 313, 47, 48, 64, 47, 48, 315, 47, 48, 316, 47, 48, 317, 47, 48, 299, 47, 48, 319, 47, 48, 320, 47, 48, 321, 47, 48, 322, 47, 48, 323, 47, 48, 324, 47, 48, 313, 47, 48, 316, 47, 130, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 327; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en_tx.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 869 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c" { cs = lexer_start; } #line 425 "ragel/i18n/en_tx.c.rl" #line 876 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en_tx.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en_tx.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en_tx.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en_tx.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en_tx.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en_tx.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en_tx.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en_tx.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en_tx.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en_tx.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en_tx.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en_tx.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en_tx.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en_tx.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en_tx.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en_tx.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en_tx.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en_tx.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en_tx.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en_tx.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en_tx.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en_tx.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en_tx.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en_tx.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1166 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en_tx.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1229 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c" } } } _out: {} } #line 426 "ragel/i18n/en_tx.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en_tx() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En_tx", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_ro/0000755000004100000410000000000012244512574017411 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_ro/extconf.rb0000644000004100000410000000035612244512574021410 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_ro") have_library("c", "main") create_makefile("gherkin_lexer_ro") gherkin-2.12.2/ext/gherkin_lexer_ro/gherkin_lexer_ro.c0000644000004100000410000012065012244512574023107 0ustar www-datawww-data #line 1 "ragel/i18n/ro.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/ro.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 22, 24, 26, 44, 45, 46, 47, 49, 51, 56, 61, 66, 71, 75, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 101, 108, 113, 114, 115, 116, 117, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 146, 148, 150, 152, 170, 171, 175, 176, 177, 178, 179, 180, 181, 182, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 201, 203, 205, 207, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 238, 239, 240, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 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, 328, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 384, 386, 388, 390, 392, 393, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 493, 495, 497, 499, 501, 503, 505, 507, 511, 513, 515, 517, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 576, 578, 580, 582, 584, 585, 586, 587, 588, 589, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 667, 669, 671, 673, 675, 680, 682, 684, 686, 688, 690, 692, 694, 698, 700, 702, 704, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 737, 739, 741, 743, 745, 747, 749, 753, 759, 762, 764, 770, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 829, 831, 833, 835, 837, 842, 844, 846, 848, 850, 852, 854, 856, 860, 862, 864, 866, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 927, 929, 931, 933, 935, 936, 937 }; static const char _lexer_trans_keys[] = { -59, -56, -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, -98, 105, 32, 10, 13, 10, 13, -59, -56, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, -104, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 116, 117, 110, 99, -61, 97, 111, -94, 110, 100, 110, 116, 101, 120, 116, 58, 10, 10, -59, -56, 10, 32, 35, 37, 42, 64, 65, 67, 68, 70, 83, 9, 13, -98, 10, 10, 105, 10, 32, -59, -56, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, 97, -59, -56, 114, 116, -93, 105, 32, 102, 105, 105, -101, 32, 101, 105, 120, 101, 109, 112, 108, 101, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 58, -101, 10, 117, 110, 99, -59, -56, 116, -93, 105, 111, 110, 97, 108, 105, 116, 97, 116, 101, 58, 10, 10, 10, 32, 35, 37, 64, 67, 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, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, 10, 120, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, -101, 10, 10, 99, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 114, 10, 117, 10, 99, 10, 116, 10, 117, 10, 114, -60, 10, 97, -125, 10, 10, 32, 10, 115, 10, 99, -101, 99, 105, 116, 101, 110, 97, 114, 105, 117, 58, 10, 10, -59, -56, 10, 32, 35, 37, 42, 64, 65, 67, 68, 70, 83, 9, 13, -98, 10, 10, 105, 10, 32, -104, 10, 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, 116, 10, 117, 10, 110, 10, 99, -61, 10, 97, 111, -94, 10, 10, 110, 10, 100, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, 10, 97, -59, -56, 10, 114, 116, -93, 10, 10, 105, 10, 32, 10, 102, 10, 105, 10, 105, -101, 10, 10, 32, 101, 105, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, -101, 10, 10, 99, 105, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 114, 10, 117, 10, 99, 10, 116, 10, 117, 10, 114, -60, 10, 97, -125, 10, 10, 32, 10, 115, 10, 99, 114, 117, 99, 116, 117, 114, -60, 97, -125, 32, 115, 99, 101, 110, 97, 114, 105, 117, 58, 10, 10, -59, -56, 10, 32, 35, 37, 42, 64, 65, 67, 68, 70, 83, 9, 13, -98, 10, 10, 105, 10, 32, -104, 10, 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, 116, 10, 117, 10, 110, 10, 99, -61, 10, 97, -94, 10, 10, 110, 10, 100, 10, 97, -59, -56, 10, 114, 116, -93, 10, 10, 105, 10, 32, 10, 102, 10, 105, 10, 105, -101, 10, 10, 32, 101, 105, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 58, -101, 10, 10, 99, 105, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -59, -56, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 83, 124, 9, 13, -104, 10, 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, 116, 10, 117, 10, 110, 10, 99, -61, 10, 97, -94, 10, 10, 110, 10, 100, 10, 97, -59, -56, 10, 114, 116, -93, 10, 10, 105, 10, 32, 10, 102, 10, 105, 10, 105, -101, 10, 10, 32, 101, 105, 10, 117, 10, 110, 10, 99, -59, -56, 10, 116, -93, 10, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 58, -101, 10, 10, 99, 105, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 114, 10, 117, 10, 99, 10, 116, 10, 117, 10, 114, -60, 10, 97, -125, 10, 10, 32, 10, 115, 10, 99, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 1, 2, 2, 16, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 2, 2, 16, 1, 4, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 1, 1, 1, 1, 1, 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, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 3, 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, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 1, 0, 0, 0, 1, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 25, 28, 31, 49, 51, 53, 55, 58, 61, 66, 71, 76, 81, 85, 89, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 127, 134, 139, 141, 143, 145, 147, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 188, 191, 194, 197, 215, 217, 222, 224, 226, 228, 230, 232, 234, 236, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 265, 268, 271, 274, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 320, 322, 324, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 539, 542, 545, 548, 551, 553, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 697, 700, 703, 706, 709, 712, 715, 718, 723, 726, 729, 732, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 818, 821, 824, 827, 830, 832, 834, 836, 838, 840, 842, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 956, 959, 962, 965, 968, 974, 977, 980, 983, 986, 989, 992, 995, 1000, 1003, 1006, 1009, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1079, 1085, 1089, 1092, 1098, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1177, 1180, 1183, 1186, 1189, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1221, 1224, 1227, 1230, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1319, 1322, 1325, 1328, 1331, 1333, 1335 }; static const short _lexer_trans_targs[] = { 2, 8, 418, 7, 7, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 7, 0, 3, 0, 4, 0, 5, 0, 7, 20, 6, 7, 20, 6, 2, 8, 7, 7, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 7, 0, 3, 0, 10, 0, 11, 0, 13, 12, 12, 13, 12, 12, 14, 14, 15, 14, 14, 14, 14, 15, 14, 14, 14, 14, 16, 14, 14, 14, 14, 17, 14, 14, 7, 18, 18, 0, 7, 18, 18, 0, 7, 20, 19, 7, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 420, 0, 0, 0, 0, 0, 36, 37, 7, 37, 37, 35, 36, 36, 7, 37, 35, 37, 0, 39, 0, 40, 0, 41, 0, 3, 0, 43, 44, 46, 0, 44, 0, 45, 0, 4, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 54, 53, 54, 53, 55, 350, 54, 54, 7, 351, 57, 7, 365, 369, 373, 383, 400, 54, 53, 56, 54, 53, 54, 57, 53, 54, 58, 53, 2, 8, 7, 7, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 7, 0, 60, 0, 61, 67, 4, 68, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 44, 0, 62, 0, 64, 63, 63, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 78, 77, 78, 77, 78, 78, 7, 79, 7, 78, 77, 78, 80, 77, 78, 81, 77, 78, 82, 77, 83, 95, 78, 84, 77, 84, 78, 77, 78, 85, 77, 78, 86, 77, 78, 87, 77, 78, 88, 77, 78, 89, 77, 78, 90, 77, 78, 91, 77, 78, 92, 77, 78, 93, 77, 78, 94, 77, 78, 58, 77, 84, 78, 77, 97, 0, 98, 0, 99, 0, 100, 175, 101, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 114, 113, 114, 113, 114, 114, 7, 115, 7, 129, 136, 142, 157, 114, 113, 114, 116, 113, 114, 117, 113, 114, 118, 113, 114, 119, 113, 114, 120, 113, 114, 121, 113, 114, 122, 113, 114, 123, 113, 114, 124, 113, 114, 125, 113, 114, 126, 113, 114, 127, 113, 114, 128, 113, 114, 7, 113, 114, 130, 113, 114, 131, 113, 114, 132, 113, 114, 133, 113, 114, 134, 113, 114, 135, 113, 114, 58, 113, 114, 137, 113, 114, 138, 113, 114, 139, 113, 114, 140, 113, 114, 141, 113, 114, 135, 113, 114, 143, 113, 114, 144, 113, 114, 145, 113, 146, 156, 114, 147, 113, 147, 114, 113, 114, 148, 113, 114, 149, 113, 114, 150, 113, 114, 151, 113, 114, 152, 113, 114, 153, 113, 114, 154, 113, 114, 155, 113, 114, 141, 113, 147, 114, 113, 114, 158, 164, 113, 114, 159, 113, 114, 160, 113, 114, 161, 113, 114, 162, 113, 114, 163, 113, 114, 135, 113, 114, 165, 113, 114, 166, 113, 114, 167, 113, 114, 168, 113, 114, 169, 113, 114, 170, 113, 171, 114, 172, 113, 172, 114, 113, 114, 173, 113, 114, 174, 113, 114, 158, 113, 101, 0, 177, 4, 263, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 186, 185, 186, 185, 187, 190, 186, 186, 7, 191, 189, 7, 205, 209, 219, 229, 245, 186, 185, 188, 186, 185, 186, 189, 185, 186, 58, 185, 188, 186, 185, 186, 192, 185, 186, 193, 185, 186, 194, 185, 186, 195, 185, 186, 196, 185, 186, 197, 185, 186, 198, 185, 186, 199, 185, 186, 200, 185, 186, 201, 185, 186, 202, 185, 186, 203, 185, 186, 204, 185, 186, 7, 185, 186, 206, 185, 186, 207, 185, 186, 208, 185, 186, 188, 185, 210, 186, 211, 213, 185, 211, 186, 185, 186, 212, 185, 186, 189, 185, 186, 214, 185, 186, 215, 185, 186, 216, 185, 186, 217, 185, 186, 218, 185, 186, 58, 185, 186, 220, 185, 221, 227, 186, 189, 228, 185, 222, 186, 185, 186, 223, 185, 186, 224, 185, 186, 225, 185, 186, 226, 185, 186, 211, 185, 222, 186, 185, 186, 224, 223, 223, 185, 186, 230, 185, 186, 231, 185, 186, 232, 185, 233, 244, 186, 234, 185, 234, 186, 185, 186, 235, 185, 186, 236, 185, 186, 237, 185, 186, 238, 185, 186, 239, 185, 186, 240, 185, 186, 241, 185, 186, 242, 185, 186, 243, 185, 186, 218, 185, 234, 186, 185, 186, 246, 189, 252, 185, 186, 247, 185, 186, 248, 185, 186, 249, 185, 186, 250, 185, 186, 251, 185, 186, 218, 185, 186, 253, 185, 186, 254, 185, 186, 255, 185, 186, 256, 185, 186, 257, 185, 186, 258, 185, 259, 186, 260, 185, 260, 186, 185, 186, 261, 185, 186, 262, 185, 186, 246, 185, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 271, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 283, 282, 283, 282, 284, 287, 283, 283, 7, 288, 286, 7, 302, 306, 310, 320, 337, 283, 282, 285, 283, 282, 283, 286, 282, 283, 58, 282, 285, 283, 282, 283, 289, 282, 283, 290, 282, 283, 291, 282, 283, 292, 282, 283, 293, 282, 283, 294, 282, 283, 295, 282, 283, 296, 282, 283, 297, 282, 283, 298, 282, 283, 299, 282, 283, 300, 282, 283, 301, 282, 283, 7, 282, 283, 303, 282, 283, 304, 282, 283, 305, 282, 283, 285, 282, 307, 283, 308, 282, 308, 283, 282, 283, 309, 282, 283, 286, 282, 283, 311, 282, 312, 318, 283, 286, 319, 282, 313, 283, 282, 283, 314, 282, 283, 315, 282, 283, 316, 282, 283, 317, 282, 283, 308, 282, 313, 283, 282, 283, 315, 314, 314, 282, 283, 321, 282, 283, 322, 282, 283, 323, 282, 324, 336, 283, 325, 282, 325, 283, 282, 283, 326, 282, 283, 327, 282, 283, 328, 282, 283, 329, 282, 283, 330, 282, 283, 331, 282, 283, 332, 282, 283, 333, 282, 283, 334, 282, 283, 335, 282, 283, 58, 282, 325, 283, 282, 283, 338, 286, 282, 283, 339, 282, 283, 340, 282, 283, 341, 282, 283, 342, 282, 283, 343, 282, 283, 335, 282, 344, 345, 344, 0, 349, 348, 347, 345, 348, 346, 0, 347, 345, 346, 0, 347, 346, 349, 348, 347, 345, 348, 346, 2, 8, 349, 349, 9, 19, 21, 4, 35, 38, 42, 59, 69, 96, 176, 344, 349, 0, 56, 54, 53, 54, 352, 53, 54, 353, 53, 54, 354, 53, 54, 355, 53, 54, 356, 53, 54, 357, 53, 54, 358, 53, 54, 359, 53, 54, 360, 53, 54, 361, 53, 54, 362, 53, 54, 363, 53, 54, 364, 53, 54, 7, 53, 54, 366, 53, 54, 367, 53, 54, 368, 53, 54, 56, 53, 370, 54, 371, 53, 371, 54, 53, 54, 372, 53, 54, 57, 53, 54, 374, 53, 375, 381, 54, 57, 382, 53, 376, 54, 53, 54, 377, 53, 54, 378, 53, 54, 379, 53, 54, 380, 53, 54, 371, 53, 376, 54, 53, 54, 378, 377, 377, 53, 54, 384, 53, 54, 385, 53, 54, 386, 53, 387, 399, 54, 388, 53, 388, 54, 53, 54, 389, 53, 54, 390, 53, 54, 391, 53, 54, 392, 53, 54, 393, 53, 54, 394, 53, 54, 395, 53, 54, 396, 53, 54, 397, 53, 54, 398, 53, 54, 58, 53, 388, 54, 53, 54, 401, 57, 407, 53, 54, 402, 53, 54, 403, 53, 54, 404, 53, 54, 405, 53, 54, 406, 53, 54, 398, 53, 54, 408, 53, 54, 409, 53, 54, 410, 53, 54, 411, 53, 54, 412, 53, 54, 413, 53, 414, 54, 415, 53, 415, 54, 53, 54, 416, 53, 54, 417, 53, 54, 401, 53, 419, 0, 7, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 63, 63, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 420; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/ro.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1031 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c" { cs = lexer_start; } #line 425 "ragel/i18n/ro.c.rl" #line 1038 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/ro.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/ro.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/ro.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/ro.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/ro.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/ro.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/ro.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/ro.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/ro.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/ro.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/ro.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/ro.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/ro.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/ro.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/ro.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/ro.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/ro.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/ro.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/ro.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/ro.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/ro.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/ro.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/ro.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/ro.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1328 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/ro.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1391 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c" } } } _out: {} } #line 426 "ragel/i18n/ro.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_ro() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Ro", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_ca/0000755000004100000410000000000012244512574017354 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_ca/gherkin_lexer_ca.c0000644000004100000410000013332012244512574023013 0ustar www-datawww-data #line 1 "ragel/i18n/ca.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/ca.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 20, 21, 22, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 97, 102, 109, 114, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 201, 202, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 312, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 398, 399, 400, 402, 403, 405, 407, 408, 409, 410, 411, 412, 413, 414, 415, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 503, 505, 507, 509, 511, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 547, 549, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 708, 710, 712, 714, 716, 718, 720, 722, 725, 727, 729, 731, 733, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 923, 929, 932, 934, 940, 959, 962, 964, 966, 968, 970, 972, 974, 976, 979, 981, 983, 985, 987, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1025, 1027, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1107, 1108 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 110, 116, 101, 115, 104, 111, 114, 101, 115, 116, 101, 99, 101, 100, 101, 110, 116, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 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, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, 97, 108, 114, 97, 99, 116, 101, 114, -61, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 65, 67, 69, 70, 82, 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, 110, 10, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 115, 10, 58, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 115, 120, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 39, 10, 101, 10, 115, 10, 99, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, 10, 101, 10, 102, 10, 111, 10, 110, 111, 110, 97, 100, 116, 97, 115, 120, 99, 113, 101, 110, 97, 114, 105, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 82, 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, 108, 110, 116, 10, 101, 10, 115, 10, 104, 10, 111, 10, 114, 10, 101, 10, 115, 10, 116, 10, 101, 10, 99, 10, 101, 10, 100, 10, 101, 10, 110, 10, 116, 10, 115, 10, 58, -61, 10, 101, -88, 10, 10, 115, 10, 97, 10, 97, 10, 108, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 111, 10, 110, 10, 97, 10, 100, 116, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 39, 10, 101, 10, 115, 10, 99, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, -61, 10, -78, 10, 10, 117, 10, 97, 10, 110, 10, 101, 10, 114, 10, 101, 10, 102, 10, 111, 10, 110, 117, 101, 109, 97, 32, 100, 101, 32, 108, 39, 101, 115, 99, 101, 110, 97, 114, 105, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 67, 68, 69, 70, 73, 80, 81, 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, 108, 116, 10, 101, 10, 115, 10, 104, 10, 111, 10, 114, 10, 101, 10, 115, -61, 10, 101, -88, 10, 10, 115, 10, 97, 10, 97, 10, 108, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 111, 10, 110, 10, 97, 10, 100, 116, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, -61, 10, -78, 10, 10, 117, 10, 97, 10, 110, 101, 109, 112, 108, 101, 115, 58, 10, 10, 10, 32, 35, 67, 70, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 117, 110, 99, 105, 111, 110, 97, 108, 105, 116, 97, 116, 101, 114, -61, -78, 117, 97, 110, 101, 114, 101, 102, 111, 110, 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, 67, 68, 69, 70, 73, 80, 81, 82, 124, 9, 13, 10, 108, 116, 10, 101, 10, 115, 10, 104, 10, 111, 10, 114, 10, 101, 10, 115, -61, 10, 101, -88, 10, 10, 115, 10, 97, 10, 97, 10, 108, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 111, 10, 110, 10, 97, 10, 100, 116, 10, 115, 10, 99, 113, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 101, 10, 109, 10, 97, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 39, 10, 101, 10, 115, 10, 99, 10, 117, 10, 110, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 97, 10, 116, 10, 101, 10, 114, -61, 10, -78, 10, 10, 117, 10, 97, 10, 110, -61, 101, -88, 115, 0 }; static const char _lexer_single_lengths[] = { 0, 18, 1, 1, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 17, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 20, 22, 24, 43, 45, 47, 50, 53, 58, 63, 68, 73, 77, 81, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 127, 134, 139, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 230, 233, 236, 239, 242, 261, 263, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 308, 311, 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, 429, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 558, 560, 562, 565, 567, 570, 573, 575, 577, 579, 581, 583, 585, 587, 589, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 711, 714, 717, 720, 723, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 776, 779, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1044, 1047, 1050, 1053, 1056, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1351, 1357, 1361, 1364, 1370, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1418, 1421, 1424, 1427, 1430, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1486, 1489, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1609, 1611 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 31, 433, 437, 440, 446, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 31, 433, 437, 440, 446, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 525, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 45, 522, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 31, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 56, 57, 56, 57, 57, 4, 58, 72, 4, 452, 464, 479, 483, 503, 72, 515, 519, 57, 56, 57, 59, 56, 57, 60, 56, 57, 61, 56, 57, 62, 56, 57, 63, 56, 57, 64, 56, 57, 65, 56, 57, 66, 56, 57, 67, 56, 57, 68, 56, 57, 69, 56, 57, 70, 56, 57, 71, 56, 57, 4, 56, 57, 73, 56, 4, 4, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 31, 433, 437, 440, 446, 4, 0, 75, 0, 31, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 91, 90, 91, 90, 91, 91, 4, 92, 4, 106, 117, 131, 156, 168, 91, 90, 91, 93, 90, 91, 94, 90, 91, 95, 90, 91, 96, 90, 91, 97, 90, 91, 98, 90, 91, 99, 90, 91, 100, 90, 91, 101, 90, 91, 102, 90, 91, 103, 90, 91, 104, 90, 91, 105, 90, 91, 4, 90, 91, 107, 90, 91, 108, 90, 91, 109, 90, 91, 110, 90, 91, 111, 90, 91, 112, 90, 91, 113, 90, 91, 114, 90, 91, 115, 90, 91, 116, 90, 91, 73, 90, 91, 118, 90, 91, 119, 90, 91, 120, 90, 91, 121, 90, 91, 122, 90, 91, 123, 90, 91, 124, 90, 125, 91, 90, 126, 91, 90, 91, 127, 90, 91, 128, 90, 91, 129, 90, 91, 130, 90, 91, 116, 90, 91, 132, 151, 90, 91, 133, 138, 90, 91, 134, 90, 91, 135, 90, 91, 136, 90, 91, 137, 90, 91, 116, 90, 91, 139, 90, 91, 140, 90, 91, 141, 90, 91, 142, 90, 91, 143, 90, 91, 144, 90, 91, 145, 90, 91, 146, 90, 91, 147, 90, 91, 148, 90, 91, 149, 90, 91, 150, 90, 91, 133, 90, 91, 152, 90, 91, 153, 90, 91, 154, 90, 91, 155, 90, 91, 115, 90, 91, 157, 90, 91, 158, 90, 91, 159, 90, 91, 160, 90, 91, 161, 90, 91, 162, 90, 91, 163, 90, 91, 164, 90, 91, 165, 90, 91, 166, 90, 91, 167, 90, 91, 116, 90, 91, 169, 90, 91, 170, 90, 91, 171, 90, 91, 172, 90, 91, 173, 90, 91, 115, 90, 175, 0, 176, 0, 177, 0, 178, 31, 0, 31, 0, 180, 384, 0, 181, 290, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 189, 188, 189, 188, 189, 189, 4, 190, 204, 4, 205, 227, 241, 245, 265, 204, 277, 281, 284, 189, 188, 189, 191, 188, 189, 192, 188, 189, 193, 188, 189, 194, 188, 189, 195, 188, 189, 196, 188, 189, 197, 188, 189, 198, 188, 189, 199, 188, 189, 200, 188, 189, 201, 188, 189, 202, 188, 189, 203, 188, 189, 4, 188, 189, 73, 188, 189, 206, 213, 223, 188, 189, 207, 188, 189, 208, 188, 189, 209, 188, 189, 210, 188, 189, 211, 188, 189, 212, 188, 189, 204, 188, 189, 214, 188, 189, 215, 188, 189, 216, 188, 189, 217, 188, 189, 218, 188, 189, 219, 188, 189, 220, 188, 189, 221, 188, 189, 222, 188, 189, 73, 188, 224, 189, 225, 188, 212, 189, 188, 189, 226, 188, 189, 204, 188, 189, 228, 188, 189, 204, 229, 188, 189, 230, 188, 189, 231, 188, 189, 232, 188, 189, 233, 188, 189, 234, 188, 235, 189, 188, 236, 189, 188, 189, 237, 188, 189, 238, 188, 189, 239, 188, 189, 240, 188, 189, 222, 188, 189, 242, 188, 189, 243, 188, 189, 244, 188, 189, 226, 204, 188, 189, 246, 188, 189, 247, 252, 188, 189, 248, 188, 189, 249, 188, 189, 250, 188, 189, 251, 188, 189, 222, 188, 189, 253, 188, 189, 254, 188, 189, 255, 188, 189, 256, 188, 189, 257, 188, 189, 258, 188, 189, 259, 188, 189, 260, 188, 189, 261, 188, 189, 262, 188, 189, 263, 188, 189, 264, 188, 189, 247, 188, 189, 266, 188, 189, 267, 188, 189, 268, 188, 189, 269, 188, 189, 270, 188, 189, 271, 188, 189, 272, 188, 189, 273, 188, 189, 274, 188, 189, 275, 188, 189, 276, 188, 189, 222, 188, 189, 278, 188, 189, 279, 188, 280, 189, 188, 204, 189, 188, 189, 282, 188, 189, 283, 188, 189, 204, 188, 189, 285, 188, 189, 286, 188, 189, 287, 188, 189, 288, 188, 189, 289, 188, 189, 221, 188, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 311, 310, 311, 310, 311, 311, 4, 312, 326, 4, 327, 339, 354, 358, 365, 326, 377, 381, 311, 310, 311, 313, 310, 311, 314, 310, 311, 315, 310, 311, 316, 310, 311, 317, 310, 311, 318, 310, 311, 319, 310, 311, 320, 310, 311, 321, 310, 311, 322, 310, 311, 323, 310, 311, 324, 310, 311, 325, 310, 311, 4, 310, 311, 73, 310, 311, 328, 335, 310, 311, 329, 310, 311, 330, 310, 311, 331, 310, 311, 332, 310, 311, 333, 310, 311, 334, 310, 311, 326, 310, 336, 311, 337, 310, 334, 311, 310, 311, 338, 310, 311, 326, 310, 311, 340, 310, 311, 326, 341, 310, 311, 342, 310, 311, 343, 310, 311, 344, 310, 311, 345, 310, 311, 346, 310, 347, 311, 310, 348, 311, 310, 311, 349, 310, 311, 350, 310, 311, 351, 310, 311, 352, 310, 311, 353, 310, 311, 73, 310, 311, 355, 310, 311, 356, 310, 311, 357, 310, 311, 338, 326, 310, 311, 359, 310, 311, 360, 310, 311, 361, 310, 311, 362, 310, 311, 363, 310, 311, 364, 310, 311, 353, 310, 311, 366, 310, 311, 367, 310, 311, 368, 310, 311, 369, 310, 311, 370, 310, 311, 371, 310, 311, 372, 310, 311, 373, 310, 311, 374, 310, 311, 375, 310, 311, 376, 310, 311, 353, 310, 311, 378, 310, 311, 379, 310, 380, 311, 310, 326, 311, 310, 311, 382, 310, 311, 383, 310, 311, 326, 310, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 393, 392, 393, 392, 393, 393, 4, 394, 409, 4, 393, 392, 393, 395, 392, 393, 396, 392, 393, 397, 392, 393, 398, 392, 393, 399, 392, 393, 400, 392, 393, 401, 392, 402, 393, 392, 403, 393, 392, 393, 404, 392, 393, 405, 392, 393, 406, 392, 393, 407, 392, 393, 408, 392, 393, 73, 392, 393, 410, 392, 393, 411, 392, 393, 412, 392, 393, 413, 392, 393, 414, 392, 393, 415, 392, 393, 416, 392, 393, 417, 392, 393, 418, 392, 393, 419, 392, 393, 420, 392, 393, 408, 392, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 88, 0, 434, 0, 435, 0, 436, 0, 31, 0, 438, 0, 439, 0, 31, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, 53, 0, 446, 447, 446, 0, 451, 450, 449, 447, 450, 448, 0, 449, 447, 448, 0, 449, 448, 451, 450, 449, 447, 450, 448, 451, 451, 5, 15, 17, 31, 34, 37, 74, 174, 179, 421, 31, 433, 437, 440, 446, 451, 0, 57, 453, 460, 56, 57, 454, 56, 57, 455, 56, 57, 456, 56, 57, 457, 56, 57, 458, 56, 57, 459, 56, 57, 72, 56, 461, 57, 462, 56, 459, 57, 56, 57, 463, 56, 57, 72, 56, 57, 465, 56, 57, 72, 466, 56, 57, 467, 56, 57, 468, 56, 57, 469, 56, 57, 470, 56, 57, 471, 56, 472, 57, 56, 473, 57, 56, 57, 474, 56, 57, 475, 56, 57, 476, 56, 57, 477, 56, 57, 478, 56, 57, 73, 56, 57, 480, 56, 57, 481, 56, 57, 482, 56, 57, 463, 72, 56, 57, 484, 56, 57, 485, 490, 56, 57, 486, 56, 57, 487, 56, 57, 488, 56, 57, 489, 56, 57, 478, 56, 57, 491, 56, 57, 492, 56, 57, 493, 56, 57, 494, 56, 57, 495, 56, 57, 496, 56, 57, 497, 56, 57, 498, 56, 57, 499, 56, 57, 500, 56, 57, 501, 56, 57, 502, 56, 57, 485, 56, 57, 504, 56, 57, 505, 56, 57, 506, 56, 57, 507, 56, 57, 508, 56, 57, 509, 56, 57, 510, 56, 57, 511, 56, 57, 512, 56, 57, 513, 56, 57, 514, 56, 57, 478, 56, 57, 516, 56, 57, 517, 56, 518, 57, 56, 72, 57, 56, 57, 520, 56, 57, 521, 56, 57, 72, 56, 523, 524, 0, 44, 0, 178, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 525; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/ca.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1185 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c" { cs = lexer_start; } #line 425 "ragel/i18n/ca.c.rl" #line 1192 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/ca.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/ca.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/ca.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/ca.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/ca.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/ca.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/ca.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/ca.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/ca.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/ca.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/ca.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/ca.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/ca.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/ca.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/ca.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/ca.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/ca.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/ca.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/ca.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/ca.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/ca.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/ca.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/ca.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/ca.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1482 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/ca.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1545 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c" } } } _out: {} } #line 426 "ragel/i18n/ca.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_ca() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Ca", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_ca/extconf.rb0000644000004100000410000000035612244512574021353 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_ca") have_library("c", "main") create_makefile("gherkin_lexer_ca") gherkin-2.12.2/ext/gherkin_lexer_sv/0000755000004100000410000000000012244512574017421 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_sv/extconf.rb0000644000004100000410000000035612244512574021420 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_sv") have_library("c", "main") create_makefile("gherkin_lexer_sv") gherkin-2.12.2/ext/gherkin_lexer_sv/gherkin_lexer_sv.c0000644000004100000410000011142212244512574023124 0ustar www-datawww-data #line 1 "ragel/i18n/sv.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/sv.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 321, 323, 325, 327, 329, 331, 333, 335, 338, 340, 342, 344, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 484, 486, 488, 489, 490, 491, 492, 493, 494, 495, 496, 503, 505, 507, 509, 511, 513, 515, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 532, 533, 534, 535, 536, 537, 538, 539, 541, 542, 543, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 676, 678, 680, 682, 684, 686, 688, 690, 693, 695, 697, 699, 700, 701, 702, 706, 712, 715, 717, 723, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 782, 784, 786, 788, 790, 792, 794, 796 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 115, 116, 114, 97, 107, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 71, 77, 78, 79, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 97, 107, 103, 114, 117, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -92, 10, 10, 114, 10, 99, 10, 104, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 10, 108, 103, 120, 101, 110, 115, 107, 97, 112, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 69, 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, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 120, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 101, 10, 109, 10, 112, 10, 101, 10, 108, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 101, 109, 112, 101, 108, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 105, 118, 101, 116, 101, 110, -61, -92, 114, 99, 104, -61, 99, -91, 101, 110, 97, 114, 105, 111, 58, 109, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -92, 10, 10, 114, 10, 99, 10, 104, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 10, 108, 97, 108, 108, 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, 71, 77, 78, 79, 83, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -92, 10, 10, 114, 10, 99, 10, 104, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 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, 3, 2, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 287, 290, 293, 296, 299, 302, 305, 308, 311, 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, 441, 444, 447, 450, 453, 456, 459, 462, 466, 469, 472, 475, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 683, 686, 689, 691, 693, 695, 697, 699, 701, 703, 705, 712, 715, 718, 721, 724, 727, 730, 733, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 761, 763, 765, 767, 769, 771, 773, 775, 778, 780, 782, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 973, 976, 979, 982, 985, 988, 991, 994, 998, 1001, 1004, 1007, 1009, 1011, 1013, 1017, 1023, 1027, 1030, 1036, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 362, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 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, 51, 0, 52, 0, 53, 0, 54, 0, 56, 55, 56, 55, 56, 56, 4, 57, 71, 4, 335, 343, 347, 349, 352, 354, 56, 55, 56, 58, 55, 56, 59, 55, 56, 60, 55, 56, 61, 55, 56, 62, 55, 56, 63, 55, 56, 64, 55, 56, 65, 55, 56, 66, 55, 56, 67, 55, 56, 68, 55, 56, 69, 55, 56, 70, 55, 56, 4, 55, 56, 72, 55, 4, 4, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 4, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 83, 82, 83, 82, 83, 83, 4, 84, 98, 4, 99, 116, 123, 127, 129, 132, 134, 83, 82, 83, 85, 82, 83, 86, 82, 83, 87, 82, 83, 88, 82, 83, 89, 82, 83, 90, 82, 83, 91, 82, 83, 92, 82, 83, 93, 82, 83, 94, 82, 83, 95, 82, 83, 96, 82, 83, 97, 82, 83, 4, 82, 83, 72, 82, 83, 100, 82, 83, 101, 82, 83, 102, 82, 83, 103, 82, 83, 104, 82, 83, 105, 82, 83, 106, 82, 83, 107, 82, 83, 108, 82, 83, 109, 82, 83, 110, 82, 83, 111, 82, 83, 112, 82, 83, 113, 82, 83, 114, 82, 83, 115, 82, 83, 72, 82, 83, 117, 82, 83, 118, 82, 83, 119, 82, 83, 120, 82, 83, 121, 82, 83, 122, 82, 83, 115, 82, 83, 124, 82, 83, 125, 82, 83, 126, 82, 83, 98, 82, 83, 128, 82, 83, 98, 82, 130, 83, 82, 131, 83, 82, 83, 98, 82, 83, 133, 82, 83, 98, 82, 135, 83, 136, 82, 98, 83, 82, 83, 137, 82, 83, 138, 82, 83, 139, 82, 83, 140, 82, 83, 141, 82, 83, 142, 82, 83, 72, 143, 82, 83, 144, 82, 83, 145, 82, 83, 115, 82, 147, 217, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 156, 155, 156, 155, 156, 156, 4, 157, 4, 171, 188, 195, 207, 156, 155, 156, 158, 155, 156, 159, 155, 156, 160, 155, 156, 161, 155, 156, 162, 155, 156, 163, 155, 156, 164, 155, 156, 165, 155, 156, 166, 155, 156, 167, 155, 156, 168, 155, 156, 169, 155, 156, 170, 155, 156, 4, 155, 156, 172, 155, 156, 173, 155, 156, 174, 155, 156, 175, 155, 156, 176, 155, 156, 177, 155, 156, 178, 155, 156, 179, 155, 156, 180, 155, 156, 181, 155, 156, 182, 155, 156, 183, 155, 156, 184, 155, 156, 185, 155, 156, 186, 155, 156, 187, 155, 156, 72, 155, 156, 189, 155, 156, 190, 155, 156, 191, 155, 156, 192, 155, 156, 193, 155, 156, 194, 155, 156, 187, 155, 156, 196, 202, 155, 156, 197, 155, 156, 198, 155, 156, 199, 155, 156, 200, 155, 156, 201, 155, 156, 187, 155, 156, 203, 155, 156, 204, 155, 156, 205, 155, 156, 206, 155, 156, 187, 155, 156, 208, 155, 156, 209, 155, 156, 210, 155, 156, 211, 155, 156, 212, 155, 156, 213, 155, 156, 214, 155, 156, 72, 215, 155, 156, 216, 155, 156, 206, 155, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 225, 224, 225, 224, 225, 225, 4, 226, 4, 225, 224, 225, 227, 224, 225, 228, 224, 225, 229, 224, 225, 230, 224, 225, 231, 224, 225, 232, 224, 225, 233, 224, 225, 72, 224, 235, 0, 236, 0, 237, 0, 31, 0, 239, 0, 31, 0, 241, 0, 242, 0, 31, 0, 244, 0, 31, 0, 246, 247, 0, 31, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 326, 0, 256, 255, 256, 255, 256, 256, 4, 257, 271, 4, 272, 289, 296, 303, 307, 309, 312, 314, 256, 255, 256, 258, 255, 256, 259, 255, 256, 260, 255, 256, 261, 255, 256, 262, 255, 256, 263, 255, 256, 264, 255, 256, 265, 255, 256, 266, 255, 256, 267, 255, 256, 268, 255, 256, 269, 255, 256, 270, 255, 256, 4, 255, 256, 72, 255, 256, 273, 255, 256, 274, 255, 256, 275, 255, 256, 276, 255, 256, 277, 255, 256, 278, 255, 256, 279, 255, 256, 280, 255, 256, 281, 255, 256, 282, 255, 256, 283, 255, 256, 284, 255, 256, 285, 255, 256, 286, 255, 256, 287, 255, 256, 288, 255, 256, 72, 255, 256, 290, 255, 256, 291, 255, 256, 292, 255, 256, 293, 255, 256, 294, 255, 256, 295, 255, 256, 288, 255, 256, 297, 255, 256, 298, 255, 256, 299, 255, 256, 300, 255, 256, 301, 255, 256, 302, 255, 256, 288, 255, 256, 304, 255, 256, 305, 255, 256, 306, 255, 256, 271, 255, 256, 308, 255, 256, 271, 255, 310, 256, 255, 311, 256, 255, 256, 271, 255, 256, 313, 255, 256, 271, 255, 315, 256, 316, 255, 271, 256, 255, 256, 317, 255, 256, 318, 255, 256, 319, 255, 256, 320, 255, 256, 321, 255, 256, 322, 255, 256, 72, 323, 255, 256, 324, 255, 256, 325, 255, 256, 288, 255, 327, 0, 328, 0, 53, 0, 329, 330, 329, 0, 334, 333, 332, 330, 333, 331, 0, 332, 330, 331, 0, 332, 331, 334, 333, 332, 330, 333, 331, 334, 334, 5, 15, 17, 31, 34, 37, 73, 146, 234, 238, 240, 243, 245, 329, 334, 0, 56, 336, 55, 56, 337, 55, 56, 338, 55, 56, 339, 55, 56, 340, 55, 56, 341, 55, 56, 342, 55, 56, 72, 55, 56, 344, 55, 56, 345, 55, 56, 346, 55, 56, 71, 55, 56, 348, 55, 56, 71, 55, 350, 56, 55, 351, 56, 55, 56, 71, 55, 56, 353, 55, 56, 71, 55, 355, 56, 356, 55, 71, 56, 55, 56, 357, 55, 56, 358, 55, 56, 359, 55, 56, 360, 55, 56, 361, 55, 56, 342, 55, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 362; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/sv.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 928 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c" { cs = lexer_start; } #line 425 "ragel/i18n/sv.c.rl" #line 935 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/sv.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/sv.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/sv.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/sv.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/sv.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/sv.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/sv.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/sv.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/sv.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/sv.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/sv.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/sv.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/sv.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/sv.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/sv.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/sv.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/sv.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/sv.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/sv.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/sv.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/sv.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/sv.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/sv.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/sv.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1225 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/sv.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1288 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c" } } } _out: {} } #line 426 "ragel/i18n/sv.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_sv() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Sv", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_lu/0000755000004100000410000000000012244512574017411 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_lu/gherkin_lexer_lu.c0000644000004100000410000011625712244512574023117 0ustar www-datawww-data #line 1 "ragel/i18n/lu.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/lu.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 21, 22, 23, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 111, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 838, 844, 847, 849, 855, 875 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 105, 115, 112, 105, 108, 108, 101, 114, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, 117, 110, 107, 116, 105, 111, 110, 97, 108, 105, 116, -61, -87, 105, 116, 58, 10, 10, 10, 32, 35, 37, 64, 66, 70, 72, 80, 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, 101, 10, 105, 10, 115, 10, 112, 10, 105, 10, 108, 10, 108, 10, 101, 10, 114, 10, 58, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 97, 10, 110, 10, 110, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 108, 10, 97, 10, 110, 10, 103, 10, 32, 10, 118, 10, 117, 10, 109, 10, 32, 10, 83, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 97, 110, 110, 101, 114, 103, 114, 111, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 70, 80, 83, 97, 100, 109, 117, 119, 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, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 108, 10, 97, 10, 110, 10, 103, 10, 32, 10, 118, 10, 117, 10, 109, 10, 32, 10, 83, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 110, 119, 10, 101, 10, 114, 10, 97, 10, 110, 10, 110, -61, 10, -92, 10, 10, 103, 10, 101, 10, 104, 10, 111, 10, 108, 10, 108, 108, 97, 110, 103, 32, 118, 117, 109, 32, 83, 122, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 70, 83, 97, 100, 109, 117, 119, 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, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 110, 119, 10, 101, 10, 114, 10, 97, 10, 110, 10, 110, -61, 10, -92, 10, 10, 103, 10, 101, 10, 104, 10, 111, 10, 108, 10, 108, 122, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 70, 72, 80, 83, 97, 100, 109, 117, 119, 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, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 105, 10, 116, 10, 58, 10, 97, 10, 110, 10, 110, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 108, 10, 97, 10, 110, 10, 103, 10, 32, 10, 118, 10, 117, 10, 109, 10, 32, 10, 83, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 110, 119, 10, 101, 10, 114, 10, 97, 10, 110, 10, 110, -61, 10, -92, 10, 10, 103, 10, 101, 10, 104, 10, 111, 10, 108, 10, 108, 32, 110, 119, 101, 114, 97, 110, 110, -61, -92, 103, 101, 104, 111, 108, 108, 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, 66, 70, 72, 80, 83, 97, 100, 109, 117, 119, 124, 9, 13, 0 }; static const char _lexer_single_lengths[] = { 0, 19, 1, 1, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 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, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 18, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 21, 23, 25, 45, 47, 49, 52, 55, 60, 65, 70, 75, 79, 83, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 121, 124, 129, 136, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1218, 1224, 1228, 1231, 1237, 1257 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 387, 398, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 387, 398, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 404, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 49, 48, 49, 48, 49, 49, 4, 50, 4, 49, 48, 49, 51, 48, 49, 52, 48, 49, 53, 48, 49, 54, 48, 49, 55, 48, 49, 56, 48, 49, 57, 48, 49, 58, 48, 49, 59, 48, 49, 60, 48, 49, 61, 48, 62, 49, 48, 63, 49, 48, 49, 64, 48, 49, 65, 48, 49, 66, 48, 4, 4, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 387, 398, 4, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 85, 84, 85, 84, 85, 85, 4, 86, 4, 100, 110, 125, 135, 145, 85, 84, 85, 87, 84, 85, 88, 84, 85, 89, 84, 85, 90, 84, 85, 91, 84, 85, 92, 84, 85, 93, 84, 85, 94, 84, 85, 95, 84, 85, 96, 84, 85, 97, 84, 85, 98, 84, 85, 99, 84, 85, 4, 84, 85, 101, 84, 85, 102, 84, 85, 103, 84, 85, 104, 84, 85, 105, 84, 85, 106, 84, 85, 107, 84, 85, 108, 84, 85, 109, 84, 85, 66, 84, 85, 111, 84, 85, 112, 84, 85, 113, 84, 85, 114, 84, 85, 115, 84, 85, 116, 84, 85, 117, 84, 85, 118, 84, 85, 119, 84, 85, 120, 84, 85, 121, 84, 122, 85, 84, 123, 85, 84, 85, 124, 84, 85, 109, 84, 85, 126, 84, 85, 127, 84, 85, 128, 84, 85, 129, 84, 85, 130, 84, 85, 131, 84, 85, 132, 84, 85, 133, 84, 85, 134, 84, 85, 109, 84, 85, 136, 84, 85, 137, 84, 85, 138, 84, 85, 139, 84, 85, 140, 84, 85, 141, 84, 85, 142, 84, 85, 143, 84, 85, 144, 84, 85, 145, 84, 85, 146, 84, 85, 147, 84, 85, 148, 84, 85, 149, 84, 85, 150, 84, 85, 151, 84, 85, 109, 84, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 165, 164, 165, 164, 165, 165, 4, 166, 180, 4, 181, 197, 207, 214, 217, 220, 222, 217, 165, 164, 165, 167, 164, 165, 168, 164, 165, 169, 164, 165, 170, 164, 165, 171, 164, 165, 172, 164, 165, 173, 164, 165, 174, 164, 165, 175, 164, 165, 176, 164, 165, 177, 164, 165, 178, 164, 165, 179, 164, 165, 4, 164, 165, 66, 164, 165, 182, 164, 165, 183, 164, 165, 184, 164, 165, 185, 164, 165, 186, 164, 165, 187, 164, 165, 188, 164, 165, 189, 164, 165, 190, 164, 165, 191, 164, 165, 192, 164, 193, 165, 164, 194, 165, 164, 165, 195, 164, 165, 196, 164, 165, 66, 164, 165, 198, 164, 165, 199, 164, 165, 200, 164, 165, 201, 164, 165, 202, 164, 165, 203, 164, 165, 204, 164, 165, 205, 164, 165, 206, 164, 165, 207, 164, 165, 208, 164, 165, 209, 164, 165, 210, 164, 165, 211, 164, 165, 212, 164, 165, 213, 164, 165, 196, 164, 165, 66, 180, 215, 164, 165, 216, 164, 165, 180, 164, 165, 218, 164, 165, 219, 164, 165, 180, 164, 221, 165, 164, 180, 165, 164, 165, 223, 164, 165, 224, 164, 165, 225, 164, 165, 226, 164, 165, 227, 164, 165, 180, 164, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 248, 247, 248, 247, 248, 248, 4, 249, 263, 4, 264, 280, 287, 290, 293, 295, 290, 248, 247, 248, 250, 247, 248, 251, 247, 248, 252, 247, 248, 253, 247, 248, 254, 247, 248, 255, 247, 248, 256, 247, 248, 257, 247, 248, 258, 247, 248, 259, 247, 248, 260, 247, 248, 261, 247, 248, 262, 247, 248, 4, 247, 248, 66, 247, 248, 265, 247, 248, 266, 247, 248, 267, 247, 248, 268, 247, 248, 269, 247, 248, 270, 247, 248, 271, 247, 248, 272, 247, 248, 273, 247, 248, 274, 247, 248, 275, 247, 276, 248, 247, 277, 248, 247, 248, 278, 247, 248, 279, 247, 248, 66, 247, 248, 281, 247, 248, 282, 247, 248, 283, 247, 248, 284, 247, 248, 285, 247, 248, 286, 247, 248, 279, 247, 248, 66, 263, 288, 247, 248, 289, 247, 248, 263, 247, 248, 291, 247, 248, 292, 247, 248, 263, 247, 294, 248, 247, 263, 248, 247, 248, 296, 247, 248, 297, 247, 248, 298, 247, 248, 299, 247, 248, 300, 247, 248, 263, 247, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 311, 310, 311, 310, 311, 311, 4, 312, 326, 4, 327, 343, 353, 363, 370, 373, 376, 378, 373, 311, 310, 311, 313, 310, 311, 314, 310, 311, 315, 310, 311, 316, 310, 311, 317, 310, 311, 318, 310, 311, 319, 310, 311, 320, 310, 311, 321, 310, 311, 322, 310, 311, 323, 310, 311, 324, 310, 311, 325, 310, 311, 4, 310, 311, 66, 310, 311, 328, 310, 311, 329, 310, 311, 330, 310, 311, 331, 310, 311, 332, 310, 311, 333, 310, 311, 334, 310, 311, 335, 310, 311, 336, 310, 311, 337, 310, 311, 338, 310, 339, 311, 310, 340, 311, 310, 311, 341, 310, 311, 342, 310, 311, 66, 310, 311, 344, 310, 311, 345, 310, 311, 346, 310, 311, 347, 310, 311, 348, 310, 311, 349, 310, 311, 350, 310, 311, 351, 310, 311, 352, 310, 311, 342, 310, 311, 354, 310, 311, 355, 310, 311, 356, 310, 311, 357, 310, 311, 358, 310, 311, 359, 310, 311, 360, 310, 311, 361, 310, 311, 362, 310, 311, 363, 310, 311, 364, 310, 311, 365, 310, 311, 366, 310, 311, 367, 310, 311, 368, 310, 311, 369, 310, 311, 342, 310, 311, 66, 326, 371, 310, 311, 372, 310, 311, 326, 310, 311, 374, 310, 311, 375, 310, 311, 326, 310, 377, 311, 310, 326, 311, 310, 311, 379, 310, 311, 380, 310, 311, 381, 310, 311, 382, 310, 311, 383, 310, 311, 326, 310, 32, 31, 385, 0, 386, 0, 31, 0, 388, 0, 389, 0, 31, 0, 391, 0, 31, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 31, 0, 398, 399, 398, 0, 403, 402, 401, 399, 402, 400, 0, 401, 399, 400, 0, 401, 400, 403, 402, 401, 399, 402, 400, 403, 403, 5, 15, 17, 31, 34, 37, 67, 152, 228, 301, 384, 387, 390, 392, 387, 398, 403, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 404; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/lu.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 993 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c" { cs = lexer_start; } #line 425 "ragel/i18n/lu.c.rl" #line 1000 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/lu.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/lu.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/lu.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/lu.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/lu.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/lu.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/lu.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/lu.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/lu.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/lu.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/lu.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/lu.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/lu.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/lu.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/lu.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/lu.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/lu.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/lu.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/lu.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/lu.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/lu.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/lu.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/lu.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/lu.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1290 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/lu.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1353 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c" } } } _out: {} } #line 426 "ragel/i18n/lu.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_lu() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Lu", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_lu/extconf.rb0000644000004100000410000000035612244512574021410 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_lu") have_library("c", "main") create_makefile("gherkin_lexer_lu") gherkin-2.12.2/ext/gherkin_lexer_gl/0000755000004100000410000000000012244512574017373 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_gl/extconf.rb0000644000004100000410000000035612244512574021372 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_gl") have_library("c", "main") create_makefile("gherkin_lexer_gl") gherkin-2.12.2/ext/gherkin_lexer_gl/gherkin_lexer_gl.c0000644000004100000410000011514412244512574023055 0ustar www-datawww-data #line 1 "ragel/i18n/gl.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/gl.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_gl/gherkin_lexer_gl.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 213, 214, 215, 217, 219, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 334, 337, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 433, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 485, 488, 492, 494, 496, 498, 500, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 594, 595, 596, 597, 598, 599, 600, 604, 610, 613, 615, 621, 637, 639, 641, 643, 645, 647, 649, 652, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 792, 795, 799, 801, 803, 805, 807, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 97, 111, 110, 114, 100, 111, 97, 99, 116, 101, 114, -61, -83, 115, 116, 105, 99, 97, 58, 10, 10, 10, 32, 35, 37, 64, 67, 69, 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, 111, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 124, 9, 13, 97, 100, 97, 111, 32, 115, 32, 110, 115, 120, 116, -61, -77, 110, 98, 99, 111, 122, 111, 32, 100, 111, 32, 101, 115, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 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, 97, 10, 110, 114, 10, 100, 10, 111, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 115, 10, 116, -61, 10, -77, 10, 10, 110, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 111, 10, 103, 10, 97, 10, 105, 10, 115, 10, 101, 10, 114, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 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, 97, 111, 10, 110, 114, 10, 100, 10, 111, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 111, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 115, 10, 116, -61, 10, -77, 10, 10, 110, 10, 98, 99, 10, 111, 10, 122, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 103, 10, 97, 10, 105, 10, 115, 10, 101, 10, 114, 101, 109, 112, 108, 111, 115, 58, 10, 10, 10, 32, 35, 67, 124, 9, 13, 10, 97, 10, 114, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 111, 103, 97, 105, 115, 101, 114, 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, 67, 68, 69, 76, 77, 80, 124, 9, 13, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 111, 10, 115, 120, 10, 98, 99, 10, 111, 10, 122, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 115, 110, 116, 101, 120, 116, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 67, 68, 69, 76, 77, 80, 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, 97, 10, 110, 114, 10, 100, 10, 111, 10, 97, 10, 99, 10, 116, 10, 101, 10, 114, -61, 10, -83, 10, 10, 115, 10, 116, 10, 105, 10, 99, 10, 97, 10, 58, 10, 97, 10, 100, 10, 97, 111, 10, 32, 115, 10, 32, 110, 115, 10, 116, -61, 10, -77, 10, 10, 110, 10, 98, 99, 10, 111, 10, 122, 10, 111, 10, 32, 10, 100, 10, 111, 10, 32, 10, 101, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 111, 10, 103, 10, 97, 10, 105, 10, 115, 10, 101, 10, 114, 0 }; static const char _lexer_single_lengths[] = { 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 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, 14, 1, 1, 2, 2, 4, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 3, 3, 4, 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, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 14, 2, 2, 2, 2, 2, 2, 3, 3, 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, 1, 12, 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, 3, 3, 4, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 136, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 182, 185, 188, 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 270, 286, 288, 290, 293, 296, 301, 303, 305, 307, 309, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 471, 475, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 615, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 692, 696, 701, 704, 707, 710, 713, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 855, 857, 859, 861, 863, 865, 867, 871, 877, 881, 884, 890, 906, 909, 912, 915, 918, 921, 924, 928, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1134, 1138, 1143, 1146, 1149, 1152, 1155, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 394, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 319, 0, 39, 41, 0, 40, 0, 31, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 56, 55, 56, 55, 56, 56, 4, 57, 4, 71, 296, 56, 55, 56, 58, 55, 56, 59, 55, 56, 60, 55, 56, 61, 55, 56, 62, 55, 56, 63, 55, 56, 64, 55, 56, 65, 55, 56, 66, 55, 56, 67, 55, 56, 68, 55, 56, 69, 55, 56, 70, 55, 56, 4, 55, 56, 72, 290, 55, 56, 73, 55, 56, 74, 55, 56, 75, 55, 56, 76, 55, 56, 77, 55, 56, 78, 55, 79, 56, 55, 80, 56, 55, 56, 81, 55, 56, 82, 55, 56, 83, 55, 56, 84, 55, 56, 85, 55, 56, 86, 55, 4, 4, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 4, 0, 88, 0, 89, 0, 90, 90, 0, 32, 31, 0, 32, 92, 96, 252, 0, 93, 0, 94, 0, 95, 0, 31, 0, 97, 172, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 116, 115, 116, 115, 116, 116, 4, 117, 131, 4, 132, 149, 153, 165, 167, 170, 116, 115, 116, 118, 115, 116, 119, 115, 116, 120, 115, 116, 121, 115, 116, 122, 115, 116, 123, 115, 116, 124, 115, 116, 125, 115, 116, 126, 115, 116, 127, 115, 116, 128, 115, 116, 129, 115, 116, 130, 115, 116, 4, 115, 116, 86, 115, 116, 133, 115, 116, 134, 136, 115, 116, 135, 115, 116, 131, 115, 116, 137, 115, 116, 138, 115, 116, 139, 115, 116, 140, 115, 116, 141, 115, 142, 116, 115, 143, 116, 115, 116, 144, 115, 116, 145, 115, 116, 146, 115, 116, 147, 115, 116, 148, 115, 116, 86, 115, 116, 150, 115, 116, 151, 115, 116, 152, 152, 115, 116, 86, 131, 115, 116, 86, 154, 158, 115, 116, 155, 115, 156, 116, 115, 157, 116, 115, 116, 131, 115, 116, 159, 115, 116, 160, 115, 116, 161, 115, 116, 162, 115, 116, 163, 115, 116, 164, 115, 116, 148, 115, 116, 166, 115, 116, 135, 115, 116, 168, 115, 116, 169, 115, 116, 131, 115, 116, 171, 115, 116, 135, 115, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 181, 180, 181, 180, 181, 181, 4, 182, 196, 4, 197, 220, 224, 245, 247, 250, 181, 180, 181, 183, 180, 181, 184, 180, 181, 185, 180, 181, 186, 180, 181, 187, 180, 181, 188, 180, 181, 189, 180, 181, 190, 180, 181, 191, 180, 181, 192, 180, 181, 193, 180, 181, 194, 180, 181, 195, 180, 181, 4, 180, 181, 86, 180, 181, 198, 214, 180, 181, 199, 201, 180, 181, 200, 180, 181, 196, 180, 181, 202, 180, 181, 203, 180, 181, 204, 180, 181, 205, 180, 181, 206, 180, 207, 181, 180, 208, 181, 180, 181, 209, 180, 181, 210, 180, 181, 211, 180, 181, 212, 180, 181, 213, 180, 181, 86, 180, 181, 215, 180, 181, 216, 180, 181, 217, 180, 181, 218, 180, 181, 219, 180, 181, 213, 180, 181, 221, 180, 181, 222, 180, 181, 223, 223, 180, 181, 86, 196, 180, 181, 86, 225, 229, 180, 181, 226, 180, 227, 181, 180, 228, 181, 180, 181, 196, 180, 181, 230, 240, 180, 181, 231, 180, 181, 232, 180, 181, 233, 180, 181, 234, 180, 181, 235, 180, 181, 236, 180, 181, 237, 180, 181, 238, 180, 181, 239, 180, 181, 240, 180, 181, 241, 180, 181, 242, 180, 181, 243, 180, 181, 244, 180, 181, 219, 180, 181, 246, 180, 181, 200, 180, 181, 248, 180, 181, 249, 180, 181, 196, 180, 181, 251, 180, 181, 200, 180, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 261, 260, 261, 260, 261, 261, 4, 262, 4, 261, 260, 261, 263, 260, 261, 264, 260, 261, 265, 260, 261, 266, 260, 261, 267, 260, 261, 268, 260, 261, 269, 260, 270, 261, 260, 271, 261, 260, 261, 272, 260, 261, 273, 260, 261, 274, 260, 261, 275, 260, 261, 276, 260, 261, 86, 260, 278, 0, 40, 0, 280, 0, 281, 0, 31, 0, 283, 0, 40, 0, 284, 285, 284, 0, 289, 288, 287, 285, 288, 286, 0, 287, 285, 286, 0, 287, 286, 289, 288, 287, 285, 288, 286, 289, 289, 5, 15, 17, 31, 34, 37, 87, 91, 277, 279, 282, 284, 289, 0, 56, 291, 55, 56, 292, 55, 56, 293, 55, 56, 294, 55, 56, 295, 55, 56, 85, 55, 56, 297, 313, 55, 56, 298, 308, 55, 56, 299, 55, 56, 300, 55, 56, 301, 55, 56, 302, 55, 56, 303, 55, 56, 304, 55, 56, 305, 55, 56, 306, 55, 56, 307, 55, 56, 308, 55, 56, 309, 55, 56, 310, 55, 56, 311, 55, 56, 312, 55, 56, 295, 55, 56, 314, 55, 56, 315, 55, 56, 316, 55, 56, 317, 55, 56, 318, 55, 56, 85, 55, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 328, 327, 328, 327, 328, 328, 4, 329, 343, 4, 344, 361, 365, 387, 389, 392, 328, 327, 328, 330, 327, 328, 331, 327, 328, 332, 327, 328, 333, 327, 328, 334, 327, 328, 335, 327, 328, 336, 327, 328, 337, 327, 328, 338, 327, 328, 339, 327, 328, 340, 327, 328, 341, 327, 328, 342, 327, 328, 4, 327, 328, 86, 327, 328, 345, 327, 328, 346, 348, 327, 328, 347, 327, 328, 343, 327, 328, 349, 327, 328, 350, 327, 328, 351, 327, 328, 352, 327, 328, 353, 327, 354, 328, 327, 355, 328, 327, 328, 356, 327, 328, 357, 327, 328, 358, 327, 328, 359, 327, 328, 360, 327, 328, 86, 327, 328, 362, 327, 328, 363, 327, 328, 364, 364, 327, 328, 86, 343, 327, 328, 86, 366, 370, 327, 328, 367, 327, 368, 328, 327, 369, 328, 327, 328, 343, 327, 328, 371, 381, 327, 328, 372, 327, 328, 373, 327, 328, 374, 327, 328, 375, 327, 328, 376, 327, 328, 377, 327, 328, 378, 327, 328, 379, 327, 328, 380, 327, 328, 381, 327, 328, 382, 327, 328, 383, 327, 328, 384, 327, 328, 385, 327, 328, 386, 327, 328, 360, 327, 328, 388, 327, 328, 347, 327, 328, 390, 327, 328, 391, 327, 328, 343, 327, 328, 393, 327, 328, 347, 327, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 19, 0, 0, 54, 19, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 17, 0, 0, 54, 17, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 15, 0, 0, 54, 15, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 394; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/gl.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 978 "ext/gherkin_lexer_gl/gherkin_lexer_gl.c" { cs = lexer_start; } #line 425 "ragel/i18n/gl.c.rl" #line 985 "ext/gherkin_lexer_gl/gherkin_lexer_gl.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/gl.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/gl.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/gl.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/gl.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/gl.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/gl.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/gl.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/gl.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/gl.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/gl.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/gl.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/gl.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/gl.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/gl.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/gl.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/gl.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/gl.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/gl.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/gl.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/gl.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/gl.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/gl.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/gl.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/gl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1275 "ext/gherkin_lexer_gl/gherkin_lexer_gl.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/gl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1338 "ext/gherkin_lexer_gl/gherkin_lexer_gl.c" } } } _out: {} } #line 426 "ragel/i18n/gl.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_gl() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Gl", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_tl/0000755000004100000410000000000012244512574017410 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_tl/extconf.rb0000644000004100000410000000035612244512574021407 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_tl") have_library("c", "main") create_makefile("gherkin_lexer_tl") gherkin-2.12.2/ext/gherkin_lexer_tl/gherkin_lexer_tl.c0000644000004100000410000017322012244512574023106 0ustar www-datawww-data #line 1 "ragel/i18n/tl.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/tl.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_tl/gherkin_lexer_tl.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 13, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 56, 57, 58, 60, 62, 67, 72, 77, 82, 86, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 112, 119, 124, 128, 134, 137, 139, 145, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 284, 286, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 621, 623, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 866, 868, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1226, 1228, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1452, 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, 1534, 1536, 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1573, 1574 }; static const char _lexer_trans_keys[] = { -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -80, -123, -120, -119, -107, -105, -102, -88, -82, -72, -32, -80, -86, -32, -79, -115, -32, -80, -86, -32, -79, -127, -32, -80, -95, -32, -79, -127, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 32, -32, -80, -86, -32, -80, -80, -32, -80, -65, -32, -80, -72, -32, -79, -115, -32, -80, -91, -32, -80, -65, -32, -80, -92, -32, -80, -65, -32, -80, -78, -32, -79, -117, -32, -80, -90, -32, -80, -66, -32, -80, -71, -32, -80, -80, -32, -80, -93, -32, -80, -78, -32, -79, -127, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -80, 10, -105, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -80, -91, -66, -32, -80, -88, -32, -80, -126, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -80, 10, -123, -120, -107, -105, -102, -82, -72, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -95, 10, -32, 10, -79, 10, -127, 10, 10, 32, 10, 32, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -72, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -92, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -117, 10, -32, 10, -80, 10, -66, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, 10, 58, -32, 10, -79, 10, -122, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -84, 10, -32, 10, -80, 10, -95, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -90, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, -32, 10, -80, 10, -126, 10, 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, -32, -80, -88, -32, -80, -65, -32, -79, -127, -32, -80, -93, -32, -80, -82, -32, -79, -127, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -80, 10, -119, -107, -105, -88, -72, 10, -32, 10, -80, 10, -90, 10, -32, 10, -80, 10, -66, 10, -32, 10, -80, 10, -71, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -127, 10, 10, 58, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -126, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -91, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, 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, -32, -79, -122, -32, -80, -86, -32, -79, -115, -32, -80, -86, -32, -80, -84, -32, -80, -95, -32, -80, -65, -32, -80, -88, -32, -80, -90, -32, -79, -121, -32, -80, -86, -32, -80, -91, -32, -79, -115, -32, -80, -81, -32, -80, -126, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -80, 10, -123, -120, -107, -105, -102, -82, -72, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -95, 10, -32, 10, -79, 10, -127, 10, 10, 32, 10, 32, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -72, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -92, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -117, 10, -32, 10, -80, 10, -91, -66, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -126, 10, 10, 58, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, -32, 10, -79, 10, -122, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -84, 10, -32, 10, -80, 10, -95, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -90, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, 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, -32, -80, -80, -32, -80, -65, -32, -80, -81, -32, -80, -88, -32, -79, -115, -32, -80, -88, -32, -80, -65, -32, -80, -75, -32, -79, -121, -32, -80, -74, -32, -80, -126, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -80, 10, -123, -120, -107, -105, -102, -88, -82, -72, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -95, 10, -32, 10, -79, 10, -127, 10, 10, 32, 10, 32, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -72, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -91, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -92, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -78, 10, -32, 10, -79, 10, -117, 10, -32, 10, -80, 10, -91, -66, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -126, 10, 10, 58, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -79, 10, -127, 10, -32, 10, -80, 10, -93, 10, -32, 10, -80, 10, -82, 10, -32, 10, -79, 10, -127, 10, -32, 10, -79, 10, -122, 10, -32, 10, -80, 10, -86, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -84, 10, -32, 10, -80, 10, -95, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -90, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -86, 10, -32, 10, -80, 10, -91, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -80, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -81, 10, -32, 10, -80, 10, -88, 10, -32, 10, -79, 10, -115, 10, -32, 10, -80, 10, -88, 10, -32, 10, -80, 10, -65, 10, -32, 10, -80, 10, -75, 10, -32, 10, -79, 10, -121, 10, -32, 10, -80, 10, -74, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 6, 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, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 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, 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, 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, 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, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 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, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 14, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 65, 68, 79, 81, 83, 86, 89, 94, 99, 104, 109, 113, 117, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 155, 162, 167, 171, 177, 181, 184, 190, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 380, 382, 384, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 414, 417, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 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, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 923, 926, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1308, 1311, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1489, 1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1779, 1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, 1823, 1825, 1827, 1829, 1831, 1833, 1835, 1837, 1839, 1841, 1843, 1845, 1847, 1849, 1858, 1861, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2375, 2377 }; static const short _lexer_trans_targs[] = { 2, 823, 25, 25, 26, 36, 38, 22, 52, 55, 25, 0, 3, 0, 4, 61, 95, 136, 306, 414, 441, 617, 626, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 25, 37, 24, 25, 37, 24, 2, 25, 25, 26, 36, 38, 22, 52, 55, 25, 0, 27, 0, 28, 0, 30, 29, 29, 30, 29, 29, 31, 31, 32, 31, 31, 31, 31, 32, 31, 31, 31, 31, 33, 31, 31, 31, 31, 34, 31, 31, 25, 35, 35, 0, 25, 35, 35, 0, 25, 37, 36, 25, 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, 51, 0, 825, 0, 0, 0, 0, 0, 53, 54, 25, 54, 54, 52, 53, 53, 25, 54, 52, 54, 0, 55, 56, 55, 0, 60, 59, 58, 56, 59, 57, 0, 58, 56, 57, 0, 58, 57, 60, 59, 58, 56, 59, 57, 2, 60, 60, 26, 36, 38, 22, 52, 55, 60, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 22, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 119, 118, 119, 118, 120, 119, 119, 25, 25, 119, 118, 121, 119, 118, 122, 119, 118, 123, 119, 118, 124, 119, 118, 125, 119, 118, 126, 119, 118, 127, 119, 118, 128, 119, 118, 129, 119, 118, 130, 119, 118, 131, 119, 118, 132, 119, 118, 133, 119, 118, 134, 119, 118, 119, 135, 118, 2, 25, 25, 26, 36, 38, 22, 52, 55, 25, 0, 137, 0, 138, 0, 139, 300, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 148, 147, 148, 147, 149, 148, 148, 25, 286, 169, 25, 148, 147, 150, 148, 147, 151, 170, 204, 213, 226, 253, 262, 148, 147, 152, 148, 147, 153, 148, 147, 154, 148, 147, 155, 148, 147, 156, 148, 147, 157, 148, 147, 158, 148, 147, 159, 148, 147, 160, 148, 147, 161, 148, 147, 162, 148, 147, 163, 148, 147, 164, 148, 147, 165, 148, 147, 166, 148, 147, 167, 148, 147, 168, 148, 147, 169, 148, 147, 148, 135, 147, 148, 171, 147, 172, 148, 147, 173, 148, 147, 174, 148, 147, 175, 148, 147, 176, 148, 147, 177, 148, 147, 178, 148, 147, 179, 148, 147, 180, 148, 147, 181, 148, 147, 182, 148, 147, 183, 148, 147, 184, 148, 147, 185, 148, 147, 186, 148, 147, 187, 148, 147, 188, 148, 147, 189, 148, 147, 190, 148, 147, 191, 148, 147, 192, 148, 147, 193, 148, 147, 194, 148, 147, 195, 148, 147, 196, 148, 147, 197, 148, 147, 198, 148, 147, 199, 148, 147, 200, 148, 147, 201, 148, 147, 202, 148, 147, 203, 148, 147, 169, 148, 147, 205, 148, 147, 206, 148, 147, 207, 148, 147, 208, 148, 147, 209, 148, 147, 210, 148, 147, 211, 148, 147, 212, 148, 147, 169, 148, 147, 214, 148, 147, 215, 148, 147, 216, 148, 147, 217, 148, 147, 218, 148, 147, 219, 148, 147, 220, 148, 147, 221, 148, 147, 222, 148, 147, 223, 148, 147, 224, 148, 147, 225, 148, 147, 148, 135, 147, 227, 148, 147, 228, 148, 147, 229, 148, 147, 230, 148, 147, 231, 148, 147, 232, 148, 147, 233, 148, 147, 234, 148, 147, 235, 148, 147, 236, 148, 147, 237, 148, 147, 238, 148, 147, 239, 148, 147, 240, 148, 147, 241, 148, 147, 242, 148, 147, 243, 148, 147, 244, 148, 147, 245, 148, 147, 246, 148, 147, 247, 148, 147, 248, 148, 147, 249, 148, 147, 250, 148, 147, 251, 148, 147, 252, 148, 147, 210, 148, 147, 254, 148, 147, 255, 148, 147, 256, 148, 147, 257, 148, 147, 258, 148, 147, 259, 148, 147, 260, 148, 147, 261, 148, 147, 166, 148, 147, 263, 148, 147, 264, 148, 147, 265, 148, 147, 266, 148, 147, 267, 148, 147, 268, 148, 147, 269, 148, 147, 270, 148, 147, 271, 148, 147, 272, 148, 147, 273, 148, 147, 274, 148, 147, 275, 148, 147, 276, 148, 147, 277, 148, 147, 278, 148, 147, 279, 148, 147, 280, 148, 147, 281, 148, 147, 282, 148, 147, 283, 148, 147, 284, 148, 147, 285, 148, 147, 225, 148, 147, 148, 287, 147, 148, 288, 147, 148, 289, 147, 148, 290, 147, 148, 291, 147, 148, 292, 147, 148, 293, 147, 148, 294, 147, 148, 295, 147, 148, 296, 147, 148, 297, 147, 148, 298, 147, 148, 299, 147, 148, 25, 147, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 22, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 321, 320, 321, 320, 322, 321, 321, 25, 400, 25, 321, 320, 323, 321, 320, 324, 346, 355, 364, 379, 321, 320, 325, 321, 320, 326, 321, 320, 327, 321, 320, 328, 321, 320, 329, 321, 320, 330, 321, 320, 331, 321, 320, 332, 321, 320, 333, 321, 320, 334, 321, 320, 335, 321, 320, 336, 321, 320, 337, 321, 320, 338, 321, 320, 339, 321, 320, 340, 321, 320, 341, 321, 320, 342, 321, 320, 343, 321, 320, 344, 321, 320, 345, 321, 320, 321, 135, 320, 347, 321, 320, 348, 321, 320, 349, 321, 320, 350, 321, 320, 351, 321, 320, 352, 321, 320, 353, 321, 320, 354, 321, 320, 345, 321, 320, 356, 321, 320, 357, 321, 320, 358, 321, 320, 359, 321, 320, 360, 321, 320, 361, 321, 320, 362, 321, 320, 363, 321, 320, 342, 321, 320, 365, 321, 320, 366, 321, 320, 367, 321, 320, 368, 321, 320, 369, 321, 320, 370, 321, 320, 371, 321, 320, 372, 321, 320, 373, 321, 320, 374, 321, 320, 375, 321, 320, 376, 321, 320, 377, 321, 320, 378, 321, 320, 352, 321, 320, 380, 321, 320, 381, 321, 320, 382, 321, 320, 383, 321, 320, 384, 321, 320, 385, 321, 320, 386, 321, 320, 387, 321, 320, 388, 321, 320, 389, 321, 320, 390, 321, 320, 391, 321, 320, 392, 321, 320, 393, 321, 320, 394, 321, 320, 395, 321, 320, 396, 321, 320, 397, 321, 320, 398, 321, 320, 399, 321, 320, 352, 321, 320, 321, 401, 320, 321, 402, 320, 321, 403, 320, 321, 404, 320, 321, 405, 320, 321, 406, 320, 321, 407, 320, 321, 408, 320, 321, 409, 320, 321, 410, 320, 321, 411, 320, 321, 412, 320, 321, 413, 320, 321, 25, 320, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 303, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 459, 0, 460, 0, 462, 461, 462, 461, 463, 462, 462, 25, 603, 483, 25, 462, 461, 464, 462, 461, 465, 484, 518, 534, 546, 573, 582, 462, 461, 466, 462, 461, 467, 462, 461, 468, 462, 461, 469, 462, 461, 470, 462, 461, 471, 462, 461, 472, 462, 461, 473, 462, 461, 474, 462, 461, 475, 462, 461, 476, 462, 461, 477, 462, 461, 478, 462, 461, 479, 462, 461, 480, 462, 461, 481, 462, 461, 482, 462, 461, 483, 462, 461, 462, 135, 461, 462, 485, 461, 486, 462, 461, 487, 462, 461, 488, 462, 461, 489, 462, 461, 490, 462, 461, 491, 462, 461, 492, 462, 461, 493, 462, 461, 494, 462, 461, 495, 462, 461, 496, 462, 461, 497, 462, 461, 498, 462, 461, 499, 462, 461, 500, 462, 461, 501, 462, 461, 502, 462, 461, 503, 462, 461, 504, 462, 461, 505, 462, 461, 506, 462, 461, 507, 462, 461, 508, 462, 461, 509, 462, 461, 510, 462, 461, 511, 462, 461, 512, 462, 461, 513, 462, 461, 514, 462, 461, 515, 462, 461, 516, 462, 461, 517, 462, 461, 483, 462, 461, 519, 462, 461, 520, 462, 461, 521, 528, 462, 461, 522, 462, 461, 523, 462, 461, 524, 462, 461, 525, 462, 461, 526, 462, 461, 527, 462, 461, 462, 135, 461, 529, 462, 461, 530, 462, 461, 531, 462, 461, 532, 462, 461, 533, 462, 461, 483, 462, 461, 535, 462, 461, 536, 462, 461, 537, 462, 461, 538, 462, 461, 539, 462, 461, 540, 462, 461, 541, 462, 461, 542, 462, 461, 543, 462, 461, 544, 462, 461, 545, 462, 461, 527, 462, 461, 547, 462, 461, 548, 462, 461, 549, 462, 461, 550, 462, 461, 551, 462, 461, 552, 462, 461, 553, 462, 461, 554, 462, 461, 555, 462, 461, 556, 462, 461, 557, 462, 461, 558, 462, 461, 559, 462, 461, 560, 462, 461, 561, 462, 461, 562, 462, 461, 563, 462, 461, 564, 462, 461, 565, 462, 461, 566, 462, 461, 567, 462, 461, 568, 462, 461, 569, 462, 461, 570, 462, 461, 571, 462, 461, 572, 462, 461, 531, 462, 461, 574, 462, 461, 575, 462, 461, 576, 462, 461, 577, 462, 461, 578, 462, 461, 579, 462, 461, 580, 462, 461, 581, 462, 461, 480, 462, 461, 583, 462, 461, 584, 462, 461, 585, 462, 461, 586, 462, 461, 587, 462, 461, 588, 462, 461, 589, 462, 461, 590, 462, 461, 591, 462, 461, 592, 462, 461, 593, 462, 461, 594, 462, 461, 595, 462, 461, 596, 462, 461, 597, 462, 461, 598, 462, 461, 599, 462, 461, 600, 462, 461, 601, 462, 461, 602, 462, 461, 524, 462, 461, 462, 604, 461, 462, 605, 461, 462, 606, 461, 462, 607, 461, 462, 608, 461, 462, 609, 461, 462, 610, 461, 462, 611, 461, 462, 612, 461, 462, 613, 461, 462, 614, 461, 462, 615, 461, 462, 616, 461, 462, 25, 461, 618, 0, 619, 0, 620, 0, 621, 0, 622, 0, 623, 0, 624, 0, 625, 0, 19, 0, 627, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 653, 652, 653, 652, 654, 653, 653, 25, 809, 674, 25, 653, 652, 655, 653, 652, 656, 675, 709, 725, 737, 764, 779, 788, 653, 652, 657, 653, 652, 658, 653, 652, 659, 653, 652, 660, 653, 652, 661, 653, 652, 662, 653, 652, 663, 653, 652, 664, 653, 652, 665, 653, 652, 666, 653, 652, 667, 653, 652, 668, 653, 652, 669, 653, 652, 670, 653, 652, 671, 653, 652, 672, 653, 652, 673, 653, 652, 674, 653, 652, 653, 135, 652, 653, 676, 652, 677, 653, 652, 678, 653, 652, 679, 653, 652, 680, 653, 652, 681, 653, 652, 682, 653, 652, 683, 653, 652, 684, 653, 652, 685, 653, 652, 686, 653, 652, 687, 653, 652, 688, 653, 652, 689, 653, 652, 690, 653, 652, 691, 653, 652, 692, 653, 652, 693, 653, 652, 694, 653, 652, 695, 653, 652, 696, 653, 652, 697, 653, 652, 698, 653, 652, 699, 653, 652, 700, 653, 652, 701, 653, 652, 702, 653, 652, 703, 653, 652, 704, 653, 652, 705, 653, 652, 706, 653, 652, 707, 653, 652, 708, 653, 652, 674, 653, 652, 710, 653, 652, 711, 653, 652, 712, 719, 653, 652, 713, 653, 652, 714, 653, 652, 715, 653, 652, 716, 653, 652, 717, 653, 652, 718, 653, 652, 653, 135, 652, 720, 653, 652, 721, 653, 652, 722, 653, 652, 723, 653, 652, 724, 653, 652, 674, 653, 652, 726, 653, 652, 727, 653, 652, 728, 653, 652, 729, 653, 652, 730, 653, 652, 731, 653, 652, 732, 653, 652, 733, 653, 652, 734, 653, 652, 735, 653, 652, 736, 653, 652, 718, 653, 652, 738, 653, 652, 739, 653, 652, 740, 653, 652, 741, 653, 652, 742, 653, 652, 743, 653, 652, 744, 653, 652, 745, 653, 652, 746, 653, 652, 747, 653, 652, 748, 653, 652, 749, 653, 652, 750, 653, 652, 751, 653, 652, 752, 653, 652, 753, 653, 652, 754, 653, 652, 755, 653, 652, 756, 653, 652, 757, 653, 652, 758, 653, 652, 759, 653, 652, 760, 653, 652, 761, 653, 652, 762, 653, 652, 763, 653, 652, 722, 653, 652, 765, 653, 652, 766, 653, 652, 767, 653, 652, 768, 653, 652, 769, 653, 652, 770, 653, 652, 771, 653, 652, 772, 653, 652, 773, 653, 652, 774, 653, 652, 775, 653, 652, 776, 653, 652, 777, 653, 652, 778, 653, 652, 715, 653, 652, 780, 653, 652, 781, 653, 652, 782, 653, 652, 783, 653, 652, 784, 653, 652, 785, 653, 652, 786, 653, 652, 787, 653, 652, 671, 653, 652, 789, 653, 652, 790, 653, 652, 791, 653, 652, 792, 653, 652, 793, 653, 652, 794, 653, 652, 795, 653, 652, 796, 653, 652, 797, 653, 652, 798, 653, 652, 799, 653, 652, 800, 653, 652, 801, 653, 652, 802, 653, 652, 803, 653, 652, 804, 653, 652, 805, 653, 652, 806, 653, 652, 807, 653, 652, 808, 653, 652, 715, 653, 652, 653, 810, 652, 653, 811, 652, 653, 812, 652, 653, 813, 652, 653, 814, 652, 653, 815, 652, 653, 816, 652, 653, 817, 652, 653, 818, 652, 653, 819, 652, 653, 820, 652, 653, 821, 652, 653, 822, 652, 653, 25, 652, 824, 0, 25, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 825; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/tl.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1625 "ext/gherkin_lexer_tl/gherkin_lexer_tl.c" { cs = lexer_start; } #line 425 "ragel/i18n/tl.c.rl" #line 1632 "ext/gherkin_lexer_tl/gherkin_lexer_tl.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/tl.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/tl.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/tl.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/tl.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/tl.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/tl.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/tl.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/tl.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/tl.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/tl.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/tl.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/tl.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/tl.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/tl.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/tl.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/tl.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/tl.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/tl.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/tl.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/tl.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/tl.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/tl.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/tl.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/tl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1922 "ext/gherkin_lexer_tl/gherkin_lexer_tl.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/tl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1985 "ext/gherkin_lexer_tl/gherkin_lexer_tl.c" } } } _out: {} } #line 426 "ragel/i18n/tl.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_tl() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Tl", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en_old/0000755000004100000410000000000012244512574020231 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c0000644000004100000410000011056312244512574024551 0ustar www-datawww-data #line 1 "ragel/i18n/en_old.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en_old.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 21, 22, 23, 24, 25, 40, 43, 46, 48, 65, 69, 71, 72, 75, 77, 94, 95, 96, 98, 100, 105, 110, 115, 120, 124, 128, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 153, 160, 165, 167, 168, 170, 171, 172, 173, 174, 175, 186, 188, 190, 192, 209, 210, 211, 213, 214, 216, 218, 219, 220, 221, 222, 229, 231, 234, 236, 238, 240, 242, 243, 244, 246, 247, 248, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 274, 277, 280, 282, 299, 303, 305, 306, 309, 312, 315, 318, 319, 320, 321, 322, 323, 325, 326, 329, 332, 336, 342, 345, 347, 353, 370, 372, 374, 376, 379, 381, 398, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 458, 460, 478, 479, 480, 481, 482, 497, 501, 503, 505, 508, 510, 527, 531, 532, 533, 535, 537, 539, 542, 544, 561, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 596, 598, 601, 603, 605, 607, 609, 611, 613, 615, 618, 620, 622, 625, 627, 629, 631, 633, 635, 637, 639, 641, 644, 646, 664, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 700, 702, 704, 706, 709, 711, 714, 717, 719, 721, 723, 726, 728, 730, 733, 735, 737, 739, 741, 743, 745, 747, 748, 751, 752, 753, 755, 757, 759, 762, 764, 781, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 820, 822, 824, 826, 828, 830, 832, 834, 836, 839, 841, 843, 846, 848, 850, 852, 854, 856, 858, 860, 862, 865, 867, 885, 886, 887, 888 }; static const char _lexer_trans_keys[] = { -61, -17, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 9, 13, -112, -98, 10, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -80, 97, 117, 32, -61, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 99, 101, 119, -61, 97, -90, 116, 58, 10, 10, -61, 10, 32, 35, 37, 64, 65, 72, 83, 9, 13, -122, 10, 10, 114, 10, 58, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, 110, 100, 101, 119, 32, -61, 116, -80, -66, 101, 58, 10, 10, 10, 32, 35, 72, 124, 9, 13, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 58, 10, 101, 104, 97, 32, 58, 104, 119, -61, 97, -90, 114, 32, 115, 119, 97, 58, 10, 10, -61, 10, 32, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 9, 13, -112, -98, 10, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -80, 97, 117, 32, -61, 10, 13, -66, 10, 13, 10, 13, 101, 10, 13, 32, 114, 104, 101, 32, 104, 97, 117, 32, 10, 13, 116, 10, 13, 104, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, 10, 114, 10, 104, 10, 32, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -66, 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, 99, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 58, 10, 101, 10, 110, 10, 100, 10, 119, 10, 97, 10, 104, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 116, 124, 9, 13, 104, 101, 10, 10, -61, 10, 32, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 9, 13, -122, -112, -98, 10, 10, 114, 10, 58, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -80, 101, 32, 10, 114, 10, 104, 10, 32, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -66, 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, 99, 101, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 101, 10, 110, 10, 100, 10, 119, 10, 97, 10, 32, 58, 10, 104, 10, 119, -61, 10, 97, -90, 10, 10, 114, 10, 32, 10, 115, 10, 119, 10, 97, 10, 101, 10, 104, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 116, 124, 9, 13, 104, 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, 101, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 101, 10, 101, 119, 10, 32, -61, 10, 116, -80, -66, 10, 10, 101, 10, 104, 10, 97, 10, 32, 58, 10, 104, 10, 119, -61, 10, 97, -90, 10, 10, 114, 10, 32, 10, 115, 10, 119, 10, 97, 10, 101, 101, -80, 10, 13, 101, 32, 10, 114, 10, 104, 10, 32, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 124, 9, 13, -122, -112, -98, -66, 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, 99, 10, 119, -61, 10, 97, -90, 10, 10, 116, 10, 58, 10, 101, 10, 110, 10, 100, 10, 119, 10, 97, 10, 32, 58, 10, 104, 10, 119, -61, 10, 97, -90, 10, 10, 114, 10, 32, 10, 115, 10, 119, 10, 97, 10, 101, 10, 104, 10, 97, 117, 10, 32, -61, 10, 32, 34, 35, 37, 42, 55, 64, 65, 72, 79, 83, 84, 116, 124, 9, 13, 104, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 3, 1, 1, 1, 1, 13, 3, 3, 2, 15, 4, 2, 1, 3, 2, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 5, 3, 2, 1, 2, 1, 1, 1, 1, 1, 9, 2, 2, 2, 15, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 5, 2, 3, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 3, 3, 2, 15, 4, 2, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 1, 3, 3, 2, 4, 3, 2, 4, 15, 2, 2, 2, 3, 2, 15, 4, 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, 3, 2, 16, 1, 1, 1, 1, 13, 4, 2, 2, 3, 2, 15, 4, 1, 1, 2, 2, 2, 3, 2, 15, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 16, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 3, 2, 3, 3, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 1, 2, 2, 2, 3, 2, 15, 4, 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, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 16, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 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, 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, 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, 1, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 22, 24, 26, 28, 30, 45, 49, 53, 56, 73, 78, 81, 83, 87, 90, 107, 109, 111, 114, 117, 122, 127, 132, 137, 141, 145, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 183, 188, 195, 200, 203, 205, 208, 210, 212, 214, 216, 218, 229, 232, 235, 238, 255, 257, 259, 262, 264, 267, 270, 272, 274, 276, 278, 285, 288, 292, 295, 298, 301, 304, 306, 308, 311, 313, 315, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 351, 355, 359, 362, 379, 384, 387, 389, 393, 397, 401, 405, 407, 409, 411, 413, 415, 418, 420, 424, 428, 432, 438, 442, 445, 451, 468, 471, 474, 477, 481, 484, 501, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 589, 592, 610, 612, 614, 616, 618, 633, 638, 641, 644, 648, 651, 668, 673, 675, 677, 680, 683, 686, 690, 693, 710, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 761, 764, 768, 771, 774, 777, 780, 783, 786, 789, 793, 796, 799, 803, 806, 809, 812, 815, 818, 821, 824, 827, 831, 834, 852, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 906, 909, 912, 915, 919, 922, 926, 930, 933, 936, 939, 943, 946, 949, 953, 956, 959, 962, 965, 968, 971, 974, 976, 980, 982, 984, 987, 990, 993, 997, 1000, 1017, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1102, 1105, 1108, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1140, 1143, 1161, 1163, 1165, 1167 }; static const short _lexer_trans_targs[] = { 2, 308, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 0, 4, 0, 5, 0, 7, 6, 7, 6, 8, 7, 7, 17, 267, 262, 262, 17, 281, 282, 288, 290, 303, 7, 6, 9, 263, 7, 6, 7, 10, 260, 6, 7, 11, 6, 12, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 258, 0, 14, 106, 0, 15, 0, 257, 17, 29, 16, 17, 29, 16, 2, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 19, 0, 20, 0, 22, 21, 21, 22, 21, 21, 23, 23, 24, 23, 23, 23, 23, 24, 23, 23, 23, 23, 25, 23, 23, 23, 23, 26, 23, 23, 17, 27, 27, 0, 17, 27, 27, 0, 17, 29, 28, 17, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 310, 0, 45, 0, 17, 29, 16, 0, 0, 0, 0, 47, 48, 17, 48, 48, 46, 47, 47, 17, 48, 46, 48, 0, 44, 3, 0, 51, 0, 52, 256, 0, 53, 0, 54, 0, 55, 0, 57, 56, 57, 56, 58, 57, 57, 17, 218, 17, 232, 233, 238, 57, 56, 59, 57, 56, 57, 60, 56, 57, 61, 56, 2, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 63, 0, 44, 0, 65, 80, 0, 66, 0, 67, 79, 0, 68, 68, 0, 69, 0, 70, 0, 72, 71, 72, 71, 72, 72, 17, 73, 17, 72, 71, 72, 74, 71, 75, 72, 78, 71, 76, 72, 71, 72, 77, 71, 72, 61, 71, 72, 76, 71, 68, 0, 81, 0, 82, 159, 0, 83, 0, 84, 0, 85, 158, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 94, 93, 94, 93, 95, 94, 94, 17, 128, 123, 123, 17, 142, 143, 149, 151, 153, 94, 93, 96, 124, 94, 93, 94, 97, 121, 93, 94, 98, 93, 99, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 108, 0, 101, 106, 0, 102, 0, 103, 17, 29, 16, 104, 17, 29, 16, 17, 29, 105, 16, 17, 29, 45, 16, 107, 0, 44, 0, 109, 0, 61, 0, 111, 0, 112, 106, 0, 113, 0, 17, 29, 114, 16, 17, 29, 104, 16, 115, 116, 115, 0, 120, 119, 118, 116, 119, 117, 0, 118, 116, 117, 0, 118, 117, 120, 119, 118, 116, 119, 117, 2, 120, 120, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 120, 0, 94, 122, 93, 94, 123, 93, 94, 61, 93, 94, 125, 121, 93, 94, 126, 93, 127, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 108, 0, 94, 129, 93, 94, 130, 93, 94, 131, 93, 94, 132, 93, 94, 133, 93, 94, 134, 93, 94, 135, 93, 94, 136, 93, 94, 137, 93, 94, 138, 93, 94, 139, 93, 94, 140, 93, 94, 141, 93, 94, 17, 93, 94, 123, 93, 94, 144, 93, 145, 94, 148, 93, 146, 94, 93, 94, 147, 93, 94, 61, 93, 94, 146, 93, 94, 150, 93, 94, 123, 93, 94, 152, 93, 94, 147, 93, 94, 154, 93, 94, 155, 121, 93, 94, 156, 93, 2, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 157, 115, 17, 0, 108, 0, 86, 0, 161, 160, 161, 160, 162, 161, 161, 17, 178, 173, 173, 17, 192, 193, 198, 200, 213, 161, 160, 163, 165, 174, 161, 160, 161, 164, 160, 161, 61, 160, 161, 166, 171, 160, 161, 167, 160, 168, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 169, 0, 170, 0, 61, 0, 161, 172, 160, 161, 173, 160, 161, 61, 160, 161, 175, 171, 160, 161, 176, 160, 177, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 169, 0, 161, 179, 160, 161, 180, 160, 161, 181, 160, 161, 182, 160, 161, 183, 160, 161, 184, 160, 161, 185, 160, 161, 186, 160, 161, 187, 160, 161, 188, 160, 161, 189, 160, 161, 190, 160, 161, 191, 160, 161, 17, 160, 161, 173, 163, 160, 161, 194, 160, 195, 161, 197, 160, 196, 161, 160, 161, 164, 160, 161, 196, 160, 161, 199, 160, 161, 173, 160, 161, 201, 160, 161, 202, 160, 161, 203, 61, 160, 161, 204, 160, 161, 205, 160, 206, 161, 212, 160, 207, 161, 160, 161, 208, 160, 161, 209, 160, 161, 210, 160, 161, 211, 160, 161, 164, 160, 161, 207, 160, 161, 214, 160, 161, 215, 171, 160, 161, 216, 160, 2, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 217, 115, 17, 0, 169, 0, 57, 219, 56, 57, 220, 56, 57, 221, 56, 57, 222, 56, 57, 223, 56, 57, 224, 56, 57, 225, 56, 57, 226, 56, 57, 227, 56, 57, 228, 56, 57, 229, 56, 57, 230, 56, 57, 231, 56, 57, 17, 56, 57, 59, 56, 57, 234, 56, 235, 57, 237, 56, 236, 57, 56, 57, 60, 56, 57, 236, 56, 57, 239, 244, 56, 57, 240, 56, 241, 57, 243, 56, 242, 242, 57, 56, 57, 60, 56, 57, 242, 56, 57, 245, 56, 57, 246, 61, 56, 57, 247, 56, 57, 248, 56, 249, 57, 255, 56, 250, 57, 56, 57, 251, 56, 57, 252, 56, 57, 253, 56, 57, 254, 56, 57, 60, 56, 57, 250, 56, 53, 0, 104, 17, 29, 16, 259, 0, 61, 0, 7, 261, 6, 7, 262, 6, 7, 61, 6, 7, 264, 260, 6, 7, 265, 6, 266, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 115, 17, 0, 3, 13, 100, 258, 0, 7, 268, 6, 7, 269, 6, 7, 270, 6, 7, 271, 6, 7, 272, 6, 7, 273, 6, 7, 274, 6, 7, 275, 6, 7, 276, 6, 7, 277, 6, 7, 278, 6, 7, 279, 6, 7, 280, 6, 7, 17, 6, 7, 262, 6, 7, 283, 6, 284, 7, 287, 6, 285, 7, 6, 7, 286, 6, 7, 61, 6, 7, 285, 6, 7, 289, 6, 7, 262, 6, 7, 291, 6, 7, 292, 6, 7, 293, 61, 6, 7, 294, 6, 7, 295, 6, 296, 7, 302, 6, 297, 7, 6, 7, 298, 6, 7, 299, 6, 7, 300, 6, 7, 301, 6, 7, 286, 6, 7, 297, 6, 7, 304, 6, 7, 305, 260, 6, 7, 306, 6, 2, 17, 17, 18, 28, 30, 44, 44, 46, 49, 50, 62, 64, 110, 307, 115, 17, 0, 258, 0, 309, 0, 17, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 29, 1, 29, 29, 29, 29, 29, 35, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 84, 72, 84, 84, 84, 84, 84, 0, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 0, 0, 43, 0, 0, 43, 0, 43, 57, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 29, 1, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 13, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 84, 78, 84, 84, 84, 84, 84, 0, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 19, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 0, 0, 43, 0, 0, 43, 0, 43, 57, 149, 126, 57, 0, 110, 23, 0, 110, 23, 0, 0, 110, 23, 0, 0, 0, 43, 0, 43, 0, 43, 19, 43, 0, 43, 0, 0, 43, 0, 43, 149, 126, 57, 57, 110, 23, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 96, 90, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 54, 19, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 0, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 19, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 0, 66, 31, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 84, 75, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 17, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 0, 0, 43, 0, 43, 17, 43, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 17, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 0, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 17, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 0, 66, 31, 43, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 110, 23, 0, 0, 43, 15, 43, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 0, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 63, 57, 63, 63, 63, 63, 63, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 310; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en_old.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 913 "ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c" { cs = lexer_start; } #line 425 "ragel/i18n/en_old.c.rl" #line 920 "ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en_old.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en_old.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en_old.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en_old.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en_old.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en_old.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en_old.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en_old.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en_old.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en_old.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en_old.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en_old.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en_old.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en_old.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en_old.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en_old.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en_old.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en_old.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en_old.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en_old.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en_old.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en_old.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en_old.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en_old.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1210 "ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en_old.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1273 "ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c" } } } _out: {} } #line 426 "ragel/i18n/en_old.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en_old() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En_old", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en_old/extconf.rb0000644000004100000410000000036612244512574022231 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en_old") have_library("c", "main") create_makefile("gherkin_lexer_en_old") gherkin-2.12.2/ext/gherkin_lexer_tt/0000755000004100000410000000000012244512574017420 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_tt/gherkin_lexer_tt.c0000644000004100000410000016467212244512574023141 0ustar www-datawww-data #line 1 "ragel/i18n/tt.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/tt.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_tt/gherkin_lexer_tt.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 14, 20, 21, 22, 23, 25, 27, 40, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 81, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 116, 117, 118, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 141, 146, 151, 156, 161, 165, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 191, 198, 203, 207, 213, 216, 218, 224, 237, 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, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 592, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 869, 870, 871, 872, 873, 874, 875, 876, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 962, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1192, 1193, 1204, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1498, 1499 }; static const char _lexer_trans_keys[] = { -48, -46, -45, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -110, -102, -101, -100, -99, -95, -45, -103, 32, 10, 13, 10, 13, -48, -46, -45, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -82, -70, -48, -47, -73, -48, -75, -48, -67, -47, -121, -45, -103, -48, -69, -48, -75, -48, -70, -48, -69, -48, -75, -48, -69, -48, -75, -48, -70, 58, 10, 10, -48, -46, 10, 32, 35, 37, 64, 9, 13, -102, -100, -95, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -47, 10, -120, 10, 10, 58, -48, -46, -45, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -104, -48, -77, -71, -68, -45, -103, -47, -128, -47, -126, -48, -72, -48, -70, -48, -68, -48, -80, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, -46, -45, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -45, 10, -72, 10, -47, 10, -127, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -69, 10, -48, 10, -80, 10, -47, 10, -128, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, 58, -67, 10, -47, 10, -117, 10, -46, 10, -93, 10, 10, 32, -47, 10, -126, 10, -45, 10, -87, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -69, 10, -48, 10, -75, 10, -47, 10, -120, 10, -48, 10, -75, 10, -82, 10, -48, -47, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -128, 10, -48, 10, -67, 10, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -69, 10, -45, 10, -103, 10, 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, -128, -48, -67, -45, -103, -48, -70, -48, -69, -45, -103, -47, -128, 58, 10, 10, -48, -46, 10, 32, 35, 124, 9, 13, -100, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, 10, 58, -82, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, -103, -48, -68, -48, -75, -47, -128, -48, -75, -47, -120, 58, 10, 10, -48, -46, -45, 10, 32, 35, 37, 42, 64, 9, 13, -110, -101, -100, -99, -95, 10, -45, 10, -103, 10, 10, 32, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, 10, 58, -45, 10, -103, 10, -47, 10, -126, 10, -48, 10, -72, 10, -46, 10, -105, 10, -45, 10, -103, 10, -48, 10, -76, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, 58, -67, 10, -47, 10, -117, 10, -46, 10, -93, 10, 10, 32, -47, 10, -126, 10, -45, 10, -87, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -69, 10, -48, 10, -75, 10, -47, 10, -120, 10, -48, 10, -75, 10, -82, -70, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, 10, -103, 10, -48, 10, -68, 10, -104, 10, -48, 10, -77, -71, -68, 10, -45, 10, -103, 10, -47, 10, -128, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -68, 10, -48, 10, -80, 10, 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, -45, -103, -48, -70, -48, -72, -48, -67, -48, -45, -72, -47, -127, -48, -80, -48, -69, -48, -69, -48, -80, -87, -48, -68, -48, -70, -48, -72, -48, -67, -45, -103, -47, -126, -48, -72, -46, -105, -45, -103, -48, -76, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, -48, 58, -67, -47, -117, -46, -93, 32, -47, -126, -45, -87, -48, -73, -48, -75, -48, -69, -48, -75, -47, -120, -48, -75, 58, 10, 10, -48, -46, -45, 10, 32, 35, 37, 42, 64, 9, 13, -110, -101, -100, -99, -95, 10, -45, 10, -103, 10, 10, 32, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, 10, 58, -45, 10, -103, 10, -47, 10, -126, 10, -48, 10, -72, 10, -46, 10, -105, 10, -45, 10, -103, 10, -48, 10, -76, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -82, -70, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, 10, -103, 10, -48, 10, -68, 10, -104, 10, -48, 10, -77, -71, -68, 10, -45, 10, -103, 10, -47, 10, -128, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -68, 10, -48, 10, -80, 10, 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, 10, -48, -46, -45, 10, 32, 35, 37, 42, 64, 9, 13, -110, -102, -101, -100, -99, -95, 10, -45, 10, -103, 10, 10, 32, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -47, 10, -120, 10, 10, 58, -45, 10, -103, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -45, 10, -87, 10, -48, 10, -68, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -45, 10, -103, 10, -47, 10, -126, 10, -48, 10, -72, 10, -46, 10, -105, 10, -45, 10, -103, 10, -48, 10, -76, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, -48, 10, 58, -67, 10, -47, 10, -117, 10, -46, 10, -93, 10, 10, 32, -47, 10, -126, 10, -45, 10, -87, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -69, 10, -48, 10, -75, 10, -47, 10, -120, 10, -48, 10, -75, 10, -82, -70, 10, -48, 10, -73, 10, -48, 10, -75, 10, -48, 10, -67, 10, -47, 10, -121, 10, -45, 10, -103, 10, -48, 10, -69, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -75, 10, -45, 10, -103, 10, -48, 10, -68, 10, -104, 10, -48, 10, -77, -71, -68, 10, -45, 10, -103, 10, -47, 10, -128, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -68, 10, -48, 10, -80, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 12, 6, 1, 1, 1, 2, 2, 11, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 11, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 6, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 6, 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, 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, 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, 4, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 6, 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, 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, 4, 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, 9, 7, 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, 2, 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, 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, 4, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 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, 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, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 14, 21, 23, 25, 27, 30, 33, 46, 49, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 117, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 162, 164, 166, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 205, 208, 213, 218, 223, 228, 232, 236, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 274, 281, 286, 290, 296, 300, 303, 309, 322, 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, 449, 452, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 529, 532, 535, 538, 541, 544, 547, 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, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 859, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1444, 1451, 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1786, 1788, 1799, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 1984, 1987, 1990, 1993, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048, 2051, 2054, 2057, 2060, 2063, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2150, 2153, 2156, 2159, 2162, 2165, 2168, 2171, 2174, 2177, 2180, 2183, 2186, 2189, 2192, 2195, 2198, 2201, 2204, 2207, 2210, 2213, 2216, 2219, 2222, 2225, 2228, 2231, 2234, 2236, 2238 }; static const short _lexer_trans_targs[] = { 2, 9, 51, 759, 8, 8, 68, 78, 80, 5, 94, 97, 8, 0, 3, 275, 421, 429, 450, 462, 0, 4, 0, 5, 0, 6, 0, 8, 79, 7, 8, 79, 7, 2, 9, 51, 8, 8, 68, 78, 80, 5, 94, 97, 8, 0, 10, 271, 0, 11, 215, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 39, 38, 39, 38, 40, 169, 39, 39, 8, 201, 8, 39, 38, 41, 103, 132, 39, 38, 42, 39, 38, 43, 39, 38, 44, 39, 38, 45, 39, 38, 46, 39, 38, 47, 39, 38, 48, 39, 38, 49, 39, 38, 39, 50, 38, 2, 9, 51, 8, 8, 68, 78, 80, 5, 94, 97, 8, 0, 52, 0, 53, 0, 54, 58, 64, 0, 55, 0, 56, 0, 57, 0, 5, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 5, 0, 65, 0, 66, 0, 67, 0, 5, 0, 69, 0, 70, 0, 72, 71, 71, 72, 71, 71, 73, 73, 74, 73, 73, 73, 73, 74, 73, 73, 73, 73, 75, 73, 73, 73, 73, 76, 73, 73, 8, 77, 77, 0, 8, 77, 77, 0, 8, 79, 78, 8, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 761, 0, 0, 0, 0, 0, 95, 96, 8, 96, 96, 94, 95, 95, 8, 96, 94, 96, 0, 97, 98, 97, 0, 102, 101, 100, 98, 101, 99, 0, 100, 98, 99, 0, 100, 99, 102, 101, 100, 98, 101, 99, 2, 9, 51, 102, 102, 68, 78, 80, 5, 94, 97, 102, 0, 104, 117, 39, 38, 105, 39, 38, 106, 39, 38, 107, 39, 38, 108, 39, 38, 109, 39, 38, 110, 39, 38, 111, 39, 38, 112, 39, 38, 113, 39, 38, 114, 39, 38, 115, 39, 38, 116, 39, 38, 49, 39, 38, 118, 39, 38, 119, 39, 38, 120, 39, 38, 121, 39, 38, 122, 39, 38, 123, 39, 38, 124, 39, 38, 125, 39, 38, 126, 39, 38, 127, 39, 38, 128, 39, 38, 129, 39, 38, 130, 39, 38, 131, 39, 38, 49, 39, 38, 133, 39, 38, 134, 39, 38, 135, 39, 38, 136, 39, 38, 137, 39, 38, 138, 39, 38, 139, 39, 38, 140, 39, 38, 141, 39, 38, 142, 39, 38, 143, 39, 38, 144, 39, 38, 145, 39, 38, 146, 39, 38, 147, 39, 50, 38, 148, 39, 38, 149, 39, 38, 150, 39, 38, 151, 39, 38, 152, 39, 38, 39, 153, 38, 154, 39, 38, 155, 39, 38, 156, 39, 38, 157, 39, 38, 158, 39, 38, 159, 39, 38, 160, 39, 38, 161, 39, 38, 162, 39, 38, 163, 39, 38, 164, 39, 38, 165, 39, 38, 166, 39, 38, 167, 39, 38, 168, 39, 38, 49, 39, 38, 170, 39, 38, 171, 190, 39, 38, 172, 39, 38, 173, 39, 38, 174, 39, 38, 175, 39, 38, 176, 39, 38, 177, 39, 38, 178, 39, 38, 179, 39, 38, 180, 39, 38, 181, 39, 38, 182, 39, 38, 183, 39, 38, 184, 39, 38, 185, 39, 38, 186, 39, 38, 187, 39, 38, 188, 39, 38, 189, 39, 38, 126, 39, 38, 191, 39, 38, 192, 39, 38, 193, 39, 38, 194, 39, 38, 195, 39, 38, 196, 39, 38, 197, 39, 38, 198, 39, 38, 199, 39, 38, 200, 39, 38, 115, 39, 38, 39, 202, 38, 39, 203, 38, 39, 204, 38, 39, 205, 38, 39, 206, 38, 39, 207, 38, 39, 208, 38, 39, 209, 38, 39, 210, 38, 39, 211, 38, 39, 212, 38, 39, 213, 38, 39, 214, 38, 39, 8, 38, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 231, 230, 231, 230, 232, 250, 231, 231, 8, 8, 231, 230, 233, 231, 230, 234, 231, 230, 235, 231, 230, 236, 231, 230, 237, 231, 230, 238, 231, 230, 239, 231, 230, 240, 231, 230, 241, 231, 230, 242, 231, 230, 243, 231, 230, 244, 231, 230, 245, 231, 230, 246, 231, 230, 247, 231, 230, 248, 231, 230, 249, 231, 230, 231, 50, 230, 251, 231, 230, 252, 231, 230, 253, 231, 230, 254, 231, 230, 255, 231, 230, 256, 231, 230, 257, 231, 230, 258, 231, 230, 259, 231, 230, 260, 231, 230, 261, 231, 230, 262, 231, 230, 263, 231, 230, 264, 231, 230, 265, 231, 230, 266, 231, 230, 267, 231, 230, 268, 231, 230, 269, 231, 230, 270, 231, 230, 243, 231, 230, 272, 0, 273, 0, 274, 0, 5, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 286, 285, 286, 285, 287, 365, 390, 286, 286, 8, 407, 290, 8, 286, 285, 288, 291, 299, 316, 328, 286, 285, 289, 286, 285, 290, 286, 285, 286, 50, 285, 292, 286, 285, 293, 286, 285, 294, 286, 285, 295, 286, 285, 296, 286, 285, 297, 286, 285, 298, 286, 285, 290, 286, 285, 300, 286, 285, 301, 286, 285, 302, 286, 285, 303, 286, 285, 304, 286, 285, 305, 286, 285, 306, 286, 285, 307, 286, 285, 308, 286, 285, 309, 286, 285, 310, 286, 285, 311, 286, 285, 312, 286, 285, 313, 286, 285, 314, 286, 285, 315, 286, 285, 286, 50, 285, 317, 286, 285, 318, 286, 285, 319, 286, 285, 320, 286, 285, 321, 286, 285, 322, 286, 285, 323, 286, 285, 324, 286, 285, 325, 286, 285, 326, 286, 285, 327, 286, 285, 288, 286, 285, 329, 286, 285, 330, 286, 285, 331, 286, 285, 332, 286, 285, 333, 286, 285, 334, 286, 285, 335, 286, 285, 336, 286, 285, 337, 286, 285, 338, 286, 285, 339, 286, 285, 340, 286, 285, 341, 286, 285, 342, 286, 285, 343, 286, 50, 285, 344, 286, 285, 345, 286, 285, 346, 286, 285, 347, 286, 285, 348, 286, 285, 286, 349, 285, 350, 286, 285, 351, 286, 285, 352, 286, 285, 353, 286, 285, 354, 286, 285, 355, 286, 285, 356, 286, 285, 357, 286, 285, 358, 286, 285, 359, 286, 285, 360, 286, 285, 361, 286, 285, 362, 286, 285, 363, 286, 285, 364, 286, 285, 315, 286, 285, 366, 386, 286, 285, 367, 286, 285, 368, 286, 285, 369, 286, 285, 370, 286, 285, 371, 286, 285, 372, 286, 285, 373, 286, 285, 374, 286, 285, 375, 286, 285, 376, 286, 285, 377, 286, 285, 378, 286, 285, 379, 286, 285, 380, 286, 285, 381, 286, 285, 382, 286, 285, 383, 286, 285, 384, 286, 285, 385, 286, 285, 309, 286, 285, 387, 286, 285, 388, 286, 285, 389, 286, 285, 290, 286, 285, 391, 286, 285, 392, 286, 285, 393, 397, 403, 286, 285, 394, 286, 285, 395, 286, 285, 396, 286, 285, 290, 286, 285, 398, 286, 285, 399, 286, 285, 400, 286, 285, 401, 286, 285, 402, 286, 285, 290, 286, 285, 404, 286, 285, 405, 286, 285, 406, 286, 285, 290, 286, 285, 286, 408, 285, 286, 409, 285, 286, 410, 285, 286, 411, 285, 286, 412, 285, 286, 413, 285, 286, 414, 285, 286, 415, 285, 286, 416, 285, 286, 417, 285, 286, 418, 285, 286, 419, 285, 286, 420, 285, 286, 8, 285, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 5, 0, 430, 441, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 226, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 30, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 459, 0, 460, 0, 461, 0, 3, 0, 463, 0, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 476, 0, 477, 614, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 502, 501, 502, 501, 503, 558, 583, 502, 502, 8, 600, 506, 8, 502, 501, 504, 507, 515, 532, 544, 502, 501, 505, 502, 501, 506, 502, 501, 502, 50, 501, 508, 502, 501, 509, 502, 501, 510, 502, 501, 511, 502, 501, 512, 502, 501, 513, 502, 501, 514, 502, 501, 506, 502, 501, 516, 502, 501, 517, 502, 501, 518, 502, 501, 519, 502, 501, 520, 502, 501, 521, 502, 501, 522, 502, 501, 523, 502, 501, 524, 502, 501, 525, 502, 501, 526, 502, 501, 527, 502, 501, 528, 502, 501, 529, 502, 501, 530, 502, 501, 531, 502, 501, 502, 50, 501, 533, 502, 501, 534, 502, 501, 535, 502, 501, 536, 502, 501, 537, 502, 501, 538, 502, 501, 539, 502, 501, 540, 502, 501, 541, 502, 501, 542, 502, 501, 543, 502, 501, 504, 502, 501, 545, 502, 501, 546, 502, 501, 547, 502, 501, 548, 502, 501, 549, 502, 501, 550, 502, 501, 551, 502, 501, 552, 502, 501, 553, 502, 501, 554, 502, 501, 555, 502, 501, 556, 502, 501, 557, 502, 501, 531, 502, 501, 559, 579, 502, 501, 560, 502, 501, 561, 502, 501, 562, 502, 501, 563, 502, 501, 564, 502, 501, 565, 502, 501, 566, 502, 501, 567, 502, 501, 568, 502, 501, 569, 502, 501, 570, 502, 501, 571, 502, 501, 572, 502, 501, 573, 502, 501, 574, 502, 501, 575, 502, 501, 576, 502, 501, 577, 502, 501, 578, 502, 501, 525, 502, 501, 580, 502, 501, 581, 502, 501, 582, 502, 501, 506, 502, 501, 584, 502, 501, 585, 502, 501, 586, 590, 596, 502, 501, 587, 502, 501, 588, 502, 501, 589, 502, 501, 506, 502, 501, 591, 502, 501, 592, 502, 501, 593, 502, 501, 594, 502, 501, 595, 502, 501, 506, 502, 501, 597, 502, 501, 598, 502, 501, 599, 502, 501, 506, 502, 501, 502, 601, 501, 502, 602, 501, 502, 603, 501, 502, 604, 501, 502, 605, 501, 502, 606, 501, 502, 607, 501, 502, 608, 501, 502, 609, 501, 502, 610, 501, 502, 611, 501, 502, 612, 501, 502, 613, 501, 502, 8, 501, 616, 615, 616, 615, 617, 703, 728, 616, 616, 8, 745, 620, 8, 616, 615, 618, 621, 630, 638, 654, 666, 616, 615, 619, 616, 615, 620, 616, 615, 616, 50, 615, 622, 616, 615, 623, 616, 615, 624, 616, 615, 625, 616, 615, 626, 616, 615, 627, 616, 615, 628, 616, 615, 629, 616, 615, 616, 50, 615, 631, 616, 615, 632, 616, 615, 633, 616, 615, 634, 616, 615, 635, 616, 615, 636, 616, 615, 637, 616, 615, 620, 616, 615, 639, 616, 615, 640, 616, 615, 641, 616, 615, 642, 616, 615, 643, 616, 615, 644, 616, 615, 645, 616, 615, 646, 616, 615, 647, 616, 615, 648, 616, 615, 649, 616, 615, 650, 616, 615, 651, 616, 615, 652, 616, 615, 653, 616, 615, 629, 616, 615, 655, 616, 615, 656, 616, 615, 657, 616, 615, 658, 616, 615, 659, 616, 615, 660, 616, 615, 661, 616, 615, 662, 616, 615, 663, 616, 615, 664, 616, 615, 665, 616, 615, 618, 616, 615, 667, 616, 615, 668, 616, 615, 669, 616, 615, 670, 616, 615, 671, 616, 615, 672, 616, 615, 673, 616, 615, 674, 616, 615, 675, 616, 615, 676, 616, 615, 677, 616, 615, 678, 616, 615, 679, 616, 615, 680, 616, 615, 681, 616, 50, 615, 682, 616, 615, 683, 616, 615, 684, 616, 615, 685, 616, 615, 686, 616, 615, 616, 687, 615, 688, 616, 615, 689, 616, 615, 690, 616, 615, 691, 616, 615, 692, 616, 615, 693, 616, 615, 694, 616, 615, 695, 616, 615, 696, 616, 615, 697, 616, 615, 698, 616, 615, 699, 616, 615, 700, 616, 615, 701, 616, 615, 702, 616, 615, 629, 616, 615, 704, 724, 616, 615, 705, 616, 615, 706, 616, 615, 707, 616, 615, 708, 616, 615, 709, 616, 615, 710, 616, 615, 711, 616, 615, 712, 616, 615, 713, 616, 615, 714, 616, 615, 715, 616, 615, 716, 616, 615, 717, 616, 615, 718, 616, 615, 719, 616, 615, 720, 616, 615, 721, 616, 615, 722, 616, 615, 723, 616, 615, 648, 616, 615, 725, 616, 615, 726, 616, 615, 727, 616, 615, 620, 616, 615, 729, 616, 615, 730, 616, 615, 731, 735, 741, 616, 615, 732, 616, 615, 733, 616, 615, 734, 616, 615, 620, 616, 615, 736, 616, 615, 737, 616, 615, 738, 616, 615, 739, 616, 615, 740, 616, 615, 620, 616, 615, 742, 616, 615, 743, 616, 615, 744, 616, 615, 620, 616, 615, 616, 746, 615, 616, 747, 615, 616, 748, 615, 616, 749, 615, 616, 750, 615, 616, 751, 615, 616, 752, 615, 616, 753, 615, 616, 754, 615, 616, 755, 615, 616, 756, 615, 616, 757, 615, 616, 758, 615, 616, 8, 615, 760, 0, 8, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 63, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 144, 57, 54, 0, 84, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 761; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/tt.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1540 "ext/gherkin_lexer_tt/gherkin_lexer_tt.c" { cs = lexer_start; } #line 425 "ragel/i18n/tt.c.rl" #line 1547 "ext/gherkin_lexer_tt/gherkin_lexer_tt.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/tt.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/tt.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/tt.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/tt.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/tt.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/tt.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/tt.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/tt.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/tt.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/tt.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/tt.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/tt.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/tt.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/tt.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/tt.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/tt.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/tt.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/tt.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/tt.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/tt.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/tt.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/tt.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/tt.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/tt.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1837 "ext/gherkin_lexer_tt/gherkin_lexer_tt.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/tt.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1900 "ext/gherkin_lexer_tt/gherkin_lexer_tt.c" } } } _out: {} } #line 426 "ragel/i18n/tt.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_tt() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Tt", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_tt/extconf.rb0000644000004100000410000000035612244512574021417 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_tt") have_library("c", "main") create_makefile("gherkin_lexer_tt") gherkin-2.12.2/ext/gherkin_lexer_ko/0000755000004100000410000000000012244512574017402 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_ko/gherkin_lexer_ko.c0000644000004100000410000011440512244512574023072 0ustar www-datawww-data #line 1 "ragel/i18n/ko.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/ko.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 29, 43, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 77, 80, 82, 84, 87, 89, 91, 93, 95, 109, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 145, 148, 150, 152, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 185, 187, 189, 191, 194, 196, 198, 200, 202, 204, 206, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 282, 283, 295, 298, 300, 302, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 336, 338, 340, 342, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 391, 393, 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, 456, 457, 458, 459, 466, 468, 470, 472, 474, 476, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 493, 495, 500, 505, 510, 515, 519, 523, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 546, 553, 558, 562, 568, 571, 573, 579, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 615, 617, 619, 621, 624, 626, 628, 630, 632, 634, 636, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 838, 839 }; static const char _lexer_trans_keys[] = { -22, -21, -20, -19, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -73, -72, -72, -21, -97, -90, -84, -21, -87, -76, 10, 13, 10, 13, -22, -21, -20, -19, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -117, -89, -88, -80, -88, -116, -20, -107, -99, -67, -68, -68, -20, -96, -128, -80, -22, -78, -67, 58, 10, 10, -22, -21, -20, -19, 10, 32, 35, 37, 42, 64, 9, 13, -73, -72, 10, -72, 10, -21, 10, -97, -90, 10, -84, 10, -21, 10, -87, 10, -76, 10, -22, -21, -20, -19, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -117, -104, -95, -100, -21, -126, -104, -21, -90, -84, -20, -104, -92, 32, 58, -22, -80, -100, -20, -102, -108, 58, 10, 10, -22, -21, -20, -19, 10, 32, 35, 37, 42, 64, 9, 13, -73, -72, 10, -72, 10, -21, 10, -97, -90, 10, -84, 10, -21, 10, -87, 10, -76, 10, -84, 10, -22, 10, -77, 10, -96, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -117, -89, -88, 10, -88, 10, -116, 10, -20, 10, -107, -99, 10, -67, 10, -68, 10, -68, 10, -20, 10, -96, 10, -128, 10, -117, -95, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, -80, 10, -22, 10, -79, 10, -107, 10, -104, 10, -20, 10, -89, 10, -128, 10, -21, 10, -89, 10, -116, 10, 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, 10, -22, -21, -20, -19, 10, 32, 35, 37, 42, 64, 9, 13, -73, -72, 10, -72, 10, -21, 10, -97, -90, 10, -84, 10, -21, 10, -87, 10, -76, 10, -84, 10, -22, 10, -77, 10, -96, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -117, -89, -88, -80, 10, -88, 10, -116, 10, -20, 10, -107, -99, 10, -67, 10, -68, 10, -68, 10, -20, 10, -96, 10, -128, 10, -80, 10, -22, 10, -78, 10, -67, 10, -117, -95, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, 10, 32, 58, -22, 10, -80, 10, -100, 10, -20, 10, -102, 10, -108, 10, -80, 10, -22, 10, -79, 10, -107, 10, -104, 10, -20, 10, -89, 10, -128, 10, -21, 10, -89, 10, -116, 10, 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, -120, 58, 10, 10, -22, 10, 32, 35, 124, 9, 13, -72, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -80, -22, -79, -107, -104, -20, -89, -128, -21, -89, -116, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -22, -21, -20, -19, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -84, 10, -22, 10, -77, 10, -96, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -117, -89, -88, 10, -88, 10, -116, 10, -20, 10, -107, -99, 10, -67, 10, -68, 10, -68, 10, -20, 10, -96, 10, -128, 10, -117, -95, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, 10, 32, 58, -22, 10, -80, 10, -100, 10, -20, 10, -102, 10, -108, 10, -80, 10, -22, 10, -79, 10, -107, 10, -104, 10, -20, 10, -89, 10, -128, 10, -21, 10, -89, 10, -116, 10, 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, -84, -22, -77, -96, -80, -21, -118, -91, 58, 10, 10, -22, -21, -20, 10, 32, 35, 37, 64, 9, 13, -72, 10, -80, 10, -21, 10, -118, 10, -91, 10, 10, 58, -80, 10, -80, 10, -22, 10, -78, 10, -67, 10, -117, -104, 10, -100, 10, -21, 10, -126, 10, -104, 10, -21, 10, -90, 10, -84, 10, -20, 10, -104, 10, -92, 10, 10, 32, 58, -22, 10, -80, 10, -100, 10, -20, 10, -102, 10, -108, 10, -120, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 13, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 12, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 3, 2, 2, 3, 2, 2, 2, 2, 12, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 10, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 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, 0, 0, 1, 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, 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, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 15, 18, 20, 22, 25, 27, 29, 31, 33, 36, 39, 53, 58, 60, 62, 64, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 105, 109, 112, 115, 119, 122, 125, 128, 131, 145, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 202, 206, 209, 212, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 260, 263, 266, 269, 273, 276, 279, 282, 285, 288, 291, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 405, 407, 419, 423, 426, 429, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 478, 481, 484, 487, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 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, 657, 659, 661, 663, 670, 673, 676, 679, 682, 685, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 717, 720, 725, 730, 735, 740, 744, 748, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 788, 795, 800, 804, 810, 814, 817, 823, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 869, 872, 875, 878, 882, 885, 888, 891, 894, 897, 900, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1202, 1204 }; static const short _lexer_trans_targs[] = { 2, 13, 41, 221, 385, 12, 12, 229, 239, 241, 255, 256, 259, 12, 0, 3, 333, 0, 4, 0, 5, 0, 6, 329, 0, 7, 0, 8, 0, 9, 0, 10, 0, 12, 240, 11, 12, 240, 11, 2, 13, 41, 221, 12, 12, 229, 239, 241, 255, 256, 259, 12, 0, 14, 15, 20, 24, 0, 10, 0, 16, 0, 17, 0, 18, 19, 0, 10, 0, 10, 0, 21, 0, 22, 0, 23, 0, 10, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 31, 30, 31, 30, 32, 274, 285, 306, 31, 31, 12, 314, 328, 12, 31, 30, 33, 269, 31, 30, 34, 31, 30, 35, 31, 30, 36, 265, 31, 30, 37, 31, 30, 38, 31, 30, 39, 31, 30, 40, 31, 30, 2, 13, 41, 221, 12, 12, 229, 239, 241, 255, 256, 259, 12, 0, 42, 207, 218, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 128, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 62, 61, 62, 61, 63, 80, 91, 105, 62, 62, 12, 113, 127, 12, 62, 61, 64, 75, 62, 61, 65, 62, 61, 66, 62, 61, 67, 71, 62, 61, 68, 62, 61, 69, 62, 61, 70, 62, 61, 40, 62, 61, 72, 62, 61, 73, 62, 61, 74, 62, 61, 40, 62, 61, 76, 62, 61, 77, 62, 61, 78, 62, 61, 79, 62, 61, 62, 40, 61, 81, 82, 87, 62, 61, 40, 62, 61, 83, 62, 61, 84, 62, 61, 85, 86, 62, 61, 40, 62, 61, 40, 62, 61, 88, 62, 61, 89, 62, 61, 90, 62, 61, 40, 62, 61, 92, 102, 62, 61, 93, 62, 61, 94, 62, 61, 95, 62, 61, 96, 62, 61, 97, 62, 61, 98, 62, 61, 99, 62, 61, 100, 62, 61, 101, 62, 61, 79, 62, 61, 103, 62, 61, 104, 62, 61, 70, 62, 61, 106, 62, 61, 107, 62, 61, 108, 62, 61, 109, 62, 61, 110, 62, 61, 111, 62, 61, 112, 62, 61, 40, 62, 61, 62, 114, 61, 62, 115, 61, 62, 116, 61, 62, 117, 61, 62, 118, 61, 62, 119, 61, 62, 120, 61, 62, 121, 61, 62, 122, 61, 62, 123, 61, 62, 124, 61, 62, 125, 61, 62, 126, 61, 62, 12, 61, 62, 40, 61, 130, 129, 130, 129, 131, 148, 163, 184, 130, 130, 12, 192, 206, 12, 130, 129, 132, 143, 130, 129, 133, 130, 129, 134, 130, 129, 135, 139, 130, 129, 136, 130, 129, 137, 130, 129, 138, 130, 129, 40, 130, 129, 140, 130, 129, 141, 130, 129, 142, 130, 129, 40, 130, 129, 144, 130, 129, 145, 130, 129, 146, 130, 129, 147, 130, 129, 130, 40, 129, 149, 150, 155, 159, 130, 129, 40, 130, 129, 151, 130, 129, 152, 130, 129, 153, 154, 130, 129, 40, 130, 129, 40, 130, 129, 156, 130, 129, 157, 130, 129, 158, 130, 129, 40, 130, 129, 160, 130, 129, 161, 130, 129, 162, 130, 129, 147, 130, 129, 164, 181, 130, 129, 165, 130, 129, 166, 130, 129, 167, 130, 129, 168, 130, 129, 169, 130, 129, 170, 130, 129, 171, 130, 129, 172, 130, 129, 173, 130, 129, 174, 130, 129, 130, 175, 40, 129, 176, 130, 129, 177, 130, 129, 178, 130, 129, 179, 130, 129, 180, 130, 129, 147, 130, 129, 182, 130, 129, 183, 130, 129, 138, 130, 129, 185, 130, 129, 186, 130, 129, 187, 130, 129, 188, 130, 129, 189, 130, 129, 190, 130, 129, 191, 130, 129, 40, 130, 129, 130, 193, 129, 130, 194, 129, 130, 195, 129, 130, 196, 129, 130, 197, 129, 130, 198, 129, 130, 199, 129, 130, 200, 129, 130, 201, 129, 130, 202, 129, 130, 203, 129, 130, 204, 129, 130, 205, 129, 130, 12, 129, 130, 40, 129, 208, 0, 209, 0, 211, 210, 211, 210, 212, 211, 211, 12, 12, 211, 210, 213, 211, 210, 214, 211, 210, 215, 211, 210, 216, 211, 210, 217, 211, 210, 211, 40, 210, 219, 0, 220, 0, 9, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 10, 0, 230, 0, 231, 0, 233, 232, 232, 233, 232, 232, 234, 234, 235, 234, 234, 234, 234, 235, 234, 234, 234, 234, 236, 234, 234, 234, 234, 237, 234, 234, 12, 238, 238, 0, 12, 238, 238, 0, 12, 240, 239, 12, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 387, 0, 10, 0, 0, 0, 0, 0, 257, 258, 12, 258, 258, 256, 257, 257, 12, 258, 256, 258, 0, 259, 260, 259, 0, 264, 263, 262, 260, 263, 261, 0, 262, 260, 261, 0, 262, 261, 264, 263, 262, 260, 263, 261, 2, 13, 41, 221, 264, 264, 229, 239, 241, 255, 256, 259, 264, 0, 266, 31, 30, 267, 31, 30, 268, 31, 30, 40, 31, 30, 270, 31, 30, 271, 31, 30, 272, 31, 30, 273, 31, 30, 31, 40, 30, 275, 276, 281, 31, 30, 40, 31, 30, 277, 31, 30, 278, 31, 30, 279, 280, 31, 30, 40, 31, 30, 40, 31, 30, 282, 31, 30, 283, 31, 30, 284, 31, 30, 40, 31, 30, 286, 303, 31, 30, 287, 31, 30, 288, 31, 30, 289, 31, 30, 290, 31, 30, 291, 31, 30, 292, 31, 30, 293, 31, 30, 294, 31, 30, 295, 31, 30, 296, 31, 30, 31, 297, 40, 30, 298, 31, 30, 299, 31, 30, 300, 31, 30, 301, 31, 30, 302, 31, 30, 273, 31, 30, 304, 31, 30, 305, 31, 30, 39, 31, 30, 307, 31, 30, 308, 31, 30, 309, 31, 30, 310, 31, 30, 311, 31, 30, 312, 31, 30, 313, 31, 30, 40, 31, 30, 31, 315, 30, 31, 316, 30, 31, 317, 30, 31, 318, 30, 31, 319, 30, 31, 320, 30, 31, 321, 30, 31, 322, 30, 31, 323, 30, 31, 324, 30, 31, 325, 30, 31, 326, 30, 31, 327, 30, 31, 12, 30, 31, 40, 30, 330, 0, 331, 0, 332, 0, 10, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 340, 339, 340, 339, 341, 347, 352, 340, 340, 12, 371, 12, 340, 339, 342, 340, 339, 343, 340, 339, 344, 340, 339, 345, 340, 339, 346, 340, 339, 340, 40, 339, 348, 340, 339, 349, 340, 339, 350, 340, 339, 351, 340, 339, 346, 340, 339, 353, 370, 340, 339, 354, 340, 339, 355, 340, 339, 356, 340, 339, 357, 340, 339, 358, 340, 339, 359, 340, 339, 360, 340, 339, 361, 340, 339, 362, 340, 339, 363, 340, 339, 340, 364, 40, 339, 365, 340, 339, 366, 340, 339, 367, 340, 339, 368, 340, 339, 369, 340, 339, 346, 340, 339, 346, 340, 339, 340, 372, 339, 340, 373, 339, 340, 374, 339, 340, 375, 339, 340, 376, 339, 340, 377, 339, 340, 378, 339, 340, 379, 339, 340, 380, 339, 340, 381, 339, 340, 382, 339, 340, 383, 339, 340, 384, 339, 340, 12, 339, 386, 0, 12, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 63, 63, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 19, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 0, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 17, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 15, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 387; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/ko.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 964 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c" { cs = lexer_start; } #line 425 "ragel/i18n/ko.c.rl" #line 971 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/ko.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/ko.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/ko.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/ko.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/ko.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/ko.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/ko.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/ko.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/ko.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/ko.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/ko.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/ko.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/ko.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/ko.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/ko.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/ko.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/ko.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/ko.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/ko.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/ko.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/ko.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/ko.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/ko.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/ko.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1261 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/ko.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1324 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c" } } } _out: {} } #line 426 "ragel/i18n/ko.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_ko() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Ko", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_ko/extconf.rb0000644000004100000410000000035612244512574021401 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_ko") have_library("c", "main") create_makefile("gherkin_lexer_ko") gherkin-2.12.2/ext/gherkin_lexer_da/0000755000004100000410000000000012244512574017355 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_da/extconf.rb0000644000004100000410000000035612244512574021354 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_da") have_library("c", "main") create_makefile("gherkin_lexer_da") gherkin-2.12.2/ext/gherkin_lexer_da/gherkin_lexer_da.c0000644000004100000410000010773012244512574023023 0ustar www-datawww-data #line 1 "ragel/i18n/da.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/da.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_da/gherkin_lexer_da.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 319, 321, 323, 325, 327, 329, 331, 333, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 491, 493, 495, 497, 499, 501, 503, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 660, 662, 664, 666, 668, 670, 672, 674, 678, 684, 687, 689, 695, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 752, 754, 756, 758, 760, 762, 764, 766 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 115, 116, 114, 97, 107, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 71, 77, 78, 79, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 97, 103, 103, 114, 117, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 103, 107, 101, 110, 115, 107, 97, 98, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 69, 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, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 103, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 107, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 115, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 114, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 115, 101, 109, 112, 108, 101, 114, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 58, 105, 118, 101, 116, 101, 110, -61, -91, 114, 103, -61, 99, -91, 101, 110, 97, 114, 105, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 103, 10, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 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, 71, 77, 78, 79, 83, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 98, 10, 58, 10, 105, 10, 118, 10, 101, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 101, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 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, 3, 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, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 16, 2, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 287, 290, 293, 296, 299, 302, 305, 308, 311, 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, 438, 441, 444, 447, 450, 453, 456, 459, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 696, 699, 702, 705, 708, 711, 714, 717, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 951, 954, 957, 960, 963, 966, 969, 972, 976, 982, 986, 989, 995, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 348, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 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, 51, 0, 52, 0, 53, 0, 54, 0, 56, 55, 56, 55, 56, 56, 4, 57, 71, 4, 322, 330, 334, 336, 339, 340, 56, 55, 56, 58, 55, 56, 59, 55, 56, 60, 55, 56, 61, 55, 56, 62, 55, 56, 63, 55, 56, 64, 55, 56, 65, 55, 56, 66, 55, 56, 67, 55, 56, 68, 55, 56, 69, 55, 56, 70, 55, 56, 4, 55, 56, 72, 55, 4, 4, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 4, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 83, 82, 83, 82, 83, 83, 4, 84, 98, 4, 99, 116, 123, 127, 129, 132, 133, 83, 82, 83, 85, 82, 83, 86, 82, 83, 87, 82, 83, 88, 82, 83, 89, 82, 83, 90, 82, 83, 91, 82, 83, 92, 82, 83, 93, 82, 83, 94, 82, 83, 95, 82, 83, 96, 82, 83, 97, 82, 83, 4, 82, 83, 72, 82, 83, 100, 82, 83, 101, 82, 83, 102, 82, 83, 103, 82, 83, 104, 82, 83, 105, 82, 83, 106, 82, 83, 107, 82, 83, 108, 82, 83, 109, 82, 83, 110, 82, 83, 111, 82, 83, 112, 82, 83, 113, 82, 83, 114, 82, 83, 115, 82, 83, 72, 82, 83, 117, 82, 83, 118, 82, 83, 119, 82, 83, 120, 82, 83, 121, 82, 83, 122, 82, 83, 115, 82, 83, 124, 82, 83, 125, 82, 83, 126, 82, 83, 98, 82, 83, 128, 82, 83, 98, 82, 130, 83, 82, 131, 83, 82, 83, 98, 82, 83, 98, 82, 134, 83, 135, 82, 98, 83, 82, 83, 136, 82, 83, 137, 82, 83, 138, 82, 83, 139, 82, 83, 140, 82, 83, 115, 82, 142, 211, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 151, 150, 151, 150, 151, 151, 4, 152, 4, 166, 183, 190, 204, 151, 150, 151, 153, 150, 151, 154, 150, 151, 155, 150, 151, 156, 150, 151, 157, 150, 151, 158, 150, 151, 159, 150, 151, 160, 150, 151, 161, 150, 151, 162, 150, 151, 163, 150, 151, 164, 150, 151, 165, 150, 151, 4, 150, 151, 167, 150, 151, 168, 150, 151, 169, 150, 151, 170, 150, 151, 171, 150, 151, 172, 150, 151, 173, 150, 151, 174, 150, 151, 175, 150, 151, 176, 150, 151, 177, 150, 151, 178, 150, 151, 179, 150, 151, 180, 150, 151, 181, 150, 151, 182, 150, 151, 72, 150, 151, 184, 150, 151, 185, 150, 151, 186, 150, 151, 187, 150, 151, 188, 150, 151, 189, 150, 151, 182, 150, 151, 191, 197, 150, 151, 192, 150, 151, 193, 150, 151, 194, 150, 151, 195, 150, 151, 196, 150, 151, 182, 150, 151, 198, 150, 151, 199, 150, 151, 200, 150, 151, 201, 150, 151, 202, 150, 151, 203, 150, 151, 182, 150, 151, 205, 150, 151, 206, 150, 151, 207, 150, 151, 208, 150, 151, 209, 150, 151, 210, 150, 151, 182, 150, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 221, 220, 221, 220, 221, 221, 4, 222, 4, 221, 220, 221, 223, 220, 221, 224, 220, 221, 225, 220, 221, 226, 220, 221, 227, 220, 221, 228, 220, 221, 229, 220, 221, 72, 220, 231, 0, 232, 0, 233, 0, 31, 0, 235, 0, 31, 0, 237, 0, 238, 0, 31, 0, 31, 0, 241, 242, 0, 31, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 251, 250, 251, 250, 251, 251, 4, 252, 266, 4, 267, 284, 291, 298, 302, 304, 307, 308, 251, 250, 251, 253, 250, 251, 254, 250, 251, 255, 250, 251, 256, 250, 251, 257, 250, 251, 258, 250, 251, 259, 250, 251, 260, 250, 251, 261, 250, 251, 262, 250, 251, 263, 250, 251, 264, 250, 251, 265, 250, 251, 4, 250, 251, 72, 250, 251, 268, 250, 251, 269, 250, 251, 270, 250, 251, 271, 250, 251, 272, 250, 251, 273, 250, 251, 274, 250, 251, 275, 250, 251, 276, 250, 251, 277, 250, 251, 278, 250, 251, 279, 250, 251, 280, 250, 251, 281, 250, 251, 282, 250, 251, 283, 250, 251, 72, 250, 251, 285, 250, 251, 286, 250, 251, 287, 250, 251, 288, 250, 251, 289, 250, 251, 290, 250, 251, 283, 250, 251, 292, 250, 251, 293, 250, 251, 294, 250, 251, 295, 250, 251, 296, 250, 251, 297, 250, 251, 283, 250, 251, 299, 250, 251, 300, 250, 251, 301, 250, 251, 266, 250, 251, 303, 250, 251, 266, 250, 305, 251, 250, 306, 251, 250, 251, 266, 250, 251, 266, 250, 309, 251, 310, 250, 266, 251, 250, 251, 311, 250, 251, 312, 250, 251, 313, 250, 251, 314, 250, 251, 315, 250, 251, 283, 250, 316, 317, 316, 0, 321, 320, 319, 317, 320, 318, 0, 319, 317, 318, 0, 319, 318, 321, 320, 319, 317, 320, 318, 321, 321, 5, 15, 17, 31, 34, 37, 73, 141, 230, 234, 236, 239, 240, 316, 321, 0, 56, 323, 55, 56, 324, 55, 56, 325, 55, 56, 326, 55, 56, 327, 55, 56, 328, 55, 56, 329, 55, 56, 72, 55, 56, 331, 55, 56, 332, 55, 56, 333, 55, 56, 71, 55, 56, 335, 55, 56, 71, 55, 337, 56, 55, 338, 56, 55, 56, 71, 55, 56, 71, 55, 341, 56, 342, 55, 71, 56, 55, 56, 343, 55, 56, 344, 55, 56, 345, 55, 56, 346, 55, 56, 347, 55, 56, 329, 55, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 348; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/da.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 902 "ext/gherkin_lexer_da/gherkin_lexer_da.c" { cs = lexer_start; } #line 425 "ragel/i18n/da.c.rl" #line 909 "ext/gherkin_lexer_da/gherkin_lexer_da.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/da.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/da.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/da.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/da.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/da.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/da.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/da.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/da.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/da.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/da.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/da.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/da.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/da.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/da.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/da.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/da.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/da.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/da.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/da.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/da.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/da.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/da.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/da.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/da.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1199 "ext/gherkin_lexer_da/gherkin_lexer_da.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/da.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1262 "ext/gherkin_lexer_da/gherkin_lexer_da.c" } } } _out: {} } #line 426 "ragel/i18n/da.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_da() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Da", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_sk/0000755000004100000410000000000012244512574017406 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_sk/extconf.rb0000644000004100000410000000035612244512574021405 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_sk") have_library("c", "main") create_makefile("gherkin_lexer_sk") gherkin-2.12.2/ext/gherkin_lexer_sk/gherkin_lexer_sk.c0000644000004100000410000014665712244512574023120 0ustar www-datawww-data #line 1 "ragel/i18n/sk.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/sk.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 21, 22, 23, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 111, 116, 119, 123, 127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 329, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 367, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 443, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 526, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 593, 599, 602, 604, 610, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1258, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 107, 108, 10, 13, 116, 122, 10, 13, 97, 105, 10, 13, 107, 10, 13, 116, 10, 13, 105, 10, 13, 101, -59, 10, 13, -66, 10, 13, 10, 13, 32, -61, 10, 13, -95, 10, 13, 10, 13, 114, 10, 13, 111, 10, 13, 118, 10, 13, 101, -59, 10, 13, -120, 10, 13, 101, 117, 110, 107, 99, 105, 97, 58, 10, 10, 10, 32, 35, 37, 64, 70, 78, 79, 80, 83, 86, 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, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, 101, -60, -113, -61, -95, -60, -115, 114, 116, 32, 83, 99, 101, 110, -61, -95, 114, 97, 117, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 75, 80, 83, 84, 86, 90, 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, 107, 108, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 116, 122, 124, 9, 13, 115, 110, 111, 118, 97, 32, 83, 99, 101, 110, -61, -95, 114, 97, 111, 114, -59, 107, 116, 122, -66, 105, 97, 100, 97, 118, 107, 105, 97, -60, -66, 111, 109, 97, 100, 105, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 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, 107, 108, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 116, 122, 124, 9, 13, 99, 101, 110, -61, -95, 114, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 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, 107, 108, 10, 32, 34, 35, 37, 42, 64, 65, 70, 75, 78, 79, 80, 83, 84, 86, 90, 116, 122, 124, 9, 13, 97, 107, 108, 97, 115, 116, 110, 111, 115, -59, -91, 97, 32, 112, 114, 101, 100, 112, 111, 107, 108, 97, 100, 117, 97, 105, 107, 116, 105, 101, -59, -66, 32, -61, -95, 114, 111, 118, 101, -59, -120, 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, 70, 75, 78, 79, 80, 83, 84, 86, 90, 124, 9, 13, 10, 101, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 101, -60, 10, -113, 10, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 117, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 111, -59, 10, 107, 116, 122, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 105, 10, 97, -60, 10, -66, 10, 10, 111, 10, 109, 10, 97, 10, 100, 10, 105, 10, 101, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 10, 97, 10, 32, 10, 112, 10, 114, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 97, 105, 107, 116, 105, 101, -59, -66, 32, -61, -95, 114, 111, 118, 101, -59, -120, 10, 101, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 101, -60, 10, -113, 10, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 117, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 111, -59, 10, 107, 116, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 105, 10, 97, -60, 10, -66, 10, 10, 111, 10, 109, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 10, 97, 10, 32, 10, 112, 10, 114, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, -61, -83, 107, 108, 97, 100, 121, 58, 10, 10, 10, 32, 35, 70, 80, 86, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 111, -59, 10, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 97, 105, 107, 116, 105, 101, -59, -66, 32, -61, -95, 114, 111, 118, 101, -59, -120, 10, 101, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 97, 10, 58, 10, 101, -60, 10, -113, 10, 10, 111, -59, 10, 107, 116, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 105, 10, 97, -60, 10, -66, 10, 10, 111, 10, 109, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 10, 107, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 10, 97, 10, 32, 10, 112, 10, 114, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 97, 117, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 111, 114, -59, 10, 122, -66, 10, 10, 105, 10, 97, 10, 100, 10, 97, 10, 118, 10, 107, 10, 97, 10, 100, 10, 105, 10, 101, -61, 10, -83, 10, 10, 107, 10, 108, 10, 97, 10, 100, 10, 121, 10, 99, 10, 101, 10, 110, -61, 10, -95, 10, 10, 114, 10, 108, 10, 97, 10, 115, 10, 116, 10, 110, 10, 111, 10, 115, -59, 10, -91, 10, 0 }; static const char _lexer_single_lengths[] = { 0, 19, 1, 1, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 18, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 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, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 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, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 3, 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, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 21, 23, 25, 45, 47, 49, 52, 55, 60, 65, 70, 75, 79, 83, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 121, 124, 129, 136, 141, 145, 150, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 368, 370, 372, 374, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 440, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 493, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598, 601, 606, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 714, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 821, 827, 831, 834, 840, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1812, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909, 1912, 1915 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 613, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 31, 55, 0, 4, 16, 39, 47, 33, 4, 16, 40, 43, 33, 4, 16, 41, 33, 4, 16, 42, 33, 4, 16, 43, 33, 4, 16, 44, 33, 45, 4, 16, 33, 46, 4, 16, 33, 4, 16, 32, 33, 48, 4, 16, 33, 49, 4, 16, 33, 4, 16, 50, 33, 4, 16, 51, 33, 4, 16, 52, 33, 4, 16, 53, 33, 54, 4, 16, 33, 46, 4, 16, 33, 31, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 65, 64, 65, 64, 65, 65, 4, 66, 4, 80, 550, 565, 578, 598, 604, 65, 64, 65, 67, 64, 65, 68, 64, 65, 69, 64, 65, 70, 64, 65, 71, 64, 65, 72, 64, 65, 73, 64, 65, 74, 64, 65, 75, 64, 65, 76, 64, 65, 77, 64, 65, 78, 64, 65, 79, 64, 65, 4, 64, 65, 81, 64, 65, 82, 64, 65, 83, 64, 65, 84, 64, 65, 85, 64, 65, 86, 64, 65, 87, 64, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 4, 0, 89, 0, 90, 0, 31, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 106, 0, 107, 0, 109, 108, 109, 108, 109, 109, 4, 110, 124, 4, 125, 495, 502, 505, 520, 526, 528, 537, 109, 108, 109, 111, 108, 109, 112, 108, 109, 113, 108, 109, 114, 108, 109, 115, 108, 109, 116, 108, 109, 117, 108, 109, 118, 108, 109, 119, 108, 109, 120, 108, 109, 121, 108, 109, 122, 108, 109, 123, 108, 109, 4, 108, 109, 87, 108, 109, 126, 124, 494, 108, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 478, 486, 248, 4, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 106, 0, 142, 442, 0, 143, 150, 154, 156, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 61, 0, 151, 0, 152, 0, 153, 0, 31, 0, 155, 0, 31, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 163, 162, 163, 162, 163, 163, 4, 164, 178, 4, 179, 359, 366, 369, 384, 397, 412, 418, 420, 429, 163, 162, 163, 165, 162, 163, 166, 162, 163, 167, 162, 163, 168, 162, 163, 169, 162, 163, 170, 162, 163, 171, 162, 163, 172, 162, 163, 173, 162, 163, 174, 162, 163, 175, 162, 163, 176, 162, 163, 177, 162, 163, 4, 162, 163, 87, 162, 163, 180, 178, 358, 162, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 342, 350, 248, 4, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 190, 189, 190, 189, 190, 190, 4, 191, 205, 4, 206, 255, 262, 265, 280, 293, 312, 318, 320, 329, 190, 189, 190, 192, 189, 190, 193, 189, 190, 194, 189, 190, 195, 189, 190, 196, 189, 190, 197, 189, 190, 198, 189, 190, 199, 189, 190, 200, 189, 190, 201, 189, 190, 202, 189, 190, 203, 189, 190, 204, 189, 190, 4, 189, 190, 87, 189, 190, 207, 205, 254, 189, 4, 4, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 232, 240, 248, 4, 0, 209, 0, 31, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 62, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 31, 0, 233, 236, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 87, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 239, 0, 248, 249, 248, 0, 253, 252, 251, 249, 252, 250, 0, 251, 249, 250, 0, 251, 250, 253, 252, 251, 249, 252, 250, 253, 253, 5, 15, 17, 31, 34, 37, 56, 88, 91, 127, 141, 181, 208, 210, 219, 248, 253, 0, 190, 205, 189, 190, 256, 189, 190, 257, 189, 190, 258, 189, 190, 259, 189, 190, 260, 189, 190, 261, 189, 190, 87, 189, 190, 263, 189, 264, 190, 189, 205, 190, 189, 266, 190, 189, 267, 190, 189, 268, 190, 189, 269, 190, 189, 190, 270, 189, 190, 271, 189, 190, 272, 189, 190, 273, 189, 190, 274, 189, 190, 275, 189, 190, 276, 189, 277, 190, 189, 278, 190, 189, 190, 279, 189, 190, 261, 261, 189, 190, 281, 189, 190, 282, 189, 190, 283, 189, 190, 284, 189, 190, 285, 189, 190, 286, 189, 190, 287, 189, 190, 288, 189, 190, 289, 189, 190, 290, 189, 291, 190, 189, 292, 190, 189, 190, 260, 189, 190, 294, 189, 295, 190, 302, 306, 308, 189, 296, 190, 189, 190, 297, 189, 190, 298, 189, 190, 299, 189, 190, 300, 189, 190, 301, 189, 190, 260, 189, 190, 303, 189, 190, 304, 189, 305, 190, 189, 205, 190, 189, 190, 307, 189, 190, 205, 189, 190, 309, 189, 190, 310, 189, 190, 311, 189, 190, 261, 189, 190, 313, 189, 190, 314, 189, 190, 315, 189, 316, 190, 189, 317, 190, 189, 190, 261, 189, 190, 319, 189, 190, 205, 189, 190, 321, 189, 190, 322, 189, 190, 323, 189, 190, 324, 189, 190, 325, 189, 190, 326, 189, 190, 327, 189, 328, 190, 189, 261, 190, 189, 190, 330, 189, 190, 331, 189, 190, 332, 189, 190, 333, 189, 190, 334, 189, 190, 335, 189, 190, 336, 189, 190, 337, 189, 190, 338, 189, 190, 339, 189, 190, 340, 189, 190, 341, 189, 190, 205, 189, 343, 346, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 87, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 349, 0, 163, 178, 162, 163, 360, 162, 163, 361, 162, 163, 362, 162, 163, 363, 162, 163, 364, 162, 163, 365, 162, 163, 87, 162, 163, 367, 162, 368, 163, 162, 178, 163, 162, 370, 163, 162, 371, 163, 162, 372, 163, 162, 373, 163, 162, 163, 374, 162, 163, 375, 162, 163, 376, 162, 163, 377, 162, 163, 378, 162, 163, 379, 162, 163, 380, 162, 381, 163, 162, 382, 163, 162, 163, 383, 162, 163, 365, 365, 162, 163, 385, 162, 163, 386, 162, 163, 387, 162, 163, 388, 162, 163, 389, 162, 163, 390, 162, 163, 391, 162, 163, 392, 162, 163, 393, 162, 163, 394, 162, 395, 163, 162, 396, 163, 162, 163, 364, 162, 163, 398, 162, 399, 163, 406, 410, 162, 400, 163, 162, 163, 401, 162, 163, 402, 162, 163, 403, 162, 163, 404, 162, 163, 405, 162, 163, 364, 162, 163, 407, 162, 163, 408, 162, 409, 163, 162, 178, 163, 162, 163, 411, 162, 163, 178, 162, 163, 413, 162, 163, 414, 162, 163, 415, 162, 416, 163, 162, 417, 163, 162, 163, 365, 162, 163, 419, 162, 163, 178, 162, 163, 421, 162, 163, 422, 162, 163, 423, 162, 163, 424, 162, 163, 425, 162, 163, 426, 162, 163, 427, 162, 428, 163, 162, 365, 163, 162, 163, 430, 162, 163, 431, 162, 163, 432, 162, 163, 433, 162, 163, 434, 162, 163, 435, 162, 163, 436, 162, 163, 437, 162, 163, 438, 162, 163, 439, 162, 163, 440, 162, 163, 441, 162, 163, 178, 162, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 452, 451, 452, 451, 452, 452, 4, 453, 460, 469, 4, 452, 451, 452, 454, 451, 452, 455, 451, 452, 456, 451, 452, 457, 451, 452, 458, 451, 452, 459, 451, 452, 87, 451, 452, 461, 451, 462, 452, 451, 463, 452, 451, 452, 464, 451, 452, 465, 451, 452, 466, 451, 452, 467, 451, 452, 468, 451, 452, 458, 451, 452, 470, 451, 452, 471, 451, 452, 472, 451, 452, 473, 451, 452, 474, 451, 452, 475, 451, 452, 476, 451, 477, 452, 451, 459, 452, 451, 479, 482, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 87, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 485, 0, 109, 124, 108, 109, 496, 108, 109, 497, 108, 109, 498, 108, 109, 499, 108, 109, 500, 108, 109, 501, 108, 109, 87, 108, 109, 503, 108, 504, 109, 108, 124, 109, 108, 109, 506, 108, 507, 109, 514, 518, 108, 508, 109, 108, 109, 509, 108, 109, 510, 108, 109, 511, 108, 109, 512, 108, 109, 513, 108, 109, 500, 108, 109, 515, 108, 109, 516, 108, 517, 109, 108, 124, 109, 108, 109, 519, 108, 109, 124, 108, 109, 521, 108, 109, 522, 108, 109, 523, 108, 524, 109, 108, 525, 109, 108, 109, 501, 108, 109, 527, 108, 109, 124, 108, 109, 529, 108, 109, 530, 108, 109, 531, 108, 109, 532, 108, 109, 533, 108, 109, 534, 108, 109, 535, 108, 536, 109, 108, 501, 109, 108, 109, 538, 108, 109, 539, 108, 109, 540, 108, 109, 541, 108, 109, 542, 108, 109, 543, 108, 109, 544, 108, 109, 545, 108, 109, 546, 108, 109, 547, 108, 109, 548, 108, 109, 549, 108, 109, 124, 108, 551, 65, 64, 552, 65, 64, 553, 65, 64, 554, 65, 64, 65, 555, 64, 65, 556, 64, 65, 557, 64, 65, 558, 64, 65, 559, 64, 65, 560, 64, 65, 561, 64, 562, 65, 64, 563, 65, 64, 65, 564, 64, 65, 86, 86, 64, 65, 566, 64, 65, 567, 64, 65, 568, 64, 65, 569, 64, 65, 570, 64, 65, 571, 64, 65, 572, 64, 65, 573, 64, 65, 574, 64, 65, 575, 64, 576, 65, 64, 577, 65, 64, 65, 85, 64, 65, 579, 591, 64, 580, 65, 587, 64, 581, 65, 64, 65, 582, 64, 65, 583, 64, 65, 584, 64, 65, 585, 64, 65, 586, 64, 65, 85, 64, 65, 588, 64, 65, 589, 64, 65, 590, 64, 65, 86, 64, 592, 65, 64, 593, 65, 64, 65, 594, 64, 65, 595, 64, 65, 596, 64, 65, 597, 64, 65, 86, 64, 65, 599, 64, 65, 600, 64, 65, 601, 64, 602, 65, 64, 603, 65, 64, 65, 86, 64, 65, 605, 64, 65, 606, 64, 65, 607, 64, 65, 608, 64, 65, 609, 64, 65, 610, 64, 65, 611, 64, 612, 65, 64, 86, 65, 64, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 149, 126, 57, 57, 57, 110, 23, 0, 0, 0, 110, 23, 0, 0, 110, 23, 0, 0, 110, 23, 0, 0, 110, 23, 0, 0, 0, 110, 23, 0, 0, 110, 23, 0, 110, 23, 0, 0, 0, 110, 23, 0, 0, 110, 23, 0, 110, 23, 0, 0, 110, 23, 0, 0, 110, 23, 0, 0, 110, 23, 0, 0, 0, 110, 23, 0, 0, 110, 23, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 19, 0, 0, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 15, 0, 0, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 17, 0, 0, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 17, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 15, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 19, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 613; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/sk.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1343 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c" { cs = lexer_start; } #line 425 "ragel/i18n/sk.c.rl" #line 1350 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/sk.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/sk.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/sk.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/sk.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/sk.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/sk.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/sk.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/sk.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/sk.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/sk.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/sk.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/sk.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/sk.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/sk.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/sk.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/sk.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/sk.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/sk.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/sk.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/sk.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/sk.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/sk.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/sk.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/sk.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1640 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/sk.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1703 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c" } } } _out: {} } #line 426 "ragel/i18n/sk.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_sk() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Sk", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_uz/0000755000004100000410000000000012244512574017427 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_uz/extconf.rb0000644000004100000410000000035612244512574021426 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_uz") have_library("c", "main") create_makefile("gherkin_lexer_uz") gherkin-2.12.2/ext/gherkin_lexer_uz/gherkin_lexer_uz.c0000644000004100000410000014131412244512574023143 0ustar www-datawww-data #line 1 "ragel/i18n/uz.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/uz.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 21, 22, 24, 25, 26, 27, 28, 29, 31, 33, 44, 45, 46, 48, 50, 55, 60, 65, 70, 74, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 100, 107, 112, 116, 122, 125, 127, 133, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 291, 299, 301, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 461, 462, 471, 480, 482, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 724, 732, 734, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 973, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1164, 1165 }; static const char _lexer_trans_keys[] = { -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -111, -110, -101, -100, -95, -94, -93, -92, -48, -77, -68, -48, -80, -47, -128, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -68, -48, -66, -48, -72, -47, -128, -48, -66, -48, -70, -48, -80, -48, -75, -48, -70, -48, -72, -48, -67, -48, -72, -47, -127, -48, -66, -48, -69, -48, -69, -48, -80, -47, -128, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -92, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 10, 58, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -71, 32, 58, -47, -127, -47, -126, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, -47, -127, -48, -72, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -110, -101, -95, -93, -92, 10, -48, 10, -77, -68, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 32, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -72, 10, -47, 10, -128, 10, -48, 10, -66, 10, -48, 10, -70, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 58, -48, 10, -67, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -110, -101, -95, -94, -93, -92, 10, -48, 10, -77, -68, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 32, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -72, 10, -47, 10, -128, 10, -48, 10, -66, 10, -48, 10, -70, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 32, 58, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, -47, 10, -127, 10, -48, 10, -72, 10, 10, 58, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -123, 10, -48, 10, -67, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -80, -47, -128, -48, -72, -47, -123, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -110, -101, -95, -93, -92, 10, -48, 10, -77, -68, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 32, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -72, 10, -47, 10, -128, 10, -48, 10, -66, 10, -48, 10, -70, 10, -48, 10, -80, 10, -48, 10, -75, 10, -48, 10, -70, 10, -48, 10, -72, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 32, 58, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, -47, 10, -127, 10, -48, 10, -72, 10, 10, 58, -48, 10, -67, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -67, -48, -76, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -66, -48, -67, -48, -80, -48, -69, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -100, -95, -94, -92, 10, -48, 10, -72, 10, -47, 10, -127, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -69, 10, -48, 10, -80, 10, -47, 10, -128, 10, 10, 58, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -71, 10, 10, 32, 58, -47, 10, -127, 10, -47, 10, -126, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, -47, 10, -127, 10, -48, 10, -72, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -123, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 9, 1, 2, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 2, 2, 2, 2, 2, 2, 2, 1, 1, 7, 9, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 8, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 5, 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, 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, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 22, 24, 27, 29, 31, 33, 35, 37, 40, 43, 54, 56, 58, 61, 64, 69, 74, 79, 84, 88, 92, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 130, 137, 142, 146, 152, 156, 159, 165, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 422, 431, 434, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 674, 676, 685, 695, 698, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 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, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1061, 1070, 1073, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1439, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1724, 1726 }; static const short _lexer_trans_targs[] = { 2, 581, 12, 12, 13, 23, 25, 9, 39, 42, 12, 0, 3, 52, 60, 62, 70, 109, 346, 462, 466, 0, 4, 0, 5, 48, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 12, 24, 11, 12, 24, 11, 2, 12, 12, 13, 23, 25, 9, 39, 42, 12, 0, 14, 0, 15, 0, 17, 16, 16, 17, 16, 16, 18, 18, 19, 18, 18, 18, 18, 19, 18, 18, 18, 18, 20, 18, 18, 18, 18, 21, 18, 18, 12, 22, 22, 0, 12, 22, 22, 0, 12, 24, 23, 12, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 583, 0, 0, 0, 0, 0, 40, 41, 12, 41, 41, 39, 40, 40, 12, 41, 39, 41, 0, 42, 43, 42, 0, 47, 46, 45, 43, 46, 44, 0, 45, 43, 44, 0, 45, 44, 47, 46, 45, 43, 46, 44, 2, 47, 47, 13, 23, 25, 9, 39, 42, 47, 0, 49, 0, 50, 0, 51, 0, 9, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 9, 0, 61, 0, 9, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 9, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 87, 86, 87, 86, 88, 87, 87, 12, 12, 87, 86, 89, 87, 86, 90, 87, 86, 91, 87, 86, 92, 87, 86, 93, 87, 86, 94, 87, 86, 95, 87, 86, 96, 87, 86, 97, 87, 86, 98, 87, 86, 99, 87, 86, 100, 87, 86, 101, 87, 86, 102, 87, 86, 103, 87, 86, 104, 87, 86, 105, 87, 86, 106, 87, 86, 107, 87, 86, 87, 108, 86, 2, 12, 12, 13, 23, 25, 9, 39, 42, 12, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 231, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 149, 148, 149, 148, 150, 149, 149, 12, 217, 157, 12, 149, 148, 151, 162, 170, 172, 180, 195, 199, 149, 148, 152, 149, 148, 153, 158, 149, 148, 154, 149, 148, 155, 149, 148, 156, 149, 148, 157, 149, 148, 149, 108, 148, 159, 149, 148, 160, 149, 148, 161, 149, 148, 157, 149, 148, 163, 149, 148, 164, 149, 148, 165, 149, 148, 166, 149, 148, 167, 149, 148, 168, 149, 148, 169, 149, 148, 157, 149, 148, 171, 149, 148, 157, 149, 148, 173, 149, 148, 174, 149, 148, 175, 149, 148, 176, 149, 148, 177, 149, 148, 178, 149, 148, 179, 149, 148, 157, 149, 148, 181, 149, 148, 182, 149, 148, 183, 149, 148, 184, 149, 148, 185, 149, 148, 186, 149, 148, 187, 149, 148, 188, 149, 148, 189, 149, 148, 190, 149, 148, 191, 149, 148, 192, 149, 148, 193, 149, 148, 194, 149, 148, 149, 108, 148, 196, 149, 148, 197, 149, 148, 198, 149, 148, 170, 149, 148, 200, 149, 148, 201, 149, 148, 202, 149, 148, 203, 149, 148, 204, 149, 148, 205, 149, 148, 206, 149, 148, 207, 149, 148, 208, 149, 148, 209, 149, 148, 210, 149, 148, 211, 149, 148, 212, 149, 148, 213, 149, 148, 214, 149, 148, 215, 149, 148, 216, 149, 148, 194, 149, 148, 149, 218, 148, 149, 219, 148, 149, 220, 148, 149, 221, 148, 149, 222, 148, 149, 223, 148, 149, 224, 148, 149, 225, 148, 149, 226, 148, 149, 227, 148, 149, 228, 148, 149, 229, 148, 149, 230, 148, 149, 12, 148, 233, 232, 233, 232, 234, 233, 233, 12, 332, 241, 12, 233, 232, 235, 246, 254, 256, 264, 302, 310, 314, 233, 232, 236, 233, 232, 237, 242, 233, 232, 238, 233, 232, 239, 233, 232, 240, 233, 232, 241, 233, 232, 233, 108, 232, 243, 233, 232, 244, 233, 232, 245, 233, 232, 241, 233, 232, 247, 233, 232, 248, 233, 232, 249, 233, 232, 250, 233, 232, 251, 233, 232, 252, 233, 232, 253, 233, 232, 241, 233, 232, 255, 233, 232, 241, 233, 232, 257, 233, 232, 258, 233, 232, 259, 233, 232, 260, 233, 232, 261, 233, 232, 262, 233, 232, 263, 233, 232, 241, 233, 232, 265, 233, 232, 266, 233, 232, 267, 233, 232, 268, 233, 232, 269, 233, 232, 270, 233, 232, 271, 233, 232, 272, 233, 232, 273, 233, 232, 274, 233, 232, 275, 233, 232, 276, 233, 232, 277, 233, 232, 278, 233, 232, 233, 279, 108, 232, 280, 233, 232, 281, 233, 232, 282, 233, 232, 283, 233, 232, 284, 233, 232, 285, 233, 232, 286, 233, 232, 287, 233, 232, 288, 233, 232, 289, 233, 232, 290, 233, 232, 291, 233, 232, 292, 233, 232, 293, 233, 232, 294, 233, 232, 295, 233, 232, 296, 233, 232, 297, 233, 232, 298, 233, 232, 299, 233, 232, 300, 233, 232, 301, 233, 232, 233, 108, 232, 303, 233, 232, 304, 233, 232, 305, 233, 232, 306, 233, 232, 307, 233, 232, 308, 233, 232, 309, 233, 232, 301, 233, 232, 311, 233, 232, 312, 233, 232, 313, 233, 232, 254, 233, 232, 315, 233, 232, 316, 233, 232, 317, 233, 232, 318, 233, 232, 319, 233, 232, 320, 233, 232, 321, 233, 232, 322, 233, 232, 323, 233, 232, 324, 233, 232, 325, 233, 232, 326, 233, 232, 327, 233, 232, 328, 233, 232, 329, 233, 232, 330, 233, 232, 331, 233, 232, 301, 233, 232, 233, 333, 232, 233, 334, 232, 233, 335, 232, 233, 336, 232, 233, 337, 232, 233, 338, 232, 233, 339, 232, 233, 340, 232, 233, 341, 232, 233, 342, 232, 233, 343, 232, 233, 344, 232, 233, 345, 232, 233, 12, 232, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 357, 356, 357, 356, 358, 357, 357, 12, 448, 365, 12, 357, 356, 359, 370, 378, 380, 388, 426, 430, 357, 356, 360, 357, 356, 361, 366, 357, 356, 362, 357, 356, 363, 357, 356, 364, 357, 356, 365, 357, 356, 357, 108, 356, 367, 357, 356, 368, 357, 356, 369, 357, 356, 365, 357, 356, 371, 357, 356, 372, 357, 356, 373, 357, 356, 374, 357, 356, 375, 357, 356, 376, 357, 356, 377, 357, 356, 365, 357, 356, 379, 357, 356, 365, 357, 356, 381, 357, 356, 382, 357, 356, 383, 357, 356, 384, 357, 356, 385, 357, 356, 386, 357, 356, 387, 357, 356, 365, 357, 356, 389, 357, 356, 390, 357, 356, 391, 357, 356, 392, 357, 356, 393, 357, 356, 394, 357, 356, 395, 357, 356, 396, 357, 356, 397, 357, 356, 398, 357, 356, 399, 357, 356, 400, 357, 356, 401, 357, 356, 402, 357, 356, 357, 403, 108, 356, 404, 357, 356, 405, 357, 356, 406, 357, 356, 407, 357, 356, 408, 357, 356, 409, 357, 356, 410, 357, 356, 411, 357, 356, 412, 357, 356, 413, 357, 356, 414, 357, 356, 415, 357, 356, 416, 357, 356, 417, 357, 356, 418, 357, 356, 419, 357, 356, 420, 357, 356, 421, 357, 356, 422, 357, 356, 423, 357, 356, 424, 357, 356, 425, 357, 356, 357, 108, 356, 427, 357, 356, 428, 357, 356, 429, 357, 356, 378, 357, 356, 431, 357, 356, 432, 357, 356, 433, 357, 356, 434, 357, 356, 435, 357, 356, 436, 357, 356, 437, 357, 356, 438, 357, 356, 439, 357, 356, 440, 357, 356, 441, 357, 356, 442, 357, 356, 443, 357, 356, 444, 357, 356, 445, 357, 356, 446, 357, 356, 447, 357, 356, 425, 357, 356, 357, 449, 356, 357, 450, 356, 357, 451, 356, 357, 452, 356, 357, 453, 356, 357, 454, 356, 357, 455, 356, 357, 456, 356, 357, 457, 356, 357, 458, 356, 357, 459, 356, 357, 460, 356, 357, 461, 356, 357, 12, 356, 463, 0, 464, 0, 465, 0, 60, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 487, 486, 487, 486, 488, 487, 487, 12, 567, 12, 487, 486, 489, 504, 541, 549, 487, 486, 490, 487, 486, 491, 487, 486, 492, 487, 486, 493, 487, 486, 494, 487, 486, 495, 487, 486, 496, 487, 486, 497, 487, 486, 498, 487, 486, 499, 487, 486, 500, 487, 486, 501, 487, 486, 502, 487, 486, 503, 487, 486, 487, 108, 486, 505, 487, 486, 506, 487, 486, 507, 487, 486, 508, 487, 486, 509, 487, 486, 510, 487, 486, 511, 487, 486, 512, 487, 486, 513, 487, 486, 514, 487, 486, 515, 487, 486, 516, 487, 486, 517, 487, 486, 518, 487, 486, 487, 519, 108, 486, 520, 487, 486, 521, 487, 486, 522, 487, 486, 523, 487, 486, 524, 487, 486, 525, 487, 486, 526, 487, 486, 527, 487, 486, 528, 487, 486, 529, 487, 486, 530, 487, 486, 531, 487, 486, 532, 487, 486, 533, 487, 486, 534, 487, 486, 535, 487, 486, 536, 487, 486, 537, 487, 486, 538, 487, 486, 539, 487, 486, 540, 487, 486, 503, 487, 486, 542, 487, 486, 543, 487, 486, 544, 487, 486, 545, 487, 486, 546, 487, 486, 547, 487, 486, 548, 487, 486, 503, 487, 486, 550, 487, 486, 551, 487, 486, 552, 487, 486, 553, 487, 486, 554, 487, 486, 555, 487, 486, 556, 487, 486, 557, 487, 486, 558, 487, 486, 559, 487, 486, 560, 487, 486, 561, 487, 486, 562, 487, 486, 563, 487, 486, 564, 487, 486, 565, 487, 486, 566, 487, 486, 503, 487, 486, 487, 568, 486, 487, 569, 486, 487, 570, 486, 487, 571, 486, 487, 572, 486, 487, 573, 486, 487, 574, 486, 487, 575, 486, 487, 576, 486, 487, 577, 486, 487, 578, 486, 487, 579, 486, 487, 580, 486, 487, 12, 486, 582, 0, 12, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 583; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/uz.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1255 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c" { cs = lexer_start; } #line 425 "ragel/i18n/uz.c.rl" #line 1262 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/uz.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/uz.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/uz.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/uz.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/uz.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/uz.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/uz.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/uz.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/uz.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/uz.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/uz.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/uz.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/uz.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/uz.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/uz.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/uz.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/uz.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/uz.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/uz.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/uz.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/uz.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/uz.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/uz.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/uz.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1552 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/uz.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1615 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c" } } } _out: {} } #line 426 "ragel/i18n/uz.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_uz() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Uz", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_ar/0000755000004100000410000000000012244512574017373 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_ar/extconf.rb0000644000004100000410000000035612244512574021372 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_ar") have_library("c", "main") create_makefile("gherkin_lexer_ar") gherkin-2.12.2/ext/gherkin_lexer_ar/gherkin_lexer_ar.c0000644000004100000410000012137512244512574023060 0ustar www-datawww-data #line 1 "ragel/i18n/ar.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/ar.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 13, 19, 21, 22, 23, 24, 25, 26, 27, 29, 31, 43, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 58, 60, 65, 70, 75, 80, 84, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110, 117, 122, 126, 132, 135, 137, 143, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 180, 187, 189, 191, 193, 195, 197, 199, 201, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 417, 421, 423, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 570, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 714, 715, 725, 732, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912 }; static const char _lexer_trans_keys[] = { -40, -39, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -89, -88, -85, -82, -77, -71, -40, -39, -80, -40, -89, -39, -117, 32, 10, 13, 10, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -124, -123, -120, -39, -125, -39, -122, -40, -86, -39, -119, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -124, -123, -40, -82, -39, -124, -39, -127, -39, -118, -40, -87, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -89, -88, -85, -82, -77, -71, 10, -40, 10, -80, 10, -40, 10, -89, 10, -39, 10, -117, 10, 10, 32, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, 10, 32, 58, -39, 10, -123, 10, -40, 10, -82, 10, -40, 10, -73, 10, -40, 10, -73, 10, -39, 10, -122, 10, -40, 10, -81, 10, -39, 10, -123, 10, -40, 10, -89, 10, -124, -123, -120, 10, -39, 10, -125, 10, -39, 10, -122, 10, -40, 10, -86, 10, -39, 10, -119, 10, 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, -40, -85, -39, -124, -40, -87, 58, 10, 10, -40, 10, 32, 35, 124, 9, 13, -82, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, -127, -40, -79, -40, -74, -39, -123, -40, -89, -40, -75, -39, -118, -40, -87, 58, 10, 10, -40, 10, 32, 35, 37, 64, 9, 13, -89, -82, -77, 10, -39, 10, -124, -123, 10, -40, 10, -82, 10, -39, 10, -124, 10, -39, 10, -127, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -40, 10, -85, 10, -39, 10, -124, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, 10, 32, 58, -39, 10, -123, 10, -40, 10, -82, 10, -40, 10, -73, 10, -40, 10, -73, 10, 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, -39, -118, -39, -122, -40, -89, -40, -79, -39, -118, -39, -120, 32, 58, -39, -123, -40, -82, -40, -73, -40, -73, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -89, -88, -85, -82, -77, -71, 10, -40, 10, -80, 10, -40, 10, -89, 10, -39, 10, -117, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, -39, 10, -122, 10, -40, 10, -81, 10, -39, 10, -123, 10, -40, 10, -89, 10, -124, -123, -120, 10, -39, 10, -125, 10, -39, 10, -122, 10, -40, 10, -86, 10, -39, 10, -119, 10, 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, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -89, -88, -85, -82, -77, -71, 10, -40, -39, 10, -80, 10, -40, 10, -89, 10, -39, 10, -117, 10, 10, 32, -124, 10, -40, 10, -82, 10, -39, 10, -124, 10, -39, 10, -127, 10, -39, 10, -118, 10, -40, 10, -87, 10, 10, 58, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -75, 10, -39, 10, -118, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -39, 10, -118, 10, -39, 10, -120, 10, 10, 32, 58, -39, 10, -123, 10, -40, 10, -82, 10, -40, 10, -73, 10, -40, 10, -73, 10, -39, 10, -122, 10, -40, 10, -81, 10, -39, 10, -123, 10, -40, 10, -89, 10, -124, -123, -120, 10, -39, 10, -125, 10, -39, 10, -122, 10, -40, 10, -86, 10, -39, 10, -119, 10, 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, -39, -122, -40, -81, -39, -123, -40, -89, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 11, 6, 2, 1, 1, 1, 1, 1, 1, 2, 2, 10, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 10, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 7, 2, 2, 2, 2, 2, 2, 2, 10, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 4, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 7, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 8, 7, 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, 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, 4, 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, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 13, 20, 23, 25, 27, 29, 31, 33, 35, 38, 41, 53, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 80, 83, 88, 93, 98, 103, 107, 111, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 149, 156, 161, 165, 171, 175, 178, 184, 196, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 235, 243, 246, 249, 252, 255, 258, 261, 264, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 587, 592, 595, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 821, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1034, 1036, 1046, 1054, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327 }; static const short _lexer_trans_targs[] = { 2, 13, 435, 12, 12, 22, 32, 34, 9, 48, 51, 12, 0, 3, 170, 176, 178, 247, 427, 0, 4, 57, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 12, 33, 11, 12, 33, 11, 2, 13, 12, 12, 22, 32, 34, 9, 48, 51, 12, 0, 14, 18, 9, 0, 15, 0, 16, 0, 17, 0, 9, 0, 19, 0, 20, 0, 21, 0, 9, 0, 23, 0, 24, 0, 26, 25, 25, 26, 25, 25, 27, 27, 28, 27, 27, 27, 27, 28, 27, 27, 27, 27, 29, 27, 27, 27, 27, 30, 27, 27, 12, 31, 31, 0, 12, 31, 31, 0, 12, 33, 32, 12, 0, 35, 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, 437, 0, 0, 0, 0, 0, 49, 50, 12, 50, 50, 48, 49, 49, 12, 50, 48, 50, 0, 51, 52, 51, 0, 56, 55, 54, 52, 55, 53, 0, 54, 52, 53, 0, 54, 53, 56, 55, 54, 52, 55, 53, 2, 13, 56, 56, 22, 32, 34, 9, 48, 51, 56, 0, 58, 150, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 71, 70, 71, 70, 72, 127, 71, 71, 12, 136, 79, 12, 71, 70, 73, 81, 87, 89, 98, 119, 71, 70, 74, 71, 70, 75, 71, 70, 76, 71, 70, 77, 71, 70, 78, 71, 70, 79, 71, 70, 71, 80, 70, 2, 13, 12, 12, 22, 32, 34, 9, 48, 51, 12, 0, 82, 71, 70, 83, 71, 70, 84, 71, 70, 85, 71, 70, 86, 71, 70, 79, 71, 70, 88, 71, 70, 79, 71, 70, 90, 71, 70, 91, 71, 70, 92, 71, 70, 93, 71, 70, 94, 71, 70, 95, 71, 70, 96, 71, 70, 97, 71, 70, 71, 80, 70, 99, 71, 70, 100, 71, 70, 101, 71, 70, 102, 71, 70, 103, 71, 70, 104, 71, 70, 105, 71, 70, 106, 71, 70, 107, 71, 70, 108, 71, 70, 109, 71, 70, 110, 71, 70, 71, 111, 80, 70, 112, 71, 70, 113, 71, 70, 114, 71, 70, 115, 71, 70, 116, 71, 70, 117, 71, 70, 118, 71, 70, 97, 71, 70, 120, 71, 70, 121, 71, 70, 122, 71, 70, 123, 71, 70, 124, 71, 70, 125, 71, 70, 126, 71, 70, 79, 71, 70, 128, 132, 79, 71, 70, 129, 71, 70, 130, 71, 70, 131, 71, 70, 79, 71, 70, 133, 71, 70, 134, 71, 70, 135, 71, 70, 79, 71, 70, 71, 137, 70, 71, 138, 70, 71, 139, 70, 71, 140, 70, 71, 141, 70, 71, 142, 70, 71, 143, 70, 71, 144, 70, 71, 145, 70, 71, 146, 70, 71, 147, 70, 71, 148, 70, 71, 149, 70, 71, 12, 70, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 159, 158, 159, 158, 160, 159, 159, 12, 12, 159, 158, 161, 159, 158, 162, 159, 158, 163, 159, 158, 164, 159, 158, 165, 159, 158, 166, 159, 158, 167, 159, 158, 168, 159, 158, 169, 159, 158, 159, 80, 158, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 9, 0, 177, 0, 9, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 189, 188, 189, 188, 190, 189, 189, 12, 233, 12, 189, 188, 191, 208, 212, 189, 188, 192, 189, 188, 193, 204, 189, 188, 194, 189, 188, 195, 189, 188, 196, 189, 188, 197, 189, 188, 198, 189, 188, 199, 189, 188, 200, 189, 188, 201, 189, 188, 202, 189, 188, 203, 189, 188, 189, 80, 188, 205, 189, 188, 206, 189, 188, 207, 189, 188, 201, 189, 188, 209, 189, 188, 210, 189, 188, 211, 189, 188, 199, 189, 188, 213, 189, 188, 214, 189, 188, 215, 189, 188, 216, 189, 188, 217, 189, 188, 218, 189, 188, 219, 189, 188, 220, 189, 188, 221, 189, 188, 222, 189, 188, 223, 189, 188, 224, 189, 188, 189, 225, 80, 188, 226, 189, 188, 227, 189, 188, 228, 189, 188, 229, 189, 188, 230, 189, 188, 231, 189, 188, 232, 189, 188, 203, 189, 188, 189, 234, 188, 189, 235, 188, 189, 236, 188, 189, 237, 188, 189, 238, 188, 189, 239, 188, 189, 240, 188, 189, 241, 188, 189, 242, 188, 189, 243, 188, 189, 244, 188, 189, 245, 188, 189, 246, 188, 189, 12, 188, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 340, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 271, 270, 271, 270, 272, 317, 271, 271, 12, 326, 279, 12, 271, 270, 273, 280, 286, 288, 297, 309, 271, 270, 274, 271, 270, 275, 271, 270, 276, 271, 270, 277, 271, 270, 278, 271, 270, 279, 271, 270, 271, 80, 270, 281, 271, 270, 282, 271, 270, 283, 271, 270, 284, 271, 270, 285, 271, 270, 279, 271, 270, 287, 271, 270, 279, 271, 270, 289, 271, 270, 290, 271, 270, 291, 271, 270, 292, 271, 270, 293, 271, 270, 294, 271, 270, 295, 271, 270, 296, 271, 270, 271, 80, 270, 298, 271, 270, 299, 271, 270, 300, 271, 270, 301, 271, 270, 302, 271, 270, 303, 271, 270, 304, 271, 270, 305, 271, 270, 306, 271, 270, 307, 271, 270, 308, 271, 270, 296, 271, 270, 310, 271, 270, 311, 271, 270, 312, 271, 270, 313, 271, 270, 314, 271, 270, 315, 271, 270, 316, 271, 270, 279, 271, 270, 318, 322, 279, 271, 270, 319, 271, 270, 320, 271, 270, 321, 271, 270, 279, 271, 270, 323, 271, 270, 324, 271, 270, 325, 271, 270, 279, 271, 270, 271, 327, 270, 271, 328, 270, 271, 329, 270, 271, 330, 270, 271, 331, 270, 271, 332, 270, 271, 333, 270, 271, 334, 270, 271, 335, 270, 271, 336, 270, 271, 337, 270, 271, 338, 270, 271, 339, 270, 271, 12, 270, 342, 341, 342, 341, 343, 404, 342, 342, 12, 413, 350, 12, 342, 341, 344, 363, 369, 371, 375, 396, 342, 341, 345, 351, 342, 341, 346, 342, 341, 347, 342, 341, 348, 342, 341, 349, 342, 341, 350, 342, 341, 342, 80, 341, 352, 342, 341, 353, 342, 341, 354, 342, 341, 355, 342, 341, 356, 342, 341, 357, 342, 341, 358, 342, 341, 359, 342, 341, 360, 342, 341, 361, 342, 341, 362, 342, 341, 342, 80, 341, 364, 342, 341, 365, 342, 341, 366, 342, 341, 367, 342, 341, 368, 342, 341, 350, 342, 341, 370, 342, 341, 350, 342, 341, 372, 342, 341, 373, 342, 341, 374, 342, 341, 358, 342, 341, 376, 342, 341, 377, 342, 341, 378, 342, 341, 379, 342, 341, 380, 342, 341, 381, 342, 341, 382, 342, 341, 383, 342, 341, 384, 342, 341, 385, 342, 341, 386, 342, 341, 387, 342, 341, 342, 388, 80, 341, 389, 342, 341, 390, 342, 341, 391, 342, 341, 392, 342, 341, 393, 342, 341, 394, 342, 341, 395, 342, 341, 362, 342, 341, 397, 342, 341, 398, 342, 341, 399, 342, 341, 400, 342, 341, 401, 342, 341, 402, 342, 341, 403, 342, 341, 350, 342, 341, 405, 409, 350, 342, 341, 406, 342, 341, 407, 342, 341, 408, 342, 341, 350, 342, 341, 410, 342, 341, 411, 342, 341, 412, 342, 341, 350, 342, 341, 342, 414, 341, 342, 415, 341, 342, 416, 341, 342, 417, 341, 342, 418, 341, 342, 419, 341, 342, 420, 341, 342, 421, 341, 342, 422, 341, 342, 423, 341, 342, 424, 341, 342, 425, 341, 342, 426, 341, 342, 12, 341, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 9, 0, 436, 0, 12, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 144, 57, 54, 0, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 437; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/ar.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1036 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c" { cs = lexer_start; } #line 425 "ragel/i18n/ar.c.rl" #line 1043 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/ar.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/ar.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/ar.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/ar.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/ar.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/ar.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/ar.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/ar.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/ar.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/ar.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/ar.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/ar.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/ar.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/ar.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/ar.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/ar.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/ar.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/ar.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/ar.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/ar.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/ar.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/ar.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/ar.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/ar.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1333 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/ar.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1396 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c" } } } _out: {} } #line 426 "ragel/i18n/ar.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_ar() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Ar", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_tr/0000755000004100000410000000000012244512574017416 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_tr/extconf.rb0000644000004100000410000000035612244512574021415 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_tr") have_library("c", "main") create_makefile("gherkin_lexer_tr") gherkin-2.12.2/ext/gherkin_lexer_tr/gherkin_lexer_tr.c0000644000004100000410000011326112244512574023121 0ustar www-datawww-data #line 1 "ragel/i18n/tr.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/tr.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 39, 41, 43, 45, 47, 49, 51, 53, 55, 74, 93, 94, 95, 97, 99, 104, 109, 114, 119, 123, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 147, 149, 154, 161, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 495, 496, 513, 515, 517, 519, 521, 523, 525, 527, 529, 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, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 659, 663, 669, 672, 674, 680, 699, 700, 701, 702, 703, 704, 705, 706, 707, 717, 719, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 822, 823 }; static const char _lexer_trans_keys[] = { -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, -106, 114, 122, 110, 101, 107, 108, 101, 114, 58, 10, 10, -61, 10, 32, 35, 124, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 109, 97, 105, 121, 101, 108, 105, 109, 32, 107, 105, -60, -97, 101, 114, 97, 107, 97, 116, 101, -61, -89, 109, 105, -59, -97, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 79, 83, 86, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, 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, 109, 10, 97, 10, 105, 10, 121, 10, 101, 10, 108, 10, 105, 10, 109, 10, 32, 10, 107, 10, 105, -60, 10, -97, 10, 10, 101, 10, 114, 10, 97, 10, 107, 10, 97, 10, 116, 10, 32, 10, 122, 10, 97, 10, 109, 10, 97, 10, 110, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 32, 58, 10, 116, 10, 97, 10, 115, 10, 108, 10, 97, -60, 10, -97, 10, -60, 10, -79, 10, 10, 101, 32, 122, 97, 109, 97, 110, 101, 110, 97, 114, 121, 111, 32, 58, 116, 97, 115, 108, 97, -60, -97, -60, -79, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 79, 83, 86, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, 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, 109, 10, 97, 10, 105, 10, 121, 10, 101, 10, 108, 10, 105, 10, 109, 10, 32, 10, 107, 10, 105, -60, 10, -97, 10, 10, 101, 10, 114, 10, 97, 10, 107, 10, 97, 10, 116, 10, 32, 10, 122, 10, 97, 10, 109, 10, 97, 10, 110, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 101, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 9, 13, -106, 10, 10, 122, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 10, 58, 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, 109, 10, 97, 10, 105, 10, 121, 10, 101, 10, 108, 10, 105, 10, 109, 10, 32, 10, 107, 10, 105, -60, 10, -97, 10, 10, 101, 10, 114, 10, 97, 10, 107, 10, 97, 10, 116, 10, 101, -61, 10, -89, 10, 10, 109, 10, 105, -59, 10, -97, 10, 10, 32, 10, 122, 10, 97, 10, 109, 10, 97, 10, 110, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 32, 58, 10, 116, 10, 97, 10, 115, 10, 108, 10, 97, -60, 10, -97, 10, -60, 10, -79, 10, 10, 101, 101, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 79, 83, 86, 124, 9, 13, 101, 108, 108, 105, 107, 58, 10, 10, -61, 10, 32, 35, 37, 64, 71, 83, 9, 13, -106, 10, 10, 114, 122, 10, 110, 10, 101, 10, 107, 10, 108, 10, 101, 10, 114, 10, 58, 10, 101, 10, 108, 10, 108, 10, 105, 10, 107, 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, 101, -61, 10, -89, 10, 10, 109, 10, 105, -59, 10, -97, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 121, 10, 111, 10, 32, 58, 10, 116, 10, 97, 10, 115, 10, 108, 10, 97, -60, 10, -97, 10, -60, 10, -79, 10, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 18, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 15, 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, 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, 1, 2, 4, 3, 2, 4, 17, 1, 1, 1, 1, 1, 1, 1, 1, 8, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 20, 22, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 50, 53, 56, 59, 62, 65, 68, 71, 74, 93, 112, 114, 116, 119, 122, 127, 132, 137, 142, 146, 150, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 188, 191, 196, 203, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 712, 714, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 950, 954, 960, 964, 967, 973, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1018, 1021, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1175, 1177 }; static const short _lexer_trans_targs[] = { 2, 374, 23, 23, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 23, 0, 3, 0, 4, 314, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 13, 12, 13, 12, 14, 13, 13, 23, 23, 13, 12, 15, 13, 12, 13, 16, 12, 13, 17, 12, 13, 18, 12, 13, 19, 12, 13, 20, 12, 13, 21, 12, 13, 22, 12, 2, 23, 23, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 23, 0, 2, 23, 23, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 23, 0, 25, 0, 26, 0, 28, 27, 27, 28, 27, 27, 29, 29, 30, 29, 29, 29, 29, 30, 29, 29, 29, 29, 31, 29, 29, 29, 29, 32, 29, 29, 23, 33, 33, 0, 23, 33, 33, 0, 23, 35, 34, 23, 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, 376, 0, 51, 0, 23, 35, 52, 23, 35, 52, 0, 0, 0, 0, 54, 55, 23, 55, 55, 53, 54, 54, 23, 55, 53, 55, 0, 57, 0, 50, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 50, 0, 68, 0, 69, 0, 70, 0, 64, 0, 72, 0, 73, 0, 74, 0, 50, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 85, 84, 85, 84, 86, 85, 85, 23, 94, 108, 23, 109, 111, 120, 124, 128, 134, 150, 85, 84, 87, 85, 84, 85, 88, 84, 85, 89, 84, 85, 90, 84, 85, 91, 84, 85, 92, 84, 85, 93, 84, 85, 22, 84, 85, 95, 84, 85, 96, 84, 85, 97, 84, 85, 98, 84, 85, 99, 84, 85, 100, 84, 85, 101, 84, 85, 102, 84, 85, 103, 84, 85, 104, 84, 85, 105, 84, 85, 106, 84, 85, 107, 84, 85, 23, 84, 85, 22, 84, 85, 110, 84, 85, 108, 84, 85, 112, 84, 85, 113, 84, 85, 114, 84, 85, 115, 84, 85, 116, 84, 85, 117, 84, 85, 118, 84, 85, 119, 84, 85, 108, 84, 121, 85, 84, 122, 85, 84, 85, 123, 84, 85, 117, 84, 85, 125, 84, 85, 126, 84, 85, 127, 84, 85, 108, 84, 85, 129, 84, 85, 130, 84, 85, 131, 84, 85, 132, 84, 85, 133, 84, 85, 108, 84, 85, 135, 84, 85, 136, 84, 85, 137, 84, 85, 138, 84, 85, 139, 84, 85, 140, 84, 85, 141, 22, 84, 85, 142, 84, 85, 143, 84, 85, 144, 84, 85, 145, 84, 85, 146, 84, 147, 85, 84, 148, 85, 84, 149, 85, 84, 93, 85, 84, 85, 108, 84, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 50, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 232, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 176, 175, 176, 175, 177, 176, 176, 23, 185, 199, 23, 200, 202, 211, 215, 219, 225, 231, 176, 175, 178, 176, 175, 176, 179, 175, 176, 180, 175, 176, 181, 175, 176, 182, 175, 176, 183, 175, 176, 184, 175, 176, 22, 175, 176, 186, 175, 176, 187, 175, 176, 188, 175, 176, 189, 175, 176, 190, 175, 176, 191, 175, 176, 192, 175, 176, 193, 175, 176, 194, 175, 176, 195, 175, 176, 196, 175, 176, 197, 175, 176, 198, 175, 176, 23, 175, 176, 22, 175, 176, 201, 175, 176, 199, 175, 176, 203, 175, 176, 204, 175, 176, 205, 175, 176, 206, 175, 176, 207, 175, 176, 208, 175, 176, 209, 175, 176, 210, 175, 176, 199, 175, 212, 176, 175, 213, 176, 175, 176, 214, 175, 176, 208, 175, 176, 216, 175, 176, 217, 175, 176, 218, 175, 176, 199, 175, 176, 220, 175, 176, 221, 175, 176, 222, 175, 176, 223, 175, 176, 224, 175, 176, 199, 175, 176, 226, 175, 176, 227, 175, 176, 228, 175, 176, 229, 175, 176, 230, 175, 176, 184, 175, 176, 199, 175, 234, 233, 234, 233, 235, 234, 234, 23, 243, 257, 23, 258, 260, 269, 273, 277, 284, 290, 306, 234, 233, 236, 234, 233, 234, 237, 233, 234, 238, 233, 234, 239, 233, 234, 240, 233, 234, 241, 233, 234, 242, 233, 234, 22, 233, 234, 244, 233, 234, 245, 233, 234, 246, 233, 234, 247, 233, 234, 248, 233, 234, 249, 233, 234, 250, 233, 234, 251, 233, 234, 252, 233, 234, 253, 233, 234, 254, 233, 234, 255, 233, 234, 256, 233, 234, 23, 233, 234, 22, 233, 234, 259, 233, 234, 257, 233, 234, 261, 233, 234, 262, 233, 234, 263, 233, 234, 264, 233, 234, 265, 233, 234, 266, 233, 234, 267, 233, 234, 268, 233, 234, 257, 233, 270, 234, 233, 271, 234, 233, 234, 272, 233, 234, 266, 233, 234, 274, 233, 234, 275, 233, 234, 276, 233, 234, 257, 233, 234, 278, 233, 279, 234, 233, 280, 234, 233, 234, 281, 233, 234, 282, 233, 283, 234, 233, 242, 234, 233, 234, 285, 233, 234, 286, 233, 234, 287, 233, 234, 288, 233, 234, 289, 233, 234, 257, 233, 234, 291, 233, 234, 292, 233, 234, 293, 233, 234, 294, 233, 234, 295, 233, 234, 296, 233, 234, 297, 22, 233, 234, 298, 233, 234, 299, 233, 234, 300, 233, 234, 301, 233, 234, 302, 233, 303, 234, 233, 304, 234, 233, 305, 234, 233, 242, 234, 233, 234, 257, 233, 50, 0, 308, 309, 308, 0, 313, 312, 311, 309, 312, 310, 0, 311, 309, 310, 0, 311, 310, 313, 312, 311, 309, 312, 310, 2, 313, 313, 24, 34, 36, 50, 53, 56, 58, 67, 71, 75, 151, 157, 307, 308, 313, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 322, 321, 322, 321, 323, 322, 322, 23, 337, 23, 351, 358, 322, 321, 324, 322, 321, 322, 325, 332, 321, 322, 326, 321, 322, 327, 321, 322, 328, 321, 322, 329, 321, 322, 330, 321, 322, 331, 321, 322, 22, 321, 322, 333, 321, 322, 334, 321, 322, 335, 321, 322, 336, 321, 322, 331, 321, 322, 338, 321, 322, 339, 321, 322, 340, 321, 322, 341, 321, 322, 342, 321, 322, 343, 321, 322, 344, 321, 322, 345, 321, 322, 346, 321, 322, 347, 321, 322, 348, 321, 322, 349, 321, 322, 350, 321, 322, 23, 321, 322, 352, 321, 353, 322, 321, 354, 322, 321, 322, 355, 321, 322, 356, 321, 357, 322, 321, 331, 322, 321, 322, 359, 321, 322, 360, 321, 322, 361, 321, 322, 362, 321, 322, 363, 321, 322, 364, 321, 322, 365, 22, 321, 322, 366, 321, 322, 367, 321, 322, 368, 321, 322, 369, 321, 322, 370, 321, 371, 322, 321, 372, 322, 321, 373, 322, 321, 331, 322, 321, 375, 0, 23, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 29, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 376; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/tr.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 951 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c" { cs = lexer_start; } #line 425 "ragel/i18n/tr.c.rl" #line 958 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/tr.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/tr.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/tr.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/tr.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/tr.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/tr.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/tr.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/tr.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/tr.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/tr.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/tr.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/tr.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/tr.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/tr.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/tr.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/tr.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/tr.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/tr.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/tr.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/tr.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/tr.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/tr.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/tr.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/tr.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1248 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/tr.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1311 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c" } } } _out: {} } #line 426 "ragel/i18n/tr.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_tr() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Tr", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_sr_cyrl/0000755000004100000410000000000012244512574020446 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_sr_cyrl/extconf.rb0000644000004100000410000000037012244512574022441 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_sr_cyrl") have_library("c", "main") create_makefile("gherkin_lexer_sr_cyrl") gherkin-2.12.2/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c0000644000004100000410000020203712244512574025201 0ustar www-datawww-data #line 1 "ragel/i18n/sr_cyrl.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/sr_cyrl.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 21, 22, 23, 24, 25, 26, 28, 30, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 97, 104, 109, 113, 119, 122, 124, 130, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 153, 154, 156, 157, 158, 160, 161, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 186, 196, 198, 200, 202, 204, 206, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 239, 241, 244, 246, 248, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 359, 361, 363, 365, 367, 369, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 540, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 582, 584, 586, 588, 590, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 801, 808, 810, 812, 814, 816, 818, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 942, 944, 947, 949, 951, 953, 955, 957, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1174, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1273, 1274, 1283, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1325, 1327, 1330, 1332, 1334, 1337, 1339, 1341, 1343, 1345, 1348, 1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1438, 1440, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1478, 1480, 1482, 1484, 1486, 1488, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615, 1617, 1619, 1621, 1623, 1625, 1627, 1629, 1631, 1633, 1635, 1637, 1639, 1641, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719 }; static const char _lexer_trans_keys[] = { -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, -48, -69, -48, -72, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, -80, -48, -76, -48, -80, -47, -126, -48, -75, -72, -66, -48, -80, -66, -48, -76, -48, 32, -80, -48, -67, -47, -126, -122, -48, -75, -48, -70, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, 10, -48, 10, -69, 10, -48, 10, -72, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, -72, -66, 10, -48, 10, -80, -66, 10, -48, 10, -76, 10, -48, 10, 32, -80, 10, -48, 10, -67, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -65, 10, -47, 10, -126, 10, 10, 58, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -48, -47, 10, -67, 10, -48, 10, -76, 10, -48, 10, -127, 10, -48, 10, -66, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, -47, 10, -70, 10, -48, 10, -72, 10, -47, 10, -122, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -104, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -66, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -75, -48, -65, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, 10, -48, 10, -69, 10, -48, 10, -72, 10, 10, 32, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, -72, -66, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, 32, -80, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, -47, 10, -67, 10, -48, 10, -76, 10, -48, 10, -127, 10, -48, 10, -66, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -66, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -66, -48, -77, -47, -125, -47, -101, -48, -67, -48, -66, -47, -127, -47, -126, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -102, -100, -98, -97, -95, -92, 10, -48, 10, -66, 10, -48, 10, -67, 10, -47, 10, -126, -122, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, 10, -75, 10, -48, 10, -65, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -48, 10, -67, -66, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, -47, 10, -66, 10, -48, 10, -73, 10, -48, 10, -80, 10, -48, 10, -76, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, 10, 58, -72, 10, -48, -47, 10, -70, 10, -48, 10, -72, 10, -47, 10, -122, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -104, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, -47, 10, -66, 10, -104, 10, -48, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -47, -67, -48, -76, -48, -127, -48, -67, -66, -48, -66, -48, -78, -48, -80, -48, -79, -48, -72, -48, -67, -48, -80, -48, -47, -66, -48, -73, -48, -80, -48, -76, -48, -72, -48, -67, -128, -48, -72, -48, -68, -48, -75, -47, -128, -48, 58, -72, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -100, -98, -92, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -47, 10, -127, 10, -48, 10, -66, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -112, -105, -104, -102, -100, -98, -97, -95, -92, 10, -48, 10, -69, 10, -48, 10, -72, 10, 10, 32, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -80, 10, -47, 10, -126, 10, -48, 10, -75, -72, -66, 10, -48, 10, -80, -66, 10, -48, 10, -76, 10, -48, 10, 32, -80, 10, -48, 10, -67, 10, -47, 10, -126, -122, 10, -48, 10, -75, 10, -48, 10, -70, 10, -47, 10, -127, 10, -47, 10, -126, 10, 10, 58, -48, 10, -75, 10, -48, 10, -65, 10, -48, 10, -66, 10, -48, 10, -77, 10, -47, 10, -125, 10, -47, 10, -101, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, -47, 10, -67, 10, -48, 10, -76, 10, -48, 10, -127, 10, -48, 10, -67, -66, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, -48, 10, -79, 10, -48, 10, -72, 10, -48, 10, -67, 10, -48, -47, 10, -66, 10, -48, 10, -73, 10, -48, 10, -80, 10, -48, 10, -76, 10, -128, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -75, 10, -47, 10, -128, 10, -48, -47, 10, -70, 10, -48, 10, -72, 10, -47, 10, -122, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -47, 10, -104, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -66, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -48, 10, -72, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -47, -70, -48, -72, -47, -122, -48, -80, -126, -122, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -47, -104, -48, -75, -48, -67, -48, -80, -47, -128, -48, -72, -48, -47, -66, 58, -104, -48, -47, -125, -48, -67, -48, -70, -47, -122, -48, -72, -48, -66, -48, -67, -48, -80, -48, -69, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 9, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 10, 2, 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 3, 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, 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, 3, 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, 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, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3, 2, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 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, 2, 3, 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, 3, 2, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 5, 4, 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, 2, 2, 2, 1, 1, 7, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 3, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, 3, 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, 3, 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, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 22, 24, 26, 28, 30, 32, 35, 38, 49, 51, 53, 56, 59, 64, 69, 74, 79, 83, 87, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 125, 132, 137, 141, 147, 151, 154, 160, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 193, 195, 198, 200, 202, 205, 207, 209, 211, 213, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 247, 258, 261, 264, 267, 270, 273, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 316, 319, 323, 326, 329, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 494, 497, 500, 503, 506, 509, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 765, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 823, 826, 829, 832, 835, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1156, 1164, 1167, 1170, 1173, 1176, 1179, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1363, 1366, 1370, 1373, 1376, 1379, 1382, 1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1639, 1641, 1643, 1645, 1647, 1649, 1651, 1653, 1655, 1657, 1659, 1661, 1663, 1665, 1667, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1713, 1715, 1717, 1719, 1721, 1728, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 1876, 1878, 1887, 1898, 1901, 1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1945, 1948, 1952, 1955, 1958, 1962, 1965, 1968, 1971, 1974, 1978, 1981, 1984, 1987, 1990, 1993, 1996, 1999, 2002, 2005, 2008, 2011, 2014, 2017, 2020, 2023, 2026, 2029, 2032, 2035, 2038, 2041, 2044, 2047, 2050, 2053, 2057, 2060, 2063, 2066, 2069, 2072, 2075, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2119, 2122, 2125, 2128, 2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2161, 2164, 2167, 2171, 2174, 2177, 2180, 2183, 2186, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2420, 2422, 2424, 2426, 2428, 2430, 2432, 2435, 2437, 2439, 2441, 2443, 2445, 2447, 2449, 2451, 2453, 2455, 2457, 2459, 2461, 2463, 2465, 2467, 2469, 2471, 2473, 2475, 2477, 2479, 2481, 2483, 2485, 2487, 2489, 2491, 2493, 2495, 2497, 2499, 2501, 2503, 2505, 2507, 2509, 2511, 2513, 2515, 2517, 2520, 2522, 2524, 2526, 2528, 2530, 2532, 2534, 2536, 2538, 2540, 2542, 2544, 2546, 2548, 2550, 2552, 2554, 2556, 2558, 2560, 2562, 2564, 2566, 2568 }; static const short _lexer_trans_targs[] = { 2, 869, 10, 10, 11, 21, 23, 7, 37, 40, 10, 0, 3, 46, 7, 56, 355, 526, 548, 796, 851, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 10, 22, 9, 10, 22, 9, 2, 10, 10, 11, 21, 23, 7, 37, 40, 10, 0, 12, 0, 13, 0, 15, 14, 14, 15, 14, 14, 16, 16, 17, 16, 16, 16, 16, 17, 16, 16, 16, 16, 18, 16, 16, 16, 16, 19, 16, 16, 10, 20, 20, 0, 10, 20, 20, 0, 10, 22, 21, 10, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 871, 0, 0, 0, 0, 0, 38, 39, 10, 39, 39, 37, 38, 38, 10, 39, 37, 39, 0, 40, 41, 40, 0, 45, 44, 43, 41, 44, 42, 0, 43, 41, 42, 0, 43, 42, 45, 44, 43, 41, 44, 42, 2, 45, 45, 11, 21, 23, 7, 37, 40, 45, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 7, 7, 7, 0, 57, 0, 58, 62, 0, 59, 0, 60, 0, 61, 8, 0, 7, 0, 63, 0, 64, 0, 65, 0, 66, 234, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 77, 76, 77, 76, 78, 77, 77, 10, 220, 83, 10, 77, 76, 79, 85, 83, 95, 112, 126, 142, 152, 202, 77, 76, 80, 77, 76, 81, 77, 76, 82, 77, 76, 83, 77, 76, 77, 84, 76, 2, 10, 10, 11, 21, 23, 7, 37, 40, 10, 0, 86, 77, 76, 87, 77, 76, 88, 77, 76, 89, 77, 76, 90, 77, 76, 91, 77, 76, 92, 77, 76, 93, 77, 76, 94, 77, 76, 83, 83, 83, 77, 76, 96, 77, 76, 97, 101, 77, 76, 98, 77, 76, 99, 77, 76, 100, 77, 84, 76, 83, 77, 76, 102, 77, 76, 103, 77, 76, 104, 77, 76, 105, 77, 76, 106, 77, 76, 107, 77, 76, 108, 77, 76, 109, 77, 76, 110, 77, 76, 111, 77, 76, 77, 84, 76, 113, 77, 76, 114, 77, 76, 115, 77, 76, 116, 77, 76, 117, 77, 76, 118, 77, 76, 119, 77, 76, 120, 77, 76, 121, 77, 76, 122, 77, 76, 123, 77, 76, 124, 77, 76, 125, 77, 76, 109, 77, 76, 127, 131, 77, 76, 128, 77, 76, 129, 77, 76, 130, 77, 76, 100, 77, 76, 132, 77, 76, 133, 77, 76, 134, 77, 76, 135, 77, 76, 136, 77, 76, 137, 77, 76, 138, 77, 76, 139, 77, 76, 140, 77, 76, 141, 77, 76, 111, 77, 76, 143, 77, 76, 144, 77, 76, 145, 77, 76, 146, 77, 76, 147, 77, 76, 148, 77, 76, 149, 77, 76, 150, 77, 76, 151, 77, 76, 111, 77, 76, 153, 158, 77, 76, 154, 77, 76, 155, 77, 76, 156, 77, 76, 157, 77, 76, 140, 77, 76, 159, 190, 77, 76, 160, 77, 76, 161, 77, 76, 162, 77, 76, 163, 77, 76, 164, 77, 76, 165, 77, 76, 166, 77, 76, 167, 77, 76, 168, 77, 76, 169, 77, 76, 170, 77, 76, 171, 77, 76, 172, 77, 76, 173, 77, 76, 77, 174, 76, 175, 77, 76, 176, 77, 76, 177, 77, 76, 178, 77, 76, 179, 77, 76, 180, 77, 76, 181, 77, 76, 182, 77, 76, 183, 77, 76, 184, 77, 76, 185, 77, 76, 186, 77, 76, 187, 77, 76, 188, 77, 76, 189, 77, 76, 140, 77, 76, 191, 77, 76, 192, 77, 76, 193, 77, 76, 194, 77, 76, 195, 77, 76, 196, 77, 76, 197, 77, 76, 198, 77, 76, 199, 77, 76, 200, 77, 76, 201, 77, 76, 111, 77, 76, 203, 77, 76, 204, 77, 76, 205, 77, 76, 206, 77, 76, 207, 77, 76, 208, 77, 76, 209, 77, 76, 210, 77, 76, 211, 77, 76, 212, 77, 76, 213, 77, 76, 214, 77, 76, 215, 77, 76, 216, 77, 76, 217, 77, 76, 218, 77, 76, 219, 77, 76, 120, 77, 76, 77, 221, 76, 77, 222, 76, 77, 223, 76, 77, 224, 76, 77, 225, 76, 77, 226, 76, 77, 227, 76, 77, 228, 76, 77, 229, 76, 77, 230, 76, 77, 231, 76, 77, 232, 76, 77, 233, 76, 77, 10, 76, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 243, 242, 243, 242, 244, 243, 243, 10, 341, 249, 10, 243, 242, 245, 250, 249, 260, 266, 283, 299, 309, 323, 243, 242, 246, 243, 242, 247, 243, 242, 248, 243, 242, 249, 243, 242, 243, 84, 242, 251, 243, 242, 252, 243, 242, 253, 243, 242, 254, 243, 242, 255, 243, 242, 256, 243, 242, 257, 243, 242, 258, 243, 242, 259, 243, 242, 249, 249, 249, 243, 242, 261, 243, 242, 262, 243, 242, 263, 243, 242, 264, 243, 242, 265, 243, 84, 242, 249, 243, 242, 267, 243, 242, 268, 243, 242, 269, 243, 242, 270, 243, 242, 271, 243, 242, 272, 243, 242, 273, 243, 242, 274, 243, 242, 275, 243, 242, 276, 243, 242, 277, 243, 242, 278, 243, 242, 279, 243, 242, 280, 243, 242, 281, 243, 242, 282, 243, 242, 243, 84, 242, 284, 288, 243, 242, 285, 243, 242, 286, 243, 242, 287, 243, 242, 265, 243, 242, 289, 243, 242, 290, 243, 242, 291, 243, 242, 292, 243, 242, 293, 243, 242, 294, 243, 242, 295, 243, 242, 296, 243, 242, 297, 243, 242, 298, 243, 242, 282, 243, 242, 300, 243, 242, 301, 243, 242, 302, 243, 242, 303, 243, 242, 304, 243, 242, 305, 243, 242, 306, 243, 242, 307, 243, 242, 308, 243, 242, 282, 243, 242, 310, 243, 242, 311, 243, 242, 312, 243, 242, 313, 243, 242, 314, 243, 242, 315, 243, 242, 316, 243, 242, 317, 243, 242, 318, 243, 242, 319, 243, 242, 320, 243, 242, 321, 243, 242, 322, 243, 242, 282, 243, 242, 324, 243, 242, 325, 243, 242, 326, 243, 242, 327, 243, 242, 328, 243, 242, 329, 243, 242, 330, 243, 242, 331, 243, 242, 332, 243, 242, 333, 243, 242, 334, 243, 242, 335, 243, 242, 336, 243, 242, 337, 243, 242, 338, 243, 242, 339, 243, 242, 340, 243, 242, 274, 243, 242, 243, 342, 242, 243, 343, 242, 243, 344, 242, 243, 345, 242, 243, 346, 242, 243, 347, 242, 243, 348, 242, 243, 349, 242, 243, 350, 242, 243, 351, 242, 243, 352, 242, 243, 353, 242, 243, 354, 242, 243, 10, 242, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 374, 373, 374, 373, 375, 374, 374, 10, 512, 10, 374, 373, 376, 395, 407, 423, 442, 494, 374, 373, 377, 374, 373, 378, 374, 373, 379, 374, 373, 380, 374, 373, 381, 374, 373, 382, 391, 374, 373, 383, 374, 373, 384, 374, 373, 385, 374, 373, 386, 374, 373, 387, 374, 373, 388, 374, 373, 389, 374, 373, 390, 374, 373, 374, 84, 373, 392, 374, 373, 393, 374, 373, 394, 374, 373, 388, 374, 373, 396, 374, 373, 397, 374, 373, 398, 374, 373, 399, 374, 373, 400, 374, 373, 401, 374, 373, 402, 374, 373, 403, 374, 373, 404, 374, 373, 405, 374, 373, 406, 374, 373, 386, 374, 373, 408, 374, 373, 409, 374, 373, 410, 374, 373, 411, 417, 374, 373, 412, 374, 373, 413, 374, 373, 414, 374, 373, 415, 374, 373, 416, 374, 373, 390, 374, 373, 418, 374, 373, 419, 374, 373, 420, 374, 373, 421, 374, 373, 422, 374, 373, 415, 374, 373, 424, 431, 374, 373, 425, 374, 373, 426, 374, 373, 427, 374, 373, 428, 374, 373, 429, 374, 373, 430, 374, 373, 419, 374, 373, 432, 374, 373, 433, 374, 373, 434, 374, 373, 435, 374, 373, 436, 374, 373, 437, 374, 373, 438, 374, 373, 439, 374, 373, 440, 374, 373, 441, 374, 84, 373, 390, 374, 373, 443, 448, 374, 373, 444, 374, 373, 445, 374, 373, 446, 374, 373, 447, 374, 373, 415, 374, 373, 449, 480, 374, 373, 450, 374, 373, 451, 374, 373, 452, 374, 373, 453, 374, 373, 454, 374, 373, 455, 374, 373, 456, 374, 373, 457, 374, 373, 458, 374, 373, 459, 374, 373, 460, 374, 373, 461, 374, 373, 462, 374, 373, 463, 374, 373, 374, 464, 373, 465, 374, 373, 466, 374, 373, 467, 374, 373, 468, 374, 373, 469, 374, 373, 470, 374, 373, 471, 374, 373, 472, 374, 373, 473, 374, 373, 474, 374, 373, 475, 374, 373, 476, 374, 373, 477, 374, 373, 478, 374, 373, 479, 374, 373, 415, 374, 373, 481, 374, 373, 482, 374, 373, 483, 374, 373, 484, 374, 373, 485, 374, 373, 486, 374, 373, 487, 374, 373, 488, 374, 373, 489, 374, 373, 490, 374, 373, 491, 492, 374, 373, 390, 374, 373, 493, 374, 373, 441, 374, 373, 495, 374, 373, 496, 374, 373, 497, 374, 373, 498, 374, 373, 499, 374, 373, 500, 374, 373, 501, 374, 373, 502, 374, 373, 503, 374, 373, 504, 374, 373, 505, 374, 373, 506, 374, 373, 507, 374, 373, 508, 374, 373, 509, 374, 373, 510, 374, 373, 511, 374, 373, 403, 374, 373, 374, 513, 373, 374, 514, 373, 374, 515, 373, 374, 516, 373, 374, 517, 373, 374, 518, 373, 374, 519, 373, 374, 520, 373, 374, 521, 373, 374, 522, 373, 374, 523, 373, 374, 524, 373, 374, 525, 373, 374, 10, 373, 527, 531, 0, 528, 0, 529, 0, 530, 0, 61, 0, 532, 0, 533, 0, 534, 540, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 74, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 371, 0, 549, 560, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 538, 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 623, 0, 571, 0, 572, 0, 574, 573, 574, 573, 575, 574, 574, 10, 10, 574, 573, 576, 593, 605, 574, 573, 577, 574, 573, 578, 574, 573, 579, 574, 573, 580, 574, 573, 581, 574, 573, 582, 574, 573, 583, 574, 573, 584, 574, 573, 585, 574, 573, 586, 574, 573, 587, 574, 573, 588, 574, 573, 589, 574, 573, 590, 574, 573, 591, 574, 573, 592, 574, 573, 574, 84, 573, 594, 574, 573, 595, 574, 573, 596, 574, 573, 597, 574, 573, 598, 574, 573, 599, 574, 573, 600, 574, 573, 601, 574, 573, 602, 574, 573, 603, 574, 573, 604, 574, 573, 592, 574, 573, 606, 574, 573, 607, 574, 573, 608, 574, 573, 609, 574, 573, 610, 574, 573, 611, 574, 573, 612, 574, 573, 613, 574, 573, 614, 574, 573, 615, 574, 573, 616, 574, 573, 617, 574, 573, 618, 574, 573, 619, 574, 573, 620, 574, 573, 621, 574, 573, 622, 574, 573, 584, 574, 573, 625, 624, 625, 624, 626, 625, 625, 10, 782, 631, 10, 625, 624, 627, 632, 631, 642, 665, 677, 697, 714, 764, 625, 624, 628, 625, 624, 629, 625, 624, 630, 625, 624, 631, 625, 624, 625, 84, 624, 633, 625, 624, 634, 625, 624, 635, 625, 624, 636, 625, 624, 637, 625, 624, 638, 625, 624, 639, 625, 624, 640, 625, 624, 641, 625, 624, 631, 631, 631, 625, 624, 643, 625, 624, 644, 648, 625, 624, 645, 625, 624, 646, 625, 624, 647, 625, 84, 624, 631, 625, 624, 649, 625, 624, 650, 625, 624, 651, 625, 624, 652, 661, 625, 624, 653, 625, 624, 654, 625, 624, 655, 625, 624, 656, 625, 624, 657, 625, 624, 658, 625, 624, 659, 625, 624, 660, 625, 624, 625, 84, 624, 662, 625, 624, 663, 625, 624, 664, 625, 624, 658, 625, 624, 666, 625, 624, 667, 625, 624, 668, 625, 624, 669, 625, 624, 670, 625, 624, 671, 625, 624, 672, 625, 624, 673, 625, 624, 674, 625, 624, 675, 625, 624, 676, 625, 624, 656, 625, 624, 678, 682, 625, 624, 679, 625, 624, 680, 625, 624, 681, 625, 624, 647, 625, 624, 683, 625, 624, 684, 625, 624, 685, 691, 625, 624, 686, 625, 624, 687, 625, 624, 688, 625, 624, 689, 625, 624, 690, 625, 624, 660, 625, 624, 692, 625, 624, 693, 625, 624, 694, 625, 624, 695, 625, 624, 696, 625, 624, 689, 625, 624, 698, 705, 625, 624, 699, 625, 624, 700, 625, 624, 701, 625, 624, 702, 625, 624, 703, 625, 624, 704, 625, 624, 693, 625, 624, 706, 625, 624, 707, 625, 624, 708, 625, 624, 709, 625, 624, 710, 625, 624, 711, 625, 624, 712, 625, 624, 713, 625, 624, 660, 625, 624, 715, 720, 625, 624, 716, 625, 624, 717, 625, 624, 718, 625, 624, 719, 625, 624, 689, 625, 624, 721, 752, 625, 624, 722, 625, 624, 723, 625, 624, 724, 625, 624, 725, 625, 624, 726, 625, 624, 727, 625, 624, 728, 625, 624, 729, 625, 624, 730, 625, 624, 731, 625, 624, 732, 625, 624, 733, 625, 624, 734, 625, 624, 735, 625, 624, 625, 736, 624, 737, 625, 624, 738, 625, 624, 739, 625, 624, 740, 625, 624, 741, 625, 624, 742, 625, 624, 743, 625, 624, 744, 625, 624, 745, 625, 624, 746, 625, 624, 747, 625, 624, 748, 625, 624, 749, 625, 624, 750, 625, 624, 751, 625, 624, 689, 625, 624, 753, 625, 624, 754, 625, 624, 755, 625, 624, 756, 625, 624, 757, 625, 624, 758, 625, 624, 759, 625, 624, 760, 625, 624, 761, 625, 624, 762, 625, 624, 763, 625, 624, 660, 625, 624, 765, 625, 624, 766, 625, 624, 767, 625, 624, 768, 625, 624, 769, 625, 624, 770, 625, 624, 771, 625, 624, 772, 625, 624, 773, 625, 624, 774, 625, 624, 775, 625, 624, 776, 625, 624, 777, 625, 624, 778, 625, 624, 779, 625, 624, 780, 625, 624, 781, 625, 624, 673, 625, 624, 625, 783, 624, 625, 784, 624, 625, 785, 624, 625, 786, 624, 625, 787, 624, 625, 788, 624, 625, 789, 624, 625, 790, 624, 625, 791, 624, 625, 792, 624, 625, 793, 624, 625, 794, 624, 625, 795, 624, 625, 10, 624, 797, 804, 0, 798, 0, 799, 0, 800, 0, 801, 0, 802, 0, 803, 0, 240, 0, 805, 836, 0, 806, 0, 807, 0, 808, 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 815, 0, 816, 0, 817, 0, 818, 0, 819, 0, 820, 0, 821, 0, 822, 0, 823, 0, 824, 0, 825, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 0, 832, 0, 833, 0, 834, 0, 835, 0, 802, 0, 837, 0, 838, 0, 839, 0, 840, 0, 841, 0, 842, 0, 843, 0, 844, 0, 845, 0, 846, 0, 847, 849, 0, 848, 0, 623, 0, 850, 0, 570, 0, 852, 0, 853, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 860, 0, 861, 0, 862, 0, 863, 0, 864, 0, 865, 0, 866, 0, 867, 0, 868, 0, 363, 0, 870, 0, 10, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 871; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/sr_cyrl.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1716 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c" { cs = lexer_start; } #line 425 "ragel/i18n/sr_cyrl.c.rl" #line 1723 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/sr_cyrl.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/sr_cyrl.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/sr_cyrl.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/sr_cyrl.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/sr_cyrl.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/sr_cyrl.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/sr_cyrl.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/sr_cyrl.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/sr_cyrl.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/sr_cyrl.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/sr_cyrl.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/sr_cyrl.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/sr_cyrl.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/sr_cyrl.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/sr_cyrl.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/sr_cyrl.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/sr_cyrl.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/sr_cyrl.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/sr_cyrl.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/sr_cyrl.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/sr_cyrl.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/sr_cyrl.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/sr_cyrl.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/sr_cyrl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2013 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/sr_cyrl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2076 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c" } } } _out: {} } #line 426 "ragel/i18n/sr_cyrl.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_sr_cyrl() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Sr_cyrl", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_ja/0000755000004100000410000000000012244512574017363 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_ja/extconf.rb0000644000004100000410000000035612244512574021362 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_ja") have_library("c", "main") create_makefile("gherkin_lexer_ja") gherkin-2.12.2/ext/gherkin_lexer_ja/gherkin_lexer_ja.c0000644000004100000410000014454412244512574023043 0ustar www-datawww-data #line 1 "ragel/i18n/ja.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/ja.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 16, 19, 23, 24, 25, 26, 28, 30, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 132, 135, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 179, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 237, 239, 241, 243, 245, 247, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 345, 346, 347, 348, 349, 350, 351, 352, 364, 368, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 433, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 603, 604, 606, 608, 613, 618, 623, 628, 632, 636, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 659, 666, 671, 675, 681, 684, 686, 692, 707, 709, 711, 713, 715, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 752, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 785, 789, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 945, 946, 947, 948, 949, 950, 951, 952, 965, 969, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1034, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1094, 1096, 1098, 1100, 1102, 1104, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238 }; static const char _lexer_trans_keys[] = { -29, -28, -27, -26, -24, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -126, -125, -117, -105, -97, -86, -29, -127, -92, 10, 13, 10, 13, -29, -28, -27, -26, -24, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -67, -66, -122, -29, -127, -105, -117, 58, 10, 10, -29, -26, 10, 32, 35, 124, 9, 13, -125, 10, -107, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, 10, 58, -29, -28, -27, -26, -24, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -119, -115, -26, -113, -112, -87, -97, -24, -125, -67, 58, 10, 10, -29, -28, -26, -24, 10, 32, 35, 37, 64, 9, 13, -126, -125, 10, -75, -73, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -85, 10, 10, 58, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, -29, 10, 58, -126, -125, 10, -94, 10, -29, 10, -126, 10, -90, 10, -29, 10, -125, 10, -120, 10, -29, 10, -125, 10, -87, 10, -29, 10, -126, 10, -92, 10, -29, 10, -125, 10, -77, 10, -122, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, 58, -125, 10, -68, 10, -29, 10, -125, 10, -120, 10, -122, -107, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -66, 10, -117, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -125, -116, -26, -103, -81, 58, 10, 10, -29, -28, -27, -26, 10, 32, 35, 37, 42, 64, 9, 13, -127, -126, -125, 10, -117, -105, -97, -86, 10, -29, 10, -127, 10, -92, 10, -29, 10, -127, 10, -117, 10, -29, 10, -127, 10, -105, 10, -29, 10, -127, 10, -96, 10, -29, 10, -126, 10, -119, 10, -29, 10, -127, 10, -80, 10, -126, -73, 10, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, -29, 10, 58, -126, -125, 10, -94, 10, -29, 10, -126, 10, -90, 10, -29, 10, -125, 10, -120, 10, -29, 10, -125, 10, -87, 10, -29, 10, -126, 10, -92, 10, -29, 10, -125, 10, -77, 10, 10, 58, -122, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, 58, -125, 10, -68, 10, -29, 10, -125, 10, -120, 10, -122, -107, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -67, 10, -122, 10, -119, 10, -115, 10, -26, 10, -113, 10, -112, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, 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, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -29, -28, -27, -26, -24, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, -29, -127, -117, -29, -127, -96, -29, -126, -119, -29, -127, -80, -126, -75, -73, -29, -125, -77, -29, -125, -105, -29, -125, -85, -29, -125, -118, -29, -125, -86, -29, -126, -86, -29, 58, -126, -125, -94, -29, -126, -90, -29, -125, -120, -29, -125, -87, -29, -126, -92, -29, -125, -77, 58, 10, 10, -29, -28, -27, -26, 10, 32, 35, 37, 42, 64, 9, 13, -127, -126, -125, 10, -117, -105, -97, -86, 10, -29, 10, -127, 10, -92, 10, -29, 10, -127, 10, -117, 10, -29, 10, -127, 10, -105, 10, -29, 10, -127, 10, -96, 10, -29, 10, -126, 10, -119, 10, -29, 10, -127, 10, -80, 10, -126, -73, 10, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, 10, 58, -107, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -67, 10, -122, 10, -119, 10, -115, 10, -26, 10, -113, 10, -112, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, 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, -122, -29, -125, -77, -29, -125, -105, -29, -125, -84, -29, 58, -125, -68, -29, -125, -120, 10, 10, -29, -28, -27, -26, -24, 10, 32, 35, 37, 42, 64, 9, 13, -127, -126, -125, 10, -117, -105, -97, -86, 10, -29, 10, -127, 10, -92, 10, -29, 10, -127, 10, -117, 10, -29, 10, -127, 10, -105, 10, -29, 10, -127, 10, -96, 10, -29, 10, -126, 10, -119, 10, -29, 10, -127, 10, -80, 10, -126, -73, 10, -29, 10, -125, 10, -118, 10, -29, 10, -125, 10, -86, 10, -29, 10, -126, 10, -86, 10, -29, 10, 58, -126, -125, 10, -94, 10, -29, 10, -126, 10, -90, 10, -29, 10, -125, 10, -120, 10, -29, 10, -125, 10, -87, 10, -29, 10, -126, 10, -92, 10, -29, 10, -125, 10, -77, 10, 10, 58, -122, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, 58, -125, 10, -68, 10, -29, 10, -125, 10, -120, 10, -122, -107, 10, -29, 10, -125, 10, -77, 10, -29, 10, -125, 10, -105, 10, -29, 10, -125, 10, -84, 10, -29, 10, -126, 10, -93, 10, -29, 10, -125, 10, -68, 10, -29, 10, -125, 10, -127, 10, -29, 10, -125, 10, -93, 10, -67, 10, -122, 10, -119, 10, -115, 10, -26, 10, -113, 10, -112, 10, -87, 10, -97, 10, -24, 10, -125, 10, -67, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -122, -107, -29, -125, -77, -29, -125, -105, -29, -125, -84, -29, -126, -93, -29, -125, -68, -29, -125, -127, -29, -125, -93, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 14, 3, 4, 1, 1, 1, 2, 2, 13, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 3, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 10, 4, 5, 2, 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, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 13, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 4, 5, 2, 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, 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, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 11, 4, 5, 2, 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, 3, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 16, 20, 25, 27, 29, 31, 34, 37, 52, 55, 57, 59, 61, 63, 65, 67, 69, 71, 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 176, 180, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 235, 238, 241, 245, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 331, 334, 337, 340, 343, 346, 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, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 493, 495, 497, 499, 501, 503, 505, 507, 519, 524, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 619, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 708, 711, 714, 717, 720, 723, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 873, 875, 878, 881, 886, 891, 896, 901, 905, 909, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 949, 956, 961, 965, 971, 975, 978, 984, 999, 1002, 1005, 1008, 1011, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1081, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1134, 1139, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1403, 1408, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 1468, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1503, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1592, 1595, 1598, 1601, 1604, 1607, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, 1773, 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819 }; static const short _lexer_trans_targs[] = { 2, 10, 36, 41, 153, 601, 9, 9, 276, 286, 288, 302, 303, 306, 9, 0, 3, 329, 579, 0, 4, 317, 320, 323, 0, 5, 0, 6, 0, 7, 0, 9, 287, 8, 9, 287, 8, 2, 10, 36, 41, 153, 9, 9, 276, 286, 288, 302, 303, 306, 9, 0, 11, 15, 0, 12, 0, 13, 0, 14, 0, 7, 0, 16, 0, 17, 0, 19, 18, 19, 18, 20, 312, 19, 19, 9, 9, 19, 18, 21, 19, 18, 22, 19, 18, 23, 19, 18, 24, 19, 18, 25, 19, 18, 26, 19, 18, 27, 19, 18, 28, 19, 18, 29, 19, 18, 30, 19, 18, 31, 19, 18, 32, 19, 18, 33, 19, 18, 34, 19, 18, 19, 35, 18, 2, 10, 36, 41, 153, 9, 9, 276, 286, 288, 302, 303, 306, 9, 0, 37, 0, 38, 0, 39, 0, 40, 0, 7, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 49, 48, 49, 48, 50, 127, 129, 134, 49, 49, 9, 139, 9, 49, 48, 51, 105, 49, 48, 52, 62, 49, 48, 53, 49, 48, 54, 49, 48, 55, 49, 48, 56, 49, 48, 57, 49, 48, 58, 49, 48, 59, 49, 48, 60, 49, 48, 61, 49, 48, 49, 35, 48, 63, 49, 48, 64, 49, 48, 65, 49, 48, 66, 49, 48, 67, 49, 48, 68, 49, 48, 69, 49, 48, 70, 49, 48, 71, 49, 48, 72, 49, 35, 48, 73, 89, 49, 48, 74, 49, 48, 75, 49, 48, 76, 49, 48, 77, 49, 48, 78, 49, 48, 79, 49, 48, 80, 49, 48, 81, 49, 48, 82, 49, 48, 83, 49, 48, 84, 49, 48, 85, 49, 48, 86, 49, 48, 87, 49, 48, 88, 49, 48, 61, 49, 48, 90, 49, 48, 91, 49, 48, 92, 49, 48, 93, 49, 48, 94, 49, 48, 95, 49, 48, 96, 49, 48, 97, 49, 48, 98, 49, 48, 99, 49, 48, 100, 49, 35, 48, 101, 49, 48, 102, 49, 48, 103, 49, 48, 104, 49, 48, 61, 49, 48, 106, 115, 49, 48, 107, 49, 48, 108, 49, 48, 109, 49, 48, 110, 49, 48, 111, 49, 48, 112, 49, 48, 113, 49, 48, 114, 49, 48, 61, 49, 48, 116, 49, 48, 117, 49, 48, 118, 49, 48, 119, 49, 48, 120, 49, 48, 121, 49, 48, 122, 49, 48, 123, 49, 48, 124, 49, 48, 125, 49, 48, 126, 49, 48, 61, 49, 48, 128, 49, 48, 61, 49, 48, 130, 49, 48, 131, 49, 48, 132, 49, 48, 133, 49, 48, 61, 49, 48, 135, 49, 48, 136, 49, 48, 137, 49, 48, 138, 49, 48, 61, 49, 48, 49, 140, 48, 49, 141, 48, 49, 142, 48, 49, 143, 48, 49, 144, 48, 49, 145, 48, 49, 146, 48, 49, 147, 48, 49, 148, 48, 49, 149, 48, 49, 150, 48, 49, 151, 48, 49, 152, 48, 49, 9, 48, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 161, 160, 161, 160, 162, 249, 251, 256, 161, 161, 9, 261, 275, 9, 161, 160, 163, 182, 227, 161, 160, 164, 167, 173, 176, 161, 160, 165, 161, 160, 166, 161, 160, 35, 161, 160, 168, 161, 160, 169, 161, 160, 170, 161, 160, 171, 161, 160, 172, 161, 160, 35, 161, 160, 174, 161, 160, 175, 161, 160, 170, 161, 160, 177, 161, 160, 178, 161, 160, 179, 161, 160, 180, 161, 160, 181, 161, 160, 35, 161, 160, 170, 183, 161, 160, 184, 161, 160, 185, 161, 160, 186, 161, 160, 187, 161, 160, 188, 161, 160, 189, 161, 160, 190, 161, 160, 191, 161, 160, 192, 161, 160, 193, 161, 35, 160, 194, 211, 161, 160, 195, 161, 160, 196, 161, 160, 197, 161, 160, 198, 161, 160, 199, 161, 160, 200, 161, 160, 201, 161, 160, 202, 161, 160, 203, 161, 160, 204, 161, 160, 205, 161, 160, 206, 161, 160, 207, 161, 160, 208, 161, 160, 209, 161, 160, 210, 161, 160, 161, 35, 160, 212, 161, 160, 213, 161, 160, 214, 161, 160, 215, 161, 160, 216, 161, 160, 217, 161, 160, 218, 161, 160, 219, 161, 160, 220, 161, 160, 221, 161, 160, 222, 161, 35, 160, 223, 161, 160, 224, 161, 160, 225, 161, 160, 226, 161, 160, 210, 161, 160, 228, 237, 161, 160, 229, 161, 160, 230, 161, 160, 231, 161, 160, 232, 161, 160, 233, 161, 160, 234, 161, 160, 235, 161, 160, 236, 161, 160, 210, 161, 160, 238, 161, 160, 239, 161, 160, 240, 161, 160, 241, 161, 160, 242, 161, 160, 243, 161, 160, 244, 161, 160, 245, 161, 160, 246, 161, 160, 247, 161, 160, 248, 161, 160, 210, 161, 160, 250, 161, 160, 170, 161, 160, 252, 161, 160, 253, 161, 160, 254, 161, 160, 255, 161, 160, 35, 161, 160, 257, 161, 160, 258, 161, 160, 259, 161, 160, 260, 161, 160, 210, 161, 160, 161, 262, 160, 161, 263, 160, 161, 264, 160, 161, 265, 160, 161, 266, 160, 161, 267, 160, 161, 268, 160, 161, 269, 160, 161, 270, 160, 161, 271, 160, 161, 272, 160, 161, 273, 160, 161, 274, 160, 161, 9, 160, 161, 35, 160, 277, 0, 278, 0, 280, 279, 279, 280, 279, 279, 281, 281, 282, 281, 281, 281, 281, 282, 281, 281, 281, 281, 283, 281, 281, 281, 281, 284, 281, 281, 9, 285, 285, 0, 9, 285, 285, 0, 9, 287, 286, 9, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 603, 0, 7, 0, 0, 0, 0, 0, 304, 305, 9, 305, 305, 303, 304, 304, 9, 305, 303, 305, 0, 306, 307, 306, 0, 311, 310, 309, 307, 310, 308, 0, 309, 307, 308, 0, 309, 308, 311, 310, 309, 307, 310, 308, 2, 10, 36, 41, 153, 311, 311, 276, 286, 288, 302, 303, 306, 311, 0, 313, 19, 18, 314, 19, 18, 315, 19, 18, 316, 19, 18, 34, 19, 18, 318, 0, 319, 0, 12, 0, 321, 0, 322, 0, 12, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 7, 0, 12, 330, 339, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 16, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 457, 0, 350, 441, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 369, 368, 369, 368, 370, 414, 416, 421, 369, 369, 9, 426, 440, 9, 369, 368, 371, 390, 401, 369, 368, 372, 375, 381, 384, 369, 368, 373, 369, 368, 374, 369, 368, 35, 369, 368, 376, 369, 368, 377, 369, 368, 378, 369, 368, 379, 369, 368, 380, 369, 368, 35, 369, 368, 382, 369, 368, 383, 369, 368, 378, 369, 368, 385, 369, 368, 386, 369, 368, 387, 369, 368, 388, 369, 368, 389, 369, 368, 35, 369, 368, 378, 391, 369, 368, 392, 369, 368, 393, 369, 368, 394, 369, 368, 395, 369, 368, 396, 369, 368, 397, 369, 368, 398, 369, 368, 399, 369, 368, 400, 369, 368, 369, 35, 368, 402, 369, 368, 403, 369, 368, 404, 369, 368, 405, 369, 368, 406, 369, 368, 407, 369, 368, 408, 369, 368, 409, 369, 368, 410, 369, 368, 411, 369, 368, 412, 369, 368, 413, 369, 368, 400, 369, 368, 415, 369, 368, 378, 369, 368, 417, 369, 368, 418, 369, 368, 419, 369, 368, 420, 369, 368, 35, 369, 368, 422, 369, 368, 423, 369, 368, 424, 369, 368, 425, 369, 368, 400, 369, 368, 369, 427, 368, 369, 428, 368, 369, 429, 368, 369, 430, 368, 369, 431, 368, 369, 432, 368, 369, 433, 368, 369, 434, 368, 369, 435, 368, 369, 436, 368, 369, 437, 368, 369, 438, 368, 369, 439, 368, 369, 9, 368, 369, 35, 368, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 367, 0, 453, 0, 454, 0, 455, 0, 456, 0, 366, 0, 459, 458, 459, 458, 460, 547, 549, 554, 559, 459, 459, 9, 564, 578, 9, 459, 458, 461, 480, 525, 459, 458, 462, 465, 471, 474, 459, 458, 463, 459, 458, 464, 459, 458, 35, 459, 458, 466, 459, 458, 467, 459, 458, 468, 459, 458, 469, 459, 458, 470, 459, 458, 35, 459, 458, 472, 459, 458, 473, 459, 458, 468, 459, 458, 475, 459, 458, 476, 459, 458, 477, 459, 458, 478, 459, 458, 479, 459, 458, 35, 459, 458, 468, 481, 459, 458, 482, 459, 458, 483, 459, 458, 484, 459, 458, 485, 459, 458, 486, 459, 458, 487, 459, 458, 488, 459, 458, 489, 459, 458, 490, 459, 458, 491, 459, 35, 458, 492, 509, 459, 458, 493, 459, 458, 494, 459, 458, 495, 459, 458, 496, 459, 458, 497, 459, 458, 498, 459, 458, 499, 459, 458, 500, 459, 458, 501, 459, 458, 502, 459, 458, 503, 459, 458, 504, 459, 458, 505, 459, 458, 506, 459, 458, 507, 459, 458, 508, 459, 458, 459, 35, 458, 510, 459, 458, 511, 459, 458, 512, 459, 458, 513, 459, 458, 514, 459, 458, 515, 459, 458, 516, 459, 458, 517, 459, 458, 518, 459, 458, 519, 459, 458, 520, 459, 35, 458, 521, 459, 458, 522, 459, 458, 523, 459, 458, 524, 459, 458, 508, 459, 458, 526, 535, 459, 458, 527, 459, 458, 528, 459, 458, 529, 459, 458, 530, 459, 458, 531, 459, 458, 532, 459, 458, 533, 459, 458, 534, 459, 458, 508, 459, 458, 536, 459, 458, 537, 459, 458, 538, 459, 458, 539, 459, 458, 540, 459, 458, 541, 459, 458, 542, 459, 458, 543, 459, 458, 544, 459, 458, 545, 459, 458, 546, 459, 458, 508, 459, 458, 548, 459, 458, 468, 459, 458, 550, 459, 458, 551, 459, 458, 552, 459, 458, 553, 459, 458, 35, 459, 458, 555, 459, 458, 556, 459, 458, 557, 459, 458, 558, 459, 458, 508, 459, 458, 560, 459, 458, 561, 459, 458, 562, 459, 458, 563, 459, 458, 508, 459, 458, 459, 565, 458, 459, 566, 458, 459, 567, 458, 459, 568, 458, 459, 569, 458, 459, 570, 458, 459, 571, 458, 459, 572, 458, 459, 573, 458, 459, 574, 458, 459, 575, 458, 459, 576, 458, 459, 577, 458, 459, 9, 458, 459, 35, 458, 580, 589, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 588, 0, 366, 0, 590, 0, 591, 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 46, 0, 602, 0, 9, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 29, 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 29, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 63, 63, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 96, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 603; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/ja.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1303 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c" { cs = lexer_start; } #line 425 "ragel/i18n/ja.c.rl" #line 1310 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/ja.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/ja.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/ja.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/ja.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/ja.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/ja.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/ja.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/ja.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/ja.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/ja.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/ja.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/ja.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/ja.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/ja.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/ja.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/ja.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/ja.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/ja.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/ja.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/ja.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/ja.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/ja.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/ja.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/ja.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1600 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/ja.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1663 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c" } } } _out: {} } #line 426 "ragel/i18n/ja.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_ja() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Ja", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_sr_latn/0000755000004100000410000000000012244512574020433 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_sr_latn/extconf.rb0000644000004100000410000000037012244512574022426 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_sr_latn") have_library("c", "main") create_makefile("gherkin_lexer_sr_latn") gherkin-2.12.2/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c0000644000004100000410000013275412244512574025163 0ustar www-datawww-data #line 1 "ragel/i18n/sr_latn.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/sr_latn.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 20, 21, 22, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 97, 102, 109, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 220, 222, 223, 225, 226, 228, 229, 230, 231, 232, 233, 234, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 320, 322, 324, 326, 329, 331, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 377, 379, 381, 384, 386, 388, 389, 390, 391, 392, 393, 394, 395, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 477, 479, 482, 484, 486, 488, 490, 492, 494, 496, 499, 501, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 585, 587, 589, 592, 594, 596, 597, 598, 599, 601, 602, 604, 605, 606, 608, 609, 610, 611, 612, 613, 614, 615, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 628, 629, 630, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 712, 714, 717, 719, 722, 724, 726, 728, 730, 732, 734, 736, 739, 741, 744, 746, 748, 751, 753, 755, 757, 759, 761, 763, 766, 768, 770, 772, 774, 776, 778, 780, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 837, 839, 841, 844, 846, 848, 849, 850, 851, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 897, 899, 901, 903, 905, 907, 909, 911, 914, 915, 916, 917, 918, 919, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 945, 946, 947, 949, 950, 951, 955, 961, 964, 966, 972, 991, 993, 995, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1015, 1017, 1019, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1054, 1058, 1060, 1062, 1064, 1066, 1068, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 105, 117, 110, 107, 99, 105, 111, 110, 97, 108, 110, 111, 115, 116, 58, 10, 10, 10, 32, 35, 37, 64, 70, 75, 77, 79, 80, 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, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 97, 111, 100, 32, 97, 110, 99, 116, 101, 112, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 97, 10, 100, 10, 32, 97, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 114, 10, 105, 10, 109, 10, 101, 10, 114, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 97, 10, 100, 116, 10, 97, 10, 116, 10, 101, 111, 10, 97, 10, 116, 101, 107, 115, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 10, 101, 10, 112, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 114, 10, 105, 10, 109, 10, 101, 10, 114, 10, 99, 107, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 105, 10, 99, 10, 114, 10, 117, 10, 107, 10, 116, 10, 117, 10, 114, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 10, 100, 116, 10, 97, 10, 116, 10, 101, 111, 10, 97, 10, 116, 111, 103, 117, -60, 99, -121, 110, 115, 100, 97, 110, 111, 111, 118, 97, 98, 105, 110, 97, 111, 114, 122, 97, 100, 105, 110, 105, 109, 101, 114, 58, 105, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 116, 10, 101, 10, 112, 10, 101, 10, 107, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 115, 10, 100, 10, 97, 10, 110, 111, 10, 111, 10, 118, 10, 97, 10, 98, 10, 105, 10, 110, 10, 111, 114, 10, 122, 10, 97, 10, 100, 10, 105, 10, 109, 10, 101, 10, 114, 10, 99, 107, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 105, 10, 99, 10, 114, 10, 117, 10, 107, 10, 116, 10, 117, 10, 114, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 10, 100, 116, 10, 97, 10, 116, 10, 101, 111, 10, 97, 10, 116, 58, 10, 10, 10, 32, 35, 70, 77, 79, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 115, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 99, 107, 116, 101, 110, 97, 114, 105, 106, 111, 105, 58, 105, 99, 97, 114, 117, 107, 116, 117, 114, 97, 32, 115, 99, 101, 110, 97, 114, 105, 106, 97, 100, 116, 97, 116, 101, 111, 97, 116, 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, 70, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 10, 111, 10, 110, 10, 99, 116, 10, 101, 10, 112, 10, 101, 10, 107, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 115, 10, 110, 111, 10, 111, 10, 118, 10, 97, 10, 98, 10, 105, 10, 110, 10, 111, 114, 10, 122, 10, 97, 10, 100, 10, 105, 10, 109, 10, 101, 10, 114, 10, 58, 105, 10, 99, 107, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 111, 10, 105, 10, 105, 10, 99, 10, 114, 10, 117, 10, 107, 10, 116, 10, 117, 10, 114, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 0 }; static const char _lexer_single_lengths[] = { 0, 18, 1, 1, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 17, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 15, 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, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 15, 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, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 3, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 15, 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, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 3, 2, 2, 1, 1, 1, 7, 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, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 4, 3, 2, 4, 17, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 4, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 20, 22, 24, 43, 45, 47, 50, 53, 58, 63, 68, 73, 77, 81, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 127, 134, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 188, 191, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 230, 233, 236, 239, 242, 245, 248, 251, 254, 257, 260, 263, 266, 269, 272, 291, 294, 296, 299, 301, 304, 306, 308, 310, 312, 314, 316, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 436, 439, 442, 445, 449, 452, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 520, 523, 526, 530, 533, 536, 538, 540, 542, 544, 546, 548, 550, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 664, 667, 671, 674, 677, 680, 683, 686, 689, 692, 696, 699, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 823, 826, 829, 833, 836, 839, 841, 843, 845, 848, 850, 853, 855, 857, 860, 862, 864, 866, 868, 870, 872, 874, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 898, 900, 902, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1016, 1019, 1023, 1026, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1055, 1058, 1062, 1065, 1068, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1199, 1202, 1205, 1209, 1212, 1215, 1217, 1219, 1221, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1310, 1312, 1314, 1316, 1318, 1320, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1370, 1372, 1374, 1377, 1379, 1381, 1385, 1391, 1395, 1398, 1404, 1423, 1426, 1429, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1458, 1461, 1464, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1515, 1520, 1523, 1526, 1529, 1532, 1535, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 31, 85, 259, 264, 275, 413, 441, 448, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 39, 31, 85, 259, 264, 275, 413, 441, 448, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 509, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 31, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 55, 54, 55, 54, 55, 55, 4, 56, 4, 70, 454, 461, 466, 474, 483, 55, 54, 55, 57, 54, 55, 58, 54, 55, 59, 54, 55, 60, 54, 55, 61, 54, 55, 62, 54, 55, 63, 54, 55, 64, 54, 55, 65, 54, 55, 66, 54, 55, 67, 54, 55, 68, 54, 55, 69, 54, 55, 4, 54, 55, 71, 54, 55, 72, 54, 55, 73, 54, 55, 74, 54, 55, 75, 54, 55, 76, 54, 55, 77, 54, 55, 78, 54, 55, 79, 54, 55, 80, 54, 55, 81, 54, 55, 82, 54, 55, 83, 54, 55, 84, 54, 4, 4, 5, 15, 17, 31, 34, 37, 39, 31, 85, 259, 264, 275, 413, 441, 448, 4, 0, 86, 88, 0, 87, 0, 32, 31, 0, 89, 0, 90, 163, 0, 91, 0, 92, 0, 93, 0, 94, 0, 96, 95, 96, 95, 96, 96, 4, 97, 111, 4, 112, 114, 111, 128, 131, 136, 144, 149, 156, 96, 95, 96, 98, 95, 96, 99, 95, 96, 100, 95, 96, 101, 95, 96, 102, 95, 96, 103, 95, 96, 104, 95, 96, 105, 95, 96, 106, 95, 96, 107, 95, 96, 108, 95, 96, 109, 95, 96, 110, 95, 96, 4, 95, 96, 84, 95, 96, 113, 95, 96, 111, 95, 96, 115, 95, 96, 116, 95, 96, 117, 95, 96, 118, 95, 96, 119, 95, 96, 120, 95, 96, 121, 95, 96, 122, 95, 96, 123, 95, 96, 124, 95, 96, 125, 95, 96, 126, 95, 96, 127, 95, 96, 84, 95, 96, 129, 95, 96, 130, 95, 96, 84, 111, 95, 96, 132, 95, 96, 133, 95, 96, 134, 95, 135, 96, 123, 95, 123, 96, 95, 96, 137, 139, 95, 96, 138, 95, 96, 111, 95, 96, 140, 95, 96, 141, 95, 96, 142, 95, 96, 143, 95, 96, 127, 95, 96, 145, 95, 96, 146, 95, 96, 147, 95, 96, 148, 95, 96, 127, 95, 96, 150, 95, 96, 151, 95, 96, 152, 95, 96, 153, 95, 96, 154, 95, 96, 155, 95, 96, 127, 95, 96, 157, 95, 96, 158, 161, 95, 96, 159, 95, 96, 160, 95, 96, 111, 111, 95, 96, 162, 95, 96, 113, 95, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 170, 169, 170, 169, 170, 170, 4, 171, 185, 4, 186, 188, 185, 202, 209, 214, 222, 227, 252, 170, 169, 170, 172, 169, 170, 173, 169, 170, 174, 169, 170, 175, 169, 170, 176, 169, 170, 177, 169, 170, 178, 169, 170, 179, 169, 170, 180, 169, 170, 181, 169, 170, 182, 169, 170, 183, 169, 170, 184, 169, 170, 4, 169, 170, 84, 169, 170, 187, 169, 170, 185, 169, 170, 189, 169, 170, 190, 169, 170, 191, 169, 170, 192, 169, 170, 193, 169, 170, 194, 169, 170, 195, 169, 170, 196, 169, 170, 197, 169, 170, 198, 169, 170, 199, 169, 170, 200, 169, 170, 201, 169, 170, 84, 169, 170, 203, 205, 169, 170, 204, 169, 170, 84, 185, 169, 170, 206, 169, 170, 207, 169, 170, 208, 169, 170, 200, 169, 170, 210, 169, 170, 211, 169, 170, 212, 169, 213, 170, 197, 169, 197, 170, 169, 170, 215, 217, 169, 170, 216, 169, 170, 185, 169, 170, 218, 169, 170, 219, 169, 170, 220, 169, 170, 221, 169, 170, 201, 169, 170, 223, 169, 170, 224, 169, 170, 225, 169, 170, 226, 169, 170, 201, 169, 170, 228, 234, 236, 169, 170, 229, 169, 170, 230, 169, 170, 231, 169, 170, 232, 169, 170, 233, 169, 170, 201, 169, 170, 235, 169, 170, 221, 169, 170, 237, 169, 170, 238, 169, 170, 239, 169, 170, 240, 169, 170, 241, 169, 170, 242, 169, 170, 243, 169, 170, 244, 169, 170, 245, 169, 170, 246, 169, 170, 247, 169, 170, 248, 169, 170, 249, 169, 170, 250, 169, 170, 251, 169, 170, 221, 169, 170, 253, 169, 170, 254, 257, 169, 170, 255, 169, 170, 256, 169, 170, 185, 185, 169, 170, 258, 169, 170, 187, 169, 260, 0, 261, 0, 262, 0, 263, 48, 0, 48, 0, 265, 267, 0, 266, 0, 31, 0, 268, 271, 0, 269, 0, 270, 0, 167, 0, 272, 0, 273, 0, 274, 0, 52, 0, 276, 281, 0, 277, 0, 278, 0, 279, 0, 280, 0, 270, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 384, 0, 288, 287, 288, 287, 288, 288, 4, 289, 303, 4, 304, 306, 303, 320, 329, 334, 344, 352, 377, 288, 287, 288, 290, 287, 288, 291, 287, 288, 292, 287, 288, 293, 287, 288, 294, 287, 288, 295, 287, 288, 296, 287, 288, 297, 287, 288, 298, 287, 288, 299, 287, 288, 300, 287, 288, 301, 287, 288, 302, 287, 288, 4, 287, 288, 84, 287, 288, 305, 287, 288, 303, 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, 287, 288, 317, 287, 288, 318, 287, 288, 319, 287, 288, 84, 287, 288, 321, 323, 287, 288, 322, 287, 288, 84, 303, 287, 288, 324, 287, 288, 325, 327, 287, 288, 326, 287, 288, 318, 287, 288, 328, 287, 288, 317, 287, 288, 330, 287, 288, 331, 287, 288, 332, 287, 333, 288, 315, 287, 315, 288, 287, 288, 335, 337, 287, 288, 336, 287, 288, 303, 287, 288, 338, 341, 287, 288, 339, 287, 288, 340, 287, 288, 319, 287, 288, 342, 287, 288, 343, 287, 288, 340, 287, 288, 345, 348, 287, 288, 346, 287, 288, 347, 287, 288, 342, 287, 288, 349, 287, 288, 350, 287, 288, 351, 287, 288, 319, 287, 288, 353, 359, 361, 287, 288, 354, 287, 288, 355, 287, 288, 356, 287, 288, 357, 287, 288, 358, 287, 288, 319, 287, 288, 360, 287, 288, 340, 287, 288, 362, 287, 288, 363, 287, 288, 364, 287, 288, 365, 287, 288, 366, 287, 288, 367, 287, 288, 368, 287, 288, 369, 287, 288, 370, 287, 288, 371, 287, 288, 372, 287, 288, 373, 287, 288, 374, 287, 288, 375, 287, 288, 376, 287, 288, 340, 287, 288, 378, 287, 288, 379, 382, 287, 288, 380, 287, 288, 381, 287, 288, 303, 303, 287, 288, 383, 287, 288, 305, 287, 385, 0, 387, 386, 387, 386, 387, 387, 4, 388, 402, 407, 4, 387, 386, 387, 389, 386, 387, 390, 386, 387, 391, 386, 387, 392, 386, 387, 393, 386, 387, 394, 386, 387, 395, 386, 387, 396, 386, 387, 397, 386, 387, 398, 386, 387, 399, 386, 387, 400, 386, 387, 401, 386, 387, 84, 386, 387, 403, 386, 387, 404, 386, 387, 405, 386, 406, 387, 397, 386, 397, 387, 386, 387, 408, 386, 387, 409, 386, 387, 410, 386, 387, 411, 386, 387, 412, 386, 387, 401, 386, 414, 422, 425, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 421, 0, 384, 0, 286, 0, 423, 0, 424, 0, 93, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 424, 0, 442, 0, 443, 446, 0, 444, 0, 445, 0, 31, 31, 0, 447, 0, 38, 0, 448, 449, 448, 0, 453, 452, 451, 449, 452, 450, 0, 451, 449, 450, 0, 451, 450, 453, 452, 451, 449, 452, 450, 453, 453, 5, 15, 17, 31, 34, 37, 39, 31, 85, 259, 264, 275, 413, 441, 448, 453, 0, 55, 455, 54, 55, 456, 54, 55, 457, 459, 54, 55, 458, 54, 55, 82, 54, 55, 460, 54, 55, 81, 54, 55, 462, 54, 55, 463, 54, 55, 464, 54, 465, 55, 79, 54, 79, 55, 54, 55, 467, 54, 55, 468, 471, 54, 55, 469, 54, 55, 470, 54, 55, 83, 54, 55, 472, 54, 55, 473, 54, 55, 470, 54, 55, 475, 478, 54, 55, 476, 54, 55, 477, 54, 55, 472, 54, 55, 479, 54, 55, 480, 54, 55, 481, 54, 55, 482, 54, 55, 84, 83, 54, 55, 484, 491, 493, 54, 55, 485, 54, 55, 486, 54, 55, 487, 54, 55, 488, 54, 55, 489, 54, 55, 490, 83, 54, 55, 83, 54, 55, 492, 54, 55, 470, 54, 55, 494, 54, 55, 495, 54, 55, 496, 54, 55, 497, 54, 55, 498, 54, 55, 499, 54, 55, 500, 54, 55, 501, 54, 55, 502, 54, 55, 503, 54, 55, 504, 54, 55, 505, 54, 55, 506, 54, 55, 507, 54, 55, 508, 54, 55, 470, 54, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 509; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/sr_latn.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1171 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c" { cs = lexer_start; } #line 425 "ragel/i18n/sr_latn.c.rl" #line 1178 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/sr_latn.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/sr_latn.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/sr_latn.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/sr_latn.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/sr_latn.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/sr_latn.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/sr_latn.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/sr_latn.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/sr_latn.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/sr_latn.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/sr_latn.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/sr_latn.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/sr_latn.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/sr_latn.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/sr_latn.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/sr_latn.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/sr_latn.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/sr_latn.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/sr_latn.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/sr_latn.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/sr_latn.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/sr_latn.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/sr_latn.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/sr_latn.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1468 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/sr_latn.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1531 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c" } } } _out: {} } #line 426 "ragel/i18n/sr_latn.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_sr_latn() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Sr_latn", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_lv/0000755000004100000410000000000012244512574017412 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_lv/gherkin_lexer_lv.c0000644000004100000410000012046712244512574023117 0ustar www-datawww-data #line 1 "ragel/i18n/lv.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/lv.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 165, 167, 169, 171, 173, 175, 193, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 351, 352, 353, 354, 355, 356, 357, 358, 365, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 407, 408, 409, 410, 411, 412, 414, 415, 416, 417, 418, 419, 420, 421, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 556, 557, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 652, 654, 656, 658, 660, 662, 664, 666, 668, 671, 673, 675, 677, 679, 681, 683, 685, 687, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 744, 750, 753, 755, 761, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 849, 851, 853, 855, 857, 859, 861, 863, 865, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 116, -60, 117, -85, -60, -115, 97, 58, 10, 10, 10, 32, 35, 37, 64, 70, 75, 80, 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, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 32, 34, 35, 37, 42, 64, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, 97, 97, 111, 100, 110, 116, 101, 107, 115, 116, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 70, 74, 75, 83, 84, 85, 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, 101, 10, 116, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 97, 10, 97, 10, 100, 10, 99, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 32, 58, 10, 112, -60, 10, -109, 10, 10, 99, 10, 32, 10, 112, 10, 97, 10, 114, 10, 97, 10, 117, 10, 103, 10, 110, 97, 105, 114, 97, 117, 103, 115, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 101, 109, -60, -109, 114, 105, 99, 105, 101, 110, -60, -127, 114, 105, 106, 115, 32, 58, 112, -60, -109, 99, 32, 112, 97, 114, 97, 117, 103, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 66, 70, 74, 75, 83, 84, 85, 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, 101, 10, 116, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 97, 10, 97, 10, 100, 10, 99, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 110, 10, 10, 10, 32, 35, 37, 42, 64, 66, 70, 74, 75, 83, 84, 85, 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, 101, 10, 116, -60, 10, 117, -85, 10, -60, 10, -115, 10, 10, 97, 10, 58, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 97, 10, 97, 111, 10, 100, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 115, 10, 99, 105, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 32, 58, 10, 112, -60, 10, -109, 10, 10, 99, 10, 32, 10, 112, 10, 97, 10, 114, 10, 97, 10, 117, 10, 103, 10, 116, 10, 117, -60, 10, -127, 10, 10, 99, 10, 105, 10, 106, 10, 97, 10, 110, 116, 117, -60, -127, 99, 105, 106, 97, 97, 110, 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, 66, 70, 74, 75, 80, 83, 84, 85, 124, 9, 13, 10, 110, 10, 107, 10, 99, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -60, 10, -127, 10, 10, 116, 10, 101, 10, 111, 10, 110, 10, 116, 10, 101, 10, 107, 10, 115, 10, 116, 10, 115, 10, 97, 105, 10, 114, 10, 97, 10, 117, 10, 103, 10, 101, 10, 109, -60, 10, -109, 10, 10, 114, 10, 105, 10, 99, 105, 10, 101, 10, 110, -60, 10, -127, 10, 10, 114, 10, 105, 10, 106, 10, 115, 10, 32, 58, 10, 112, -60, 10, -109, 10, 10, 99, 10, 32, 10, 112, 10, 97, 10, 114, 10, 97, 10, 117, 10, 103, 10, 116, 10, 117, -60, 10, -127, 10, 10, 99, 10, 105, 10, 106, 110, 107, 99, 105, 111, 110, 97, 108, 105, 116, -60, -127, 116, 101, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 16, 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, 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, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 5, 3, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 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, 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, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 144, 146, 148, 150, 152, 154, 156, 158, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 215, 218, 221, 224, 227, 230, 248, 250, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 483, 485, 487, 489, 491, 493, 495, 497, 504, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 565, 567, 569, 571, 573, 575, 577, 580, 582, 584, 586, 588, 590, 592, 594, 596, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 797, 799, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 939, 942, 945, 948, 951, 954, 957, 961, 964, 967, 970, 973, 976, 979, 982, 985, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1073, 1079, 1083, 1086, 1092, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 428, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 31, 0, 40, 414, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 47, 46, 47, 46, 47, 47, 4, 48, 4, 62, 367, 375, 386, 47, 46, 47, 49, 46, 47, 50, 46, 47, 51, 46, 47, 52, 46, 47, 53, 46, 47, 54, 46, 47, 55, 46, 47, 56, 46, 47, 57, 46, 47, 58, 46, 47, 59, 46, 47, 60, 46, 47, 61, 46, 47, 4, 46, 63, 47, 353, 46, 64, 47, 46, 65, 47, 46, 66, 47, 46, 47, 67, 46, 47, 68, 46, 4, 4, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 4, 0, 31, 0, 71, 72, 0, 31, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 82, 81, 82, 81, 82, 82, 4, 83, 97, 4, 98, 100, 120, 121, 123, 121, 144, 82, 81, 82, 84, 81, 82, 85, 81, 82, 86, 81, 82, 87, 81, 82, 88, 81, 82, 89, 81, 82, 90, 81, 82, 91, 81, 82, 92, 81, 82, 93, 81, 82, 94, 81, 82, 95, 81, 82, 96, 81, 82, 4, 81, 82, 68, 81, 82, 99, 81, 82, 97, 81, 101, 82, 106, 81, 102, 82, 81, 103, 82, 81, 104, 82, 81, 82, 105, 81, 82, 68, 81, 82, 107, 81, 82, 108, 81, 82, 109, 81, 82, 110, 81, 82, 111, 81, 82, 112, 81, 82, 113, 81, 82, 114, 81, 82, 115, 81, 82, 116, 81, 117, 82, 81, 118, 82, 81, 82, 119, 81, 82, 105, 81, 82, 97, 81, 82, 122, 81, 82, 97, 81, 82, 124, 81, 82, 125, 81, 82, 126, 81, 127, 82, 81, 128, 82, 81, 82, 129, 81, 82, 130, 81, 82, 131, 81, 82, 132, 81, 82, 133, 68, 81, 82, 134, 81, 135, 82, 81, 136, 82, 81, 82, 137, 81, 82, 138, 81, 82, 139, 81, 82, 140, 81, 82, 141, 81, 82, 142, 81, 82, 143, 81, 82, 104, 81, 82, 97, 81, 146, 175, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 154, 153, 154, 153, 154, 154, 4, 155, 4, 154, 153, 156, 154, 161, 153, 157, 154, 153, 158, 154, 153, 159, 154, 153, 154, 160, 153, 154, 68, 153, 154, 162, 153, 154, 163, 153, 154, 164, 153, 154, 165, 153, 154, 166, 153, 154, 167, 153, 154, 168, 153, 154, 169, 153, 154, 170, 153, 154, 171, 153, 172, 154, 153, 173, 154, 153, 154, 174, 153, 154, 160, 153, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 151, 0, 182, 337, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 257, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 206, 205, 206, 205, 206, 206, 4, 207, 221, 4, 222, 224, 244, 245, 247, 245, 256, 206, 205, 206, 208, 205, 206, 209, 205, 206, 210, 205, 206, 211, 205, 206, 212, 205, 206, 213, 205, 206, 214, 205, 206, 215, 205, 206, 216, 205, 206, 217, 205, 206, 218, 205, 206, 219, 205, 206, 220, 205, 206, 4, 205, 206, 68, 205, 206, 223, 205, 206, 221, 205, 225, 206, 230, 205, 226, 206, 205, 227, 206, 205, 228, 206, 205, 206, 229, 205, 206, 68, 205, 206, 231, 205, 206, 232, 205, 206, 233, 205, 206, 234, 205, 206, 235, 205, 206, 236, 205, 206, 237, 205, 206, 238, 205, 206, 239, 205, 206, 240, 205, 241, 206, 205, 242, 206, 205, 206, 243, 205, 206, 229, 205, 206, 221, 205, 206, 246, 205, 206, 221, 205, 206, 248, 205, 206, 249, 205, 206, 250, 205, 251, 206, 205, 252, 206, 205, 206, 253, 205, 206, 254, 205, 206, 255, 205, 206, 229, 205, 206, 221, 205, 259, 258, 259, 258, 259, 259, 4, 260, 274, 4, 275, 277, 297, 298, 307, 335, 336, 259, 258, 259, 261, 258, 259, 262, 258, 259, 263, 258, 259, 264, 258, 259, 265, 258, 259, 266, 258, 259, 267, 258, 259, 268, 258, 259, 269, 258, 259, 270, 258, 259, 271, 258, 259, 272, 258, 259, 273, 258, 259, 4, 258, 259, 68, 258, 259, 276, 258, 259, 274, 258, 278, 259, 283, 258, 279, 259, 258, 280, 259, 258, 281, 259, 258, 259, 282, 258, 259, 68, 258, 259, 284, 258, 259, 285, 258, 259, 286, 258, 259, 287, 258, 259, 288, 258, 259, 289, 258, 259, 290, 258, 259, 291, 258, 259, 292, 258, 259, 293, 258, 294, 259, 258, 295, 259, 258, 259, 296, 258, 259, 282, 258, 259, 274, 258, 259, 299, 300, 258, 259, 274, 258, 259, 301, 258, 259, 302, 258, 259, 303, 258, 259, 304, 258, 259, 305, 258, 259, 306, 258, 259, 282, 258, 259, 308, 328, 258, 259, 309, 258, 259, 310, 258, 311, 259, 258, 312, 259, 258, 259, 313, 258, 259, 314, 258, 259, 315, 258, 259, 316, 258, 259, 317, 68, 258, 259, 318, 258, 319, 259, 258, 320, 259, 258, 259, 321, 258, 259, 322, 258, 259, 323, 258, 259, 324, 258, 259, 325, 258, 259, 326, 258, 259, 327, 258, 259, 281, 258, 259, 329, 258, 259, 330, 258, 331, 259, 258, 332, 259, 258, 259, 333, 258, 259, 334, 258, 259, 281, 258, 259, 299, 258, 259, 274, 258, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 79, 0, 71, 0, 31, 0, 347, 348, 347, 0, 352, 351, 350, 348, 351, 349, 0, 350, 348, 349, 0, 350, 349, 352, 351, 350, 348, 351, 349, 352, 352, 5, 15, 17, 31, 34, 37, 39, 69, 70, 145, 181, 345, 346, 347, 352, 0, 47, 354, 46, 47, 355, 46, 47, 356, 46, 47, 357, 46, 47, 358, 46, 47, 359, 46, 47, 360, 46, 47, 361, 46, 47, 362, 46, 47, 363, 46, 364, 47, 46, 365, 47, 46, 47, 366, 46, 47, 67, 46, 47, 368, 46, 47, 369, 46, 47, 370, 46, 47, 371, 46, 47, 372, 46, 47, 373, 46, 47, 374, 46, 47, 67, 46, 47, 376, 380, 46, 47, 377, 46, 47, 378, 46, 47, 379, 46, 47, 374, 46, 47, 381, 46, 47, 382, 46, 383, 47, 46, 384, 47, 46, 47, 385, 46, 47, 67, 46, 47, 387, 407, 46, 47, 388, 46, 47, 389, 46, 390, 47, 46, 391, 47, 46, 47, 392, 46, 47, 393, 46, 47, 394, 46, 47, 395, 46, 47, 396, 68, 46, 47, 397, 46, 398, 47, 46, 399, 47, 46, 47, 400, 46, 47, 401, 46, 47, 402, 46, 47, 403, 46, 47, 404, 46, 47, 405, 46, 47, 406, 46, 47, 66, 46, 47, 408, 46, 47, 409, 46, 410, 47, 46, 411, 47, 46, 47, 412, 46, 47, 413, 46, 47, 66, 46, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 44, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 428; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/lv.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1029 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c" { cs = lexer_start; } #line 425 "ragel/i18n/lv.c.rl" #line 1036 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/lv.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/lv.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/lv.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/lv.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/lv.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/lv.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/lv.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/lv.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/lv.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/lv.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/lv.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/lv.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/lv.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/lv.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/lv.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/lv.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/lv.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/lv.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/lv.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/lv.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/lv.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/lv.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/lv.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/lv.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1326 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/lv.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1389 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c" } } } _out: {} } #line 426 "ragel/i18n/lv.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_lv() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Lv", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_lv/extconf.rb0000644000004100000410000000035612244512574021411 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_lv") have_library("c", "main") create_makefile("gherkin_lexer_lv") gherkin-2.12.2/ext/gherkin_lexer_pl/0000755000004100000410000000000012244512574017404 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_pl/extconf.rb0000644000004100000410000000035612244512574021403 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_pl") have_library("c", "main") create_makefile("gherkin_lexer_pl") gherkin-2.12.2/ext/gherkin_lexer_pl/gherkin_lexer_pl.c0000644000004100000410000014655612244512574023112 0ustar www-datawww-data #line 1 "ragel/i18n/pl.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/pl.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 23, 24, 25, 47, 48, 49, 51, 53, 58, 63, 68, 73, 77, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 108, 115, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1102, 1103, 1104, 1105, 1109, 1115, 1118, 1120, 1126, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 115, 101, 112, 101, 107, 116, 58, 10, 10, 10, 32, 35, 37, 64, 65, 70, 80, 83, 87, 90, 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, 115, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, 117, 110, 107, 99, 106, 97, 100, 121, 101, -59, -101, -68, 108, 105, 101, 105, 101, 97, 106, -60, -123, 99, 114, 97, 122, 111, 114, 116, 114, 122, 101, 98, 97, 32, 98, 105, 122, 110, 101, 115, 111, 119, 122, 121, 107, -59, -126, 97, 100, 121, 58, 10, 10, 10, 32, 35, 65, 70, 80, 87, 124, 9, 13, 10, 115, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, -59, 10, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 99, 122, 101, 110, 97, 114, 105, 117, 115, 122, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 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, 108, 115, 10, 101, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 100, 10, 121, 10, 101, -59, 10, -101, -68, 10, 10, 108, 10, 105, 10, 101, 10, 105, 10, 101, 10, 97, 10, 106, -60, 10, -123, 10, 10, 99, 10, 114, 10, 97, 10, 122, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 99, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, 116, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, -59, 10, 107, -126, 10, 10, 111, -59, 10, -68, 10, 10, 101, 10, 110, 10, 105, -59, 10, -126, 10, 10, 97, 10, 100, 97, 98, 108, 111, 110, 32, 115, 99, 101, 110, 97, 114, 105, 117, 115, 122, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 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, 108, 115, 10, 101, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 100, 10, 121, 10, 101, -59, 10, -101, -68, 10, 10, 108, 10, 105, 10, 101, 10, 105, 10, 101, 10, 97, 10, 106, -60, 10, -123, 10, 10, 99, 10, 114, 10, 97, 10, 122, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, 116, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, 10, 107, -59, 10, -126, 10, 10, 97, 10, 100, -59, 116, -126, 97, -59, -101, 99, 105, 119, 111, -59, -101, -60, -121, 97, -59, 107, -126, 111, -59, -68, 101, 110, 105, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 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, 108, 115, 10, 101, 10, 112, 10, 101, 10, 107, 10, 116, 10, 58, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 100, 10, 121, 10, 101, -59, 10, -101, -68, 10, 10, 108, 10, 105, 10, 101, 10, 105, 10, 101, 10, 97, 10, 106, -60, 10, -123, 10, 10, 99, 10, 114, 10, 97, 10, 122, 10, 111, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 99, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, 116, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, 10, 107, -59, 10, -126, 10, 10, 97, 10, 100, -59, -126, 97, 100, 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, 70, 71, 73, 74, 75, 77, 79, 80, 83, 87, 90, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 99, 10, 106, 10, 97, 10, 111, 114, 10, 116, 10, 114, 10, 122, 10, 101, 10, 98, 10, 97, 10, 32, 10, 98, 10, 105, 10, 122, 10, 110, 10, 101, 10, 115, 10, 111, 10, 119, 10, 122, 10, 121, 10, 107, -59, 10, -126, 10, 10, 97, 10, 100, 10, 121, 10, 99, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, 10, 97, 10, 98, 10, 108, 10, 111, 10, 110, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 117, 10, 115, 10, 122, -59, 10, -126, 10, 10, 97, -59, 10, -101, 10, 10, 99, 10, 105, 10, 119, 10, 111, -59, 10, -101, 10, -60, 10, -121, 10, 10, 97, -59, 10, -126, 10, 10, 111, -59, 10, -68, 10, 10, 101, 10, 110, 10, 105, 0 }; static const char _lexer_single_lengths[] = { 0, 21, 1, 1, 20, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 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, 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, 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, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 18, 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, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 4, 3, 2, 4, 20, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 23, 25, 27, 49, 51, 53, 56, 59, 64, 69, 74, 79, 83, 87, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 125, 128, 133, 140, 145, 148, 150, 152, 154, 156, 158, 160, 162, 164, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1616, 1618, 1620, 1622, 1626, 1632, 1636, 1639, 1645, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 68, 74, 31, 76, 82, 84, 89, 92, 161, 398, 411, 535, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 68, 74, 31, 76, 82, 84, 89, 92, 161, 398, 411, 535, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 618, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 39, 0, 31, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 46, 45, 46, 45, 46, 46, 4, 47, 4, 61, 541, 547, 571, 596, 609, 46, 45, 46, 48, 45, 46, 49, 45, 46, 50, 45, 46, 51, 45, 46, 52, 45, 46, 53, 45, 46, 54, 45, 46, 55, 45, 46, 56, 45, 46, 57, 45, 46, 58, 45, 46, 59, 45, 46, 60, 45, 46, 4, 45, 46, 62, 45, 46, 63, 45, 46, 64, 45, 46, 65, 45, 46, 66, 45, 46, 67, 45, 4, 4, 5, 15, 17, 31, 34, 37, 68, 74, 31, 76, 82, 84, 89, 92, 161, 398, 411, 535, 4, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 43, 0, 75, 0, 31, 0, 77, 0, 78, 0, 79, 81, 0, 80, 0, 31, 0, 79, 0, 83, 0, 74, 0, 85, 0, 86, 0, 87, 0, 88, 0, 31, 0, 90, 0, 91, 0, 31, 0, 93, 108, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 73, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 119, 118, 119, 118, 119, 119, 4, 120, 126, 132, 148, 4, 119, 118, 119, 121, 118, 119, 122, 118, 119, 123, 118, 119, 124, 118, 119, 125, 118, 119, 67, 118, 119, 127, 118, 119, 128, 118, 119, 129, 118, 119, 130, 118, 119, 131, 118, 119, 125, 118, 119, 133, 118, 119, 134, 118, 119, 135, 118, 119, 136, 118, 119, 137, 118, 119, 138, 118, 119, 139, 118, 119, 140, 118, 119, 141, 118, 119, 142, 118, 119, 143, 118, 119, 144, 118, 119, 145, 118, 119, 146, 118, 119, 147, 118, 119, 131, 118, 149, 119, 118, 150, 119, 118, 119, 151, 118, 152, 119, 118, 153, 119, 118, 119, 154, 118, 119, 155, 118, 119, 156, 118, 119, 157, 118, 158, 119, 118, 159, 119, 118, 160, 119, 118, 125, 119, 118, 162, 287, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 173, 172, 173, 172, 173, 173, 4, 174, 188, 4, 189, 196, 202, 188, 204, 210, 212, 217, 220, 236, 261, 274, 173, 172, 173, 175, 172, 173, 176, 172, 173, 177, 172, 173, 178, 172, 173, 179, 172, 173, 180, 172, 173, 181, 172, 173, 182, 172, 173, 183, 172, 173, 184, 172, 173, 185, 172, 173, 186, 172, 173, 187, 172, 173, 4, 172, 173, 67, 172, 173, 190, 191, 172, 173, 188, 172, 173, 192, 172, 173, 193, 172, 173, 194, 172, 173, 195, 172, 173, 67, 172, 173, 197, 172, 173, 198, 172, 173, 199, 172, 173, 200, 172, 173, 201, 172, 173, 195, 172, 173, 203, 172, 173, 188, 172, 173, 205, 172, 206, 173, 172, 207, 209, 173, 172, 173, 208, 172, 173, 188, 172, 173, 207, 172, 173, 211, 172, 173, 202, 172, 173, 213, 172, 173, 214, 172, 215, 173, 172, 216, 173, 172, 173, 188, 172, 173, 218, 172, 173, 219, 172, 173, 188, 172, 173, 221, 172, 173, 222, 172, 173, 223, 172, 173, 224, 172, 173, 225, 172, 173, 226, 172, 173, 227, 172, 173, 228, 172, 173, 229, 172, 173, 230, 172, 173, 231, 172, 173, 232, 172, 173, 233, 172, 173, 234, 172, 173, 235, 172, 173, 201, 172, 173, 237, 245, 172, 173, 238, 172, 173, 239, 172, 173, 240, 172, 173, 241, 172, 173, 242, 172, 173, 243, 172, 173, 244, 172, 173, 195, 172, 173, 246, 172, 173, 247, 172, 173, 248, 172, 173, 249, 172, 173, 250, 172, 173, 251, 172, 173, 252, 172, 173, 253, 172, 173, 254, 172, 173, 255, 172, 173, 256, 172, 173, 257, 172, 173, 258, 172, 173, 259, 172, 173, 260, 172, 173, 201, 172, 262, 173, 211, 172, 263, 173, 172, 173, 264, 172, 265, 173, 172, 266, 173, 172, 173, 267, 172, 173, 268, 172, 173, 269, 172, 173, 270, 172, 271, 173, 172, 272, 173, 172, 273, 173, 172, 195, 173, 172, 173, 275, 172, 276, 173, 283, 172, 277, 173, 172, 173, 278, 172, 279, 173, 172, 280, 173, 172, 173, 281, 172, 173, 282, 172, 173, 201, 172, 284, 173, 172, 285, 173, 172, 173, 286, 172, 173, 212, 172, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 307, 306, 307, 306, 307, 307, 4, 308, 322, 4, 323, 330, 336, 322, 338, 344, 346, 351, 354, 370, 379, 392, 307, 306, 307, 309, 306, 307, 310, 306, 307, 311, 306, 307, 312, 306, 307, 313, 306, 307, 314, 306, 307, 315, 306, 307, 316, 306, 307, 317, 306, 307, 318, 306, 307, 319, 306, 307, 320, 306, 307, 321, 306, 307, 4, 306, 307, 67, 306, 307, 324, 325, 306, 307, 322, 306, 307, 326, 306, 307, 327, 306, 307, 328, 306, 307, 329, 306, 307, 67, 306, 307, 331, 306, 307, 332, 306, 307, 333, 306, 307, 334, 306, 307, 335, 306, 307, 329, 306, 307, 337, 306, 307, 322, 306, 307, 339, 306, 340, 307, 306, 341, 343, 307, 306, 307, 342, 306, 307, 322, 306, 307, 341, 306, 307, 345, 306, 307, 336, 306, 307, 347, 306, 307, 348, 306, 349, 307, 306, 350, 307, 306, 307, 322, 306, 307, 352, 306, 307, 353, 306, 307, 322, 306, 307, 355, 306, 307, 356, 306, 307, 357, 306, 307, 358, 306, 307, 359, 306, 307, 360, 306, 307, 361, 306, 307, 362, 306, 307, 363, 306, 307, 364, 306, 307, 365, 306, 307, 366, 306, 307, 367, 306, 307, 368, 306, 307, 369, 306, 307, 335, 306, 307, 371, 306, 307, 372, 306, 307, 373, 306, 307, 374, 306, 307, 375, 306, 307, 376, 306, 307, 377, 306, 307, 378, 306, 307, 329, 306, 380, 307, 345, 306, 381, 307, 306, 307, 382, 306, 383, 307, 306, 384, 307, 306, 307, 385, 306, 307, 386, 306, 307, 387, 306, 307, 388, 306, 389, 307, 306, 390, 307, 306, 391, 307, 306, 329, 307, 306, 307, 393, 306, 307, 394, 306, 395, 307, 306, 396, 307, 306, 307, 397, 306, 307, 346, 306, 399, 83, 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 43, 0, 412, 0, 413, 531, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 424, 423, 424, 423, 424, 424, 4, 425, 439, 4, 440, 447, 453, 439, 455, 461, 463, 468, 471, 487, 512, 525, 424, 423, 424, 426, 423, 424, 427, 423, 424, 428, 423, 424, 429, 423, 424, 430, 423, 424, 431, 423, 424, 432, 423, 424, 433, 423, 424, 434, 423, 424, 435, 423, 424, 436, 423, 424, 437, 423, 424, 438, 423, 424, 4, 423, 424, 67, 423, 424, 441, 442, 423, 424, 439, 423, 424, 443, 423, 424, 444, 423, 424, 445, 423, 424, 446, 423, 424, 67, 423, 424, 448, 423, 424, 449, 423, 424, 450, 423, 424, 451, 423, 424, 452, 423, 424, 446, 423, 424, 454, 423, 424, 439, 423, 424, 456, 423, 457, 424, 423, 458, 460, 424, 423, 424, 459, 423, 424, 439, 423, 424, 458, 423, 424, 462, 423, 424, 453, 423, 424, 464, 423, 424, 465, 423, 466, 424, 423, 467, 424, 423, 424, 439, 423, 424, 469, 423, 424, 470, 423, 424, 439, 423, 424, 472, 423, 424, 473, 423, 424, 474, 423, 424, 475, 423, 424, 476, 423, 424, 477, 423, 424, 478, 423, 424, 479, 423, 424, 480, 423, 424, 481, 423, 424, 482, 423, 424, 483, 423, 424, 484, 423, 424, 485, 423, 424, 486, 423, 424, 452, 423, 424, 488, 496, 423, 424, 489, 423, 424, 490, 423, 424, 491, 423, 424, 492, 423, 424, 493, 423, 424, 494, 423, 424, 495, 423, 424, 446, 423, 424, 497, 423, 424, 498, 423, 424, 499, 423, 424, 500, 423, 424, 501, 423, 424, 502, 423, 424, 503, 423, 424, 504, 423, 424, 505, 423, 424, 506, 423, 424, 507, 423, 424, 508, 423, 424, 509, 423, 424, 510, 423, 424, 511, 423, 424, 452, 423, 513, 424, 462, 423, 514, 424, 423, 424, 515, 423, 516, 424, 423, 517, 424, 423, 424, 518, 423, 424, 519, 423, 424, 520, 423, 424, 521, 423, 522, 424, 423, 523, 424, 423, 524, 424, 423, 446, 424, 423, 424, 526, 423, 424, 527, 423, 528, 424, 423, 529, 424, 423, 424, 530, 423, 424, 463, 423, 532, 0, 533, 0, 534, 0, 84, 0, 535, 536, 535, 0, 540, 539, 538, 536, 539, 537, 0, 538, 536, 537, 0, 538, 537, 540, 539, 538, 536, 539, 537, 540, 540, 5, 15, 17, 31, 34, 37, 68, 74, 31, 76, 82, 84, 89, 92, 161, 398, 411, 535, 540, 0, 46, 542, 45, 46, 543, 45, 46, 544, 45, 46, 545, 45, 46, 546, 45, 46, 66, 45, 46, 548, 563, 45, 46, 549, 45, 46, 550, 45, 46, 551, 45, 46, 552, 45, 46, 553, 45, 46, 554, 45, 46, 555, 45, 46, 556, 45, 46, 557, 45, 46, 558, 45, 46, 559, 45, 46, 560, 45, 46, 561, 45, 46, 562, 45, 46, 546, 45, 46, 564, 45, 46, 565, 45, 46, 566, 45, 567, 46, 45, 568, 46, 45, 46, 569, 45, 46, 570, 45, 46, 66, 45, 46, 572, 580, 45, 46, 573, 45, 46, 574, 45, 46, 575, 45, 46, 576, 45, 46, 577, 45, 46, 578, 45, 46, 579, 45, 46, 66, 45, 46, 581, 45, 46, 582, 45, 46, 583, 45, 46, 584, 45, 46, 585, 45, 46, 586, 45, 46, 587, 45, 46, 588, 45, 46, 589, 45, 46, 590, 45, 46, 591, 45, 46, 592, 45, 46, 593, 45, 46, 594, 45, 46, 595, 45, 46, 546, 45, 597, 46, 45, 598, 46, 45, 46, 599, 45, 600, 46, 45, 601, 46, 45, 46, 602, 45, 46, 603, 45, 46, 604, 45, 46, 605, 45, 606, 46, 45, 607, 46, 45, 608, 46, 45, 66, 46, 45, 46, 610, 45, 611, 46, 45, 612, 46, 45, 46, 613, 45, 614, 46, 45, 615, 46, 45, 46, 616, 45, 46, 617, 45, 46, 546, 45, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 618; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/pl.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1342 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c" { cs = lexer_start; } #line 425 "ragel/i18n/pl.c.rl" #line 1349 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/pl.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/pl.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/pl.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/pl.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/pl.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/pl.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/pl.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/pl.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/pl.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/pl.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/pl.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/pl.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/pl.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/pl.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/pl.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/pl.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/pl.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/pl.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/pl.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/pl.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/pl.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/pl.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/pl.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/pl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1639 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/pl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1702 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c" } } } _out: {} } #line 426 "ragel/i18n/pl.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_pl() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Pl", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_et/0000755000004100000410000000000012244512574017401 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_et/extconf.rb0000644000004100000410000000035612244512574021400 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_et") have_library("c", "main") create_makefile("gherkin_lexer_et") gherkin-2.12.2/ext/gherkin_lexer_et/gherkin_lexer_et.c0000644000004100000410000010357612244512574023077 0ustar www-datawww-data #line 1 "ragel/i18n/et.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/et.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_et/gherkin_lexer_et.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 135, 137, 139, 141, 143, 145, 147, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 361, 363, 365, 367, 369, 371, 373, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 522, 524, 526, 528, 530, 532, 533, 534, 535, 536, 537, 538, 539, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 649, 651, 655, 661, 664, 666, 672, 689 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 101, 108, 100, 97, 100, 101, 115, 97, 117, 104, 116, 117, 109, 105, 100, 58, 10, 10, 10, 32, 35, 79, 124, 9, 13, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 32, 34, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, 117, 105, 32, 100, 109, 97, 100, 117, 115, 58, 10, 10, 10, 32, 35, 37, 64, 74, 79, 82, 83, 84, 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, 117, 10, 104, 10, 116, 10, 117, 10, 109, 10, 105, 10, 100, 10, 58, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 97, 10, 97, 10, 109, 10, 115, 10, 116, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 10, 97, 10, 117, 10, 115, 10, 116, 97, 97, 109, 115, 116, 115, 101, 110, 97, 97, 114, 105, 117, 109, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 74, 75, 79, 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, 32, 10, 101, 10, 108, 10, 100, 10, 97, 10, 100, 10, 101, 10, 115, 10, 97, 10, 117, 10, 105, 10, 32, 100, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 105, 116, 10, 105, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 105, 116, 105, 115, 101, 110, 97, 97, 114, 105, 117, 109, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 74, 75, 79, 82, 83, 84, 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, 101, 10, 108, 10, 100, 10, 97, 10, 100, 10, 101, 10, 115, 10, 97, 10, 117, 10, 105, 10, 32, 100, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 97, 10, 97, 10, 109, 10, 115, 10, 116, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 10, 105, 116, 10, 105, 10, 97, 10, 117, 10, 115, 10, 116, 97, 117, 115, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 74, 75, 79, 82, 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, 32, 10, 101, 10, 108, 10, 100, 10, 97, 10, 100, 10, 101, 10, 115, 10, 97, 10, 117, 10, 105, 10, 32, 100, 10, 109, 10, 97, 10, 100, 10, 117, 10, 115, 10, 58, 10, 97, 10, 97, 10, 109, 10, 115, 10, 116, 10, 115, 10, 101, 10, 110, 10, 97, 10, 97, 10, 114, 10, 105, 10, 117, 10, 109, 10, 105, 116, 10, 105, 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, 69, 74, 75, 79, 82, 83, 84, 124, 9, 13, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 15, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 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, 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, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 4, 3, 2, 4, 15, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 137, 139, 141, 143, 145, 147, 149, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 177, 180, 183, 186, 189, 192, 195, 212, 214, 216, 219, 221, 223, 225, 227, 229, 231, 233, 235, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 508, 511, 514, 517, 520, 523, 526, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 604, 607, 610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 747, 750, 753, 756, 759, 762, 764, 766, 768, 770, 772, 774, 776, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 940, 946, 950, 953, 959, 976 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 309, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 31, 0, 31, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 54, 53, 54, 53, 54, 54, 4, 55, 4, 54, 53, 54, 56, 53, 54, 57, 53, 54, 58, 53, 54, 59, 53, 54, 60, 53, 54, 61, 53, 4, 4, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 4, 0, 63, 0, 64, 0, 32, 31, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 73, 72, 73, 72, 73, 73, 4, 74, 4, 88, 96, 101, 105, 115, 73, 72, 73, 75, 72, 73, 76, 72, 73, 77, 72, 73, 78, 72, 73, 79, 72, 73, 80, 72, 73, 81, 72, 73, 82, 72, 73, 83, 72, 73, 84, 72, 73, 85, 72, 73, 86, 72, 73, 87, 72, 73, 4, 72, 73, 89, 72, 73, 90, 72, 73, 91, 72, 73, 92, 72, 73, 93, 72, 73, 94, 72, 73, 95, 72, 73, 61, 72, 73, 97, 72, 73, 98, 72, 73, 99, 72, 73, 100, 72, 73, 95, 72, 73, 102, 72, 73, 103, 72, 73, 104, 72, 73, 105, 72, 73, 106, 72, 73, 107, 72, 73, 108, 72, 73, 109, 72, 73, 110, 72, 73, 111, 72, 73, 112, 72, 73, 113, 72, 73, 114, 72, 73, 95, 72, 73, 116, 72, 73, 117, 72, 73, 118, 72, 73, 95, 72, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 136, 135, 136, 135, 136, 136, 4, 137, 151, 4, 152, 159, 160, 163, 169, 136, 135, 136, 138, 135, 136, 139, 135, 136, 140, 135, 136, 141, 135, 136, 142, 135, 136, 143, 135, 136, 144, 135, 136, 145, 135, 136, 146, 135, 136, 147, 135, 136, 148, 135, 136, 149, 135, 136, 150, 135, 136, 4, 135, 136, 61, 135, 136, 153, 135, 136, 154, 135, 136, 155, 135, 136, 156, 135, 136, 157, 135, 136, 158, 135, 136, 151, 135, 136, 151, 135, 136, 161, 135, 136, 162, 135, 136, 61, 151, 135, 136, 164, 135, 136, 165, 135, 136, 166, 135, 136, 167, 135, 136, 168, 135, 136, 61, 135, 136, 170, 171, 135, 136, 158, 135, 136, 172, 135, 136, 173, 135, 136, 174, 135, 136, 175, 135, 136, 176, 135, 136, 177, 135, 136, 178, 135, 136, 179, 135, 136, 168, 135, 181, 182, 0, 43, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 194, 193, 194, 193, 194, 194, 4, 195, 209, 4, 210, 217, 218, 221, 227, 241, 243, 194, 193, 194, 196, 193, 194, 197, 193, 194, 198, 193, 194, 199, 193, 194, 200, 193, 194, 201, 193, 194, 202, 193, 194, 203, 193, 194, 204, 193, 194, 205, 193, 194, 206, 193, 194, 207, 193, 194, 208, 193, 194, 4, 193, 194, 61, 193, 194, 211, 193, 194, 212, 193, 194, 213, 193, 194, 214, 193, 194, 215, 193, 194, 216, 193, 194, 209, 193, 194, 209, 193, 194, 219, 193, 194, 220, 193, 194, 61, 209, 193, 194, 222, 193, 194, 223, 193, 194, 224, 193, 194, 225, 193, 194, 226, 193, 194, 61, 193, 194, 228, 193, 194, 229, 193, 194, 230, 193, 194, 231, 193, 194, 232, 193, 194, 233, 193, 194, 234, 193, 194, 235, 193, 194, 236, 193, 194, 237, 193, 194, 238, 193, 194, 239, 193, 194, 240, 193, 194, 226, 193, 194, 242, 232, 193, 194, 216, 193, 194, 244, 193, 194, 245, 193, 194, 246, 193, 194, 226, 193, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 254, 253, 254, 253, 254, 254, 4, 255, 269, 4, 270, 277, 278, 281, 287, 301, 254, 253, 254, 256, 253, 254, 257, 253, 254, 258, 253, 254, 259, 253, 254, 260, 253, 254, 261, 253, 254, 262, 253, 254, 263, 253, 254, 264, 253, 254, 265, 253, 254, 266, 253, 254, 267, 253, 254, 268, 253, 254, 4, 253, 254, 61, 253, 254, 271, 253, 254, 272, 253, 254, 273, 253, 254, 274, 253, 254, 275, 253, 254, 276, 253, 254, 269, 253, 254, 269, 253, 254, 279, 253, 254, 280, 253, 254, 61, 269, 253, 254, 282, 253, 254, 283, 253, 254, 284, 253, 254, 285, 253, 254, 286, 253, 254, 61, 253, 254, 288, 253, 254, 289, 253, 254, 290, 253, 254, 291, 253, 254, 292, 253, 254, 293, 253, 254, 294, 253, 254, 295, 253, 254, 296, 253, 254, 297, 253, 254, 298, 253, 254, 299, 253, 254, 300, 253, 254, 286, 253, 254, 302, 292, 253, 254, 276, 253, 303, 304, 303, 0, 308, 307, 306, 304, 307, 305, 0, 306, 304, 305, 0, 306, 305, 308, 307, 306, 304, 307, 305, 308, 308, 5, 15, 17, 31, 34, 37, 44, 62, 65, 119, 180, 247, 303, 308, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 309; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/et.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 840 "ext/gherkin_lexer_et/gherkin_lexer_et.c" { cs = lexer_start; } #line 425 "ragel/i18n/et.c.rl" #line 847 "ext/gherkin_lexer_et/gherkin_lexer_et.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/et.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/et.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/et.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/et.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/et.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/et.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/et.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/et.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/et.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/et.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/et.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/et.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/et.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/et.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/et.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/et.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/et.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/et.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/et.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/et.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/et.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/et.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/et.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/et.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1137 "ext/gherkin_lexer_et/gherkin_lexer_et.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/et.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1200 "ext/gherkin_lexer_et/gherkin_lexer_et.c" } } } _out: {} } #line 426 "ragel/i18n/et.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_et() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Et", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_zh_tw/0000755000004100000410000000000012244512574020124 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_zh_tw/extconf.rb0000644000004100000410000000036412244512574022122 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_zh_tw") have_library("c", "main") create_makefile("gherkin_lexer_zh_tw") gherkin-2.12.2/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c0000644000004100000410000011110512244512574024330 0ustar www-datawww-data #line 1 "ragel/i18n/zh_tw.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/zh_tw.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 16, 19, 20, 21, 22, 23, 25, 27, 42, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 83, 86, 88, 90, 92, 94, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 134, 137, 139, 141, 143, 145, 147, 149, 151, 153, 158, 160, 163, 166, 168, 170, 172, 174, 177, 179, 181, 183, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 267, 268, 269, 270, 271, 272, 273, 275, 277, 282, 287, 292, 297, 301, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 328, 335, 340, 344, 350, 353, 355, 361, 376, 378, 380, 382, 384, 389, 391, 394, 397, 399, 401, 403, 405, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 485, 486, 499, 502, 504, 506, 508, 510, 512, 514, 516, 518, 523, 525, 528, 531, 533, 535, 537, 539, 542, 544, 546, 548, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 641, 642, 643, 644, 645, 646, 656, 658, 660, 662, 664, 666, 668, 671, 674, 676, 678, 680, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 770, 772, 774, 776, 778, 780, 782, 783, 784 }; static const char _lexer_trans_keys[] = { -28, -27, -25, -24, -23, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -72, -67, -66, -90, -28, -72, -108, 10, 13, 10, 13, -28, -27, -25, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -118, -112, -96, -121, -27, -24, -90, -82, -126, -102, -88, -83, -121, -97, -26, -100, -84, -27, 58, -92, -89, -25, -74, -79, 58, 10, 10, -28, -27, -25, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -72, -67, 10, -90, 10, -28, 10, -72, 10, -108, 10, -28, -27, -25, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -107, -74, -128, -125, -116, -116, -26, -103, -81, 58, 10, 10, -28, -27, -25, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -72, -67, 10, -90, 10, -28, 10, -72, 10, -108, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -118, -112, -96, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -88, 10, -83, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -74, 10, -79, 10, 10, 58, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -103, 10, -76, 10, -26, 10, -103, 10, -81, 10, -107, 10, -74, 10, -128, 10, -116, 10, -126, 10, -93, 10, -23, 10, -70, 10, -68, 10, 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, -126, -93, -23, -70, -68, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -28, -27, -25, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -122, 10, -26, 10, -104, 10, -81, 10, -127, -118, -112, -96, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -88, 10, -83, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, 10, 58, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -103, 10, -76, 10, -26, 10, -103, 10, -81, 10, -107, 10, -74, 10, -128, 10, -116, 10, -126, 10, -93, 10, -23, 10, -70, 10, -68, 10, 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, 10, -28, -27, -25, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -72, -67, 10, -90, 10, -28, 10, -72, 10, -108, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -118, -112, -96, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -88, 10, -83, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -74, 10, -79, 10, 10, 58, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -103, 10, -76, 10, -26, 10, -103, 10, -81, 10, -107, 10, -74, 10, -128, -125, 10, -116, 10, -116, 10, -26, 10, -103, 10, -81, 10, -126, 10, -93, 10, -23, 10, -70, 10, -68, 10, 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, -24, -125, -67, 58, 10, 10, -28, -27, -24, 10, 32, 35, 37, 64, 9, 13, -66, 10, -117, 10, -27, 10, -83, 10, -112, 10, 10, 58, -118, -96, 10, -121, -97, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -74, 10, -79, 10, -24, 10, -125, 10, -67, 10, -76, 10, -26, 10, -103, 10, -81, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -116, -26, -103, -76, -26, -103, -81, -122, -26, -104, -81, -117, -27, -83, -112, 58, 10, 10, -27, 10, 32, 35, 124, 9, 13, -118, 10, -97, 10, -24, 10, -125, 10, -67, 10, 10, 58, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 14, 3, 1, 1, 1, 1, 2, 2, 13, 4, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 3, 2, 2, 2, 2, 13, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 3, 3, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 13, 2, 2, 2, 2, 5, 2, 3, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 11, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 3, 3, 2, 2, 2, 2, 3, 2, 2, 2, 3, 2, 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, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 2, 2, 2, 3, 3, 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, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 16, 20, 22, 24, 26, 28, 31, 34, 49, 54, 56, 59, 62, 64, 66, 68, 70, 73, 75, 77, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 111, 115, 118, 121, 124, 127, 142, 144, 146, 149, 151, 153, 155, 157, 159, 161, 163, 165, 178, 182, 185, 188, 191, 194, 197, 200, 203, 206, 212, 215, 219, 223, 226, 229, 232, 235, 239, 242, 245, 248, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 374, 376, 378, 380, 382, 384, 386, 389, 392, 397, 402, 407, 412, 416, 420, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 460, 467, 472, 476, 482, 486, 489, 495, 510, 513, 516, 519, 522, 528, 531, 535, 539, 542, 545, 548, 551, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 671, 673, 686, 690, 693, 696, 699, 702, 705, 708, 711, 714, 720, 723, 727, 731, 734, 737, 740, 743, 747, 750, 753, 756, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 895, 897, 899, 901, 903, 905, 915, 918, 921, 924, 927, 930, 933, 937, 941, 944, 947, 950, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1110, 1112 }; static const short _lexer_trans_targs[] = { 2, 10, 38, 40, 112, 348, 9, 9, 117, 127, 129, 143, 144, 147, 9, 0, 3, 330, 334, 0, 4, 0, 5, 0, 6, 0, 7, 0, 9, 128, 8, 9, 128, 8, 2, 10, 38, 40, 112, 9, 9, 117, 127, 129, 143, 144, 147, 9, 0, 11, 18, 323, 326, 0, 12, 0, 13, 16, 0, 14, 15, 0, 7, 0, 7, 0, 17, 0, 7, 0, 19, 273, 0, 20, 0, 21, 0, 22, 0, 23, 204, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 31, 30, 31, 30, 32, 157, 180, 182, 184, 31, 31, 9, 189, 203, 9, 31, 30, 33, 153, 31, 30, 34, 31, 30, 35, 31, 30, 36, 31, 30, 37, 31, 30, 2, 10, 38, 40, 112, 9, 9, 117, 127, 129, 143, 144, 147, 9, 0, 39, 0, 7, 0, 41, 42, 0, 4, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 49, 48, 49, 48, 50, 59, 88, 90, 92, 49, 49, 9, 97, 111, 9, 49, 48, 51, 55, 49, 48, 52, 49, 48, 53, 49, 48, 54, 49, 48, 37, 49, 48, 56, 49, 48, 57, 49, 48, 58, 49, 48, 37, 49, 48, 60, 67, 81, 84, 49, 48, 61, 49, 48, 62, 65, 49, 48, 63, 64, 49, 48, 37, 49, 48, 37, 49, 48, 66, 49, 48, 37, 49, 48, 68, 78, 49, 48, 69, 49, 48, 70, 49, 48, 71, 49, 48, 72, 49, 37, 48, 73, 49, 48, 74, 49, 48, 75, 49, 48, 76, 49, 48, 77, 49, 48, 49, 37, 48, 79, 49, 48, 80, 49, 48, 77, 49, 48, 82, 49, 48, 83, 49, 48, 63, 49, 48, 85, 49, 48, 86, 49, 48, 87, 49, 48, 71, 49, 48, 89, 49, 48, 37, 49, 48, 91, 49, 48, 52, 49, 48, 93, 49, 48, 94, 49, 48, 95, 49, 48, 96, 49, 48, 37, 49, 48, 49, 98, 48, 49, 99, 48, 49, 100, 48, 49, 101, 48, 49, 102, 48, 49, 103, 48, 49, 104, 48, 49, 105, 48, 49, 106, 48, 49, 107, 48, 49, 108, 48, 49, 109, 48, 49, 110, 48, 49, 9, 48, 49, 37, 48, 113, 0, 114, 0, 115, 0, 116, 0, 7, 0, 118, 0, 119, 0, 121, 120, 120, 121, 120, 120, 122, 122, 123, 122, 122, 122, 122, 123, 122, 122, 122, 122, 124, 122, 122, 122, 122, 125, 122, 122, 9, 126, 126, 0, 9, 126, 126, 0, 9, 128, 127, 9, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 350, 0, 7, 0, 0, 0, 0, 0, 145, 146, 9, 146, 146, 144, 145, 145, 9, 146, 144, 146, 0, 147, 148, 147, 0, 152, 151, 150, 148, 151, 149, 0, 150, 148, 149, 0, 150, 149, 152, 151, 150, 148, 151, 149, 2, 10, 38, 40, 112, 152, 152, 117, 127, 129, 143, 144, 147, 152, 0, 154, 31, 30, 155, 31, 30, 156, 31, 30, 37, 31, 30, 158, 165, 173, 176, 31, 30, 159, 31, 30, 160, 163, 31, 30, 161, 162, 31, 30, 37, 31, 30, 37, 31, 30, 164, 31, 30, 37, 31, 30, 166, 170, 31, 30, 167, 31, 30, 168, 31, 30, 169, 31, 30, 31, 37, 30, 171, 31, 30, 172, 31, 30, 169, 31, 30, 174, 31, 30, 175, 31, 30, 161, 31, 30, 177, 31, 30, 178, 31, 30, 179, 31, 30, 169, 31, 30, 181, 31, 30, 37, 31, 30, 183, 31, 30, 34, 31, 30, 185, 31, 30, 186, 31, 30, 187, 31, 30, 188, 31, 30, 37, 31, 30, 31, 190, 30, 31, 191, 30, 31, 192, 30, 31, 193, 30, 31, 194, 30, 31, 195, 30, 31, 196, 30, 31, 197, 30, 31, 198, 30, 31, 199, 30, 31, 200, 30, 31, 201, 30, 31, 202, 30, 31, 9, 30, 31, 37, 30, 206, 205, 206, 205, 207, 216, 245, 247, 253, 206, 206, 9, 258, 272, 9, 206, 205, 208, 212, 206, 205, 209, 206, 205, 210, 206, 205, 211, 206, 205, 37, 206, 205, 213, 206, 205, 214, 206, 205, 215, 206, 205, 37, 206, 205, 217, 224, 238, 241, 206, 205, 218, 206, 205, 219, 222, 206, 205, 220, 221, 206, 205, 37, 206, 205, 37, 206, 205, 223, 206, 205, 37, 206, 205, 225, 235, 206, 205, 226, 206, 205, 227, 206, 205, 228, 206, 205, 229, 206, 37, 205, 230, 206, 205, 231, 206, 205, 232, 206, 205, 233, 206, 205, 234, 206, 205, 206, 37, 205, 236, 206, 205, 237, 206, 205, 234, 206, 205, 239, 206, 205, 240, 206, 205, 220, 206, 205, 242, 206, 205, 243, 206, 205, 244, 206, 205, 228, 206, 205, 246, 206, 205, 37, 206, 205, 248, 249, 206, 205, 209, 206, 205, 250, 206, 205, 251, 206, 205, 252, 206, 205, 234, 206, 205, 254, 206, 205, 255, 206, 205, 256, 206, 205, 257, 206, 205, 37, 206, 205, 206, 259, 205, 206, 260, 205, 206, 261, 205, 206, 262, 205, 206, 263, 205, 206, 264, 205, 206, 265, 205, 206, 266, 205, 206, 267, 205, 206, 268, 205, 206, 269, 205, 206, 270, 205, 206, 271, 205, 206, 9, 205, 206, 37, 205, 274, 0, 275, 0, 276, 0, 277, 0, 279, 278, 279, 278, 280, 286, 304, 279, 279, 9, 309, 9, 279, 278, 281, 279, 278, 282, 279, 278, 283, 279, 278, 284, 279, 278, 285, 279, 278, 279, 37, 278, 287, 300, 279, 278, 288, 297, 279, 278, 289, 279, 278, 290, 279, 278, 291, 279, 278, 292, 279, 37, 278, 293, 279, 278, 294, 279, 278, 295, 279, 278, 296, 279, 278, 285, 279, 278, 298, 279, 278, 299, 279, 278, 285, 279, 278, 301, 279, 278, 302, 279, 278, 303, 279, 278, 291, 279, 278, 305, 279, 278, 306, 279, 278, 307, 279, 278, 308, 279, 278, 285, 279, 278, 279, 310, 278, 279, 311, 278, 279, 312, 278, 279, 313, 278, 279, 314, 278, 279, 315, 278, 279, 316, 278, 279, 317, 278, 279, 318, 278, 279, 319, 278, 279, 320, 278, 279, 321, 278, 279, 322, 278, 279, 9, 278, 324, 0, 325, 0, 14, 0, 327, 0, 328, 0, 329, 0, 22, 0, 331, 0, 332, 0, 333, 0, 7, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 341, 340, 341, 340, 342, 341, 341, 9, 9, 341, 340, 343, 341, 340, 344, 341, 340, 345, 341, 340, 346, 341, 340, 347, 341, 340, 341, 37, 340, 349, 0, 9, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 29, 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 29, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 63, 63, 63, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 15, 54, 0, 15, 54, 0, 0, 54, 0, 15, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 96, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 19, 54, 0, 19, 54, 0, 0, 54, 0, 19, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 144, 57, 54, 0, 84, 84, 84, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 17, 54, 0, 17, 54, 0, 0, 54, 0, 17, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 350; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/zh_tw.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 911 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c" { cs = lexer_start; } #line 425 "ragel/i18n/zh_tw.c.rl" #line 918 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/zh_tw.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/zh_tw.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/zh_tw.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/zh_tw.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/zh_tw.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/zh_tw.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/zh_tw.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/zh_tw.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/zh_tw.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/zh_tw.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/zh_tw.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/zh_tw.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/zh_tw.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/zh_tw.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/zh_tw.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/zh_tw.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/zh_tw.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/zh_tw.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/zh_tw.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/zh_tw.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/zh_tw.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/zh_tw.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/zh_tw.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/zh_tw.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1208 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/zh_tw.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1271 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c" } } } _out: {} } #line 426 "ragel/i18n/zh_tw.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_zh_tw() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Zh_tw", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_pa/0000755000004100000410000000000012244512574017371 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_pa/extconf.rb0000644000004100000410000000035612244512574021370 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_pa") have_library("c", "main") create_makefile("gherkin_lexer_pa") gherkin-2.12.2/ext/gherkin_lexer_pa/gherkin_lexer_pa.c0000644000004100000410000020476212244512574023056 0ustar www-datawww-data #line 1 "ragel/i18n/pa.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/pa.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_pa/gherkin_lexer_pa.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 13, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 43, 44, 45, 47, 49, 54, 59, 64, 69, 73, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 99, 106, 111, 115, 121, 124, 126, 132, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 174, 176, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 335, 337, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 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, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 491, 493, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 641, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 715, 716, 717, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 743, 745, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 804, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1031, 1033, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1092, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1232, 1234, 1236, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1407, 1409, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1468, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1586, 1588, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604, 1607, 1609, 1611, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757 }; static const char _lexer_trans_keys[] = { -32, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -88, -123, -119, -106, -100, -92, -88, -86, -82, -32, -88, -92, -32, -87, -121, 32, 10, 13, 10, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, -88, -90, -32, -88, -66, -32, -88, -71, -32, -88, -80, -32, -88, -88, -32, -88, -66, -32, -88, -126, 58, 10, 10, -32, 10, 32, 35, 124, 9, 13, -88, 10, -106, -88, -82, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -66, 10, -32, -88, -66, -32, -88, -72, -32, -87, -128, -32, -88, -123, -32, -88, -92, 58, 10, 10, -32, 10, 32, 35, 37, 64, 9, 13, -88, 10, -119, -106, -88, -86, -82, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -88, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, 10, 58, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -65, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, 10, 32, 58, -32, 10, -88, 10, -94, -80, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -102, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -126, 10, -32, 10, -88, 10, -86, 10, 10, 32, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -106, 10, -32, 10, -88, 10, -101, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -107, 10, -32, 10, -87, 10, -100, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -88, -87, -90, -65, -32, -87, -117, -32, -88, -126, -32, -88, -75, -32, -87, -121, -32, -88, -126, 32, -32, -88, -107, -32, -88, -65, -121, -32, -88, -107, -32, -88, -80, -32, -88, -90, -32, -88, -107, -32, -88, -74, 32, -32, -88, -88, -32, -87, -127, -32, -88, -71, -32, -88, -66, -32, -88, -80, -32, -88, -97, -80, -65, -32, -88, -107, -32, -88, -91, -32, -88, -66, 32, 58, -32, -88, -94, -80, -32, -88, -66, -32, -88, -126, -32, -88, -102, -32, -88, -66, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -88, 10, -123, -106, -100, -92, -88, -86, -82, 10, -32, 10, -88, 10, -92, 10, -32, 10, -87, 10, -121, 10, 10, 32, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, -88, -87, 10, -90, -65, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -75, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -126, 10, 10, 32, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -65, 10, -121, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -80, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -87, -126, -32, -88, -86, 32, -32, -88, -80, -32, -87, -121, -32, -88, -106, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -88, 10, -123, -106, -100, -92, -88, -86, -82, 10, -32, 10, -88, 10, -92, 10, -32, 10, -87, 10, -121, 10, 10, 32, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, -88, -87, 10, -90, -65, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -75, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -126, 10, 10, 32, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -65, 10, -121, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -80, -65, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, 10, 32, 58, -32, 10, -88, 10, -94, -80, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -102, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -126, 10, -32, 10, -88, 10, -86, 10, 10, 32, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -106, 10, -32, 10, -88, 10, -101, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -107, 10, -32, 10, -87, 10, -100, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -88, -101, -32, -87, -117, -32, -88, -107, -32, -87, -100, 58, 10, 10, -32, 10, 32, 35, 37, 42, 64, 9, 13, -88, 10, -123, -106, -100, -92, -88, -86, -82, 10, -32, 10, -88, 10, -92, 10, -32, 10, -87, 10, -121, 10, 10, 32, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -72, 10, -32, 10, -87, 10, -128, 10, -32, 10, -88, 10, -123, 10, -32, 10, -88, 10, -92, 10, 10, 58, -32, 10, -88, -87, 10, -90, -65, 10, -32, 10, -87, 10, -117, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -75, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -126, 10, 10, 32, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -65, 10, -121, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -74, 10, 10, 32, -32, 10, -88, 10, -88, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -80, 10, -32, 10, -88, 10, -97, -80, 10, -32, 10, -88, 10, -107, 10, -32, 10, -88, 10, -91, 10, -32, 10, -88, 10, -66, 10, 10, 32, 58, -32, 10, -88, 10, -94, -80, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -102, 10, -32, 10, -88, 10, -66, 10, -32, 10, -87, 10, -126, 10, -32, 10, -88, 10, -86, 10, 10, 32, -32, 10, -88, 10, -80, 10, -32, 10, -87, 10, -121, 10, -32, 10, -88, 10, -106, 10, -32, 10, -87, 10, -127, 10, -32, 10, -88, 10, -71, 10, -32, 10, -88, 10, -66, 10, -32, 10, -88, 10, -126, 10, -32, 10, -88, 10, -90, 10, -32, 10, -88, 10, -80, 10, 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, -32, -87, -127, -32, -88, -71, -32, -88, -66, -32, -88, -126, -32, -88, -90, -32, -88, -80, -32, -88, -66, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 1, 8, 1, 1, 1, 1, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 6, 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, 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, 3, 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, 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, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 2, 8, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 14, 23, 25, 27, 29, 31, 33, 35, 37, 40, 43, 54, 56, 58, 61, 64, 69, 74, 79, 84, 88, 92, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 130, 137, 142, 146, 152, 156, 159, 165, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 231, 234, 239, 242, 245, 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, 278, 281, 284, 287, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 471, 474, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 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, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 699, 702, 705, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 927, 930, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1070, 1072, 1074, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1116, 1119, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1204, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1548, 1551, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1636, 1640, 1643, 1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 1805, 1808, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1844, 1847, 1850, 1854, 1857, 1860, 1863, 1866, 1869, 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, 1899, 1902, 1905, 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929, 1932, 1935, 1938, 1941, 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965, 1968, 1971, 1974, 1977, 1980, 1983, 1986, 1989, 1992, 1995, 1998, 2001, 2004, 2007, 2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2072, 2074, 2076, 2078, 2080, 2082, 2084, 2086, 2088, 2090, 2092, 2094, 2096, 2098, 2100, 2109, 2112, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2197, 2201, 2204, 2207, 2210, 2213, 2216, 2219, 2222, 2225, 2228, 2231, 2234, 2237, 2240, 2243, 2246, 2249, 2252, 2255, 2258, 2261, 2264, 2267, 2270, 2273, 2276, 2279, 2282, 2285, 2288, 2291, 2294, 2297, 2300, 2303, 2306, 2309, 2312, 2315, 2318, 2321, 2324, 2327, 2330, 2333, 2336, 2339, 2342, 2345, 2348, 2351, 2354, 2357, 2360, 2363, 2366, 2369, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2404, 2407, 2410, 2414, 2417, 2420, 2423, 2426, 2429, 2432, 2435, 2438, 2441, 2444, 2447, 2450, 2453, 2456, 2459, 2462, 2465, 2468, 2471, 2474, 2477, 2480, 2483, 2486, 2489, 2492, 2495, 2498, 2501, 2504, 2507, 2510, 2513, 2516, 2519, 2522, 2525, 2528, 2531, 2534, 2537, 2540, 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570, 2573, 2576, 2579, 2582, 2585, 2588, 2591, 2594, 2596, 2598, 2600, 2602, 2604, 2606, 2608, 2610, 2612, 2614, 2616, 2618, 2620, 2622, 2624, 2626, 2628, 2630, 2632, 2634, 2636, 2638, 2640 }; static const short _lexer_trans_targs[] = { 2, 903, 13, 13, 14, 24, 26, 10, 40, 43, 13, 0, 3, 0, 4, 49, 136, 304, 336, 339, 361, 882, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 13, 25, 12, 13, 25, 12, 2, 13, 13, 14, 24, 26, 10, 40, 43, 13, 0, 15, 0, 16, 0, 18, 17, 17, 18, 17, 17, 19, 19, 20, 19, 19, 19, 19, 20, 19, 19, 19, 19, 21, 19, 19, 19, 19, 22, 19, 19, 13, 23, 23, 0, 13, 23, 23, 0, 13, 25, 24, 13, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 905, 0, 0, 0, 0, 0, 41, 42, 13, 42, 42, 40, 41, 41, 13, 42, 40, 42, 0, 43, 44, 43, 0, 48, 47, 46, 44, 47, 45, 0, 46, 44, 45, 0, 46, 45, 48, 47, 46, 44, 47, 45, 2, 48, 48, 14, 24, 26, 10, 40, 43, 48, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 73, 72, 73, 72, 74, 73, 73, 13, 13, 73, 72, 75, 73, 72, 76, 93, 115, 73, 72, 77, 73, 72, 78, 73, 72, 79, 73, 72, 80, 73, 72, 81, 73, 72, 82, 73, 72, 83, 73, 72, 84, 73, 72, 85, 73, 72, 86, 73, 72, 87, 73, 72, 88, 73, 72, 89, 73, 72, 90, 73, 72, 91, 73, 72, 73, 92, 72, 2, 13, 13, 14, 24, 26, 10, 40, 43, 13, 0, 94, 73, 72, 95, 73, 72, 96, 73, 72, 97, 73, 72, 98, 73, 72, 99, 73, 72, 73, 100, 72, 101, 73, 72, 102, 73, 72, 103, 73, 72, 104, 73, 72, 105, 73, 72, 106, 73, 72, 107, 73, 72, 108, 73, 72, 109, 73, 72, 110, 73, 72, 111, 73, 72, 112, 73, 72, 113, 73, 72, 114, 73, 72, 91, 73, 72, 116, 73, 72, 117, 73, 72, 118, 73, 72, 119, 73, 72, 120, 73, 72, 121, 73, 72, 122, 73, 72, 123, 73, 72, 124, 73, 72, 125, 73, 72, 126, 73, 72, 127, 73, 72, 128, 73, 72, 129, 73, 72, 130, 73, 72, 131, 73, 72, 132, 73, 72, 133, 73, 72, 134, 73, 72, 135, 73, 72, 91, 73, 72, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 154, 153, 154, 153, 155, 154, 154, 13, 290, 13, 154, 153, 156, 154, 153, 157, 179, 194, 216, 272, 154, 153, 158, 154, 153, 159, 154, 153, 160, 154, 153, 161, 154, 153, 162, 154, 153, 163, 154, 153, 164, 154, 153, 165, 154, 153, 166, 154, 153, 167, 154, 153, 168, 154, 153, 169, 154, 153, 170, 154, 153, 171, 154, 153, 172, 154, 153, 173, 154, 153, 174, 154, 153, 175, 154, 153, 176, 154, 153, 177, 154, 153, 178, 154, 153, 154, 92, 153, 180, 154, 153, 181, 154, 153, 182, 154, 153, 183, 154, 153, 184, 154, 153, 185, 154, 153, 186, 154, 153, 187, 154, 153, 188, 154, 153, 189, 154, 153, 190, 154, 153, 191, 154, 153, 192, 154, 153, 193, 154, 153, 178, 154, 153, 195, 154, 153, 196, 154, 153, 197, 154, 153, 198, 154, 153, 199, 154, 153, 200, 154, 153, 154, 201, 153, 202, 154, 153, 203, 154, 153, 204, 154, 153, 205, 154, 153, 206, 154, 153, 207, 154, 153, 208, 154, 153, 209, 154, 153, 210, 154, 153, 211, 154, 153, 212, 154, 153, 213, 154, 153, 214, 154, 153, 215, 154, 153, 178, 154, 153, 217, 154, 153, 218, 154, 153, 219, 260, 154, 153, 220, 154, 153, 221, 154, 153, 222, 154, 153, 223, 154, 153, 224, 154, 153, 225, 154, 153, 226, 154, 153, 227, 154, 153, 228, 154, 153, 154, 229, 92, 153, 230, 154, 153, 231, 154, 153, 232, 244, 154, 153, 233, 154, 153, 234, 154, 153, 235, 154, 153, 236, 154, 153, 237, 154, 153, 238, 154, 153, 239, 154, 153, 240, 154, 153, 241, 154, 153, 242, 154, 153, 243, 154, 153, 178, 154, 153, 245, 154, 153, 246, 154, 153, 247, 154, 153, 248, 154, 153, 249, 154, 153, 250, 154, 153, 154, 251, 153, 252, 154, 153, 253, 154, 153, 254, 154, 153, 255, 154, 153, 256, 154, 153, 257, 154, 153, 258, 154, 153, 259, 154, 153, 241, 154, 153, 261, 154, 153, 262, 154, 153, 263, 154, 153, 264, 154, 153, 265, 154, 153, 266, 154, 153, 267, 154, 153, 268, 154, 153, 269, 154, 153, 270, 154, 153, 271, 154, 153, 178, 154, 153, 273, 154, 153, 274, 154, 153, 275, 154, 153, 276, 154, 153, 277, 154, 153, 278, 154, 153, 279, 154, 153, 280, 154, 153, 281, 154, 153, 282, 154, 153, 283, 154, 153, 284, 154, 153, 285, 154, 153, 286, 154, 153, 287, 154, 153, 288, 154, 153, 289, 154, 153, 241, 154, 153, 154, 291, 153, 154, 292, 153, 154, 293, 153, 154, 294, 153, 154, 295, 153, 154, 296, 153, 154, 297, 153, 154, 298, 153, 154, 299, 153, 154, 300, 153, 154, 301, 153, 154, 302, 153, 154, 303, 153, 154, 13, 153, 305, 0, 306, 329, 0, 307, 313, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 10, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 10, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 10, 0, 337, 0, 338, 0, 10, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 151, 0, 362, 0, 363, 0, 364, 10, 708, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 535, 0, 375, 0, 376, 0, 377, 519, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 392, 391, 392, 391, 393, 392, 392, 13, 505, 401, 13, 392, 391, 394, 392, 391, 395, 402, 418, 450, 453, 475, 487, 392, 391, 396, 392, 391, 397, 392, 391, 398, 392, 391, 399, 392, 391, 400, 392, 391, 401, 392, 391, 392, 92, 391, 403, 392, 391, 404, 392, 391, 405, 392, 391, 406, 392, 391, 407, 392, 391, 408, 392, 391, 409, 392, 391, 410, 392, 391, 411, 392, 391, 412, 392, 391, 413, 392, 391, 414, 392, 391, 415, 392, 391, 416, 392, 391, 417, 392, 391, 392, 92, 391, 419, 392, 391, 420, 443, 392, 391, 421, 427, 392, 391, 422, 392, 391, 423, 392, 391, 424, 392, 391, 425, 392, 391, 426, 392, 391, 401, 392, 391, 428, 392, 391, 429, 392, 391, 430, 392, 391, 431, 392, 391, 432, 392, 391, 433, 392, 391, 434, 392, 391, 435, 392, 391, 436, 392, 391, 392, 437, 391, 438, 392, 391, 439, 392, 391, 440, 392, 391, 441, 392, 391, 442, 392, 391, 401, 392, 391, 444, 392, 391, 445, 392, 391, 446, 392, 391, 447, 392, 391, 448, 392, 391, 449, 392, 391, 401, 392, 391, 451, 392, 391, 452, 392, 391, 401, 392, 391, 454, 392, 391, 455, 392, 391, 456, 392, 391, 457, 392, 391, 458, 392, 391, 459, 392, 391, 392, 460, 391, 461, 392, 391, 462, 392, 391, 463, 392, 391, 464, 392, 391, 465, 392, 391, 466, 392, 391, 467, 392, 391, 468, 392, 391, 469, 392, 391, 470, 392, 391, 471, 392, 391, 472, 392, 391, 473, 392, 391, 474, 392, 391, 417, 392, 391, 476, 392, 391, 477, 392, 391, 478, 401, 392, 391, 479, 392, 391, 480, 392, 391, 481, 392, 391, 482, 392, 391, 483, 392, 391, 484, 392, 391, 485, 392, 391, 486, 392, 391, 417, 392, 391, 488, 392, 391, 489, 392, 391, 490, 392, 391, 491, 392, 391, 492, 392, 391, 493, 392, 391, 494, 392, 391, 495, 392, 391, 496, 392, 391, 497, 392, 391, 498, 392, 391, 499, 392, 391, 500, 392, 391, 501, 392, 391, 502, 392, 391, 503, 392, 391, 504, 392, 391, 484, 392, 391, 392, 506, 391, 392, 507, 391, 392, 508, 391, 392, 509, 391, 392, 510, 391, 392, 511, 391, 392, 512, 391, 392, 513, 391, 392, 514, 391, 392, 515, 391, 392, 516, 391, 392, 517, 391, 392, 518, 391, 392, 13, 391, 520, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 386, 0, 537, 536, 537, 536, 538, 537, 537, 13, 694, 546, 13, 537, 536, 539, 537, 536, 540, 547, 563, 595, 598, 620, 676, 537, 536, 541, 537, 536, 542, 537, 536, 543, 537, 536, 544, 537, 536, 545, 537, 536, 546, 537, 536, 537, 92, 536, 548, 537, 536, 549, 537, 536, 550, 537, 536, 551, 537, 536, 552, 537, 536, 553, 537, 536, 554, 537, 536, 555, 537, 536, 556, 537, 536, 557, 537, 536, 558, 537, 536, 559, 537, 536, 560, 537, 536, 561, 537, 536, 562, 537, 536, 537, 92, 536, 564, 537, 536, 565, 588, 537, 536, 566, 572, 537, 536, 567, 537, 536, 568, 537, 536, 569, 537, 536, 570, 537, 536, 571, 537, 536, 546, 537, 536, 573, 537, 536, 574, 537, 536, 575, 537, 536, 576, 537, 536, 577, 537, 536, 578, 537, 536, 579, 537, 536, 580, 537, 536, 581, 537, 536, 537, 582, 536, 583, 537, 536, 584, 537, 536, 585, 537, 536, 586, 537, 536, 587, 537, 536, 546, 537, 536, 589, 537, 536, 590, 537, 536, 591, 537, 536, 592, 537, 536, 593, 537, 536, 594, 537, 536, 546, 537, 536, 596, 537, 536, 597, 537, 536, 546, 537, 536, 599, 537, 536, 600, 537, 536, 601, 537, 536, 602, 537, 536, 603, 537, 536, 604, 537, 536, 537, 605, 536, 606, 537, 536, 607, 537, 536, 608, 537, 536, 609, 537, 536, 610, 537, 536, 611, 537, 536, 612, 537, 536, 613, 537, 536, 614, 537, 536, 615, 537, 536, 616, 537, 536, 617, 537, 536, 618, 537, 536, 619, 537, 536, 562, 537, 536, 621, 537, 536, 622, 537, 536, 623, 546, 664, 537, 536, 624, 537, 536, 625, 537, 536, 626, 537, 536, 627, 537, 536, 628, 537, 536, 629, 537, 536, 630, 537, 536, 631, 537, 536, 632, 537, 536, 537, 633, 92, 536, 634, 537, 536, 635, 537, 536, 636, 648, 537, 536, 637, 537, 536, 638, 537, 536, 639, 537, 536, 640, 537, 536, 641, 537, 536, 642, 537, 536, 643, 537, 536, 644, 537, 536, 645, 537, 536, 646, 537, 536, 647, 537, 536, 562, 537, 536, 649, 537, 536, 650, 537, 536, 651, 537, 536, 652, 537, 536, 653, 537, 536, 654, 537, 536, 537, 655, 536, 656, 537, 536, 657, 537, 536, 658, 537, 536, 659, 537, 536, 660, 537, 536, 661, 537, 536, 662, 537, 536, 663, 537, 536, 645, 537, 536, 665, 537, 536, 666, 537, 536, 667, 537, 536, 668, 537, 536, 669, 537, 536, 670, 537, 536, 671, 537, 536, 672, 537, 536, 673, 537, 536, 674, 537, 536, 675, 537, 536, 562, 537, 536, 677, 537, 536, 678, 537, 536, 679, 537, 536, 680, 537, 536, 681, 537, 536, 682, 537, 536, 683, 537, 536, 684, 537, 536, 685, 537, 536, 686, 537, 536, 687, 537, 536, 688, 537, 536, 689, 537, 536, 690, 537, 536, 691, 537, 536, 692, 537, 536, 693, 537, 536, 645, 537, 536, 537, 695, 536, 537, 696, 536, 537, 697, 536, 537, 698, 536, 537, 699, 536, 537, 700, 536, 537, 701, 536, 537, 702, 536, 537, 703, 536, 537, 704, 536, 537, 705, 536, 537, 706, 536, 537, 707, 536, 537, 13, 536, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 721, 0, 723, 722, 723, 722, 724, 723, 723, 13, 868, 732, 13, 723, 722, 725, 723, 722, 726, 733, 749, 781, 784, 806, 850, 723, 722, 727, 723, 722, 728, 723, 722, 729, 723, 722, 730, 723, 722, 731, 723, 722, 732, 723, 722, 723, 92, 722, 734, 723, 722, 735, 723, 722, 736, 723, 722, 737, 723, 722, 738, 723, 722, 739, 723, 722, 740, 723, 722, 741, 723, 722, 742, 723, 722, 743, 723, 722, 744, 723, 722, 745, 723, 722, 746, 723, 722, 747, 723, 722, 748, 723, 722, 723, 92, 722, 750, 723, 722, 751, 774, 723, 722, 752, 758, 723, 722, 753, 723, 722, 754, 723, 722, 755, 723, 722, 756, 723, 722, 757, 723, 722, 732, 723, 722, 759, 723, 722, 760, 723, 722, 761, 723, 722, 762, 723, 722, 763, 723, 722, 764, 723, 722, 765, 723, 722, 766, 723, 722, 767, 723, 722, 723, 768, 722, 769, 723, 722, 770, 723, 722, 771, 723, 722, 772, 723, 722, 773, 723, 722, 732, 723, 722, 775, 723, 722, 776, 723, 722, 777, 723, 722, 778, 723, 722, 779, 723, 722, 780, 723, 722, 732, 723, 722, 782, 723, 722, 783, 723, 722, 732, 723, 722, 785, 723, 722, 786, 723, 722, 787, 723, 722, 788, 723, 722, 789, 723, 722, 790, 723, 722, 723, 791, 722, 792, 723, 722, 793, 723, 722, 794, 723, 722, 795, 723, 722, 796, 723, 722, 797, 723, 722, 798, 723, 722, 799, 723, 722, 800, 723, 722, 801, 723, 722, 802, 723, 722, 803, 723, 722, 804, 723, 722, 805, 723, 722, 748, 723, 722, 807, 723, 722, 808, 723, 722, 809, 732, 723, 722, 810, 723, 722, 811, 723, 722, 812, 723, 722, 813, 723, 722, 814, 723, 722, 815, 723, 722, 816, 723, 722, 817, 723, 722, 818, 723, 722, 723, 819, 92, 722, 820, 723, 722, 821, 723, 722, 822, 834, 723, 722, 823, 723, 722, 824, 723, 722, 825, 723, 722, 826, 723, 722, 827, 723, 722, 828, 723, 722, 829, 723, 722, 830, 723, 722, 831, 723, 722, 832, 723, 722, 833, 723, 722, 748, 723, 722, 835, 723, 722, 836, 723, 722, 837, 723, 722, 838, 723, 722, 839, 723, 722, 840, 723, 722, 723, 841, 722, 842, 723, 722, 843, 723, 722, 844, 723, 722, 845, 723, 722, 846, 723, 722, 847, 723, 722, 848, 723, 722, 849, 723, 722, 831, 723, 722, 851, 723, 722, 852, 723, 722, 853, 723, 722, 854, 723, 722, 855, 723, 722, 856, 723, 722, 857, 723, 722, 858, 723, 722, 859, 723, 722, 860, 723, 722, 861, 723, 722, 862, 723, 722, 863, 723, 722, 864, 723, 722, 865, 723, 722, 866, 723, 722, 867, 723, 722, 831, 723, 722, 723, 869, 722, 723, 870, 722, 723, 871, 722, 723, 872, 722, 723, 873, 722, 723, 874, 722, 723, 875, 722, 723, 876, 722, 723, 877, 722, 723, 878, 722, 723, 879, 722, 723, 880, 722, 723, 881, 722, 723, 13, 722, 883, 0, 884, 0, 885, 0, 886, 0, 887, 0, 888, 0, 889, 0, 890, 0, 891, 0, 892, 0, 893, 0, 894, 0, 895, 0, 896, 0, 897, 0, 898, 0, 899, 0, 900, 0, 901, 0, 902, 0, 151, 0, 904, 0, 13, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 13, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 17, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 15, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 905; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/pa.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1764 "ext/gherkin_lexer_pa/gherkin_lexer_pa.c" { cs = lexer_start; } #line 425 "ragel/i18n/pa.c.rl" #line 1771 "ext/gherkin_lexer_pa/gherkin_lexer_pa.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/pa.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/pa.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/pa.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/pa.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/pa.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/pa.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/pa.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/pa.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/pa.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/pa.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/pa.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/pa.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/pa.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/pa.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/pa.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/pa.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/pa.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/pa.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/pa.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/pa.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/pa.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/pa.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/pa.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/pa.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2061 "ext/gherkin_lexer_pa/gherkin_lexer_pa.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/pa.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 2124 "ext/gherkin_lexer_pa/gherkin_lexer_pa.c" } } } _out: {} } #line 426 "ragel/i18n/pa.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_pa() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Pa", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_fr/0000755000004100000410000000000012244512574017400 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_fr/extconf.rb0000644000004100000410000000035612244512574021377 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_fr") have_library("c", "main") create_makefile("gherkin_lexer_fr") gherkin-2.12.2/ext/gherkin_lexer_fr/gherkin_lexer_fr.c0000644000004100000410000012525312244512574023071 0ustar www-datawww-data #line 1 "ragel/i18n/fr.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/fr.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 38, 40, 60, 61, 62, 64, 66, 71, 76, 81, 86, 90, 94, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 117, 124, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 188, 208, 210, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 390, 392, 394, 396, 398, 400, 402, 404, 406, 407, 408, 409, 410, 411, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 479, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 568, 570, 572, 574, 576, 578, 580, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 602, 603, 604, 605, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 663, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 814, 816, 818, 819, 820, 824, 830, 833, 835, 841, 861, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 907, 909, 911, 913, 915, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 991, 993, 995, 998, 1000, 1002, 1004, 1005, 1006 }; static const char _lexer_trans_keys[] = { -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, -119, 116, 97, 110, 116, 32, 100, 111, 110, 110, -61, -87, 32, 101, 115, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 111, 114, 115, 111, 110, 116, 101, 120, 116, 101, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 70, 76, 77, 80, 81, 83, 9, 13, -119, 10, 10, 116, 10, 97, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 110, 10, 110, -61, 10, -87, 10, 10, 32, 101, 115, -61, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, 116, 120, 32, 97, 101, 109, 112, 108, 101, 115, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 58, 111, 110, 99, 116, 105, 111, 110, 110, 97, 108, 105, 116, -61, -87, 58, 10, 10, 10, 32, 35, 37, 64, 67, 69, 70, 80, 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, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 101, 10, 58, 10, 120, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 115, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 108, 10, 97, 10, 110, 10, 32, 10, 100, 10, 117, 10, 32, 10, 83, 115, 10, 99, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 111, 114, 115, 113, 117, 39, 101, 97, 105, 108, 97, 110, 32, 100, 117, 32, 83, 115, 99, -61, -87, 110, 97, 114, 105, 111, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 70, 76, 77, 81, 83, 9, 13, -119, 10, 10, 116, 10, 97, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 110, 10, 110, -61, 10, -87, 10, 10, 32, 101, 115, 10, 32, 115, 10, 32, 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, 108, 10, 111, 10, 114, 10, 115, 10, 116, 10, 32, 97, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 58, 10, 111, 10, 114, 10, 115, 10, 113, 10, 117, 10, 39, 101, 10, 97, 10, 105, 10, 117, 10, 97, 10, 110, 10, 100, 10, 99, 111, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 105, 10, 116, 117, 97, 110, 100, 99, 111, -61, -87, 110, 97, 114, 105, 111, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 9, 13, -119, 10, 10, 116, 10, 97, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 110, 10, 110, -61, 10, -87, 10, 10, 32, 101, 115, 10, 32, 115, 10, 32, 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, 108, 10, 111, 10, 114, 10, 115, 10, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 101, 10, 58, 10, 116, 10, 32, 97, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 111, 10, 114, 10, 115, 10, 113, 10, 117, 10, 39, 101, 10, 97, 10, 105, 10, 108, 10, 97, 10, 110, 10, 32, 10, 100, 10, 117, 10, 32, 10, 83, 115, 10, 99, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 97, 10, 110, 10, 100, 10, 99, 111, 10, 105, 10, 116, 105, 116, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 67, 69, 70, 76, 77, 80, 81, 83, 124, 9, 13, 10, 32, 115, 10, 32, 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, 108, 10, 111, 10, 114, 10, 115, 10, 116, 10, 32, 97, 10, 111, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -87, 10, 10, 58, 10, 111, 10, 114, 10, 115, 10, 113, 10, 117, 10, 39, 101, 10, 97, 10, 105, 10, 108, 10, 97, 10, 110, 10, 32, 10, 100, 10, 117, 10, 32, 10, 83, 115, 10, 99, -61, 10, -87, 10, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 117, 10, 97, 10, 110, 10, 100, 10, 99, 111, 10, 105, 10, 116, 32, 115, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 19, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2, 18, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 18, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 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, 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, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 2, 4, 3, 2, 4, 18, 3, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 49, 52, 55, 75, 77, 79, 82, 85, 90, 95, 100, 105, 109, 113, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 153, 160, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 251, 271, 274, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 547, 550, 553, 556, 559, 562, 565, 568, 571, 573, 575, 577, 579, 581, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 684, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 816, 819, 822, 825, 828, 831, 834, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 867, 869, 871, 873, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 955, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1179, 1182, 1185, 1187, 1189, 1193, 1199, 1203, 1206, 1212, 1232, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1435, 1438, 1441, 1444, 1446, 1448 }; static const short _lexer_trans_targs[] = { 2, 462, 17, 17, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 17, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 461, 44, 0, 17, 29, 16, 17, 29, 16, 2, 17, 17, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 17, 0, 19, 0, 20, 0, 22, 21, 21, 22, 21, 21, 23, 23, 24, 23, 23, 23, 23, 24, 23, 23, 23, 23, 25, 23, 23, 23, 23, 26, 23, 23, 17, 27, 27, 0, 17, 27, 27, 0, 17, 29, 28, 17, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 464, 0, 15, 0, 0, 0, 0, 0, 46, 47, 17, 47, 47, 45, 46, 46, 17, 47, 45, 47, 0, 49, 0, 50, 0, 51, 0, 44, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 62, 61, 62, 61, 63, 62, 62, 17, 395, 394, 17, 409, 413, 415, 430, 436, 438, 454, 458, 62, 61, 64, 62, 61, 62, 65, 61, 62, 66, 61, 62, 67, 61, 62, 68, 61, 62, 69, 61, 62, 70, 61, 62, 71, 61, 62, 72, 61, 62, 73, 61, 74, 62, 61, 75, 62, 61, 62, 76, 393, 394, 61, 2, 17, 17, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 17, 0, 78, 79, 0, 15, 5, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 88, 87, 88, 87, 88, 88, 17, 89, 17, 88, 87, 88, 90, 87, 88, 91, 87, 88, 92, 87, 88, 93, 87, 88, 94, 87, 88, 95, 87, 88, 96, 87, 88, 97, 87, 88, 98, 87, 88, 99, 87, 88, 100, 87, 88, 101, 87, 102, 88, 87, 103, 88, 87, 88, 76, 87, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 121, 120, 121, 120, 121, 121, 17, 122, 17, 136, 144, 151, 165, 173, 121, 120, 121, 123, 120, 121, 124, 120, 121, 125, 120, 121, 126, 120, 121, 127, 120, 121, 128, 120, 121, 129, 120, 121, 130, 120, 121, 131, 120, 121, 132, 120, 121, 133, 120, 121, 134, 120, 121, 135, 120, 121, 17, 120, 121, 137, 120, 121, 138, 120, 121, 139, 120, 121, 140, 120, 121, 141, 120, 121, 142, 120, 121, 143, 120, 121, 76, 120, 121, 145, 120, 121, 146, 120, 121, 147, 120, 121, 148, 120, 121, 149, 120, 121, 150, 120, 121, 143, 120, 121, 152, 120, 121, 153, 120, 121, 154, 120, 121, 155, 120, 121, 156, 120, 121, 157, 120, 121, 158, 120, 121, 159, 120, 121, 160, 120, 121, 161, 120, 121, 162, 120, 121, 163, 120, 164, 121, 120, 143, 121, 120, 121, 166, 120, 121, 167, 120, 121, 168, 120, 121, 169, 120, 121, 170, 120, 121, 171, 120, 121, 172, 120, 121, 173, 173, 120, 121, 174, 120, 175, 121, 120, 176, 121, 120, 121, 177, 120, 121, 178, 120, 121, 179, 120, 121, 180, 120, 121, 143, 120, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 15, 44, 0, 188, 0, 51, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 208, 207, 208, 207, 209, 208, 208, 17, 224, 223, 17, 238, 242, 244, 259, 265, 267, 271, 208, 207, 210, 208, 207, 208, 211, 207, 208, 212, 207, 208, 213, 207, 208, 214, 207, 208, 215, 207, 208, 216, 207, 208, 217, 207, 208, 218, 207, 208, 219, 207, 220, 208, 207, 221, 208, 207, 208, 76, 222, 223, 207, 208, 76, 223, 207, 208, 76, 207, 208, 225, 207, 208, 226, 207, 208, 227, 207, 208, 228, 207, 208, 229, 207, 208, 230, 207, 208, 231, 207, 208, 232, 207, 208, 233, 207, 208, 234, 207, 208, 235, 207, 208, 236, 207, 208, 237, 207, 208, 17, 207, 208, 239, 207, 208, 240, 207, 208, 241, 207, 208, 223, 207, 208, 243, 207, 208, 76, 212, 207, 208, 245, 207, 208, 246, 207, 208, 247, 207, 208, 248, 207, 208, 249, 207, 208, 250, 207, 208, 251, 207, 208, 252, 207, 208, 253, 207, 208, 254, 207, 208, 255, 207, 208, 256, 207, 257, 208, 207, 258, 208, 207, 208, 76, 207, 208, 260, 207, 208, 261, 207, 208, 262, 207, 208, 263, 207, 208, 264, 207, 208, 76, 223, 207, 208, 266, 207, 208, 241, 207, 208, 268, 207, 208, 269, 207, 208, 270, 207, 208, 223, 207, 208, 272, 279, 207, 273, 208, 207, 274, 208, 207, 208, 275, 207, 208, 276, 207, 208, 277, 207, 208, 278, 207, 208, 258, 207, 208, 280, 207, 208, 223, 207, 282, 0, 283, 0, 284, 0, 44, 0, 286, 385, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 296, 295, 296, 295, 297, 296, 296, 17, 312, 311, 17, 326, 330, 338, 340, 354, 360, 362, 378, 382, 296, 295, 298, 296, 295, 296, 299, 295, 296, 300, 295, 296, 301, 295, 296, 302, 295, 296, 303, 295, 296, 304, 295, 296, 305, 295, 296, 306, 295, 296, 307, 295, 308, 296, 295, 309, 296, 295, 296, 76, 310, 311, 295, 296, 76, 311, 295, 296, 76, 295, 296, 313, 295, 296, 314, 295, 296, 315, 295, 296, 316, 295, 296, 317, 295, 296, 318, 295, 296, 319, 295, 296, 320, 295, 296, 321, 295, 296, 322, 295, 296, 323, 295, 296, 324, 295, 296, 325, 295, 296, 17, 295, 296, 327, 295, 296, 328, 295, 296, 329, 295, 296, 311, 295, 296, 331, 295, 296, 332, 295, 296, 333, 295, 296, 334, 295, 296, 335, 295, 296, 336, 295, 296, 337, 295, 296, 76, 295, 296, 339, 295, 296, 76, 300, 295, 296, 341, 295, 296, 342, 295, 296, 343, 295, 296, 344, 295, 296, 345, 295, 296, 346, 295, 296, 347, 295, 296, 348, 295, 296, 349, 295, 296, 350, 295, 296, 351, 295, 296, 352, 295, 353, 296, 295, 337, 296, 295, 296, 355, 295, 296, 356, 295, 296, 357, 295, 296, 358, 295, 296, 359, 295, 296, 76, 311, 295, 296, 361, 295, 296, 329, 295, 296, 363, 295, 296, 364, 295, 296, 365, 295, 296, 366, 295, 296, 367, 295, 296, 368, 295, 296, 369, 295, 296, 370, 370, 295, 296, 371, 295, 372, 296, 295, 373, 296, 295, 296, 374, 295, 296, 375, 295, 296, 376, 295, 296, 377, 295, 296, 337, 295, 296, 379, 295, 296, 380, 295, 296, 381, 295, 296, 311, 295, 296, 371, 383, 295, 296, 384, 295, 296, 311, 295, 386, 0, 44, 0, 387, 388, 387, 0, 392, 391, 390, 388, 391, 389, 0, 390, 388, 389, 0, 390, 389, 392, 391, 390, 388, 391, 389, 2, 392, 392, 18, 28, 30, 44, 45, 48, 52, 77, 104, 181, 187, 189, 281, 285, 387, 392, 0, 62, 76, 394, 61, 62, 76, 61, 62, 396, 61, 62, 397, 61, 62, 398, 61, 62, 399, 61, 62, 400, 61, 62, 401, 61, 62, 402, 61, 62, 403, 61, 62, 404, 61, 62, 405, 61, 62, 406, 61, 62, 407, 61, 62, 408, 61, 62, 17, 61, 62, 410, 61, 62, 411, 61, 62, 412, 61, 62, 394, 61, 62, 414, 61, 62, 76, 66, 61, 62, 416, 61, 62, 417, 61, 62, 418, 61, 62, 419, 61, 62, 420, 61, 62, 421, 61, 62, 422, 61, 62, 423, 61, 62, 424, 61, 62, 425, 61, 62, 426, 61, 62, 427, 61, 428, 62, 61, 429, 62, 61, 62, 76, 61, 62, 431, 61, 62, 432, 61, 62, 433, 61, 62, 434, 61, 62, 435, 61, 62, 76, 394, 61, 62, 437, 61, 62, 412, 61, 62, 439, 61, 62, 440, 61, 62, 441, 61, 62, 442, 61, 62, 443, 61, 62, 444, 61, 62, 445, 61, 62, 446, 446, 61, 62, 447, 61, 448, 62, 61, 449, 62, 61, 62, 450, 61, 62, 451, 61, 62, 452, 61, 62, 453, 61, 62, 429, 61, 62, 455, 61, 62, 456, 61, 62, 457, 61, 62, 394, 61, 62, 447, 459, 61, 62, 460, 61, 62, 394, 61, 15, 44, 0, 463, 0, 17, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 0, 63, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 0, 54, 19, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 0, 54, 17, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 15, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 464; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/fr.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1097 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c" { cs = lexer_start; } #line 425 "ragel/i18n/fr.c.rl" #line 1104 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/fr.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/fr.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/fr.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/fr.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/fr.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/fr.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/fr.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/fr.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/fr.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/fr.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/fr.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/fr.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/fr.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/fr.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/fr.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/fr.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/fr.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/fr.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/fr.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/fr.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/fr.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/fr.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/fr.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/fr.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1394 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/fr.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1457 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c" } } } _out: {} } #line 426 "ragel/i18n/fr.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_fr() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Fr", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_zh_cn/0000755000004100000410000000000012244512574020072 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_zh_cn/extconf.rb0000644000004100000410000000036412244512574022070 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_zh_cn") have_library("c", "main") create_makefile("gherkin_lexer_zh_cn") gherkin-2.12.2/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c0000644000004100000410000011146312244512574024253 0ustar www-datawww-data #line 1 "ragel/i18n/zh_cn.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/zh_cn.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 15, 17, 18, 19, 20, 21, 23, 25, 39, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 81, 83, 85, 87, 89, 91, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 130, 132, 134, 136, 138, 140, 148, 150, 153, 156, 158, 160, 162, 164, 166, 168, 170, 172, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 266, 267, 268, 269, 270, 271, 272, 274, 276, 281, 286, 291, 296, 300, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 327, 334, 339, 343, 349, 352, 354, 360, 374, 382, 384, 387, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 487, 488, 500, 502, 504, 506, 508, 510, 518, 520, 523, 526, 528, 530, 532, 534, 536, 538, 540, 542, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 645, 646, 647, 648, 649, 650, 651, 661, 663, 665, 667, 669, 671, 673, 677, 679, 681, 683, 685, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 776, 778, 780, 782, 784, 786, 788, 789, 790 }; static const char _lexer_trans_keys[] = { -28, -27, -24, -23, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -67, -66, -122, -26, -104, -81, 10, 13, 10, 13, -28, -27, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -119, -118, -112, -100, -71, -67, -121, -27, -24, -90, -82, -126, -102, -82, -66, -89, -26, -100, -84, -27, 58, -92, -89, -25, -70, -78, 58, 10, 10, -28, -27, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -67, 10, -122, 10, -26, 10, -104, 10, -81, 10, -28, -27, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -128, -125, -116, -28, -72, -108, -116, -26, -103, -81, 58, 10, 10, -28, -27, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -67, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -119, -118, -112, -100, -71, -67, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -82, 10, -66, 10, -89, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -70, 10, -78, 10, 10, 58, -97, 10, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -105, 10, -74, 10, -70, 10, -26, 10, -103, 10, -81, 10, -74, 10, -28, 10, -72, 10, -108, 10, -109, 10, -128, 10, -116, 10, -126, 10, -93, 10, -28, 10, -71, 10, -120, 10, 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, -126, -93, -28, -71, -120, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -28, -27, -24, -23, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -127, -119, -118, -112, -100, -71, -67, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -82, 10, -66, 10, -89, 10, -26, 10, -100, 10, -84, 10, 10, 58, -97, 10, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -105, 10, -74, 10, -70, 10, -26, 10, -103, 10, -81, 10, -74, 10, -28, 10, -72, 10, -108, 10, -109, 10, -128, 10, -116, 10, -126, 10, -93, 10, -28, 10, -71, 10, -120, 10, 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, 10, -28, -27, -24, -23, 10, 32, 35, 37, 42, 64, 9, 13, -67, 10, -122, 10, -26, 10, -104, 10, -81, 10, -127, -119, -118, -112, -100, -71, -67, 10, -121, 10, -27, -24, 10, -90, -82, 10, -126, 10, -102, 10, -82, 10, -66, 10, -89, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -70, 10, -78, 10, 10, 58, -97, 10, -24, 10, -125, 10, -67, 10, -116, 10, -26, 10, -105, 10, -74, 10, -70, 10, -26, 10, -103, 10, -81, 10, -74, 10, -28, 10, -72, 10, -108, 10, -109, 10, -128, -125, 10, -116, 10, -116, 10, -26, 10, -103, 10, -81, 10, -126, 10, -93, 10, -28, 10, -71, 10, -120, 10, 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, -97, -24, -125, -67, 58, 10, 10, -28, -27, -24, 10, 32, 35, 37, 64, 9, 13, -66, 10, -117, 10, -27, 10, -83, 10, -112, 10, 10, 58, -119, -118, -100, 10, -89, 10, -26, 10, -100, 10, -84, 10, -27, 10, 58, -92, 10, -89, 10, -25, 10, -70, 10, -78, 10, -97, 10, -24, 10, -125, 10, -67, 10, -70, 10, -26, 10, -103, 10, -81, 10, -125, 10, -116, 10, -26, 10, -103, 10, -81, 10, 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, -116, -26, -105, -74, -70, -26, -103, -81, -74, -109, -117, -27, -83, -112, 58, 10, 10, -27, 10, 32, 35, 124, 9, 13, -118, 10, -97, 10, -24, 10, -125, 10, -67, 10, 10, 58, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 13, 2, 1, 1, 1, 1, 2, 2, 12, 7, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 12, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 8, 2, 3, 3, 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, 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, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 12, 8, 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 10, 2, 2, 2, 2, 2, 8, 2, 3, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2, 2, 2, 2, 2, 4, 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, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 15, 18, 20, 22, 24, 26, 29, 32, 46, 54, 56, 59, 62, 64, 66, 68, 70, 72, 74, 76, 78, 81, 83, 85, 87, 89, 91, 93, 95, 97, 109, 112, 115, 118, 121, 124, 138, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 175, 178, 181, 184, 187, 190, 199, 202, 206, 210, 213, 216, 219, 222, 225, 228, 231, 234, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 375, 377, 379, 381, 383, 385, 387, 390, 393, 398, 403, 408, 413, 417, 421, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 461, 468, 473, 477, 483, 487, 490, 496, 510, 519, 522, 526, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 676, 678, 690, 693, 696, 699, 702, 705, 714, 717, 721, 725, 728, 731, 734, 737, 740, 743, 746, 749, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 903, 905, 907, 909, 911, 913, 915, 925, 928, 931, 934, 937, 940, 943, 948, 951, 954, 957, 960, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1121, 1123 }; static const short _lexer_trans_targs[] = { 2, 10, 38, 114, 353, 9, 9, 119, 129, 131, 145, 146, 149, 9, 0, 3, 339, 0, 4, 0, 5, 0, 6, 0, 7, 0, 9, 130, 8, 9, 130, 8, 2, 10, 38, 114, 9, 9, 119, 129, 131, 145, 146, 149, 9, 0, 11, 18, 277, 329, 333, 337, 338, 0, 12, 0, 13, 16, 0, 14, 15, 0, 7, 0, 7, 0, 17, 0, 7, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 207, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 31, 30, 31, 30, 32, 155, 185, 187, 31, 31, 9, 192, 206, 9, 31, 30, 33, 31, 30, 34, 31, 30, 35, 31, 30, 36, 31, 30, 37, 31, 30, 2, 10, 38, 114, 9, 9, 119, 129, 131, 145, 146, 149, 9, 0, 39, 43, 0, 40, 0, 41, 0, 42, 0, 7, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 50, 49, 50, 49, 51, 56, 92, 94, 50, 50, 9, 99, 113, 9, 50, 49, 52, 50, 49, 53, 50, 49, 54, 50, 49, 55, 50, 49, 37, 50, 49, 57, 64, 75, 79, 83, 87, 91, 50, 49, 58, 50, 49, 59, 62, 50, 49, 60, 61, 50, 49, 37, 50, 49, 37, 50, 49, 63, 50, 49, 37, 50, 49, 65, 50, 49, 66, 50, 49, 67, 50, 49, 68, 50, 49, 69, 50, 37, 49, 70, 50, 49, 71, 50, 49, 72, 50, 49, 73, 50, 49, 74, 50, 49, 50, 37, 49, 76, 50, 49, 77, 50, 49, 78, 50, 49, 74, 50, 49, 80, 50, 49, 81, 50, 49, 82, 50, 49, 37, 50, 49, 84, 50, 49, 85, 50, 49, 86, 50, 49, 68, 50, 49, 88, 50, 49, 89, 50, 49, 90, 50, 49, 37, 50, 49, 37, 50, 49, 93, 50, 49, 88, 50, 49, 95, 50, 49, 96, 50, 49, 97, 50, 49, 98, 50, 49, 37, 50, 49, 50, 100, 49, 50, 101, 49, 50, 102, 49, 50, 103, 49, 50, 104, 49, 50, 105, 49, 50, 106, 49, 50, 107, 49, 50, 108, 49, 50, 109, 49, 50, 110, 49, 50, 111, 49, 50, 112, 49, 50, 9, 49, 50, 37, 49, 115, 0, 116, 0, 117, 0, 118, 0, 7, 0, 120, 0, 121, 0, 123, 122, 122, 123, 122, 122, 124, 124, 125, 124, 124, 124, 124, 125, 124, 124, 124, 124, 126, 124, 124, 124, 124, 127, 124, 124, 9, 128, 128, 0, 9, 128, 128, 0, 9, 130, 129, 9, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 355, 0, 7, 0, 0, 0, 0, 0, 147, 148, 9, 148, 148, 146, 147, 147, 9, 148, 146, 148, 0, 149, 150, 149, 0, 154, 153, 152, 150, 153, 151, 0, 152, 150, 151, 0, 152, 151, 154, 153, 152, 150, 153, 151, 2, 10, 38, 114, 154, 154, 119, 129, 131, 145, 146, 149, 154, 0, 156, 163, 168, 172, 176, 180, 184, 31, 30, 157, 31, 30, 158, 161, 31, 30, 159, 160, 31, 30, 37, 31, 30, 37, 31, 30, 162, 31, 30, 37, 31, 30, 164, 31, 30, 165, 31, 30, 166, 31, 30, 167, 31, 30, 31, 37, 30, 169, 31, 30, 170, 31, 30, 171, 31, 30, 167, 31, 30, 173, 31, 30, 174, 31, 30, 175, 31, 30, 37, 31, 30, 177, 31, 30, 178, 31, 30, 179, 31, 30, 167, 31, 30, 181, 31, 30, 182, 31, 30, 183, 31, 30, 37, 31, 30, 37, 31, 30, 186, 31, 30, 181, 31, 30, 188, 31, 30, 189, 31, 30, 190, 31, 30, 191, 31, 30, 37, 31, 30, 31, 193, 30, 31, 194, 30, 31, 195, 30, 31, 196, 30, 31, 197, 30, 31, 198, 30, 31, 199, 30, 31, 200, 30, 31, 201, 30, 31, 202, 30, 31, 203, 30, 31, 204, 30, 31, 205, 30, 31, 9, 30, 31, 37, 30, 209, 208, 209, 208, 210, 215, 251, 257, 209, 209, 9, 262, 276, 9, 209, 208, 211, 209, 208, 212, 209, 208, 213, 209, 208, 214, 209, 208, 37, 209, 208, 216, 223, 234, 238, 242, 246, 250, 209, 208, 217, 209, 208, 218, 221, 209, 208, 219, 220, 209, 208, 37, 209, 208, 37, 209, 208, 222, 209, 208, 37, 209, 208, 224, 209, 208, 225, 209, 208, 226, 209, 208, 227, 209, 208, 228, 209, 37, 208, 229, 209, 208, 230, 209, 208, 231, 209, 208, 232, 209, 208, 233, 209, 208, 209, 37, 208, 235, 209, 208, 236, 209, 208, 237, 209, 208, 233, 209, 208, 239, 209, 208, 240, 209, 208, 241, 209, 208, 37, 209, 208, 243, 209, 208, 244, 209, 208, 245, 209, 208, 227, 209, 208, 247, 209, 208, 248, 209, 208, 249, 209, 208, 37, 209, 208, 37, 209, 208, 252, 253, 209, 208, 247, 209, 208, 254, 209, 208, 255, 209, 208, 256, 209, 208, 233, 209, 208, 258, 209, 208, 259, 209, 208, 260, 209, 208, 261, 209, 208, 37, 209, 208, 209, 263, 208, 209, 264, 208, 209, 265, 208, 209, 266, 208, 209, 267, 208, 209, 268, 208, 209, 269, 208, 209, 270, 208, 209, 271, 208, 209, 272, 208, 209, 273, 208, 209, 274, 208, 209, 275, 208, 209, 9, 208, 209, 37, 208, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 284, 283, 284, 283, 285, 291, 310, 284, 284, 9, 315, 9, 284, 283, 286, 284, 283, 287, 284, 283, 288, 284, 283, 289, 284, 283, 290, 284, 283, 284, 37, 283, 292, 302, 306, 284, 283, 293, 284, 283, 294, 284, 283, 295, 284, 283, 296, 284, 283, 297, 284, 37, 283, 298, 284, 283, 299, 284, 283, 300, 284, 283, 301, 284, 283, 290, 284, 283, 303, 284, 283, 304, 284, 283, 305, 284, 283, 290, 284, 283, 307, 284, 283, 308, 284, 283, 309, 284, 283, 296, 284, 283, 311, 284, 283, 312, 284, 283, 313, 284, 283, 314, 284, 283, 290, 284, 283, 284, 316, 283, 284, 317, 283, 284, 318, 283, 284, 319, 283, 284, 320, 283, 284, 321, 283, 284, 322, 283, 284, 323, 283, 284, 324, 283, 284, 325, 283, 284, 326, 283, 284, 327, 283, 284, 328, 283, 284, 9, 283, 330, 0, 331, 0, 332, 0, 7, 0, 334, 0, 335, 0, 336, 0, 22, 0, 40, 0, 7, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 346, 345, 346, 345, 347, 346, 346, 9, 9, 346, 345, 348, 346, 345, 349, 346, 345, 350, 346, 345, 351, 346, 345, 352, 346, 345, 346, 37, 345, 354, 0, 9, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 63, 63, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 15, 54, 0, 15, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 15, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 19, 54, 0, 19, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 19, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 19, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 144, 57, 54, 0, 84, 84, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 17, 54, 0, 17, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 17, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 84, 54, 0, 69, 33, 69, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 355; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/zh_cn.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 918 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c" { cs = lexer_start; } #line 425 "ragel/i18n/zh_cn.c.rl" #line 925 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/zh_cn.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/zh_cn.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/zh_cn.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/zh_cn.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/zh_cn.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/zh_cn.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/zh_cn.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/zh_cn.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/zh_cn.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/zh_cn.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/zh_cn.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/zh_cn.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/zh_cn.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/zh_cn.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/zh_cn.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/zh_cn.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/zh_cn.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/zh_cn.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/zh_cn.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/zh_cn.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/zh_cn.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/zh_cn.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/zh_cn.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/zh_cn.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1215 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/zh_cn.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1278 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c" } } } _out: {} } #line 426 "ragel/i18n/zh_cn.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_zh_cn() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Zh_cn", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_he/0000755000004100000410000000000012244512574017365 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_he/extconf.rb0000644000004100000410000000035612244512574021364 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_he") have_library("c", "main") create_makefile("gherkin_lexer_he") gherkin-2.12.2/ext/gherkin_lexer_he/gherkin_lexer_he.c0000644000004100000410000011554612244512574023047 0ustar www-datawww-data #line 1 "ragel/i18n/he.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/he.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_he/gherkin_lexer_he.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 19, 20, 22, 23, 24, 25, 27, 29, 40, 41, 42, 44, 46, 51, 56, 61, 66, 70, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 96, 103, 108, 112, 118, 121, 123, 129, 140, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 232, 238, 240, 243, 245, 247, 249, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 377, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 409, 415, 417, 420, 422, 424, 426, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 547, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 683, 690, 692, 695, 697, 699, 701, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 837, 838 }; static const char _lexer_trans_keys[] = { -41, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -112, -111, -109, -107, -101, -88, -86, -41, -111, -106, -41, -100, 32, 10, 13, 10, 13, -41, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -41, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -41, 32, -103, -41, -108, -41, -103, -41, -96, -41, -86, -41, -97, -41, -107, -41, -110, -41, -98, -41, -112, -41, -107, -41, -86, 58, 10, 10, -41, 10, 32, 35, 124, 9, 13, -86, 10, -41, 10, -101, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 10, 58, -41, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -41, -110, -41, -99, -41, -112, -41, -87, -41, -88, -41, -89, -41, -94, 58, 10, 10, -41, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -107, -101, -86, 10, -41, 10, -111, -106, 10, -41, 10, -100, 10, 10, 32, -41, 10, 32, -103, 10, -41, 10, -108, 10, -41, 10, -103, 10, -41, 10, -96, 10, -41, 10, -86, 10, -41, 10, -97, 10, -41, 10, -110, 10, -41, 10, -99, 10, -41, 10, -112, 10, -41, 10, -87, 10, -41, 10, -88, 10, -41, 10, -111, -101, -88, 10, -41, 10, -96, 10, -41, 10, -103, 10, -41, 10, -86, 10, 10, 32, -41, 10, -86, 10, -41, 10, -88, 10, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, 10, 58, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 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, -41, -111, -101, -88, -41, -96, -41, -103, -41, -86, 32, -41, -86, -41, -88, -41, -105, -41, -103, -41, -87, 58, 10, 10, -41, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -107, -101, -86, 10, -41, 10, -111, -106, 10, -41, 10, -100, 10, 10, 32, -41, 10, 32, -103, 10, -41, 10, -108, 10, -41, 10, -103, 10, -41, 10, -96, 10, -41, 10, -86, 10, -41, 10, -97, 10, -41, 10, -110, 10, -41, 10, -99, 10, -41, 10, -112, 10, -41, 10, -87, 10, -41, 10, -88, 10, -41, 10, -101, -88, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 10, 58, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, 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, -41, -107, -41, -96, -41, -108, 58, 10, 10, -41, 10, 32, 35, 37, 64, 9, 13, -109, -88, -86, 10, -41, 10, -107, 10, -41, 10, -110, 10, -41, 10, -98, 10, -41, 10, -112, 10, -41, 10, -107, 10, -41, 10, -86, 10, 10, 58, -41, 10, -89, 10, -41, 10, -94, 10, -41, 10, -111, -101, -88, 10, -41, 10, -96, 10, -41, 10, -103, 10, -41, 10, -86, 10, 10, 32, -41, 10, -86, 10, -41, 10, -88, 10, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 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, -41, -105, -41, -103, -41, -87, 58, 10, 10, -41, 10, 32, 35, 37, 42, 64, 9, 13, -112, -111, -107, -101, -88, -86, 10, -41, 10, -111, -106, 10, -41, 10, -100, 10, 10, 32, -41, 10, 32, -103, 10, -41, 10, -108, 10, -41, 10, -103, 10, -41, 10, -96, 10, -41, 10, -86, 10, -41, 10, -97, 10, -41, 10, -110, 10, -41, 10, -99, 10, -41, 10, -112, 10, -41, 10, -87, 10, -41, 10, -88, 10, -41, 10, -89, 10, -41, 10, -94, 10, 10, 58, -41, 10, -111, -101, -88, 10, -41, 10, -96, 10, -41, 10, -103, 10, -41, 10, -86, 10, 10, 32, -41, 10, -86, 10, -41, 10, -88, 10, -41, 10, -105, 10, -41, 10, -103, 10, -41, 10, -87, 10, -41, 10, -107, 10, -41, 10, -96, 10, -41, 10, -108, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 7, 1, 2, 1, 1, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 6, 2, 3, 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, 4, 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, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 6, 2, 3, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 1, 7, 7, 2, 3, 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, 4, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 20, 22, 25, 27, 29, 31, 34, 37, 48, 50, 52, 55, 58, 63, 68, 73, 78, 82, 86, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 124, 131, 136, 140, 146, 150, 153, 159, 170, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 232, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 316, 323, 326, 330, 333, 336, 339, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 530, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 583, 590, 593, 597, 600, 603, 606, 610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 758, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 787, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 989, 997, 1000, 1004, 1007, 1010, 1013, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1216, 1218 }; static const short _lexer_trans_targs[] = { 2, 400, 10, 10, 11, 21, 23, 7, 37, 40, 10, 0, 3, 48, 58, 85, 89, 95, 171, 0, 4, 0, 5, 46, 0, 6, 0, 7, 0, 8, 0, 10, 22, 9, 10, 22, 9, 2, 10, 10, 11, 21, 23, 7, 37, 40, 10, 0, 12, 0, 13, 0, 15, 14, 14, 15, 14, 14, 16, 16, 17, 16, 16, 16, 16, 17, 16, 16, 16, 16, 18, 16, 16, 16, 16, 19, 16, 16, 10, 20, 20, 0, 10, 20, 20, 0, 10, 22, 21, 10, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 402, 0, 0, 0, 0, 0, 38, 39, 10, 39, 39, 37, 38, 38, 10, 39, 37, 39, 0, 40, 41, 40, 0, 45, 44, 43, 41, 44, 42, 0, 43, 41, 42, 0, 43, 42, 45, 44, 43, 41, 44, 42, 2, 45, 45, 11, 21, 23, 7, 37, 40, 45, 0, 47, 8, 0, 7, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 7, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 73, 72, 73, 72, 74, 73, 73, 10, 10, 73, 72, 75, 73, 72, 76, 73, 72, 77, 73, 72, 78, 73, 72, 79, 73, 72, 80, 73, 72, 81, 73, 72, 82, 73, 72, 83, 73, 72, 73, 84, 72, 2, 10, 10, 11, 21, 23, 7, 37, 40, 10, 0, 86, 0, 87, 0, 88, 0, 7, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 7, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 102, 101, 102, 101, 103, 102, 102, 10, 157, 108, 10, 102, 101, 104, 111, 121, 125, 131, 102, 101, 105, 102, 101, 106, 109, 102, 101, 107, 102, 101, 108, 102, 101, 102, 84, 101, 110, 102, 84, 101, 108, 102, 101, 112, 102, 101, 113, 102, 101, 114, 102, 101, 115, 102, 101, 116, 102, 101, 117, 102, 101, 118, 102, 101, 119, 102, 101, 120, 102, 101, 108, 102, 101, 122, 102, 101, 123, 102, 101, 124, 102, 101, 108, 102, 101, 126, 102, 101, 127, 102, 101, 128, 102, 101, 129, 102, 101, 130, 102, 101, 108, 102, 101, 132, 102, 101, 133, 151, 144, 102, 101, 134, 102, 101, 135, 102, 101, 136, 102, 101, 137, 102, 101, 138, 102, 101, 139, 102, 101, 102, 140, 101, 141, 102, 101, 142, 102, 101, 143, 102, 101, 144, 102, 101, 145, 102, 101, 146, 102, 101, 147, 102, 101, 148, 102, 101, 149, 102, 101, 150, 102, 101, 102, 84, 101, 152, 102, 101, 153, 102, 101, 154, 102, 101, 155, 102, 101, 156, 102, 101, 150, 102, 101, 102, 158, 101, 102, 159, 101, 102, 160, 101, 102, 161, 101, 102, 162, 101, 102, 163, 101, 102, 164, 101, 102, 165, 101, 102, 166, 101, 102, 167, 101, 102, 168, 101, 102, 169, 101, 102, 170, 101, 102, 10, 101, 172, 0, 173, 251, 318, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 193, 192, 193, 192, 194, 193, 193, 10, 237, 199, 10, 193, 192, 195, 202, 212, 216, 222, 193, 192, 196, 193, 192, 197, 200, 193, 192, 198, 193, 192, 199, 193, 192, 193, 84, 192, 201, 193, 84, 192, 199, 193, 192, 203, 193, 192, 204, 193, 192, 205, 193, 192, 206, 193, 192, 207, 193, 192, 208, 193, 192, 209, 193, 192, 210, 193, 192, 211, 193, 192, 199, 193, 192, 213, 193, 192, 214, 193, 192, 215, 193, 192, 199, 193, 192, 217, 193, 192, 218, 193, 192, 219, 193, 192, 220, 193, 192, 221, 193, 192, 199, 193, 192, 223, 193, 192, 224, 231, 193, 192, 225, 193, 192, 226, 193, 192, 227, 193, 192, 228, 193, 192, 229, 193, 192, 230, 193, 192, 193, 84, 192, 232, 193, 192, 233, 193, 192, 234, 193, 192, 235, 193, 192, 236, 193, 192, 230, 193, 192, 193, 238, 192, 193, 239, 192, 193, 240, 192, 193, 241, 192, 193, 242, 192, 193, 243, 192, 193, 244, 192, 193, 245, 192, 193, 246, 192, 193, 247, 192, 193, 248, 192, 193, 249, 192, 193, 250, 192, 193, 10, 192, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 260, 259, 260, 259, 261, 260, 260, 10, 304, 10, 260, 259, 262, 275, 279, 260, 259, 263, 260, 259, 264, 260, 259, 265, 260, 259, 266, 260, 259, 267, 260, 259, 268, 260, 259, 269, 260, 259, 270, 260, 259, 271, 260, 259, 272, 260, 259, 273, 260, 259, 274, 260, 259, 260, 84, 259, 276, 260, 259, 277, 260, 259, 278, 260, 259, 274, 260, 259, 280, 260, 259, 281, 298, 292, 260, 259, 282, 260, 259, 283, 260, 259, 284, 260, 259, 285, 260, 259, 286, 260, 259, 287, 260, 259, 260, 288, 259, 289, 260, 259, 290, 260, 259, 291, 260, 259, 292, 260, 259, 293, 260, 259, 294, 260, 259, 295, 260, 259, 296, 260, 259, 297, 260, 259, 274, 260, 259, 299, 260, 259, 300, 260, 259, 301, 260, 259, 302, 260, 259, 303, 260, 259, 274, 260, 259, 260, 305, 259, 260, 306, 259, 260, 307, 259, 260, 308, 259, 260, 309, 259, 260, 310, 259, 260, 311, 259, 260, 312, 259, 260, 313, 259, 260, 314, 259, 260, 315, 259, 260, 316, 259, 260, 317, 259, 260, 10, 259, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 327, 326, 327, 326, 328, 327, 327, 10, 386, 333, 10, 327, 326, 329, 336, 346, 350, 356, 361, 327, 326, 330, 327, 326, 331, 334, 327, 326, 332, 327, 326, 333, 327, 326, 327, 84, 326, 335, 327, 84, 326, 333, 327, 326, 337, 327, 326, 338, 327, 326, 339, 327, 326, 340, 327, 326, 341, 327, 326, 342, 327, 326, 343, 327, 326, 344, 327, 326, 345, 327, 326, 333, 327, 326, 347, 327, 326, 348, 327, 326, 349, 327, 326, 333, 327, 326, 351, 327, 326, 352, 327, 326, 353, 327, 326, 354, 327, 326, 355, 327, 326, 333, 327, 326, 357, 327, 326, 358, 327, 326, 359, 327, 326, 360, 327, 326, 327, 84, 326, 362, 327, 326, 363, 380, 374, 327, 326, 364, 327, 326, 365, 327, 326, 366, 327, 326, 367, 327, 326, 368, 327, 326, 369, 327, 326, 327, 370, 326, 371, 327, 326, 372, 327, 326, 373, 327, 326, 374, 327, 326, 375, 327, 326, 376, 327, 326, 377, 327, 326, 378, 327, 326, 379, 327, 326, 360, 327, 326, 381, 327, 326, 382, 327, 326, 383, 327, 326, 384, 327, 326, 385, 327, 326, 360, 327, 326, 327, 387, 326, 327, 388, 326, 327, 389, 326, 327, 390, 326, 327, 391, 326, 327, 392, 326, 327, 393, 326, 327, 394, 326, 327, 395, 326, 327, 396, 326, 327, 397, 326, 327, 398, 326, 327, 399, 326, 327, 10, 326, 401, 0, 10, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 402; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/he.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 978 "ext/gherkin_lexer_he/gherkin_lexer_he.c" { cs = lexer_start; } #line 425 "ragel/i18n/he.c.rl" #line 985 "ext/gherkin_lexer_he/gherkin_lexer_he.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/he.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/he.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/he.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/he.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/he.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/he.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/he.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/he.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/he.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/he.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/he.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/he.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/he.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/he.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/he.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/he.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/he.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/he.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/he.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/he.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/he.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/he.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/he.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/he.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1275 "ext/gherkin_lexer_he/gherkin_lexer_he.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/he.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1338 "ext/gherkin_lexer_he/gherkin_lexer_he.c" } } } _out: {} } #line 426 "ragel/i18n/he.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_he() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "He", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_no/0000755000004100000410000000000012244512574017405 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_no/extconf.rb0000644000004100000410000000035612244512574021404 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_no") have_library("c", "main") create_makefile("gherkin_lexer_no") gherkin-2.12.2/ext/gherkin_lexer_no/gherkin_lexer_no.c0000644000004100000410000011062212244512574023075 0ustar www-datawww-data #line 1 "ragel/i18n/no.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/no.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_no/gherkin_lexer_no.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 317, 319, 321, 323, 325, 327, 329, 331, 334, 336, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 482, 484, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 503, 505, 507, 509, 511, 513, 515, 517, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 530, 531, 532, 533, 534, 535, 536, 537, 539, 540, 541, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 670, 672, 674, 676, 678, 680, 682, 684, 687, 689, 691, 692, 693, 697, 703, 706, 708, 714, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 769, 771, 773, 775, 777, 779, 781, 783 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 115, 116, 114, 97, 107, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 69, 71, 77, 78, 79, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 83, 124, 9, 13, 97, 107, 103, 114, 117, 110, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 116, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 103, 107, 101, 110, 115, 107, 97, 112, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 69, 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, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 103, 107, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 115, 10, 101, 10, 109, 10, 112, 10, 108, 10, 101, 10, 114, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 115, 101, 109, 112, 108, 101, 114, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 105, 116, 116, 101, 110, -61, -91, 114, 103, -61, 99, -91, 101, 110, 97, 114, 105, 111, 58, 109, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 69, 71, 77, 78, 79, 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, 32, 10, 98, 10, 115, 10, 116, 10, 114, 10, 97, 10, 107, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 105, 10, 116, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 109, 10, 97, 10, 108, 97, 108, 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, 71, 77, 78, 79, 83, 124, 9, 13, 10, 103, 10, 101, 10, 110, 10, 115, 10, 107, 10, 97, 10, 112, 10, 58, 10, 105, 10, 116, 10, 116, 10, 101, 10, 110, -61, 10, -91, 10, 10, 114, 10, 103, -61, 10, 99, -91, 10, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 14, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 2, 4, 3, 2, 4, 16, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 287, 290, 293, 296, 299, 302, 305, 308, 311, 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, 435, 438, 441, 444, 447, 450, 453, 456, 460, 463, 466, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 680, 683, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 713, 716, 719, 722, 725, 728, 731, 734, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 758, 760, 762, 764, 766, 768, 770, 772, 775, 777, 779, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 964, 967, 970, 973, 976, 979, 982, 985, 989, 992, 995, 997, 999, 1003, 1009, 1013, 1016, 1022, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 355, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 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, 51, 0, 52, 0, 53, 0, 54, 0, 56, 55, 56, 55, 56, 56, 4, 57, 71, 4, 330, 338, 341, 343, 346, 347, 56, 55, 56, 58, 55, 56, 59, 55, 56, 60, 55, 56, 61, 55, 56, 62, 55, 56, 63, 55, 56, 64, 55, 56, 65, 55, 56, 66, 55, 56, 67, 55, 56, 68, 55, 56, 69, 55, 56, 70, 55, 56, 4, 55, 56, 72, 55, 4, 4, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 4, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 83, 82, 83, 82, 83, 83, 4, 84, 98, 4, 99, 116, 123, 126, 128, 131, 132, 83, 82, 83, 85, 82, 83, 86, 82, 83, 87, 82, 83, 88, 82, 83, 89, 82, 83, 90, 82, 83, 91, 82, 83, 92, 82, 83, 93, 82, 83, 94, 82, 83, 95, 82, 83, 96, 82, 83, 97, 82, 83, 4, 82, 83, 72, 82, 83, 100, 82, 83, 101, 82, 83, 102, 82, 83, 103, 82, 83, 104, 82, 83, 105, 82, 83, 106, 82, 83, 107, 82, 83, 108, 82, 83, 109, 82, 83, 110, 82, 83, 111, 82, 83, 112, 82, 83, 113, 82, 83, 114, 82, 83, 115, 82, 83, 72, 82, 83, 117, 82, 83, 118, 82, 83, 119, 82, 83, 120, 82, 83, 121, 82, 83, 122, 82, 83, 115, 82, 83, 124, 82, 83, 125, 82, 83, 98, 82, 83, 127, 82, 83, 98, 82, 129, 83, 82, 130, 83, 82, 83, 98, 82, 83, 98, 82, 133, 83, 134, 82, 98, 83, 82, 83, 135, 82, 83, 136, 82, 83, 137, 82, 83, 138, 82, 83, 139, 82, 83, 140, 82, 83, 72, 141, 82, 83, 142, 82, 83, 115, 82, 144, 216, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 153, 152, 153, 152, 153, 153, 4, 154, 4, 168, 185, 192, 206, 153, 152, 153, 155, 152, 153, 156, 152, 153, 157, 152, 153, 158, 152, 153, 159, 152, 153, 160, 152, 153, 161, 152, 153, 162, 152, 153, 163, 152, 153, 164, 152, 153, 165, 152, 153, 166, 152, 153, 167, 152, 153, 4, 152, 153, 169, 152, 153, 170, 152, 153, 171, 152, 153, 172, 152, 153, 173, 152, 153, 174, 152, 153, 175, 152, 153, 176, 152, 153, 177, 152, 153, 178, 152, 153, 179, 152, 153, 180, 152, 153, 181, 152, 153, 182, 152, 153, 183, 152, 153, 184, 152, 153, 72, 152, 153, 186, 152, 153, 187, 152, 153, 188, 152, 153, 189, 152, 153, 190, 152, 153, 191, 152, 153, 184, 152, 153, 193, 199, 152, 153, 194, 152, 153, 195, 152, 153, 196, 152, 153, 197, 152, 153, 198, 152, 153, 184, 152, 153, 200, 152, 153, 201, 152, 153, 202, 152, 153, 203, 152, 153, 204, 152, 153, 205, 152, 153, 184, 152, 153, 207, 152, 153, 208, 152, 153, 209, 152, 153, 210, 152, 153, 211, 152, 153, 212, 152, 153, 213, 152, 153, 72, 214, 152, 153, 215, 152, 153, 184, 152, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 226, 225, 226, 225, 226, 226, 4, 227, 4, 226, 225, 226, 228, 225, 226, 229, 225, 226, 230, 225, 226, 231, 225, 226, 232, 225, 226, 233, 225, 226, 234, 225, 226, 72, 225, 236, 0, 237, 0, 31, 0, 239, 0, 31, 0, 241, 0, 242, 0, 31, 0, 31, 0, 245, 246, 0, 31, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 322, 0, 255, 254, 255, 254, 255, 255, 4, 256, 270, 4, 271, 288, 295, 302, 305, 307, 310, 311, 255, 254, 255, 257, 254, 255, 258, 254, 255, 259, 254, 255, 260, 254, 255, 261, 254, 255, 262, 254, 255, 263, 254, 255, 264, 254, 255, 265, 254, 255, 266, 254, 255, 267, 254, 255, 268, 254, 255, 269, 254, 255, 4, 254, 255, 72, 254, 255, 272, 254, 255, 273, 254, 255, 274, 254, 255, 275, 254, 255, 276, 254, 255, 277, 254, 255, 278, 254, 255, 279, 254, 255, 280, 254, 255, 281, 254, 255, 282, 254, 255, 283, 254, 255, 284, 254, 255, 285, 254, 255, 286, 254, 255, 287, 254, 255, 72, 254, 255, 289, 254, 255, 290, 254, 255, 291, 254, 255, 292, 254, 255, 293, 254, 255, 294, 254, 255, 287, 254, 255, 296, 254, 255, 297, 254, 255, 298, 254, 255, 299, 254, 255, 300, 254, 255, 301, 254, 255, 287, 254, 255, 303, 254, 255, 304, 254, 255, 270, 254, 255, 306, 254, 255, 270, 254, 308, 255, 254, 309, 255, 254, 255, 270, 254, 255, 270, 254, 312, 255, 313, 254, 270, 255, 254, 255, 314, 254, 255, 315, 254, 255, 316, 254, 255, 317, 254, 255, 318, 254, 255, 319, 254, 255, 72, 320, 254, 255, 321, 254, 255, 287, 254, 323, 0, 53, 0, 324, 325, 324, 0, 329, 328, 327, 325, 328, 326, 0, 327, 325, 326, 0, 327, 326, 329, 328, 327, 325, 328, 326, 329, 329, 5, 15, 17, 31, 34, 37, 73, 143, 235, 238, 240, 243, 244, 324, 329, 0, 56, 331, 55, 56, 332, 55, 56, 333, 55, 56, 334, 55, 56, 335, 55, 56, 336, 55, 56, 337, 55, 56, 72, 55, 56, 339, 55, 56, 340, 55, 56, 71, 55, 56, 342, 55, 56, 71, 55, 344, 56, 55, 345, 56, 55, 56, 71, 55, 56, 71, 55, 348, 56, 349, 55, 71, 56, 55, 56, 350, 55, 56, 351, 55, 56, 352, 55, 56, 353, 55, 56, 354, 55, 56, 337, 55, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 355; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/no.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 915 "ext/gherkin_lexer_no/gherkin_lexer_no.c" { cs = lexer_start; } #line 425 "ragel/i18n/no.c.rl" #line 922 "ext/gherkin_lexer_no/gherkin_lexer_no.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/no.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/no.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/no.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/no.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/no.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/no.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/no.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/no.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/no.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/no.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/no.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/no.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/no.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/no.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/no.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/no.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/no.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/no.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/no.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/no.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/no.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/no.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/no.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/no.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1212 "ext/gherkin_lexer_no/gherkin_lexer_no.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/no.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1275 "ext/gherkin_lexer_no/gherkin_lexer_no.c" } } } _out: {} } #line 426 "ragel/i18n/no.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_no() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "No", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_id/0000755000004100000410000000000012244512574017365 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_id/gherkin_lexer_id.c0000644000004100000410000010160412244512574023035 0ustar www-datawww-data #line 1 "ragel/i18n/id.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/id.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_id/gherkin_lexer_id.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 111, 112, 113, 114, 115, 116, 117, 118, 125, 127, 129, 131, 133, 135, 152, 154, 156, 157, 158, 159, 160, 161, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 366, 368, 370, 372, 374, 376, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 500, 501, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 548, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 597, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 619, 620, 621, 625, 631, 634, 636, 642, 659 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 111, 110, 116, 111, 104, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 105, 10, 116, 10, 117, 10, 114, 10, 58, 10, 32, 34, 35, 37, 42, 64, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, 97, 101, 110, 115, 97, 114, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 77, 83, 84, 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, 97, 101, 10, 110, 10, 110, 10, 103, 10, 97, 10, 105, 10, 116, 10, 117, 10, 114, 10, 58, 10, 101, 10, 116, 10, 105, 10, 107, 10, 97, 10, 97, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 107, 10, 111, 10, 110, 10, 115, 10, 101, 10, 112, 10, 97, 10, 112, 10, 105, 110, 103, 97, 110, 105, 116, 117, 114, 58, 10, 10, 10, 32, 35, 37, 64, 67, 68, 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, 111, 10, 110, 10, 116, 10, 111, 10, 104, 10, 58, 10, 97, 10, 115, 10, 97, 10, 114, 10, 105, 10, 116, 10, 117, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 107, 10, 111, 10, 110, 10, 115, 10, 101, 10, 112, 101, 116, 105, 107, 97, 97, 107, 101, 110, 97, 114, 105, 111, 32, 58, 107, 111, 110, 115, 101, 112, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 77, 83, 84, 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, 97, 101, 10, 110, 10, 110, 10, 103, 10, 97, 10, 105, 10, 116, 10, 117, 10, 114, 10, 58, 10, 101, 10, 116, 10, 105, 10, 107, 10, 97, 10, 97, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 97, 10, 112, 10, 105, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 77, 83, 84, 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, 97, 101, 10, 110, 115, 10, 97, 10, 114, 10, 58, 10, 110, 10, 103, 10, 97, 10, 110, 10, 105, 10, 116, 10, 117, 10, 101, 10, 116, 10, 105, 10, 107, 10, 97, 10, 97, 10, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 32, 58, 10, 107, 10, 111, 10, 110, 10, 115, 10, 101, 10, 112, 10, 97, 10, 112, 10, 105, 97, 112, 105, 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, 67, 68, 70, 75, 77, 83, 84, 124, 9, 13, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 15, 2, 2, 1, 1, 1, 1, 1, 12, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 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, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 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, 1, 1, 12, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 4, 3, 2, 4, 15, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 137, 139, 141, 143, 145, 147, 149, 151, 158, 161, 164, 167, 170, 173, 190, 193, 196, 198, 200, 202, 204, 206, 220, 223, 226, 229, 232, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 269, 272, 275, 278, 281, 284, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 329, 332, 335, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 505, 508, 511, 514, 517, 520, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 547, 549, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 710, 712, 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, 756, 759, 762, 765, 768, 771, 775, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 845, 848, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 881, 883, 885, 889, 895, 899, 902, 908, 925 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 288, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 45, 44, 45, 44, 45, 45, 4, 46, 4, 45, 44, 45, 47, 44, 45, 48, 44, 45, 49, 44, 45, 50, 44, 45, 51, 44, 4, 4, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 4, 0, 53, 108, 0, 31, 54, 0, 55, 0, 56, 0, 57, 0, 59, 58, 59, 58, 59, 59, 4, 60, 74, 4, 75, 80, 85, 90, 91, 105, 59, 58, 59, 61, 58, 59, 62, 58, 59, 63, 58, 59, 64, 58, 59, 65, 58, 59, 66, 58, 59, 67, 58, 59, 68, 58, 59, 69, 58, 59, 70, 58, 59, 71, 58, 59, 72, 58, 59, 73, 58, 59, 4, 58, 59, 51, 58, 59, 76, 77, 58, 59, 74, 58, 59, 78, 58, 59, 79, 58, 59, 76, 58, 59, 81, 58, 59, 82, 58, 59, 83, 58, 59, 84, 58, 59, 51, 58, 59, 86, 58, 59, 87, 58, 59, 88, 58, 59, 89, 58, 59, 74, 58, 59, 88, 58, 59, 92, 58, 59, 93, 58, 59, 94, 58, 59, 95, 58, 59, 96, 58, 59, 97, 58, 59, 98, 58, 59, 99, 51, 58, 59, 100, 58, 59, 101, 58, 59, 102, 58, 59, 103, 58, 59, 104, 58, 59, 84, 58, 59, 106, 58, 59, 107, 58, 59, 74, 58, 109, 0, 110, 0, 111, 0, 31, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 119, 118, 119, 118, 119, 119, 4, 120, 4, 134, 140, 144, 147, 119, 118, 119, 121, 118, 119, 122, 118, 119, 123, 118, 119, 124, 118, 119, 125, 118, 119, 126, 118, 119, 127, 118, 119, 128, 118, 119, 129, 118, 119, 130, 118, 119, 131, 118, 119, 132, 118, 119, 133, 118, 119, 4, 118, 119, 135, 118, 119, 136, 118, 119, 137, 118, 119, 138, 118, 119, 139, 118, 119, 51, 118, 119, 141, 118, 119, 142, 118, 119, 143, 118, 119, 139, 118, 119, 145, 118, 119, 146, 118, 119, 143, 118, 119, 148, 118, 119, 149, 118, 119, 150, 118, 119, 151, 118, 119, 152, 118, 119, 153, 118, 119, 154, 118, 119, 155, 51, 118, 119, 156, 118, 119, 157, 118, 119, 158, 118, 119, 159, 118, 119, 160, 118, 119, 139, 118, 162, 0, 163, 0, 164, 0, 165, 0, 31, 0, 164, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 226, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 184, 183, 184, 183, 184, 184, 4, 185, 199, 4, 200, 205, 210, 215, 216, 223, 184, 183, 184, 186, 183, 184, 187, 183, 184, 188, 183, 184, 189, 183, 184, 190, 183, 184, 191, 183, 184, 192, 183, 184, 193, 183, 184, 194, 183, 184, 195, 183, 184, 196, 183, 184, 197, 183, 184, 198, 183, 184, 4, 183, 184, 51, 183, 184, 201, 202, 183, 184, 199, 183, 184, 203, 183, 184, 204, 183, 184, 201, 183, 184, 206, 183, 184, 207, 183, 184, 208, 183, 184, 209, 183, 184, 51, 183, 184, 211, 183, 184, 212, 183, 184, 213, 183, 184, 214, 183, 184, 199, 183, 184, 213, 183, 184, 217, 183, 184, 218, 183, 184, 219, 183, 184, 220, 183, 184, 221, 183, 184, 222, 183, 184, 209, 183, 184, 224, 183, 184, 225, 183, 184, 199, 183, 228, 227, 228, 227, 228, 228, 4, 229, 243, 4, 244, 253, 256, 261, 262, 276, 228, 227, 228, 230, 227, 228, 231, 227, 228, 232, 227, 228, 233, 227, 228, 234, 227, 228, 235, 227, 228, 236, 227, 228, 237, 227, 228, 238, 227, 228, 239, 227, 228, 240, 227, 228, 241, 227, 228, 242, 227, 228, 4, 227, 228, 51, 227, 228, 245, 249, 227, 228, 243, 246, 227, 228, 247, 227, 228, 248, 227, 228, 51, 227, 228, 250, 227, 228, 251, 227, 228, 252, 227, 228, 243, 227, 228, 254, 227, 228, 255, 227, 228, 247, 227, 228, 257, 227, 228, 258, 227, 228, 259, 227, 228, 260, 227, 228, 243, 227, 228, 259, 227, 228, 263, 227, 228, 264, 227, 228, 265, 227, 228, 266, 227, 228, 267, 227, 228, 268, 227, 228, 269, 227, 228, 270, 51, 227, 228, 271, 227, 228, 272, 227, 228, 273, 227, 228, 274, 227, 228, 275, 227, 228, 248, 227, 228, 277, 227, 228, 278, 227, 228, 243, 227, 280, 0, 281, 0, 31, 0, 282, 283, 282, 0, 287, 286, 285, 283, 286, 284, 0, 285, 283, 284, 0, 285, 284, 287, 286, 285, 283, 286, 284, 287, 287, 5, 15, 17, 31, 34, 37, 52, 112, 161, 166, 167, 279, 282, 287, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 288; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/id.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 812 "ext/gherkin_lexer_id/gherkin_lexer_id.c" { cs = lexer_start; } #line 425 "ragel/i18n/id.c.rl" #line 819 "ext/gherkin_lexer_id/gherkin_lexer_id.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/id.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/id.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/id.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/id.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/id.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/id.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/id.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/id.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/id.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/id.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/id.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/id.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/id.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/id.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/id.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/id.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/id.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/id.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/id.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/id.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/id.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/id.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/id.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/id.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1109 "ext/gherkin_lexer_id/gherkin_lexer_id.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/id.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1172 "ext/gherkin_lexer_id/gherkin_lexer_id.c" } } } _out: {} } #line 426 "ragel/i18n/id.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_id() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Id", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_id/extconf.rb0000644000004100000410000000035612244512574021364 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_id") have_library("c", "main") create_makefile("gherkin_lexer_id") gherkin-2.12.2/ext/gherkin_lexer_hr/0000755000004100000410000000000012244512574017402 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_hr/gherkin_lexer_hr.c0000644000004100000410000011145012244512574023067 0ustar www-datawww-data #line 1 "ragel/i18n/hr.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/hr.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 113, 114, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 202, 203, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 310, 312, 314, 316, 318, 320, 322, 325, 327, 329, 331, 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 401, 403, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 427, 429, 431, 433, 435, 438, 440, 442, 444, 446, 448, 450, 452, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 500, 502, 504, 506, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 536, 537, 538, 539, 540, 541, 543, 544, 545, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 583, 585, 587, 589, 591, 593, 595, 598, 600, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 624, 626, 628, 630, 632, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 688, 689, 690, 691, 692, 693, 694, 695, 698, 702, 708, 711, 713, 719, 737, 739, 741, 743, 745, 748, 750, 752, 754, 757, 759, 761, 763, 765, 767, 769, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 812 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 108, 105, 97, 111, 100, 32, 97, 110, 99, 101, 112, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 73, 75, 77, 79, 83, 90, 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, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 111, 103, 117, -60, 99, -121, 110, 111, 115, 116, 58, 10, 10, 10, 32, 35, 37, 64, 75, 77, 79, 80, 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, 111, 10, 110, 10, 99, 10, 101, 10, 112, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 115, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 111, 114, 10, 122, 10, 97, 10, 100, 10, 105, 10, 109, 10, 106, 10, 101, 10, 114, 10, 105, 10, 99, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 58, 105, 10, 105, 10, 99, 110, 115, 100, 97, 111, 98, 105, 110, 97, 111, 114, 122, 97, 100, 105, 110, 97, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 73, 75, 77, 79, 83, 90, 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, 108, 10, 105, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 10, 101, 10, 112, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 99, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 105, 10, 99, 10, 97, 10, 100, 10, 97, 10, 110, 10, 32, 105, 111, 105, 109, 106, 101, 114, 105, 58, 10, 10, 10, 32, 35, 77, 79, 124, 9, 13, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 115, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 99, 107, 101, 110, 97, 114, 105, 106, 58, 105, 10, 10, 10, 32, 35, 37, 42, 64, 65, 73, 75, 77, 79, 80, 83, 90, 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, 108, 10, 105, 10, 97, 111, 10, 100, 10, 32, 97, 10, 110, 10, 99, 10, 101, 10, 112, 10, 116, 10, 58, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 111, 10, 122, 10, 97, 10, 100, 10, 99, 107, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 105, 10, 99, 10, 97, 10, 100, 10, 97, 10, 110, 10, 32, 105, 111, 105, 99, 97, 97, 100, 97, 110, 32, 105, 111, 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, 73, 75, 77, 79, 80, 83, 90, 124, 9, 13, 10, 108, 10, 105, 10, 97, 10, 100, 10, 32, 97, 10, 111, 10, 103, 10, 117, -60, 10, 99, -121, 10, 10, 110, 10, 111, 10, 115, 10, 116, 10, 58, 10, 110, 115, 10, 100, 10, 97, 10, 111, 10, 98, 10, 105, 10, 110, 10, 97, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 106, 10, 97, 10, 100, 10, 97, 10, 110, 10, 32, 105, 111, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 2, 1, 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, 16, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 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, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 3, 2, 4, 16, 2, 2, 2, 2, 3, 2, 2, 2, 3, 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, 4, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 139, 141, 144, 146, 149, 151, 153, 155, 157, 159, 161, 163, 165, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 243, 245, 247, 249, 252, 254, 256, 258, 260, 262, 264, 266, 268, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 421, 424, 427, 430, 433, 436, 439, 443, 446, 449, 452, 454, 456, 458, 460, 462, 464, 466, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 557, 560, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 595, 598, 601, 604, 607, 611, 614, 617, 620, 623, 626, 629, 632, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 703, 706, 709, 712, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, 755, 757, 759, 761, 763, 765, 767, 770, 772, 774, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 845, 848, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 883, 886, 889, 892, 895, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 977, 979, 981, 983, 985, 987, 989, 991, 995, 999, 1005, 1009, 1012, 1018, 1036, 1039, 1042, 1045, 1048, 1052, 1055, 1058, 1061, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1146 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 31, 39, 67, 135, 143, 236, 310, 315, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 31, 39, 67, 135, 143, 236, 310, 315, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 356, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 31, 0, 40, 42, 0, 41, 0, 32, 31, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 50, 49, 50, 49, 50, 50, 4, 51, 65, 4, 321, 65, 323, 326, 336, 344, 351, 50, 49, 50, 52, 49, 50, 53, 49, 50, 54, 49, 50, 55, 49, 50, 56, 49, 50, 57, 49, 50, 58, 49, 50, 59, 49, 50, 60, 49, 50, 61, 49, 50, 62, 49, 50, 63, 49, 50, 64, 49, 50, 4, 49, 50, 66, 49, 4, 4, 5, 15, 17, 31, 34, 37, 31, 39, 67, 135, 143, 236, 310, 315, 4, 0, 68, 0, 69, 0, 70, 0, 71, 72, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 79, 78, 79, 78, 79, 79, 4, 80, 4, 94, 101, 109, 115, 125, 79, 78, 79, 81, 78, 79, 82, 78, 79, 83, 78, 79, 84, 78, 79, 85, 78, 79, 86, 78, 79, 87, 78, 79, 88, 78, 79, 89, 78, 79, 90, 78, 79, 91, 78, 79, 92, 78, 79, 93, 78, 79, 4, 78, 79, 95, 78, 79, 96, 78, 79, 97, 78, 79, 98, 78, 79, 99, 78, 79, 100, 78, 79, 66, 78, 79, 102, 78, 79, 103, 78, 79, 104, 78, 105, 79, 106, 78, 106, 79, 78, 79, 107, 78, 79, 108, 78, 79, 99, 78, 79, 110, 78, 79, 111, 78, 79, 112, 78, 79, 113, 78, 79, 114, 78, 79, 100, 78, 79, 116, 119, 78, 79, 117, 78, 79, 118, 78, 79, 112, 78, 79, 120, 78, 79, 121, 78, 79, 122, 78, 79, 123, 78, 79, 124, 78, 79, 100, 78, 79, 126, 133, 78, 79, 127, 78, 79, 128, 78, 79, 129, 78, 79, 130, 78, 79, 131, 78, 79, 132, 78, 79, 66, 100, 78, 79, 134, 78, 79, 114, 78, 136, 138, 0, 137, 0, 31, 0, 139, 0, 140, 0, 141, 0, 142, 0, 76, 0, 144, 210, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 153, 152, 153, 152, 153, 153, 4, 154, 168, 4, 169, 168, 171, 180, 188, 196, 205, 153, 152, 153, 155, 152, 153, 156, 152, 153, 157, 152, 153, 158, 152, 153, 159, 152, 153, 160, 152, 153, 161, 152, 153, 162, 152, 153, 163, 152, 153, 164, 152, 153, 165, 152, 153, 166, 152, 153, 167, 152, 153, 4, 152, 153, 66, 152, 153, 170, 152, 153, 168, 152, 153, 172, 174, 152, 153, 173, 152, 153, 66, 168, 152, 153, 175, 152, 153, 176, 152, 153, 177, 152, 153, 178, 152, 153, 179, 152, 153, 66, 152, 153, 181, 152, 153, 182, 152, 153, 183, 152, 184, 153, 185, 152, 185, 153, 152, 153, 186, 152, 153, 187, 152, 153, 178, 152, 153, 189, 191, 152, 153, 190, 152, 153, 168, 152, 153, 192, 152, 153, 193, 152, 153, 194, 152, 153, 195, 152, 153, 179, 152, 153, 197, 203, 152, 153, 198, 152, 153, 199, 152, 153, 200, 152, 153, 201, 152, 153, 202, 152, 153, 179, 152, 153, 204, 152, 153, 195, 152, 153, 206, 152, 153, 207, 152, 153, 208, 152, 153, 209, 152, 153, 66, 168, 168, 152, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 219, 218, 219, 218, 219, 219, 4, 220, 230, 4, 219, 218, 219, 221, 218, 219, 222, 218, 219, 223, 218, 224, 219, 225, 218, 225, 219, 218, 219, 226, 218, 219, 227, 218, 219, 228, 218, 219, 229, 218, 219, 66, 218, 219, 231, 218, 219, 232, 218, 219, 233, 218, 219, 234, 218, 219, 235, 218, 219, 229, 218, 237, 307, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 216, 0, 246, 245, 246, 245, 246, 246, 4, 247, 261, 4, 262, 261, 264, 273, 281, 289, 293, 302, 246, 245, 246, 248, 245, 246, 249, 245, 246, 250, 245, 246, 251, 245, 246, 252, 245, 246, 253, 245, 246, 254, 245, 246, 255, 245, 246, 256, 245, 246, 257, 245, 246, 258, 245, 246, 259, 245, 246, 260, 245, 246, 4, 245, 246, 66, 245, 246, 263, 245, 246, 261, 245, 246, 265, 267, 245, 246, 266, 245, 246, 66, 261, 245, 246, 268, 245, 246, 269, 245, 246, 270, 245, 246, 271, 245, 246, 272, 245, 246, 66, 245, 246, 274, 245, 246, 275, 245, 246, 276, 245, 277, 246, 278, 245, 278, 246, 245, 246, 279, 245, 246, 280, 245, 246, 271, 245, 246, 282, 284, 245, 246, 283, 245, 246, 261, 245, 246, 285, 245, 246, 286, 245, 246, 287, 245, 246, 288, 245, 246, 272, 245, 246, 290, 245, 246, 291, 245, 246, 292, 245, 246, 286, 245, 246, 294, 300, 245, 246, 295, 245, 246, 296, 245, 246, 297, 245, 246, 298, 245, 246, 299, 245, 246, 272, 245, 246, 301, 245, 246, 288, 245, 246, 303, 245, 246, 304, 245, 246, 305, 245, 246, 306, 245, 246, 66, 261, 261, 245, 308, 0, 309, 0, 47, 0, 311, 0, 312, 0, 313, 0, 314, 0, 32, 31, 31, 0, 315, 316, 315, 0, 320, 319, 318, 316, 319, 317, 0, 318, 316, 317, 0, 318, 317, 320, 319, 318, 316, 319, 317, 320, 320, 5, 15, 17, 31, 34, 37, 31, 39, 67, 135, 143, 236, 310, 315, 320, 0, 50, 322, 49, 50, 65, 49, 50, 324, 49, 50, 325, 49, 50, 66, 65, 49, 50, 327, 49, 50, 328, 49, 50, 329, 49, 330, 50, 331, 49, 331, 50, 49, 50, 332, 49, 50, 333, 49, 50, 334, 49, 50, 335, 49, 50, 66, 49, 50, 337, 339, 49, 50, 338, 49, 50, 65, 49, 50, 340, 49, 50, 341, 49, 50, 342, 49, 50, 343, 49, 50, 335, 49, 50, 345, 49, 50, 346, 49, 50, 347, 49, 50, 348, 49, 50, 349, 49, 50, 350, 49, 50, 335, 49, 50, 352, 49, 50, 353, 49, 50, 354, 49, 50, 355, 49, 50, 66, 65, 65, 49, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 356; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/hr.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 927 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c" { cs = lexer_start; } #line 425 "ragel/i18n/hr.c.rl" #line 934 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/hr.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/hr.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/hr.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/hr.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/hr.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/hr.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/hr.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/hr.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/hr.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/hr.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/hr.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/hr.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/hr.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/hr.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/hr.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/hr.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/hr.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/hr.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/hr.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/hr.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/hr.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/hr.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/hr.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/hr.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1224 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/hr.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1287 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c" } } } _out: {} } #line 426 "ragel/i18n/hr.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_hr() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Hr", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_hr/extconf.rb0000644000004100000410000000035612244512574021401 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_hr") have_library("c", "main") create_makefile("gherkin_lexer_hr") gherkin-2.12.2/ext/gherkin_lexer_is/0000755000004100000410000000000012244512574017404 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_is/extconf.rb0000644000004100000410000000035612244512574021403 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_is") have_library("c", "main") create_makefile("gherkin_lexer_is") gherkin-2.12.2/ext/gherkin_lexer_is/gherkin_lexer_is.c0000644000004100000410000011523212244512574023075 0ustar www-datawww-data #line 1 "ragel/i18n/is.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/is.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_is/gherkin_lexer_is.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 19, 21, 22, 23, 25, 27, 44, 45, 46, 48, 50, 55, 60, 65, 70, 74, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 100, 107, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 125, 126, 127, 141, 143, 146, 148, 150, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 192, 194, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 333, 334, 335, 336, 337, 338, 339, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 539, 540, 541, 542, 543, 544, 545, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 575, 577, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 665, 666, 667, 668, 669, 673, 679, 682, 684, 690, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 855, 856, 857, 858, 859, 860 }; static const char _lexer_trans_keys[] = { -61, -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, -98, -61, 101, -95, 32, 10, 13, 10, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 116, 98, 117, 114, -61, -80, 97, 114, -61, -95, 115, 58, 105, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 66, 69, 76, 79, 9, 13, -98, 10, -61, 10, 101, -95, 10, 10, 32, -61, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, 97, 107, 103, 114, 117, 110, 110, 117, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 76, 79, 9, 13, -98, 10, -61, 10, 101, -95, 10, 10, 32, 10, 103, 10, 97, 10, 114, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 10, 102, 105, 110, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, -61, 10, -67, 10, 10, 115, 10, 105, 10, 110, 10, 103, 10, 32, 10, 65, 68, 10, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 97, 10, 114, -61, 10, -90, 10, 10, 109, 10, 97, 10, 103, -61, -90, 109, 105, 58, 10, 10, 10, 32, 35, 69, 124, 9, 13, 10, 105, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, 10, 58, 102, 105, 110, 103, 105, 110, 108, 101, 105, 107, 105, 58, 10, 10, 10, 32, 35, 37, 64, 65, 66, 68, 69, 76, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 105, 10, 114, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 117, -61, 10, -90, 10, 10, 109, 10, 105, 10, 105, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, -61, 10, -67, 10, 10, 115, 10, 105, 10, 110, 10, 103, 10, 32, 10, 65, 68, 10, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 97, -61, 10, -90, 10, 10, 109, 10, 97, -61, -67, 115, 105, 110, 103, 32, 65, 68, 116, 98, 117, 114, -61, -80, 97, 114, -61, -95, 115, 97, 114, 58, 10, 10, -61, 10, 32, 35, 37, 42, 64, 65, 69, 79, 9, 13, -98, 10, -61, 10, 101, -95, 10, 10, 32, 10, 103, 10, 97, 10, 114, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 10, 102, 105, 110, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, 10, 103, -61, -90, 109, 97, 103, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -61, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 76, 79, 124, 9, 13, 10, 103, 10, 97, 10, 114, 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, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 58, 10, 97, 10, 107, 10, 103, 10, 114, 10, 117, 10, 110, 10, 110, 10, 117, 10, 114, 10, 102, 105, 110, 10, 103, 10, 105, 10, 110, 10, 108, 10, 101, 10, 105, 10, 107, 10, 105, -61, 10, -67, 10, 10, 115, 10, 105, 10, 110, 10, 103, 10, 32, 10, 65, 68, 10, 116, 10, 98, 10, 117, 10, 114, -61, 10, -80, 10, 10, 97, 10, 114, -61, 10, -95, 10, 10, 115, 10, 97, -61, 10, -90, 10, 10, 109, 10, 97, 10, 103, 114, 103, 97, 114, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 1, 2, 1, 1, 2, 2, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 12, 2, 3, 2, 2, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 2, 2, 2, 2, 4, 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, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 15, 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, 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, 1, 1, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 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, 1, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 20, 23, 25, 27, 30, 33, 50, 52, 54, 57, 60, 65, 70, 75, 80, 84, 88, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 126, 133, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 163, 165, 167, 181, 184, 188, 191, 194, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 248, 251, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 353, 356, 359, 362, 365, 368, 371, 374, 377, 380, 383, 386, 389, 392, 395, 398, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 458, 460, 462, 464, 466, 468, 470, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 702, 705, 708, 711, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 765, 767, 769, 771, 773, 775, 777, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 824, 827, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 958, 960, 962, 964, 966, 970, 976, 980, 983, 989, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1227, 1229, 1231, 1233, 1235, 1237 }; static const short _lexer_trans_targs[] = { 2, 397, 8, 8, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 8, 0, 3, 0, 4, 394, 0, 5, 0, 6, 0, 8, 20, 7, 8, 20, 7, 2, 8, 8, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 8, 0, 10, 0, 11, 0, 13, 12, 12, 13, 12, 12, 14, 14, 15, 14, 14, 14, 14, 15, 14, 14, 14, 14, 16, 14, 14, 14, 14, 17, 14, 14, 8, 18, 18, 0, 8, 18, 18, 0, 8, 20, 19, 8, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 399, 0, 0, 0, 0, 0, 36, 37, 8, 37, 37, 35, 36, 36, 8, 37, 35, 37, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 393, 0, 52, 51, 52, 51, 53, 52, 52, 8, 324, 56, 8, 338, 350, 359, 368, 392, 52, 51, 54, 52, 51, 55, 52, 321, 51, 56, 52, 51, 52, 57, 51, 2, 8, 8, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 8, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 70, 69, 70, 69, 71, 70, 70, 8, 78, 74, 8, 92, 104, 113, 138, 70, 69, 72, 70, 69, 73, 70, 75, 69, 74, 70, 69, 70, 57, 69, 70, 76, 69, 70, 77, 69, 70, 74, 69, 70, 79, 69, 70, 80, 69, 70, 81, 69, 70, 82, 69, 70, 83, 69, 70, 84, 69, 70, 85, 69, 70, 86, 69, 70, 87, 69, 70, 88, 69, 70, 89, 69, 70, 90, 69, 70, 91, 69, 70, 8, 69, 70, 93, 69, 70, 94, 69, 70, 95, 69, 70, 96, 69, 97, 70, 69, 98, 70, 69, 70, 99, 69, 70, 100, 69, 101, 70, 69, 102, 70, 69, 70, 103, 69, 70, 57, 69, 70, 74, 105, 74, 69, 70, 106, 69, 70, 107, 69, 70, 108, 69, 70, 109, 69, 70, 110, 69, 70, 111, 69, 70, 112, 69, 70, 103, 69, 114, 70, 69, 115, 70, 69, 70, 116, 69, 70, 117, 69, 70, 118, 69, 70, 119, 69, 70, 120, 69, 70, 121, 134, 69, 70, 122, 69, 70, 123, 69, 70, 124, 69, 70, 125, 69, 126, 70, 69, 127, 70, 69, 70, 128, 69, 70, 129, 69, 130, 70, 69, 131, 70, 69, 70, 132, 69, 70, 133, 69, 70, 103, 69, 135, 70, 69, 136, 70, 69, 70, 137, 69, 70, 103, 69, 70, 74, 69, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 146, 145, 146, 145, 146, 146, 8, 147, 8, 146, 145, 146, 148, 145, 146, 149, 145, 146, 150, 145, 146, 151, 145, 146, 152, 145, 146, 153, 145, 146, 154, 145, 146, 155, 145, 146, 156, 145, 146, 57, 145, 5, 158, 5, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 169, 168, 169, 168, 169, 169, 8, 170, 8, 184, 198, 206, 210, 218, 169, 168, 169, 171, 168, 169, 172, 168, 169, 173, 168, 169, 174, 168, 169, 175, 168, 169, 176, 168, 169, 177, 168, 169, 178, 168, 169, 179, 168, 169, 180, 168, 169, 181, 168, 169, 182, 168, 169, 183, 168, 169, 8, 168, 169, 185, 168, 169, 186, 168, 169, 187, 168, 169, 188, 168, 189, 169, 168, 190, 169, 168, 169, 191, 168, 169, 192, 168, 193, 169, 168, 194, 169, 168, 169, 195, 168, 169, 57, 196, 168, 169, 197, 168, 169, 57, 168, 169, 199, 168, 169, 200, 168, 169, 201, 168, 169, 202, 168, 169, 203, 168, 169, 204, 168, 169, 205, 168, 169, 196, 168, 207, 169, 168, 208, 169, 168, 169, 209, 168, 169, 197, 168, 169, 211, 168, 169, 212, 168, 169, 213, 168, 169, 214, 168, 169, 215, 168, 169, 216, 168, 169, 217, 168, 169, 209, 168, 219, 169, 168, 220, 169, 168, 169, 221, 168, 169, 222, 168, 169, 223, 168, 169, 224, 168, 169, 225, 168, 169, 226, 238, 168, 169, 227, 168, 169, 228, 168, 169, 229, 168, 169, 230, 168, 231, 169, 168, 232, 169, 168, 169, 233, 168, 169, 234, 168, 235, 169, 168, 236, 169, 168, 169, 237, 168, 169, 196, 168, 239, 169, 168, 240, 169, 168, 169, 241, 168, 169, 197, 168, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 310, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 266, 265, 266, 265, 267, 266, 266, 8, 274, 270, 8, 288, 300, 309, 266, 265, 268, 266, 265, 269, 266, 271, 265, 270, 266, 265, 266, 57, 265, 266, 272, 265, 266, 273, 265, 266, 270, 265, 266, 275, 265, 266, 276, 265, 266, 277, 265, 266, 278, 265, 266, 279, 265, 266, 280, 265, 266, 281, 265, 266, 282, 265, 266, 283, 265, 266, 284, 265, 266, 285, 265, 266, 286, 265, 266, 287, 265, 266, 8, 265, 266, 289, 265, 266, 290, 265, 266, 291, 265, 266, 292, 265, 293, 266, 265, 294, 266, 265, 266, 295, 265, 266, 296, 265, 297, 266, 265, 298, 266, 265, 266, 299, 265, 266, 57, 265, 266, 270, 301, 270, 265, 266, 302, 265, 266, 303, 265, 266, 304, 265, 266, 305, 265, 266, 306, 265, 266, 307, 265, 266, 308, 265, 266, 299, 265, 266, 270, 265, 311, 0, 312, 0, 313, 0, 263, 0, 5, 0, 315, 316, 315, 0, 320, 319, 318, 316, 319, 317, 0, 318, 316, 317, 0, 318, 317, 320, 319, 318, 316, 319, 317, 2, 320, 320, 9, 19, 21, 5, 35, 38, 58, 139, 157, 242, 314, 315, 320, 0, 52, 322, 51, 52, 323, 51, 52, 56, 51, 52, 325, 51, 52, 326, 51, 52, 327, 51, 52, 328, 51, 52, 329, 51, 52, 330, 51, 52, 331, 51, 52, 332, 51, 52, 333, 51, 52, 334, 51, 52, 335, 51, 52, 336, 51, 52, 337, 51, 52, 8, 51, 52, 339, 51, 52, 340, 51, 52, 341, 51, 52, 342, 51, 343, 52, 51, 344, 52, 51, 52, 345, 51, 52, 346, 51, 347, 52, 51, 348, 52, 51, 52, 349, 51, 52, 57, 51, 52, 351, 51, 52, 352, 51, 52, 353, 51, 52, 354, 51, 52, 355, 51, 52, 356, 51, 52, 357, 51, 52, 358, 51, 52, 349, 51, 52, 56, 360, 56, 51, 52, 361, 51, 52, 362, 51, 52, 363, 51, 52, 364, 51, 52, 365, 51, 52, 366, 51, 52, 367, 51, 52, 349, 51, 369, 52, 51, 370, 52, 51, 52, 371, 51, 52, 372, 51, 52, 373, 51, 52, 374, 51, 52, 375, 51, 52, 376, 388, 51, 52, 377, 51, 52, 378, 51, 52, 379, 51, 52, 380, 51, 381, 52, 51, 382, 52, 51, 52, 383, 51, 52, 384, 51, 385, 52, 51, 386, 52, 51, 52, 387, 51, 52, 358, 51, 389, 52, 51, 390, 52, 51, 52, 391, 51, 52, 349, 51, 52, 56, 51, 143, 0, 395, 0, 396, 0, 5, 0, 398, 0, 8, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 17, 0, 63, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 84, 84, 84, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 399; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/is.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 980 "ext/gherkin_lexer_is/gherkin_lexer_is.c" { cs = lexer_start; } #line 425 "ragel/i18n/is.c.rl" #line 987 "ext/gherkin_lexer_is/gherkin_lexer_is.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/is.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/is.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/is.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/is.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/is.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/is.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/is.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/is.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/is.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/is.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/is.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/is.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/is.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/is.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/is.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/is.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/is.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/is.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/is.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/is.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/is.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/is.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/is.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/is.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1277 "ext/gherkin_lexer_is/gherkin_lexer_is.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/is.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1340 "ext/gherkin_lexer_is/gherkin_lexer_is.c" } } } _out: {} } #line 426 "ragel/i18n/is.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_is() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Is", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_cs/0000755000004100000410000000000012244512574017376 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_cs/extconf.rb0000644000004100000410000000035612244512574021375 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_cs") have_library("c", "main") create_makefile("gherkin_lexer_cs") gherkin-2.12.2/ext/gherkin_lexer_cs/gherkin_lexer_cs.c0000644000004100000410000012673712244512574023075 0ustar www-datawww-data #line 1 "ragel/i18n/cs.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/cs.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 18, 19, 20, 37, 38, 39, 41, 43, 48, 53, 58, 63, 67, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 98, 105, 110, 112, 115, 118, 121, 124, 127, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 272, 290, 291, 292, 293, 294, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 339, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 457, 459, 461, 463, 465, 467, 469, 471, 473, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 579, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 620, 626, 629, 631, 637, 654, 656, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 728, 730, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 805, 806, 807, 808, 809, 811, 813, 815, 817, 819, 822, 824, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 894, 912, 913, 914, 915, 916, 917, 919, 921, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 980, 982, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 108, 10, 13, 116, 10, 13, 97, 10, 13, 107, -61, 10, 13, -87, 10, 13, 10, 13, 32, 101, 100, 111, 121, -59, -66, 110, 116, 101, 120, 116, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 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, 75, 78, 79, 80, 83, 90, 124, 9, 13, -61, -95, -60, -115, 114, 116, 32, 83, 99, -61, -87, 110, -61, -95, -59, -103, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 75, 80, 83, 90, 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, 108, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 116, 124, 9, 13, 115, 110, 111, 118, 97, 32, 115, -59, 97, 111, -103, -61, -83, 107, 108, 97, 100, 121, 58, 10, 10, 10, 32, 35, 80, 124, 9, 13, 10, 111, -59, 10, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 58, 107, -59, 107, 122, -66, 97, 100, 97, 118, 101, 107, 58, 10, 10, 10, 32, 35, 37, 64, 75, 78, 79, 80, 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, 111, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 101, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 115, -59, 10, 111, -103, 10, -61, 10, -83, 10, 10, 107, 10, 108, 10, 97, 10, 100, 10, 121, -59, 10, 122, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 97, 10, 100, -61, 10, -83, 10, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 117, 100, 97, 100, -61, -83, 99, -61, -87, 110, -61, -95, -59, -103, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 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, 108, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 116, 124, 9, 13, 97, 32, 112, -59, -103, 101, 100, 112, 111, 107, 108, 97, 100, 117, 97, 107, -61, -87, 32, 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, 75, 78, 79, 80, 83, 90, 124, 9, 13, 10, 101, 10, 100, 111, 10, 121, -59, 10, -66, 10, 10, 110, 10, 116, 10, 101, 10, 120, 10, 116, 10, 58, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 101, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 115, 10, 97, 111, 10, 107, -59, 10, 107, 122, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 117, 10, 100, 10, 97, 10, 100, -61, 10, -83, 10, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 97, 10, 32, 10, 112, -59, 10, -103, 10, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 97, 107, -61, -87, 32, 10, 101, 10, 100, 10, 121, -59, 10, -66, 10, 10, 97, 111, 10, 107, -59, 10, 107, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 58, 10, 117, 10, 100, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 97, 10, 32, 10, 112, -59, 10, -103, 10, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 10, 32, 108, 10, 32, 34, 35, 37, 42, 64, 65, 75, 78, 79, 80, 83, 90, 116, 124, 9, 13, 97, 107, -61, -87, 32, 10, 101, 10, 100, 10, 121, -59, 10, -66, 10, -61, 10, -95, 10, -60, 10, -115, 10, 10, 114, 10, 116, 10, 32, 10, 83, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 101, 10, 58, 10, 115, 10, 110, 10, 111, 10, 118, 10, 97, 10, 32, 10, 115, 10, 97, 111, 10, 107, -59, 10, 107, -66, 10, 10, 97, 10, 100, 10, 97, 10, 118, 10, 101, 10, 107, 10, 117, 10, 100, 10, 99, -61, 10, -87, 10, 10, 110, -61, 10, -95, 10, -59, 10, -103, 10, 10, 97, 10, 32, 10, 112, -59, 10, -103, 10, 10, 101, 10, 100, 10, 112, 10, 111, 10, 107, 10, 108, 10, 97, 10, 100, 10, 117, 0 }; static const char _lexer_single_lengths[] = { 0, 16, 1, 1, 15, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 3, 3, 3, 3, 3, 3, 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, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 16, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 3, 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, 1, 1, 1, 1, 1, 1, 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, 3, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 15, 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, 2, 2, 2, 2, 2, 2, 3, 2, 4, 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, 2, 2, 2, 2, 2, 3, 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, 2, 2, 2, 2, 2, 3, 16, 1, 1, 1, 1, 1, 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, 3, 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, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 1, 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, 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, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 18, 20, 22, 39, 41, 43, 46, 49, 54, 59, 64, 69, 73, 77, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 115, 118, 123, 130, 135, 138, 142, 146, 150, 154, 158, 162, 164, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 368, 386, 388, 390, 392, 394, 396, 398, 400, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 465, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 640, 643, 646, 649, 652, 655, 658, 661, 664, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 823, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 883, 889, 893, 896, 902, 919, 922, 926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1029, 1032, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1144, 1146, 1148, 1150, 1152, 1155, 1158, 1161, 1164, 1167, 1171, 1174, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1278, 1296, 1298, 1300, 1302, 1304, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 1396, 1400, 1403, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 478, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 44, 0, 4, 16, 39, 33, 4, 16, 40, 33, 4, 16, 41, 33, 42, 4, 16, 33, 43, 4, 16, 33, 4, 16, 32, 33, 31, 0, 46, 49, 0, 47, 0, 48, 0, 31, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 57, 56, 57, 56, 57, 57, 4, 58, 72, 4, 407, 415, 419, 437, 444, 456, 464, 57, 56, 57, 59, 56, 57, 60, 56, 57, 61, 56, 57, 62, 56, 57, 63, 56, 57, 64, 56, 57, 65, 56, 57, 66, 56, 57, 67, 56, 57, 68, 56, 57, 69, 56, 57, 70, 56, 57, 71, 56, 57, 4, 56, 57, 73, 56, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 4, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 94, 93, 94, 93, 94, 94, 4, 95, 109, 4, 110, 368, 372, 385, 393, 94, 93, 94, 96, 93, 94, 97, 93, 94, 98, 93, 94, 99, 93, 94, 100, 93, 94, 101, 93, 94, 102, 93, 94, 103, 93, 94, 104, 93, 94, 105, 93, 94, 106, 93, 94, 107, 93, 94, 108, 93, 94, 4, 93, 94, 73, 93, 94, 111, 367, 93, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 362, 283, 4, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 82, 0, 120, 142, 143, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 131, 130, 131, 130, 131, 131, 4, 132, 4, 131, 130, 131, 133, 130, 134, 131, 130, 135, 131, 130, 131, 136, 130, 131, 137, 130, 131, 138, 130, 131, 139, 130, 131, 140, 130, 131, 141, 130, 131, 73, 130, 31, 0, 144, 229, 231, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 154, 153, 154, 153, 154, 154, 4, 155, 4, 169, 176, 193, 200, 221, 154, 153, 154, 156, 153, 154, 157, 153, 154, 158, 153, 154, 159, 153, 154, 160, 153, 154, 161, 153, 154, 162, 153, 154, 163, 153, 154, 164, 153, 154, 165, 153, 154, 166, 153, 154, 167, 153, 154, 168, 153, 154, 4, 153, 154, 170, 153, 154, 171, 153, 154, 172, 153, 154, 173, 153, 154, 174, 153, 154, 175, 153, 154, 73, 153, 177, 154, 153, 178, 154, 153, 179, 154, 153, 180, 154, 153, 154, 181, 153, 154, 182, 153, 154, 183, 153, 154, 184, 153, 154, 185, 153, 186, 154, 153, 187, 154, 153, 154, 188, 153, 189, 154, 153, 190, 154, 153, 191, 154, 153, 192, 154, 153, 154, 175, 153, 154, 194, 153, 154, 195, 153, 154, 196, 153, 154, 197, 153, 154, 198, 153, 154, 199, 153, 154, 184, 153, 201, 154, 209, 153, 202, 154, 153, 203, 154, 153, 204, 154, 153, 154, 205, 153, 154, 206, 153, 154, 207, 153, 154, 208, 153, 154, 175, 153, 210, 154, 217, 153, 211, 154, 153, 154, 212, 153, 154, 213, 153, 154, 214, 153, 154, 215, 153, 154, 216, 153, 154, 175, 153, 154, 218, 153, 154, 219, 153, 220, 154, 153, 175, 154, 153, 154, 222, 153, 223, 154, 153, 224, 154, 153, 154, 225, 153, 226, 154, 153, 227, 154, 153, 228, 154, 153, 175, 154, 153, 230, 0, 31, 0, 232, 0, 233, 0, 234, 0, 54, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 246, 245, 246, 245, 246, 246, 4, 247, 261, 4, 262, 290, 300, 317, 324, 340, 348, 246, 245, 246, 248, 245, 246, 249, 245, 246, 250, 245, 246, 251, 245, 246, 252, 245, 246, 253, 245, 246, 254, 245, 246, 255, 245, 246, 256, 245, 246, 257, 245, 246, 258, 245, 246, 259, 245, 246, 260, 245, 246, 4, 245, 246, 73, 245, 246, 263, 289, 245, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 278, 283, 4, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 31, 0, 279, 0, 280, 0, 281, 0, 282, 0, 73, 0, 283, 284, 283, 0, 288, 287, 286, 284, 287, 285, 0, 286, 284, 285, 0, 286, 285, 288, 287, 286, 284, 287, 285, 288, 288, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 283, 288, 0, 246, 261, 245, 246, 291, 294, 245, 246, 292, 245, 293, 246, 245, 261, 246, 245, 246, 295, 245, 246, 296, 245, 246, 297, 245, 246, 298, 245, 246, 299, 245, 246, 73, 245, 301, 246, 245, 302, 246, 245, 303, 246, 245, 304, 246, 245, 246, 305, 245, 246, 306, 245, 246, 307, 245, 246, 308, 245, 246, 309, 245, 310, 246, 245, 311, 246, 245, 246, 312, 245, 313, 246, 245, 314, 246, 245, 315, 246, 245, 316, 246, 245, 246, 299, 245, 246, 318, 245, 246, 319, 245, 246, 320, 245, 246, 321, 245, 246, 322, 245, 246, 323, 245, 246, 308, 245, 246, 325, 326, 245, 246, 261, 245, 327, 246, 334, 336, 245, 328, 246, 245, 246, 329, 245, 246, 330, 245, 246, 331, 245, 246, 332, 245, 246, 333, 245, 246, 299, 245, 246, 335, 245, 246, 261, 245, 246, 337, 245, 246, 338, 245, 339, 246, 245, 299, 246, 245, 246, 341, 245, 342, 246, 245, 343, 246, 245, 246, 344, 245, 345, 246, 245, 346, 246, 245, 347, 246, 245, 299, 246, 245, 246, 349, 245, 246, 350, 245, 246, 351, 245, 352, 246, 245, 353, 246, 245, 246, 354, 245, 246, 355, 245, 246, 356, 245, 246, 357, 245, 246, 358, 245, 246, 359, 245, 246, 360, 245, 246, 361, 245, 246, 261, 245, 363, 0, 364, 0, 365, 0, 366, 0, 73, 0, 94, 109, 93, 94, 369, 93, 94, 370, 93, 371, 94, 93, 109, 94, 93, 94, 373, 374, 93, 94, 109, 93, 375, 94, 383, 93, 376, 94, 93, 94, 377, 93, 94, 378, 93, 94, 379, 93, 94, 380, 93, 94, 381, 93, 94, 382, 93, 94, 73, 93, 94, 384, 93, 94, 109, 93, 94, 386, 93, 387, 94, 93, 388, 94, 93, 94, 389, 93, 390, 94, 93, 391, 94, 93, 392, 94, 93, 382, 94, 93, 94, 394, 93, 94, 395, 93, 94, 396, 93, 397, 94, 93, 398, 94, 93, 94, 399, 93, 94, 400, 93, 94, 401, 93, 94, 402, 93, 94, 403, 93, 94, 404, 93, 94, 405, 93, 94, 406, 93, 94, 109, 93, 57, 408, 414, 56, 4, 4, 5, 15, 17, 31, 34, 37, 45, 74, 112, 119, 235, 264, 409, 283, 4, 0, 410, 0, 411, 0, 412, 0, 413, 0, 73, 0, 57, 72, 56, 57, 416, 56, 57, 417, 56, 418, 57, 56, 72, 57, 56, 420, 57, 56, 421, 57, 56, 422, 57, 56, 423, 57, 56, 57, 424, 56, 57, 425, 56, 57, 426, 56, 57, 427, 56, 57, 428, 56, 429, 57, 56, 430, 57, 56, 57, 431, 56, 432, 57, 56, 433, 57, 56, 434, 57, 56, 435, 57, 56, 57, 436, 56, 57, 73, 56, 57, 438, 56, 57, 439, 56, 57, 440, 56, 57, 441, 56, 57, 442, 56, 57, 443, 56, 57, 427, 56, 57, 445, 446, 56, 57, 72, 56, 447, 57, 454, 56, 448, 57, 56, 57, 449, 56, 57, 450, 56, 57, 451, 56, 57, 452, 56, 57, 453, 56, 57, 436, 56, 57, 455, 56, 57, 72, 56, 57, 457, 56, 458, 57, 56, 459, 57, 56, 57, 460, 56, 461, 57, 56, 462, 57, 56, 463, 57, 56, 436, 57, 56, 57, 465, 56, 57, 466, 56, 57, 467, 56, 468, 57, 56, 469, 57, 56, 57, 470, 56, 57, 471, 56, 57, 472, 56, 57, 473, 56, 57, 474, 56, 57, 475, 56, 57, 476, 56, 57, 477, 56, 57, 72, 56, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 149, 126, 57, 57, 110, 23, 0, 0, 110, 23, 0, 0, 0, 110, 23, 0, 0, 110, 23, 0, 110, 23, 0, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 19, 0, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 17, 0, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 17, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 19, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 0, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 15, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 478; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/cs.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1119 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c" { cs = lexer_start; } #line 425 "ragel/i18n/cs.c.rl" #line 1126 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/cs.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/cs.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/cs.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/cs.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/cs.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/cs.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/cs.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/cs.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/cs.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/cs.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/cs.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/cs.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/cs.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/cs.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/cs.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/cs.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/cs.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/cs.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/cs.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/cs.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/cs.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/cs.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/cs.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/cs.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1416 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/cs.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1479 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c" } } } _out: {} } #line 426 "ragel/i18n/cs.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_cs() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Cs", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en/0000755000004100000410000000000012244512574017373 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en/extconf.rb0000644000004100000410000000035612244512574021372 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en") have_library("c", "main") create_makefile("gherkin_lexer_en") gherkin-2.12.2/ext/gherkin_lexer_en/gherkin_lexer_en.c0000644000004100000410000012001512244512574023046 0ustar www-datawww-data #line 1 "ragel/i18n/en.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en/gherkin_lexer_en.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 255, 257, 259, 261, 263, 265, 267, 269, 271, 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, 328, 331, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 459, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 518, 520, 522, 524, 526, 528, 530, 532, 534, 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, 587, 589, 591, 593, 594, 595, 596, 597, 598, 599, 600, 601, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 649, 651, 653, 655, 657, 659, 661, 663, 666, 668, 670, 672, 674, 676, 678, 680, 682, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 740, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 767, 768, 772, 778, 781, 783, 789, 807, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 890, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 916 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 110, 105, 108, 105, 116, 121, 58, 10, 10, 10, 32, 35, 37, 64, 65, 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, 98, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 69, 70, 71, 83, 84, 87, 124, 9, 13, 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, 98, 110, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 100, 10, 117, 10, 115, 116, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 10, 100, 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, 115, 116, 105, 110, 101, 115, 115, 32, 78, 101, 101, 100, 120, 97, 109, 112, 108, 101, 115, 58, 10, 10, 10, 32, 35, 65, 66, 70, 124, 9, 13, 10, 98, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 117, 10, 115, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 10, 100, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 101, 97, 116, 117, 114, 101, 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, 98, 110, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 100, 10, 117, 10, 115, 116, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 10, 100, 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, 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, 98, 110, 10, 105, 10, 108, 10, 105, 10, 116, 10, 121, 10, 58, 10, 100, 10, 97, 117, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 10, 115, 116, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 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, 97, 117, 10, 99, 10, 107, 10, 103, 10, 114, 10, 111, 10, 117, 10, 110, 10, 100, 10, 115, 10, 105, 10, 110, 10, 101, 10, 115, 10, 115, 10, 32, 10, 78, 10, 101, 10, 101, 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, 100, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 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, 3, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 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, 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, 3, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 4, 3, 2, 4, 16, 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, 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, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 1, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 140, 142, 144, 146, 148, 150, 152, 154, 156, 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 249, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 338, 341, 344, 347, 350, 353, 356, 359, 362, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 451, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 656, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 741, 744, 747, 750, 753, 756, 759, 762, 765, 769, 772, 775, 778, 781, 784, 787, 790, 793, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 847, 850, 853, 855, 857, 859, 861, 863, 865, 867, 869, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 939, 942, 945, 948, 951, 954, 958, 961, 964, 967, 970, 973, 976, 979, 982, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1068, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1110, 1114, 1120, 1124, 1127, 1133, 1151, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 1266, 1269, 1274, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1313 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 359, 360, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 359, 360, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 419, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 418, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 46, 45, 46, 45, 46, 46, 4, 47, 4, 61, 366, 385, 392, 398, 46, 45, 46, 48, 45, 46, 49, 45, 46, 50, 45, 46, 51, 45, 46, 52, 45, 46, 53, 45, 46, 54, 45, 46, 55, 45, 46, 56, 45, 46, 57, 45, 46, 58, 45, 46, 59, 45, 46, 60, 45, 46, 4, 45, 46, 62, 45, 46, 63, 45, 46, 64, 45, 46, 65, 45, 46, 66, 45, 46, 67, 45, 46, 68, 45, 4, 4, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 359, 360, 4, 0, 70, 148, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 81, 80, 81, 80, 81, 81, 4, 82, 96, 4, 97, 105, 117, 123, 127, 147, 147, 81, 80, 81, 83, 80, 81, 84, 80, 81, 85, 80, 81, 86, 80, 81, 87, 80, 81, 88, 80, 81, 89, 80, 81, 90, 80, 81, 91, 80, 81, 92, 80, 81, 93, 80, 81, 94, 80, 81, 95, 80, 81, 4, 80, 81, 68, 80, 81, 98, 104, 80, 81, 99, 80, 81, 100, 80, 81, 101, 80, 81, 102, 80, 81, 103, 80, 81, 68, 80, 81, 96, 80, 81, 106, 80, 81, 107, 96, 80, 81, 108, 80, 81, 109, 80, 81, 110, 80, 81, 111, 80, 81, 112, 80, 81, 113, 80, 81, 114, 80, 81, 115, 80, 81, 116, 80, 81, 103, 80, 81, 118, 80, 81, 119, 80, 81, 120, 80, 81, 121, 80, 81, 122, 80, 81, 103, 80, 81, 124, 80, 81, 125, 80, 81, 126, 80, 81, 96, 80, 81, 128, 80, 81, 129, 80, 81, 130, 80, 81, 131, 80, 81, 132, 80, 81, 133, 80, 81, 134, 80, 81, 135, 68, 80, 81, 136, 141, 80, 81, 137, 80, 81, 138, 80, 81, 139, 80, 81, 140, 80, 81, 122, 80, 81, 142, 80, 81, 143, 80, 81, 144, 80, 81, 145, 80, 81, 146, 80, 81, 122, 80, 81, 125, 80, 149, 31, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 43, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 169, 168, 169, 168, 169, 169, 4, 170, 177, 189, 4, 169, 168, 169, 171, 168, 169, 172, 168, 169, 173, 168, 169, 174, 168, 169, 175, 168, 169, 176, 168, 169, 68, 168, 169, 178, 168, 169, 179, 168, 169, 180, 168, 169, 181, 168, 169, 182, 168, 169, 183, 168, 169, 184, 168, 169, 185, 168, 169, 186, 168, 169, 187, 168, 169, 188, 168, 169, 176, 168, 169, 190, 168, 169, 191, 168, 169, 192, 168, 169, 193, 168, 169, 194, 168, 169, 176, 168, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 43, 0, 202, 0, 203, 0, 204, 0, 31, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 283, 166, 0, 214, 277, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 223, 222, 223, 222, 223, 223, 4, 224, 238, 4, 239, 247, 259, 265, 269, 276, 276, 223, 222, 223, 225, 222, 223, 226, 222, 223, 227, 222, 223, 228, 222, 223, 229, 222, 223, 230, 222, 223, 231, 222, 223, 232, 222, 223, 233, 222, 223, 234, 222, 223, 235, 222, 223, 236, 222, 223, 237, 222, 223, 4, 222, 223, 68, 222, 223, 240, 246, 222, 223, 241, 222, 223, 242, 222, 223, 243, 222, 223, 244, 222, 223, 245, 222, 223, 68, 222, 223, 238, 222, 223, 248, 222, 223, 249, 238, 222, 223, 250, 222, 223, 251, 222, 223, 252, 222, 223, 253, 222, 223, 254, 222, 223, 255, 222, 223, 256, 222, 223, 257, 222, 223, 258, 222, 223, 245, 222, 223, 260, 222, 223, 261, 222, 223, 262, 222, 223, 263, 222, 223, 264, 222, 223, 245, 222, 223, 266, 222, 223, 267, 222, 223, 268, 222, 223, 238, 222, 223, 270, 222, 223, 271, 222, 223, 272, 222, 223, 273, 222, 223, 274, 222, 223, 275, 222, 223, 245, 222, 223, 267, 222, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 219, 0, 285, 284, 285, 284, 285, 285, 4, 286, 300, 4, 301, 309, 328, 334, 338, 358, 358, 285, 284, 285, 287, 284, 285, 288, 284, 285, 289, 284, 285, 290, 284, 285, 291, 284, 285, 292, 284, 285, 293, 284, 285, 294, 284, 285, 295, 284, 285, 296, 284, 285, 297, 284, 285, 298, 284, 285, 299, 284, 285, 4, 284, 285, 68, 284, 285, 302, 308, 284, 285, 303, 284, 285, 304, 284, 285, 305, 284, 285, 306, 284, 285, 307, 284, 285, 68, 284, 285, 300, 284, 285, 310, 318, 284, 285, 311, 284, 285, 312, 284, 285, 313, 284, 285, 314, 284, 285, 315, 284, 285, 316, 284, 285, 317, 284, 285, 307, 284, 285, 319, 300, 284, 285, 320, 284, 285, 321, 284, 285, 322, 284, 285, 323, 284, 285, 324, 284, 285, 325, 284, 285, 326, 284, 285, 327, 284, 285, 317, 284, 285, 329, 284, 285, 330, 284, 285, 331, 284, 285, 332, 284, 285, 333, 284, 285, 307, 284, 285, 335, 284, 285, 336, 284, 285, 337, 284, 285, 300, 284, 285, 339, 284, 285, 340, 284, 285, 341, 284, 285, 342, 284, 285, 343, 284, 285, 344, 284, 285, 345, 284, 285, 346, 68, 284, 285, 347, 352, 284, 285, 348, 284, 285, 349, 284, 285, 350, 284, 285, 351, 284, 285, 333, 284, 285, 353, 284, 285, 354, 284, 285, 355, 284, 285, 356, 284, 285, 357, 284, 285, 333, 284, 285, 336, 284, 203, 0, 360, 361, 360, 0, 365, 364, 363, 361, 364, 362, 0, 363, 361, 362, 0, 363, 362, 365, 364, 363, 361, 364, 362, 365, 365, 5, 15, 17, 31, 34, 37, 69, 159, 195, 201, 205, 359, 359, 360, 365, 0, 46, 367, 375, 45, 46, 368, 45, 46, 369, 45, 46, 370, 45, 46, 371, 45, 46, 372, 45, 46, 373, 45, 46, 374, 45, 46, 67, 45, 46, 376, 45, 46, 377, 45, 46, 378, 45, 46, 379, 45, 46, 380, 45, 46, 381, 45, 46, 382, 45, 46, 383, 45, 46, 384, 45, 46, 374, 45, 46, 386, 45, 46, 387, 45, 46, 388, 45, 46, 389, 45, 46, 390, 45, 46, 391, 45, 46, 67, 45, 46, 393, 45, 46, 394, 45, 46, 395, 45, 46, 396, 45, 46, 397, 45, 46, 67, 45, 46, 399, 45, 46, 400, 45, 46, 401, 45, 46, 402, 45, 46, 403, 45, 46, 404, 45, 46, 405, 45, 46, 406, 68, 67, 45, 46, 407, 412, 45, 46, 408, 45, 46, 409, 45, 46, 410, 45, 46, 411, 45, 46, 397, 45, 46, 413, 45, 46, 414, 45, 46, 415, 45, 46, 416, 45, 46, 417, 45, 46, 397, 45, 31, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 84, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 13, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 419; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1022 "ext/gherkin_lexer_en/gherkin_lexer_en.c" { cs = lexer_start; } #line 425 "ragel/i18n/en.c.rl" #line 1029 "ext/gherkin_lexer_en/gherkin_lexer_en.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1319 "ext/gherkin_lexer_en/gherkin_lexer_en.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1382 "ext/gherkin_lexer_en/gherkin_lexer_en.c" } } } _out: {} } #line 426 "ragel/i18n/en.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_nl/0000755000004100000410000000000012244512574017402 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_nl/gherkin_lexer_nl.c0000644000004100000410000011442612244512574023075 0ustar www-datawww-data #line 1 "ragel/i18n/nl.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/nl.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 356, 357, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 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, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 526, 528, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 586, 592, 595, 597, 603, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, 653, 655, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 678, 680, 682, 684, 686, 688, 690, 692, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 839, 841, 843, 844 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 99, 108, 115, 116, 114, 97, 99, 116, 32, 83, 99, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 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, 32, 10, 32, 34, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, 97, 110, 117, 110, 99, 116, 105, 111, 110, 97, 108, 105, 116, 101, 105, 116, 58, 10, 10, 10, 32, 35, 37, 64, 65, 70, 83, 86, 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, 98, 99, 10, 115, 10, 116, 10, 114, 10, 97, 10, 99, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 104, 10, 116, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 111, 10, 111, 10, 114, 10, 98, 10, 101, 10, 101, 10, 108, 10, 100, 10, 101, 10, 110, 101, 103, 101, 118, 101, 97, 97, 114, 99, 116, 101, 110, 97, 114, 105, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 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, 32, 10, 98, 99, 108, 10, 115, 10, 116, 10, 114, 10, 97, 10, 99, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 104, 10, 116, 10, 101, 10, 114, 10, 103, 10, 114, 10, 111, 10, 110, 10, 100, 10, 115, 10, 97, 10, 110, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 101, 10, 103, 10, 101, 10, 118, 10, 101, 10, 97, 10, 97, 10, 114, 10, 99, 116, 10, 101, 10, 108, 101, 108, 111, 111, 114, 98, 101, 101, 108, 100, 101, 110, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 58, 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, 68, 69, 70, 71, 77, 83, 86, 124, 9, 13, 10, 108, 10, 115, 10, 97, 10, 110, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 58, 10, 101, 10, 103, 10, 101, 10, 118, 10, 101, 10, 97, 10, 97, 10, 114, 10, 99, 116, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 101, 10, 108, 104, 116, 101, 114, 103, 114, 111, 110, 100, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 69, 70, 71, 77, 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, 32, 10, 98, 108, 10, 115, 10, 116, 10, 114, 10, 97, 10, 99, 10, 116, 10, 32, 10, 83, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 10, 115, 10, 97, 10, 110, 10, 117, 10, 110, 10, 99, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, 10, 101, 10, 105, 10, 116, 10, 101, 10, 103, 10, 101, 10, 118, 10, 101, 10, 97, 10, 97, 10, 114, 10, 99, 116, 10, 101, 10, 108, 115, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 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, 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, 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, 4, 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, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 1, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 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, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 499, 501, 503, 505, 507, 509, 511, 513, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 579, 582, 585, 588, 591, 594, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, 725, 728, 731, 734, 737, 740, 743, 746, 749, 753, 756, 759, 761, 763, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 796, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 845, 851, 855, 858, 864, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 967, 970, 973, 976, 979, 982, 985, 988, 991, 993, 995, 997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1206, 1209, 1212, 1214 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 392, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 318, 391, 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, 51, 0, 52, 0, 53, 0, 54, 0, 56, 55, 56, 55, 56, 56, 4, 57, 71, 4, 282, 284, 285, 286, 301, 306, 309, 56, 55, 56, 58, 55, 56, 59, 55, 56, 60, 55, 56, 61, 55, 56, 62, 55, 56, 63, 55, 56, 64, 55, 56, 65, 55, 56, 66, 55, 56, 67, 55, 56, 68, 55, 56, 69, 55, 56, 70, 55, 56, 4, 55, 56, 72, 55, 4, 4, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 4, 0, 74, 0, 31, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 92, 91, 92, 91, 92, 92, 4, 93, 4, 107, 133, 116, 147, 92, 91, 92, 94, 91, 92, 95, 91, 92, 96, 91, 92, 97, 91, 92, 98, 91, 92, 99, 91, 92, 100, 91, 92, 101, 91, 92, 102, 91, 92, 103, 91, 92, 104, 91, 92, 105, 91, 92, 106, 91, 92, 4, 91, 92, 108, 124, 91, 92, 109, 91, 92, 110, 91, 92, 111, 91, 92, 112, 91, 92, 113, 91, 92, 114, 91, 92, 115, 91, 92, 116, 91, 92, 117, 91, 92, 118, 91, 92, 119, 91, 92, 120, 91, 92, 121, 91, 92, 122, 91, 92, 123, 91, 92, 72, 91, 92, 125, 91, 92, 126, 91, 92, 127, 91, 92, 128, 91, 92, 129, 91, 92, 130, 91, 92, 131, 91, 92, 132, 91, 92, 123, 91, 92, 134, 91, 92, 135, 91, 92, 136, 91, 92, 137, 91, 92, 138, 91, 92, 139, 91, 92, 140, 91, 92, 141, 91, 92, 142, 91, 92, 143, 91, 92, 144, 91, 92, 145, 91, 92, 146, 91, 92, 123, 91, 92, 148, 91, 92, 149, 91, 92, 150, 91, 92, 151, 91, 92, 152, 91, 92, 153, 91, 92, 154, 91, 92, 155, 91, 92, 156, 91, 92, 123, 91, 158, 0, 159, 0, 160, 0, 161, 0, 74, 0, 163, 0, 164, 0, 31, 0, 166, 245, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 175, 174, 175, 174, 175, 175, 4, 176, 190, 4, 191, 218, 219, 220, 234, 239, 242, 175, 174, 175, 177, 174, 175, 178, 174, 175, 179, 174, 175, 180, 174, 175, 181, 174, 175, 182, 174, 175, 183, 174, 175, 184, 174, 175, 185, 174, 175, 186, 174, 175, 187, 174, 175, 188, 174, 175, 189, 174, 175, 4, 174, 175, 72, 174, 175, 192, 208, 217, 174, 175, 193, 174, 175, 194, 174, 175, 195, 174, 175, 196, 174, 175, 197, 174, 175, 198, 174, 175, 199, 174, 175, 200, 174, 175, 201, 174, 175, 202, 174, 175, 203, 174, 175, 204, 174, 175, 205, 174, 175, 206, 174, 175, 207, 174, 175, 72, 174, 175, 209, 174, 175, 210, 174, 175, 211, 174, 175, 212, 174, 175, 213, 174, 175, 214, 174, 175, 215, 174, 175, 216, 174, 175, 207, 174, 175, 190, 174, 175, 219, 174, 175, 190, 174, 175, 221, 174, 175, 222, 174, 175, 223, 174, 175, 224, 174, 175, 225, 174, 175, 226, 174, 175, 227, 174, 175, 228, 174, 175, 229, 174, 175, 230, 174, 175, 231, 174, 175, 232, 174, 175, 233, 174, 175, 207, 174, 175, 235, 174, 175, 236, 174, 175, 237, 174, 175, 238, 174, 175, 219, 174, 175, 240, 174, 175, 241, 174, 175, 190, 174, 175, 201, 243, 174, 175, 244, 174, 175, 190, 174, 246, 0, 31, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 260, 259, 260, 259, 260, 260, 4, 261, 4, 260, 259, 260, 262, 259, 260, 263, 259, 260, 264, 259, 260, 265, 259, 260, 266, 259, 260, 267, 259, 260, 268, 259, 260, 269, 259, 260, 270, 259, 260, 271, 259, 260, 272, 259, 260, 273, 259, 260, 274, 259, 260, 275, 259, 260, 72, 259, 276, 277, 276, 0, 281, 280, 279, 277, 280, 278, 0, 279, 277, 278, 0, 279, 278, 281, 280, 279, 277, 280, 278, 281, 281, 5, 15, 17, 31, 34, 37, 73, 74, 75, 157, 162, 165, 247, 276, 281, 0, 56, 283, 55, 56, 71, 55, 56, 285, 55, 56, 71, 55, 56, 287, 55, 56, 288, 55, 56, 289, 55, 56, 290, 55, 56, 291, 55, 56, 292, 55, 56, 293, 55, 56, 294, 55, 56, 295, 55, 56, 296, 55, 56, 297, 55, 56, 298, 55, 56, 299, 55, 56, 300, 55, 56, 72, 55, 56, 302, 55, 56, 303, 55, 56, 304, 55, 56, 305, 55, 56, 285, 55, 56, 307, 55, 56, 308, 55, 56, 71, 55, 56, 310, 316, 55, 56, 311, 55, 56, 312, 55, 56, 313, 55, 56, 314, 55, 56, 315, 55, 56, 300, 55, 56, 317, 55, 56, 71, 55, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 330, 329, 330, 329, 330, 330, 4, 331, 345, 4, 346, 364, 365, 366, 380, 385, 388, 330, 329, 330, 332, 329, 330, 333, 329, 330, 334, 329, 330, 335, 329, 330, 336, 329, 330, 337, 329, 330, 338, 329, 330, 339, 329, 330, 340, 329, 330, 341, 329, 330, 342, 329, 330, 343, 329, 330, 344, 329, 330, 4, 329, 330, 72, 329, 330, 347, 363, 329, 330, 348, 329, 330, 349, 329, 330, 350, 329, 330, 351, 329, 330, 352, 329, 330, 353, 329, 330, 354, 329, 330, 355, 329, 330, 356, 329, 330, 357, 329, 330, 358, 329, 330, 359, 329, 330, 360, 329, 330, 361, 329, 330, 362, 329, 330, 72, 329, 330, 345, 329, 330, 365, 329, 330, 345, 329, 330, 367, 329, 330, 368, 329, 330, 369, 329, 330, 370, 329, 330, 371, 329, 330, 372, 329, 330, 373, 329, 330, 374, 329, 330, 375, 329, 330, 376, 329, 330, 377, 329, 330, 378, 329, 330, 379, 329, 330, 362, 329, 330, 381, 329, 330, 382, 329, 330, 383, 329, 330, 384, 329, 330, 365, 329, 330, 386, 329, 330, 387, 329, 330, 345, 329, 330, 356, 389, 329, 330, 390, 329, 330, 345, 329, 31, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 392; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/nl.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 972 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c" { cs = lexer_start; } #line 425 "ragel/i18n/nl.c.rl" #line 979 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/nl.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/nl.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/nl.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/nl.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/nl.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/nl.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/nl.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/nl.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/nl.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/nl.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/nl.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/nl.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/nl.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/nl.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/nl.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/nl.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/nl.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/nl.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/nl.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/nl.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/nl.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/nl.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/nl.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/nl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1269 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/nl.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1332 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c" } } } _out: {} } #line 426 "ragel/i18n/nl.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_nl() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Nl", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_nl/extconf.rb0000644000004100000410000000035612244512574021401 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_nl") have_library("c", "main") create_makefile("gherkin_lexer_nl") gherkin-2.12.2/ext/gherkin_lexer_eo/0000755000004100000410000000000012244512574017374 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_eo/extconf.rb0000644000004100000410000000035612244512574021373 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_eo") have_library("c", "main") create_makefile("gherkin_lexer_eo") gherkin-2.12.2/ext/gherkin_lexer_eo/gherkin_lexer_eo.c0000644000004100000410000010374012244512574023056 0ustar www-datawww-data #line 1 "ragel/i18n/eo.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/eo.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 17, 18, 19, 35, 36, 37, 39, 41, 46, 51, 56, 61, 65, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 103, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 135, 137, 139, 141, 143, 145, 147, 163, 164, 165, 166, 167, 168, 169, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 216, 218, 220, 222, 224, 226, 228, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 276, 279, 281, 283, 285, 287, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 359, 361, 363, 365, 367, 369, 371, 373, 375, 378, 380, 382, 384, 386, 388, 390, 393, 395, 397, 399, 401, 403, 404, 405, 406, 407, 408, 409, 410, 411, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 523, 526, 528, 530, 532, 534, 536, 537, 538, 539, 540, 541, 542, 543, 544, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 658, 664, 667, 669, 675, 691 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 68, 69, 70, 75, 83, 84, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 68, 69, 70, 75, 83, 84, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 111, 32, 110, 105, 116, 97, -60, -75, 111, 107, 122, 101, 109, 112, 108, 111, 106, 58, 10, 10, 10, 32, 35, 84, 124, 9, 13, 10, 114, 10, 97, 10, 106, 10, 116, 10, 111, 10, 58, 10, 32, 34, 35, 37, 42, 64, 68, 69, 70, 75, 83, 84, 124, 9, 13, 111, 110, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 75, 83, 84, 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, 111, 10, 32, 110, 10, 105, 10, 116, 10, 97, -60, 10, -75, 10, 10, 111, 10, 97, 111, 10, 106, 10, 110, 10, 116, 10, 117, 10, 114, 10, 111, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 111, 10, 58, 10, 99, 101, 10, 32, 100, 10, 114, 10, 97, 10, 106, 10, 116, 97, 111, 106, 110, 116, 117, 114, 111, 32, 100, 101, 32, 108, 97, 32, 115, 99, 101, 110, 97, 114, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 75, 83, 84, 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, 111, 10, 32, 110, 10, 105, 10, 116, 10, 97, -60, 10, -75, 10, 10, 111, 10, 97, 10, 106, 10, 99, 101, 10, 101, 10, 110, 10, 97, 10, 114, 10, 111, 10, 58, 10, 32, 100, 10, 114, 10, 97, 10, 106, 10, 116, 99, 101, 101, 110, 97, 114, 111, 58, 10, 10, 10, 32, 35, 37, 42, 64, 68, 70, 75, 83, 84, 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, 111, 10, 32, 110, 10, 105, 10, 116, 10, 97, -60, 10, -75, 10, 10, 111, 10, 111, 10, 110, 10, 111, 10, 58, 10, 97, 111, 10, 106, 10, 110, 10, 116, 10, 117, 10, 114, 10, 111, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 99, 101, 10, 32, 100, 10, 114, 10, 97, 10, 106, 10, 116, 32, 100, 114, 97, 106, 116, 111, 58, 10, 10, 10, 32, 35, 37, 64, 69, 70, 75, 83, 84, 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, 107, 10, 122, 10, 101, 10, 109, 10, 112, 10, 108, 10, 111, 10, 106, 10, 58, 10, 111, 10, 110, 10, 111, 10, 111, 10, 110, 10, 116, 10, 117, 10, 114, 10, 111, 10, 32, 10, 100, 10, 101, 10, 32, 10, 108, 10, 97, 10, 32, 10, 115, 10, 99, 10, 101, 10, 110, 10, 97, 10, 114, 10, 114, 10, 97, 10, 106, 10, 116, 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, 68, 69, 70, 75, 83, 84, 124, 9, 13, 0 }; static const char _lexer_single_lengths[] = { 0, 15, 1, 1, 14, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 14, 1, 1, 1, 1, 1, 1, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 11, 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, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 10, 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, 2, 2, 2, 2, 2, 2, 4, 3, 2, 4, 14, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 17, 19, 21, 37, 39, 41, 44, 47, 52, 57, 62, 67, 71, 75, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 113, 116, 121, 128, 133, 135, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 179, 182, 185, 188, 191, 194, 197, 213, 215, 217, 219, 221, 223, 225, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 289, 292, 295, 298, 301, 304, 307, 311, 314, 317, 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, 350, 353, 356, 359, 362, 365, 368, 371, 374, 378, 382, 385, 388, 391, 394, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 507, 510, 513, 516, 519, 522, 525, 528, 531, 535, 538, 541, 544, 547, 550, 553, 557, 560, 563, 566, 569, 572, 574, 576, 578, 580, 582, 584, 586, 588, 601, 604, 607, 610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 748, 752, 755, 758, 761, 764, 767, 769, 771, 773, 775, 777, 779, 781, 783, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 946, 952, 956, 959, 965, 981 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 312, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 0, 32, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 31, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 56, 55, 56, 55, 56, 56, 4, 57, 4, 56, 55, 56, 58, 55, 56, 59, 55, 56, 60, 55, 56, 61, 55, 56, 62, 55, 56, 63, 55, 4, 4, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 4, 0, 65, 0, 66, 0, 67, 0, 68, 0, 70, 69, 70, 69, 70, 70, 4, 71, 85, 4, 86, 94, 116, 118, 70, 69, 70, 72, 69, 70, 73, 69, 70, 74, 69, 70, 75, 69, 70, 76, 69, 70, 77, 69, 70, 78, 69, 70, 79, 69, 70, 80, 69, 70, 81, 69, 70, 82, 69, 70, 83, 69, 70, 84, 69, 70, 4, 69, 70, 63, 69, 70, 87, 69, 70, 63, 88, 69, 70, 89, 69, 70, 90, 69, 70, 91, 69, 92, 70, 69, 93, 70, 69, 70, 85, 69, 70, 95, 96, 69, 70, 85, 69, 70, 97, 69, 70, 98, 69, 70, 99, 69, 70, 100, 69, 70, 101, 69, 70, 102, 69, 70, 103, 69, 70, 104, 69, 70, 105, 69, 70, 106, 69, 70, 107, 69, 70, 108, 69, 70, 109, 69, 70, 110, 69, 70, 111, 69, 70, 112, 69, 70, 113, 69, 70, 114, 69, 70, 115, 69, 70, 63, 69, 70, 110, 117, 69, 70, 63, 85, 69, 70, 119, 69, 70, 120, 69, 70, 121, 69, 70, 114, 69, 123, 124, 0, 31, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 146, 145, 146, 145, 146, 146, 4, 147, 161, 4, 162, 170, 172, 180, 146, 145, 146, 148, 145, 146, 149, 145, 146, 150, 145, 146, 151, 145, 146, 152, 145, 146, 153, 145, 146, 154, 145, 146, 155, 145, 146, 156, 145, 146, 157, 145, 146, 158, 145, 146, 159, 145, 146, 160, 145, 146, 4, 145, 146, 63, 145, 146, 163, 145, 146, 63, 164, 145, 146, 165, 145, 146, 166, 145, 146, 167, 145, 168, 146, 145, 169, 146, 145, 146, 161, 145, 146, 171, 145, 146, 161, 145, 146, 173, 179, 145, 146, 174, 145, 146, 175, 145, 146, 176, 145, 146, 177, 145, 146, 178, 145, 146, 63, 145, 146, 63, 161, 145, 146, 181, 145, 146, 182, 145, 146, 183, 145, 146, 177, 145, 185, 247, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 193, 192, 193, 192, 193, 193, 4, 194, 208, 4, 209, 217, 221, 241, 243, 193, 192, 193, 195, 192, 193, 196, 192, 193, 197, 192, 193, 198, 192, 193, 199, 192, 193, 200, 192, 193, 201, 192, 193, 202, 192, 193, 203, 192, 193, 204, 192, 193, 205, 192, 193, 206, 192, 193, 207, 192, 193, 4, 192, 193, 63, 192, 193, 210, 192, 193, 63, 211, 192, 193, 212, 192, 193, 213, 192, 193, 214, 192, 215, 193, 192, 216, 193, 192, 193, 208, 192, 193, 218, 192, 193, 219, 192, 193, 220, 192, 193, 63, 192, 193, 222, 223, 192, 193, 208, 192, 193, 224, 192, 193, 225, 192, 193, 226, 192, 193, 227, 192, 193, 228, 192, 193, 229, 192, 193, 230, 192, 193, 231, 192, 193, 232, 192, 193, 233, 192, 193, 234, 192, 193, 235, 192, 193, 236, 192, 193, 237, 192, 193, 238, 192, 193, 239, 192, 193, 240, 192, 193, 219, 192, 193, 237, 242, 192, 193, 63, 208, 192, 193, 244, 192, 193, 245, 192, 193, 246, 192, 193, 219, 192, 32, 31, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 256, 255, 256, 255, 256, 256, 4, 257, 4, 271, 280, 283, 297, 302, 256, 255, 256, 258, 255, 256, 259, 255, 256, 260, 255, 256, 261, 255, 256, 262, 255, 256, 263, 255, 256, 264, 255, 256, 265, 255, 256, 266, 255, 256, 267, 255, 256, 268, 255, 256, 269, 255, 256, 270, 255, 256, 4, 255, 256, 272, 255, 256, 273, 255, 256, 274, 255, 256, 275, 255, 256, 276, 255, 256, 277, 255, 256, 278, 255, 256, 279, 255, 256, 63, 255, 256, 281, 255, 256, 282, 255, 256, 279, 255, 256, 284, 255, 256, 285, 255, 256, 286, 255, 256, 287, 255, 256, 288, 255, 256, 289, 255, 256, 290, 255, 256, 291, 255, 256, 292, 255, 256, 293, 255, 256, 294, 255, 256, 295, 255, 256, 296, 255, 256, 297, 255, 256, 298, 255, 256, 299, 255, 256, 300, 255, 256, 301, 255, 256, 282, 255, 256, 303, 255, 256, 304, 255, 256, 305, 255, 256, 282, 255, 306, 307, 306, 0, 311, 310, 309, 307, 310, 308, 0, 309, 307, 308, 0, 309, 308, 311, 310, 309, 307, 310, 308, 311, 311, 5, 15, 17, 31, 34, 37, 45, 64, 122, 184, 248, 306, 311, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 312; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/eo.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 845 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c" { cs = lexer_start; } #line 425 "ragel/i18n/eo.c.rl" #line 852 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/eo.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/eo.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/eo.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/eo.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/eo.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/eo.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/eo.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/eo.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/eo.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/eo.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/eo.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/eo.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/eo.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/eo.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/eo.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/eo.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/eo.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/eo.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/eo.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/eo.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/eo.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/eo.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/eo.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/eo.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1142 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/eo.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1205 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c" } } } _out: {} } #line 426 "ragel/i18n/eo.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_eo() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Eo", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_fa/0000755000004100000410000000000012244512574017357 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_fa/gherkin_lexer_fa.c0000644000004100000410000012477012244512574023032 0ustar www-datawww-data #line 1 "ragel/i18n/fa.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/fa.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_fa/gherkin_lexer_fa.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 13, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 43, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 105, 106, 107, 109, 111, 116, 121, 126, 131, 135, 139, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 161, 168, 173, 177, 183, 186, 188, 194, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 239, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 381, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 415, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 590, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 683, 685, 687, 689, 691, 693, 695, 697, 699, 701, 703, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 775, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 955, 956 }; static const char _lexer_trans_keys[] = { -40, -39, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -94, -89, -88, -78, -77, -39, -122, -38, -81, -40, -89, -39, -121, 32, 10, 13, 10, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -122, -121, -120, -39, -123, -39, -120, -39, -122, -39, -121, 32, -39, -121, -40, -89, 58, 10, 10, -39, 10, 32, 35, 124, 9, 13, -120, 10, -39, 10, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 10, 58, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -40, -39, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -39, -122, -38, -81, -40, -89, -39, -123, -37, -116, -39, 32, -112, -37, -116, -38, -104, -38, -81, -37, -116, 58, 10, 10, -40, -39, 10, 32, 35, 37, 64, 9, 13, -89, -78, -77, 10, -39, 10, -124, 10, -38, 10, -81, 10, -39, 10, -120, 10, -37, 10, -116, 10, 10, 32, -40, 10, -77, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, -122, 10, -39, 10, -121, 10, -122, -120, 10, -39, 10, -123, 10, -39, 10, -120, 10, -39, 10, -122, 10, -39, 10, -121, 10, 10, 32, -39, 10, -121, 10, -40, 10, -89, 10, -39, 10, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -39, -124, -123, -38, -81, -39, -120, -37, -116, 32, -40, -77, -39, -122, -40, -89, -40, -79, -37, -116, -39, -120, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -94, -89, -88, -77, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -121, 10, 10, 32, -39, 10, -123, 10, -40, 10, -89, 10, -40, 10, -89, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -121, -120, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, 32, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -40, -89, -40, -89, 32, -39, -127, -40, -79, -40, -74, -39, -123, -37, -116, -39, -122, -39, -121, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -94, -89, -88, -77, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -121, 10, 10, 32, -39, 10, -124, -123, 10, -38, 10, -81, 10, -39, 10, -120, 10, -37, 10, -116, 10, 10, 32, -40, 10, -77, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -40, 10, -89, 10, -40, 10, -89, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -121, -120, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, 32, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -39, -122, -40, -89, -40, -79, -37, -116, -39, -120, 58, 10, 10, -40, -39, 10, 32, 35, 37, 42, 64, 9, 13, -94, -89, -88, -78, -77, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -121, 10, 10, 32, -39, 10, -124, -123, 10, -38, 10, -81, 10, -39, 10, -120, 10, -37, 10, -116, 10, 10, 32, -40, 10, -77, 10, -39, 10, -122, 10, -40, 10, -89, 10, -40, 10, -79, 10, -37, 10, -116, 10, -39, 10, -120, 10, 10, 58, -40, 10, -89, 10, -40, 10, -89, 10, 10, 32, -39, 10, -127, 10, -40, 10, -79, 10, -40, 10, -74, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, -122, 10, -39, 10, -121, 10, -121, -120, 10, -39, 10, -122, 10, -38, 10, -81, 10, -40, 10, -89, 10, -39, 10, -123, 10, -37, 10, -116, 10, -39, 10, 32, -112, 10, -37, 10, -116, 10, -38, 10, -104, 10, -38, 10, -81, 10, -37, 10, -116, 10, 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, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 11, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 10, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 4, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 5, 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, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 5, 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, 2, 2, 2, 2, 3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 6, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 13, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 40, 43, 55, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 98, 101, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131, 134, 146, 148, 150, 153, 156, 161, 166, 171, 176, 180, 184, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 222, 229, 234, 238, 244, 248, 251, 257, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 325, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 537, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 594, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 737, 740, 743, 746, 749, 752, 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, 785, 788, 791, 794, 797, 800, 803, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 860, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 900, 903, 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1136, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1332, 1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1398, 1401, 1403, 1405 }; static const short _lexer_trans_targs[] = { 2, 15, 469, 14, 14, 46, 56, 58, 11, 72, 75, 14, 0, 3, 174, 270, 279, 369, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 14, 57, 13, 14, 57, 13, 2, 15, 14, 14, 46, 56, 58, 11, 72, 75, 14, 0, 16, 81, 91, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 32, 31, 32, 31, 33, 32, 32, 14, 14, 32, 31, 34, 32, 31, 35, 32, 31, 36, 32, 31, 37, 32, 31, 38, 32, 31, 39, 32, 31, 40, 32, 31, 41, 32, 31, 42, 32, 31, 43, 32, 31, 44, 32, 31, 32, 45, 31, 2, 15, 14, 14, 46, 56, 58, 11, 72, 75, 14, 0, 47, 0, 48, 0, 50, 49, 49, 50, 49, 49, 51, 51, 52, 51, 51, 51, 51, 52, 51, 51, 51, 51, 53, 51, 51, 51, 51, 54, 51, 51, 14, 55, 55, 0, 14, 55, 55, 0, 14, 57, 56, 14, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 471, 0, 0, 0, 0, 0, 73, 74, 14, 74, 74, 72, 73, 73, 14, 74, 72, 74, 0, 75, 76, 75, 0, 80, 79, 78, 76, 79, 77, 0, 78, 76, 77, 0, 78, 77, 80, 79, 78, 76, 79, 77, 2, 15, 80, 80, 46, 56, 58, 11, 72, 75, 80, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 11, 0, 92, 12, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 104, 103, 104, 103, 105, 136, 104, 104, 14, 160, 14, 104, 103, 106, 128, 117, 104, 103, 107, 104, 103, 108, 104, 103, 109, 104, 103, 110, 104, 103, 111, 104, 103, 112, 104, 103, 113, 104, 103, 114, 104, 103, 104, 115, 103, 116, 104, 103, 117, 104, 103, 118, 104, 103, 119, 104, 103, 120, 104, 103, 121, 104, 103, 122, 104, 103, 123, 104, 103, 124, 104, 103, 125, 104, 103, 126, 104, 103, 127, 104, 103, 104, 45, 103, 129, 104, 103, 130, 104, 103, 131, 104, 103, 132, 104, 103, 133, 104, 103, 134, 104, 103, 135, 104, 103, 127, 104, 103, 137, 150, 104, 103, 138, 104, 103, 139, 104, 103, 140, 104, 103, 141, 104, 103, 142, 104, 103, 143, 104, 103, 144, 104, 103, 145, 104, 103, 104, 146, 103, 147, 104, 103, 148, 104, 103, 149, 104, 103, 127, 104, 103, 151, 104, 103, 152, 104, 103, 153, 104, 103, 154, 104, 103, 155, 104, 103, 156, 104, 103, 157, 104, 103, 158, 104, 103, 159, 104, 103, 127, 104, 103, 104, 161, 103, 104, 162, 103, 104, 163, 103, 104, 164, 103, 104, 165, 103, 104, 166, 103, 104, 167, 103, 104, 168, 103, 104, 169, 103, 104, 170, 103, 104, 171, 103, 104, 172, 103, 104, 173, 103, 104, 14, 103, 175, 0, 176, 268, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 198, 197, 198, 197, 199, 233, 198, 198, 14, 254, 208, 14, 198, 197, 200, 209, 213, 222, 198, 197, 201, 198, 197, 202, 198, 197, 203, 198, 197, 204, 198, 197, 205, 198, 197, 206, 198, 197, 207, 198, 197, 208, 198, 197, 198, 45, 197, 210, 198, 197, 211, 198, 197, 212, 198, 197, 208, 198, 197, 214, 198, 197, 215, 198, 197, 198, 216, 197, 217, 198, 197, 218, 198, 197, 219, 198, 197, 220, 198, 197, 221, 198, 197, 208, 198, 197, 223, 198, 197, 224, 198, 197, 225, 198, 197, 226, 198, 197, 227, 198, 197, 228, 198, 197, 229, 198, 197, 230, 198, 197, 231, 198, 197, 232, 198, 197, 198, 45, 197, 234, 244, 198, 197, 235, 198, 197, 236, 198, 197, 237, 198, 197, 238, 198, 197, 239, 198, 197, 240, 198, 197, 241, 198, 197, 242, 198, 197, 243, 198, 197, 208, 198, 197, 245, 198, 45, 197, 246, 198, 197, 247, 198, 197, 248, 198, 197, 249, 198, 197, 250, 198, 197, 251, 198, 197, 252, 198, 197, 253, 198, 197, 232, 198, 197, 198, 255, 197, 198, 256, 197, 198, 257, 197, 198, 258, 197, 198, 259, 197, 198, 260, 197, 198, 261, 197, 198, 262, 197, 198, 263, 197, 198, 264, 197, 198, 265, 197, 198, 266, 197, 198, 267, 197, 198, 14, 197, 269, 0, 11, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 11, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 290, 289, 290, 289, 291, 334, 290, 290, 14, 355, 300, 14, 290, 289, 292, 301, 325, 312, 290, 289, 293, 290, 289, 294, 290, 289, 295, 290, 289, 296, 290, 289, 297, 290, 289, 298, 290, 289, 299, 290, 289, 300, 290, 289, 290, 45, 289, 302, 290, 289, 303, 323, 290, 289, 304, 290, 289, 305, 290, 289, 306, 290, 289, 307, 290, 289, 308, 290, 289, 309, 290, 289, 290, 310, 289, 311, 290, 289, 312, 290, 289, 313, 290, 289, 314, 290, 289, 315, 290, 289, 316, 290, 289, 317, 290, 289, 318, 290, 289, 319, 290, 289, 320, 290, 289, 321, 290, 289, 322, 290, 289, 290, 45, 289, 324, 290, 289, 300, 290, 289, 326, 290, 289, 327, 290, 289, 290, 328, 289, 329, 290, 289, 330, 290, 289, 331, 290, 289, 332, 290, 289, 333, 290, 289, 300, 290, 289, 335, 345, 290, 289, 336, 290, 289, 337, 290, 289, 338, 290, 289, 339, 290, 289, 340, 290, 289, 341, 290, 289, 342, 290, 289, 343, 290, 289, 344, 290, 289, 300, 290, 289, 346, 290, 45, 289, 347, 290, 289, 348, 290, 289, 349, 290, 289, 350, 290, 289, 351, 290, 289, 352, 290, 289, 353, 290, 289, 354, 290, 289, 322, 290, 289, 290, 356, 289, 290, 357, 289, 290, 358, 289, 290, 359, 289, 290, 360, 289, 290, 361, 289, 290, 362, 289, 290, 363, 289, 290, 364, 289, 290, 365, 289, 290, 366, 289, 290, 367, 289, 290, 368, 289, 290, 14, 289, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 382, 381, 382, 381, 383, 434, 382, 382, 14, 455, 392, 14, 382, 381, 384, 393, 417, 426, 404, 382, 381, 385, 382, 381, 386, 382, 381, 387, 382, 381, 388, 382, 381, 389, 382, 381, 390, 382, 381, 391, 382, 381, 392, 382, 381, 382, 45, 381, 394, 382, 381, 395, 415, 382, 381, 396, 382, 381, 397, 382, 381, 398, 382, 381, 399, 382, 381, 400, 382, 381, 401, 382, 381, 382, 402, 381, 403, 382, 381, 404, 382, 381, 405, 382, 381, 406, 382, 381, 407, 382, 381, 408, 382, 381, 409, 382, 381, 410, 382, 381, 411, 382, 381, 412, 382, 381, 413, 382, 381, 414, 382, 381, 382, 45, 381, 416, 382, 381, 392, 382, 381, 418, 382, 381, 419, 382, 381, 382, 420, 381, 421, 382, 381, 422, 382, 381, 423, 382, 381, 424, 382, 381, 425, 382, 381, 392, 382, 381, 427, 382, 381, 428, 382, 381, 429, 382, 381, 430, 382, 381, 431, 382, 381, 432, 382, 381, 433, 382, 381, 414, 382, 381, 435, 445, 382, 381, 436, 382, 381, 437, 382, 381, 438, 382, 381, 439, 382, 381, 440, 382, 381, 441, 382, 381, 442, 382, 381, 443, 382, 381, 444, 382, 381, 392, 382, 381, 446, 382, 45, 381, 447, 382, 381, 448, 382, 381, 449, 382, 381, 450, 382, 381, 451, 382, 381, 452, 382, 381, 453, 382, 381, 454, 382, 381, 414, 382, 381, 382, 456, 381, 382, 457, 381, 382, 458, 381, 382, 459, 381, 382, 460, 381, 382, 461, 381, 382, 462, 381, 382, 463, 381, 382, 464, 381, 382, 465, 381, 382, 466, 381, 382, 467, 381, 382, 468, 381, 382, 14, 381, 470, 0, 14, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 63, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 471; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/fa.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1079 "ext/gherkin_lexer_fa/gherkin_lexer_fa.c" { cs = lexer_start; } #line 425 "ragel/i18n/fa.c.rl" #line 1086 "ext/gherkin_lexer_fa/gherkin_lexer_fa.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/fa.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/fa.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/fa.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/fa.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/fa.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/fa.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/fa.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/fa.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/fa.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/fa.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/fa.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/fa.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/fa.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/fa.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/fa.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/fa.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/fa.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/fa.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/fa.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/fa.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/fa.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/fa.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/fa.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/fa.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1376 "ext/gherkin_lexer_fa/gherkin_lexer_fa.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/fa.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1439 "ext/gherkin_lexer_fa/gherkin_lexer_fa.c" } } } _out: {} } #line 426 "ragel/i18n/fa.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_fa() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Fa", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_fa/extconf.rb0000644000004100000410000000035612244512574021356 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_fa") have_library("c", "main") create_makefile("gherkin_lexer_fa") gherkin-2.12.2/ext/gherkin_lexer_uk/0000755000004100000410000000000012244512574017410 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_uk/extconf.rb0000644000004100000410000000035612244512574021407 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_uk") have_library("c", "main") create_makefile("gherkin_lexer_uk") gherkin-2.12.2/ext/gherkin_lexer_uk/gherkin_lexer_uk.c0000644000004100000410000016523512244512574023115 0ustar www-datawww-data #line 1 "ragel/i18n/uk.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/uk.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 12, 22, 23, 25, 27, 38, 39, 40, 42, 44, 49, 54, 59, 64, 68, 72, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 94, 101, 106, 110, 116, 119, 121, 127, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 204, 215, 217, 228, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 336, 338, 340, 342, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 440, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 518, 519, 520, 521, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 567, 569, 571, 573, 575, 577, 579, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 595, 596, 597, 598, 599, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 644, 655, 657, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 765, 767, 769, 771, 773, 775, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 806, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 853, 855, 857, 859, 861, 863, 865, 867, 869, 871, 873, 875, 877, 879, 881, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 907, 918, 920, 923, 925, 927, 929, 931, 933, 935, 937, 939, 941, 943, 945, 947, 949, 951, 953, 955, 957, 959, 961, 963, 965, 967, 969, 971, 973, 975, 977, 979, 981, 983, 985, 987, 989, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069, 1071, 1073, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1167, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1245, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1281, 1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1506, 1507, 1508, 1509 }; static const char _lexer_trans_keys[] = { -48, -17, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 32, 10, 13, 10, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 32, 124, 9, 13, 10, 32, 92, 124, 9, 13, 10, 92, 124, 10, 92, 10, 32, 92, 124, 9, 13, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 32, -69, -48, -75, -47, -126, -48, -80, -48, -70, -48, -66, -48, -74, -48, -80, -48, -67, -48, -66, -48, -66, -48, -69, -48, -72, -48, -75, -47, -123, -48, -80, -48, -71, -48, -47, -75, -47, -128, -48, -75, -48, -76, -47, -125, -48, -68, -48, -66, -48, -78, -48, -80, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 10, 10, 32, -48, 10, 32, 34, 35, 37, 42, 64, 124, 9, 13, -48, 10, 32, -69, 10, -48, 10, -75, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -70, 10, -48, 10, -66, 10, -48, 10, -74, 10, -48, 10, -80, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, -75, 10, -47, 10, -123, 10, -48, 10, -80, 10, -48, 10, -71, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -66, 10, 10, 32, 44, 10, 32, -47, 10, -119, 10, -47, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -47, 10, -114, 10, 10, 58, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, 32, -76, 10, -47, 10, -106, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -70, 10, 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, -128, -48, -72, -48, -70, -65, -48, -69, -48, -80, -48, -76, -48, -72, 58, 10, 10, -48, 10, 32, 35, 124, 9, 13, -92, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 10, 58, -47, -125, -47, -127, -47, -126, -48, -72, -48, -68, -48, -66, 32, 44, 32, -47, -119, -47, -126, -122, -47, -128, -47, -125, -48, -70, -47, -126, -47, -125, -47, -128, -48, -80, 32, -47, -127, -47, -122, -48, -75, -48, -67, -48, -80, -47, -128, -47, -106, -47, -114, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 10, 10, 32, -48, 10, 32, -69, 10, -48, 10, -75, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -70, 10, -48, 10, -66, 10, -48, 10, -74, 10, -48, 10, -80, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, -75, 10, -47, 10, -123, 10, -48, 10, -80, 10, -48, 10, -71, 10, -47, 10, -128, 10, -48, 10, -72, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -66, 10, 10, 32, 44, 10, 32, -47, 10, -119, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, 10, 58, -48, 10, -80, -66, 10, -48, 10, 32, -76, 10, -47, 10, -106, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -70, 10, 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, -48, -75, -48, -67, -48, -80, -47, -128, -47, -106, -48, -71, 58, 10, 10, -48, 10, 32, 35, 37, 42, 64, 9, 13, -122, -112, -108, -102, -99, -97, -95, -94, -92, -81, 10, 10, 32, -48, 10, 32, -69, 10, -48, 10, -75, 10, -47, 10, -126, 10, -48, 10, -80, 10, -48, 10, -70, 10, -48, 10, -66, 10, -48, 10, -74, 10, -48, 10, -80, 10, -48, 10, -67, 10, -48, 10, -66, 10, -48, 10, -66, 10, -48, 10, -69, 10, -48, 10, -72, 10, -48, 10, -75, 10, -47, 10, -123, 10, -48, 10, -80, 10, -48, 10, -71, 10, -48, -47, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, 10, 58, -128, 10, -48, 10, -72, 10, -48, 10, -65, 10, -47, 10, -125, 10, -47, 10, -127, 10, -47, 10, -126, 10, -48, 10, -72, 10, -48, 10, -68, 10, -48, 10, -66, 10, 10, 32, 44, 10, 32, -47, 10, -119, 10, -47, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -47, 10, -114, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, -48, 10, -80, -66, 10, -48, 10, 32, -76, 10, -47, 10, -106, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, -48, 10, -70, 10, 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, -48, -80, -66, -48, 32, -76, -47, -106, -47, -125, -48, -67, -48, -70, -47, -122, -47, -106, -48, -66, -48, -67, -48, -80, -48, -69, 58, 10, 10, -48, 10, 32, 35, 37, 64, 9, 13, -97, -95, -92, 10, -48, -47, 10, -75, 10, -47, 10, -128, 10, -48, 10, -75, 10, -48, 10, -76, 10, -47, 10, -125, 10, -48, 10, -68, 10, -48, 10, -66, 10, -48, 10, -78, 10, -48, 10, -80, 10, 10, 58, -128, 10, -48, 10, -72, 10, -48, 10, -70, 10, -48, 10, -69, 10, -48, 10, -80, 10, -48, 10, -76, 10, -48, 10, -72, 10, -47, 10, -126, -122, 10, -47, 10, -128, 10, -47, 10, -125, 10, -48, 10, -70, 10, -47, 10, -126, 10, -47, 10, -125, 10, -47, 10, -128, 10, -48, 10, -80, 10, 10, 32, -47, 10, -127, 10, -47, 10, -122, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -47, 10, -114, 10, -48, 10, -75, 10, -48, 10, -67, 10, -48, 10, -80, 10, -47, 10, -128, 10, -47, 10, -106, 10, -48, 10, -71, 10, -47, 10, -125, 10, -48, 10, -67, 10, -48, 10, -70, 10, -47, 10, -122, 10, -47, 10, -106, 10, -48, 10, -66, 10, -48, 10, -67, 10, -48, 10, -80, 10, -48, 10, -69, 10, 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, -48, -70, -69, -65, 0 }; static const char _lexer_single_lengths[] = { 0, 10, 10, 1, 2, 2, 9, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 2, 4, 3, 2, 4, 9, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 2, 9, 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, 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, 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, 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, 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, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 7, 11, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 4, 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, 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, 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, 2, 2, 2, 2, 1, 1, 1, 1, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 12, 23, 25, 28, 31, 42, 44, 46, 49, 52, 57, 62, 67, 72, 76, 80, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 118, 125, 130, 134, 140, 144, 147, 153, 164, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 285, 297, 300, 311, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 472, 475, 478, 481, 484, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 627, 631, 634, 637, 640, 643, 646, 649, 652, 655, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 715, 718, 721, 724, 727, 730, 733, 736, 739, 742, 744, 746, 748, 750, 753, 755, 757, 759, 761, 763, 765, 767, 769, 771, 773, 775, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 869, 871, 873, 875, 877, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 957, 969, 972, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1194, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337, 1339, 1348, 1360, 1363, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 1466, 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 1575, 1579, 1582, 1585, 1588, 1591, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1731, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 1848, 1851, 1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, 1882, 1884, 1886, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902, 1910, 1915, 1919, 1922, 1925, 1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012, 2015, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2246, 2248, 2250, 2252 }; static const short _lexer_trans_targs[] = { 2, 763, 6, 6, 7, 17, 19, 3, 33, 36, 6, 0, 3, 42, 56, 62, 68, 76, 296, 623, 629, 761, 0, 4, 0, 6, 18, 5, 6, 18, 5, 2, 6, 6, 7, 17, 19, 3, 33, 36, 6, 0, 8, 0, 9, 0, 11, 10, 10, 11, 10, 10, 12, 12, 13, 12, 12, 12, 12, 13, 12, 12, 12, 12, 14, 12, 12, 12, 12, 15, 12, 12, 6, 16, 16, 0, 6, 16, 16, 0, 6, 18, 17, 6, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 765, 0, 0, 0, 0, 0, 34, 35, 6, 35, 35, 33, 34, 34, 6, 35, 33, 35, 0, 36, 37, 36, 0, 41, 40, 39, 37, 40, 38, 0, 39, 37, 38, 0, 39, 38, 41, 40, 39, 37, 40, 38, 2, 41, 41, 7, 17, 19, 3, 33, 36, 41, 0, 43, 46, 0, 44, 0, 45, 0, 3, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 3, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 3, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 3, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 3, 0, 77, 243, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 97, 96, 97, 96, 98, 97, 97, 6, 229, 99, 6, 97, 96, 99, 101, 115, 121, 127, 135, 157, 203, 209, 227, 97, 96, 97, 100, 96, 2, 6, 6, 7, 17, 19, 3, 33, 36, 6, 0, 102, 97, 105, 96, 103, 97, 96, 104, 97, 96, 99, 97, 96, 106, 97, 96, 107, 97, 96, 108, 97, 96, 109, 97, 96, 110, 97, 96, 111, 97, 96, 112, 97, 96, 113, 97, 96, 114, 97, 96, 99, 97, 96, 116, 97, 96, 117, 97, 96, 118, 97, 96, 119, 97, 96, 120, 97, 96, 99, 97, 96, 122, 97, 96, 123, 97, 96, 124, 97, 96, 125, 97, 96, 126, 97, 96, 99, 97, 96, 128, 97, 96, 129, 97, 96, 130, 97, 96, 131, 97, 96, 132, 97, 96, 133, 97, 96, 134, 97, 96, 99, 97, 96, 136, 97, 96, 137, 97, 96, 138, 97, 96, 139, 97, 96, 140, 97, 96, 141, 97, 96, 142, 97, 96, 143, 97, 96, 144, 97, 96, 145, 97, 96, 146, 97, 96, 147, 97, 96, 148, 97, 96, 149, 97, 96, 150, 97, 96, 151, 97, 96, 152, 97, 96, 153, 97, 96, 97, 100, 154, 96, 97, 155, 96, 156, 97, 96, 119, 97, 96, 158, 97, 96, 159, 191, 97, 96, 160, 97, 96, 161, 97, 96, 162, 97, 96, 163, 97, 96, 164, 97, 96, 165, 97, 96, 166, 97, 96, 167, 97, 96, 168, 97, 96, 169, 97, 96, 170, 97, 96, 171, 97, 96, 172, 97, 96, 173, 97, 96, 97, 174, 96, 175, 97, 96, 176, 97, 96, 177, 97, 96, 178, 97, 96, 179, 97, 96, 180, 97, 96, 181, 97, 96, 182, 97, 96, 183, 97, 96, 184, 97, 96, 185, 97, 96, 186, 97, 96, 187, 97, 96, 188, 97, 96, 189, 97, 96, 190, 97, 96, 97, 100, 96, 192, 97, 96, 193, 97, 96, 194, 97, 96, 195, 97, 96, 196, 97, 96, 197, 97, 96, 198, 97, 96, 199, 97, 96, 200, 97, 96, 201, 97, 96, 202, 97, 96, 190, 97, 96, 204, 97, 96, 99, 205, 97, 96, 206, 97, 100, 96, 207, 97, 96, 208, 97, 96, 99, 97, 96, 210, 97, 96, 211, 97, 96, 212, 97, 96, 213, 97, 96, 214, 97, 96, 215, 97, 96, 216, 97, 96, 217, 97, 96, 218, 97, 96, 219, 97, 96, 220, 97, 96, 221, 97, 96, 222, 97, 96, 223, 97, 96, 224, 97, 96, 225, 97, 96, 226, 97, 96, 190, 97, 96, 228, 97, 96, 155, 97, 96, 97, 230, 96, 97, 231, 96, 97, 232, 96, 97, 233, 96, 97, 234, 96, 97, 235, 96, 97, 236, 96, 97, 237, 96, 97, 238, 96, 97, 239, 96, 97, 240, 96, 97, 241, 96, 97, 242, 96, 97, 6, 96, 244, 0, 245, 0, 246, 0, 247, 0, 248, 280, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 259, 258, 259, 258, 260, 259, 259, 6, 6, 259, 258, 261, 259, 258, 262, 259, 258, 263, 259, 258, 264, 259, 258, 265, 259, 258, 266, 259, 258, 267, 259, 258, 268, 259, 258, 269, 259, 258, 270, 259, 258, 271, 259, 258, 272, 259, 258, 273, 259, 258, 274, 259, 258, 275, 259, 258, 276, 259, 258, 277, 259, 258, 278, 259, 258, 279, 259, 258, 259, 100, 258, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 4, 293, 0, 294, 0, 295, 0, 60, 0, 297, 0, 298, 446, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 332, 331, 332, 331, 333, 332, 332, 6, 432, 334, 6, 332, 331, 334, 335, 349, 355, 361, 369, 391, 406, 412, 430, 332, 331, 332, 100, 331, 336, 332, 339, 331, 337, 332, 331, 338, 332, 331, 334, 332, 331, 340, 332, 331, 341, 332, 331, 342, 332, 331, 343, 332, 331, 344, 332, 331, 345, 332, 331, 346, 332, 331, 347, 332, 331, 348, 332, 331, 334, 332, 331, 350, 332, 331, 351, 332, 331, 352, 332, 331, 353, 332, 331, 354, 332, 331, 334, 332, 331, 356, 332, 331, 357, 332, 331, 358, 332, 331, 359, 332, 331, 360, 332, 331, 334, 332, 331, 362, 332, 331, 363, 332, 331, 364, 332, 331, 365, 332, 331, 366, 332, 331, 367, 332, 331, 368, 332, 331, 334, 332, 331, 370, 332, 331, 371, 332, 331, 372, 332, 331, 373, 332, 331, 374, 332, 331, 375, 332, 331, 376, 332, 331, 377, 332, 331, 378, 332, 331, 379, 332, 331, 380, 332, 331, 381, 332, 331, 382, 332, 331, 383, 332, 331, 384, 332, 331, 385, 332, 331, 386, 332, 331, 387, 332, 331, 332, 100, 388, 331, 332, 389, 331, 390, 332, 331, 353, 332, 331, 392, 332, 331, 393, 332, 331, 394, 332, 331, 395, 332, 331, 396, 332, 331, 397, 332, 331, 398, 332, 331, 399, 332, 331, 400, 332, 331, 401, 332, 331, 402, 332, 331, 403, 332, 331, 404, 332, 331, 405, 332, 331, 332, 100, 331, 407, 332, 331, 334, 408, 332, 331, 409, 332, 100, 331, 410, 332, 331, 411, 332, 331, 334, 332, 331, 413, 332, 331, 414, 332, 331, 415, 332, 331, 416, 332, 331, 417, 332, 331, 418, 332, 331, 419, 332, 331, 420, 332, 331, 421, 332, 331, 422, 332, 331, 423, 332, 331, 424, 332, 331, 425, 332, 331, 426, 332, 331, 427, 332, 331, 428, 332, 331, 429, 332, 331, 405, 332, 331, 431, 332, 331, 389, 332, 331, 332, 433, 331, 332, 434, 331, 332, 435, 331, 332, 436, 331, 332, 437, 331, 332, 438, 331, 332, 439, 331, 332, 440, 331, 332, 441, 331, 332, 442, 331, 332, 443, 331, 332, 444, 331, 332, 445, 331, 332, 6, 331, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 459, 0, 461, 460, 461, 460, 462, 461, 461, 6, 609, 463, 6, 461, 460, 463, 464, 478, 484, 490, 498, 538, 583, 589, 607, 461, 460, 461, 100, 460, 465, 461, 468, 460, 466, 461, 460, 467, 461, 460, 463, 461, 460, 469, 461, 460, 470, 461, 460, 471, 461, 460, 472, 461, 460, 473, 461, 460, 474, 461, 460, 475, 461, 460, 476, 461, 460, 477, 461, 460, 463, 461, 460, 479, 461, 460, 480, 461, 460, 481, 461, 460, 482, 461, 460, 483, 461, 460, 463, 461, 460, 485, 461, 460, 486, 461, 460, 487, 461, 460, 488, 461, 460, 489, 461, 460, 463, 461, 460, 491, 461, 460, 492, 461, 460, 493, 461, 460, 494, 461, 460, 495, 461, 460, 496, 461, 460, 497, 461, 460, 463, 461, 460, 499, 517, 461, 460, 500, 461, 460, 501, 461, 460, 502, 461, 460, 503, 461, 460, 504, 461, 460, 505, 461, 460, 506, 461, 460, 507, 461, 460, 508, 461, 460, 509, 461, 460, 510, 461, 460, 511, 461, 460, 512, 461, 460, 513, 461, 460, 514, 461, 460, 515, 461, 460, 516, 461, 460, 461, 100, 460, 518, 461, 460, 519, 461, 460, 520, 461, 460, 521, 461, 460, 522, 461, 460, 523, 461, 460, 524, 461, 460, 525, 461, 460, 526, 461, 460, 527, 461, 460, 528, 461, 460, 529, 461, 460, 530, 461, 460, 531, 461, 460, 532, 461, 460, 533, 461, 460, 534, 461, 460, 461, 100, 535, 460, 461, 536, 460, 537, 461, 460, 482, 461, 460, 539, 461, 460, 540, 571, 461, 460, 541, 461, 460, 542, 461, 460, 543, 461, 460, 544, 461, 460, 545, 461, 460, 546, 461, 460, 547, 461, 460, 548, 461, 460, 549, 461, 460, 550, 461, 460, 551, 461, 460, 552, 461, 460, 553, 461, 460, 554, 461, 460, 461, 555, 460, 556, 461, 460, 557, 461, 460, 558, 461, 460, 559, 461, 460, 560, 461, 460, 561, 461, 460, 562, 461, 460, 563, 461, 460, 564, 461, 460, 565, 461, 460, 566, 461, 460, 567, 461, 460, 568, 461, 460, 569, 461, 460, 570, 461, 460, 516, 461, 460, 572, 461, 460, 573, 461, 460, 574, 461, 460, 575, 461, 460, 576, 461, 460, 577, 461, 460, 578, 461, 460, 579, 461, 460, 580, 461, 460, 581, 461, 460, 582, 461, 460, 516, 461, 460, 584, 461, 460, 463, 585, 461, 460, 586, 461, 100, 460, 587, 461, 460, 588, 461, 460, 463, 461, 460, 590, 461, 460, 591, 461, 460, 592, 461, 460, 593, 461, 460, 594, 461, 460, 595, 461, 460, 596, 461, 460, 597, 461, 460, 598, 461, 460, 599, 461, 460, 600, 461, 460, 601, 461, 460, 602, 461, 460, 603, 461, 460, 604, 461, 460, 605, 461, 460, 606, 461, 460, 516, 461, 460, 608, 461, 460, 536, 461, 460, 461, 610, 460, 461, 611, 460, 461, 612, 460, 461, 613, 460, 461, 614, 460, 461, 615, 460, 461, 616, 460, 461, 617, 460, 461, 618, 460, 461, 619, 460, 461, 620, 460, 461, 621, 460, 461, 622, 460, 461, 6, 460, 624, 0, 3, 625, 0, 626, 4, 0, 627, 0, 628, 0, 3, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, 0, 650, 649, 650, 649, 651, 650, 650, 6, 747, 6, 650, 649, 652, 684, 729, 650, 649, 653, 671, 650, 649, 654, 650, 649, 655, 650, 649, 656, 650, 649, 657, 650, 649, 658, 650, 649, 659, 650, 649, 660, 650, 649, 661, 650, 649, 662, 650, 649, 663, 650, 649, 664, 650, 649, 665, 650, 649, 666, 650, 649, 667, 650, 649, 668, 650, 649, 669, 650, 649, 670, 650, 649, 650, 100, 649, 672, 650, 649, 673, 650, 649, 674, 650, 649, 675, 650, 649, 676, 650, 649, 677, 650, 649, 678, 650, 649, 679, 650, 649, 680, 650, 649, 681, 650, 649, 682, 650, 649, 683, 650, 649, 670, 650, 649, 685, 650, 649, 686, 717, 650, 649, 687, 650, 649, 688, 650, 649, 689, 650, 649, 690, 650, 649, 691, 650, 649, 692, 650, 649, 693, 650, 649, 694, 650, 649, 695, 650, 649, 696, 650, 649, 697, 650, 649, 698, 650, 649, 699, 650, 649, 700, 650, 649, 650, 701, 649, 702, 650, 649, 703, 650, 649, 704, 650, 649, 705, 650, 649, 706, 650, 649, 707, 650, 649, 708, 650, 649, 709, 650, 649, 710, 650, 649, 711, 650, 649, 712, 650, 649, 713, 650, 649, 714, 650, 649, 715, 650, 649, 716, 650, 649, 670, 650, 649, 718, 650, 649, 719, 650, 649, 720, 650, 649, 721, 650, 649, 722, 650, 649, 723, 650, 649, 724, 650, 649, 725, 650, 649, 726, 650, 649, 727, 650, 649, 728, 650, 649, 670, 650, 649, 730, 650, 649, 731, 650, 649, 732, 650, 649, 733, 650, 649, 734, 650, 649, 735, 650, 649, 736, 650, 649, 737, 650, 649, 738, 650, 649, 739, 650, 649, 740, 650, 649, 741, 650, 649, 742, 650, 649, 743, 650, 649, 744, 650, 649, 745, 650, 649, 746, 650, 649, 670, 650, 649, 650, 748, 649, 650, 749, 649, 650, 750, 649, 650, 751, 649, 650, 752, 649, 650, 753, 649, 650, 754, 649, 650, 755, 649, 650, 756, 649, 650, 757, 649, 650, 758, 649, 650, 759, 649, 650, 760, 649, 650, 6, 649, 762, 0, 294, 0, 764, 0, 6, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 29, 0, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 29, 54, 0, 5, 1, 0, 29, 1, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 96, 54, 0, 93, 90, 41, 96, 90, 99, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 72, 33, 84, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 54, 15, 0, 63, 130, 31, 60, 57, 31, 63, 57, 66, 31, 43, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 81, 81, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 78, 33, 84, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 19, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 75, 33, 84, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 17, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 43, 0, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 84, 54, 0, 69, 33, 69, 0, 0, 0, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 765; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/uk.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1545 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c" { cs = lexer_start; } #line 425 "ragel/i18n/uk.c.rl" #line 1552 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/uk.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/uk.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/uk.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/uk.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/uk.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/uk.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/uk.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/uk.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/uk.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/uk.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/uk.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/uk.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/uk.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/uk.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/uk.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/uk.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/uk.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/uk.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/uk.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/uk.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/uk.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/uk.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/uk.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/uk.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1842 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/uk.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1905 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c" } } } _out: {} } #line 426 "ragel/i18n/uk.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_uk() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "Uk", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_en_scouse/0000755000004100000410000000000012244512574020754 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_en_scouse/extconf.rb0000644000004100000410000000037412244512574022753 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_en_scouse") have_library("c", "main") create_makefile("gherkin_lexer_en_scouse") gherkin-2.12.2/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c0000644000004100000410000013763212244512574026025 0ustar www-datawww-data #line 1 "ragel/i18n/en_scouse.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/en_scouse.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 20, 21, 22, 41, 42, 43, 45, 47, 52, 57, 62, 67, 71, 75, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 97, 102, 109, 114, 115, 116, 117, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 237, 239, 241, 243, 245, 247, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 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, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 497, 499, 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 527, 529, 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, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 657, 659, 661, 663, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 695, 697, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 729, 731, 733, 735, 737, 739, 741, 743, 745, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 871, 873, 875, 877, 879, 881, 883, 885, 887, 889, 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 947, 953, 956, 958, 964, 983, 985, 987, 989, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 70, 71, 84, 87, 89, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 69, 70, 71, 84, 87, 89, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 110, 117, 104, 101, 105, 117, 110, 32, 121, 111, 117, 115, 101, 32, 103, 111, 116, 116, 97, 115, 32, 105, 115, 32, 119, 104, 97, 116, 32, 119, 101, 110, 116, 32, 100, 111, 119, 110, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 71, 84, 87, 89, 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, 68, 69, 70, 71, 84, 87, 89, 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, 68, 69, 70, 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, 105, 10, 115, 10, 32, 10, 105, 10, 115, 10, 32, 10, 119, 10, 104, 10, 97, 10, 116, 10, 32, 10, 119, 10, 101, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 119, 10, 110, 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, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 104, 10, 97, 10, 114, 10, 114, 10, 105, 10, 109, 10, 101, 10, 97, 10, 110, 105, 118, 117, 104, 101, 32, 116, 104, 105, 110, 103, 32, 111, 102, 32, 105, 116, 32, 105, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 71, 84, 87, 89, 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, 117, 10, 104, 10, 101, 105, 117, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 10, 116, 10, 97, 10, 115, 10, 32, 10, 105, 10, 115, 10, 32, 10, 119, 10, 104, 10, 97, 10, 116, 10, 32, 10, 119, 10, 101, 10, 110, 10, 116, 10, 32, 10, 100, 10, 111, 10, 119, 10, 110, 10, 58, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 10, 105, 10, 118, 10, 117, 10, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 115, 10, 104, 117, 10, 97, 10, 114, 10, 114, 10, 105, 10, 109, 10, 101, 10, 97, 10, 110, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 107, 10, 110, 10, 111, 10, 119, 10, 32, 10, 108, 119, 10, 105, 10, 107, 10, 101, 10, 32, 10, 119, 10, 104, 10, 101, 10, 104, 10, 101, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 104, 117, 97, 114, 114, 105, 109, 101, 97, 110, 32, 105, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 66, 68, 70, 71, 84, 87, 89, 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, 117, 10, 104, 10, 101, 117, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 10, 116, 10, 97, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 10, 58, 10, 105, 10, 118, 10, 117, 10, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 115, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 107, 10, 110, 10, 111, 10, 119, 10, 32, 10, 108, 119, 10, 105, 10, 107, 10, 101, 10, 32, 10, 119, 10, 104, 10, 101, 10, 104, 10, 101, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 111, 117, 115, 101, 32, 107, 110, 111, 119, 32, 108, 119, 105, 107, 101, 32, 119, 104, 101, 104, 101, 110, 32, 121, 111, 117, 115, 101, 32, 103, 111, 116, 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, 68, 69, 70, 71, 84, 87, 89, 124, 9, 13, 10, 110, 10, 117, 10, 104, 10, 101, 117, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 10, 116, 10, 97, 10, 101, 10, 97, 10, 116, 10, 117, 10, 114, 10, 101, 10, 58, 10, 105, 10, 118, 10, 117, 10, 104, 10, 101, 10, 32, 10, 116, 10, 104, 10, 105, 10, 110, 10, 103, 10, 32, 10, 111, 10, 102, 10, 32, 10, 105, 10, 116, 10, 32, 10, 105, 10, 115, 10, 104, 117, 10, 97, 10, 114, 10, 114, 10, 105, 10, 109, 10, 101, 10, 97, 10, 110, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 107, 10, 110, 10, 111, 10, 119, 10, 32, 10, 108, 119, 10, 105, 10, 107, 10, 101, 10, 32, 10, 119, 10, 104, 10, 101, 10, 104, 10, 101, 10, 110, 10, 32, 10, 121, 10, 111, 10, 117, 10, 115, 10, 101, 10, 32, 10, 103, 10, 111, 10, 116, 0 }; static const char _lexer_single_lengths[] = { 0, 18, 1, 1, 17, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 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, 10, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 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, 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, 3, 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, 1, 1, 1, 1, 1, 1, 14, 2, 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, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 3, 2, 4, 17, 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, 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, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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 }; static const short _lexer_index_offsets[] = { 0, 0, 20, 22, 24, 43, 45, 47, 50, 53, 58, 63, 68, 73, 77, 81, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 127, 134, 139, 141, 143, 145, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 326, 329, 332, 335, 338, 341, 344, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 377, 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 548, 551, 554, 557, 560, 563, 566, 569, 572, 575, 578, 581, 584, 587, 590, 593, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703, 706, 709, 712, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747, 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, 834, 837, 840, 843, 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1351, 1353, 1355, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1402, 1408, 1412, 1415, 1421, 1440, 1443, 1446, 1449, 1453, 1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489, 1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 1567, 1570, 1573, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 1631, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 563, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 31, 0, 39, 0, 31, 0, 41, 54, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 31, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 76, 75, 76, 75, 76, 76, 4, 77, 91, 4, 479, 480, 482, 496, 503, 506, 523, 532, 76, 75, 76, 78, 75, 76, 79, 75, 76, 80, 75, 76, 81, 75, 76, 82, 75, 76, 83, 75, 76, 84, 75, 76, 85, 75, 76, 86, 75, 76, 87, 75, 76, 88, 75, 76, 89, 75, 76, 90, 75, 76, 4, 75, 76, 92, 75, 4, 4, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 4, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 103, 102, 103, 102, 103, 103, 4, 104, 4, 103, 102, 103, 105, 102, 103, 106, 102, 103, 107, 102, 103, 108, 102, 103, 109, 102, 103, 110, 102, 103, 92, 102, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 120, 119, 120, 119, 120, 120, 4, 121, 4, 135, 156, 163, 169, 185, 120, 119, 120, 122, 119, 120, 123, 119, 120, 124, 119, 120, 125, 119, 120, 126, 119, 120, 127, 119, 120, 128, 119, 120, 129, 119, 120, 130, 119, 120, 131, 119, 120, 132, 119, 120, 133, 119, 120, 134, 119, 120, 4, 119, 120, 136, 119, 120, 137, 119, 120, 138, 119, 120, 139, 119, 120, 140, 119, 120, 141, 119, 120, 142, 119, 120, 143, 119, 120, 144, 119, 120, 145, 119, 120, 146, 119, 120, 147, 119, 120, 148, 119, 120, 149, 119, 120, 150, 119, 120, 151, 119, 120, 152, 119, 120, 153, 119, 120, 154, 119, 120, 155, 119, 120, 92, 119, 120, 157, 119, 120, 158, 119, 120, 159, 119, 120, 160, 119, 120, 161, 119, 120, 162, 119, 120, 155, 119, 120, 164, 119, 120, 165, 119, 120, 166, 119, 120, 167, 119, 120, 168, 119, 120, 155, 119, 120, 170, 119, 120, 171, 119, 120, 172, 119, 120, 173, 119, 120, 174, 119, 120, 175, 119, 120, 176, 119, 120, 177, 119, 120, 178, 119, 120, 179, 119, 120, 180, 119, 120, 181, 119, 120, 182, 119, 120, 183, 119, 120, 184, 119, 120, 162, 119, 120, 186, 119, 120, 187, 119, 120, 188, 119, 120, 189, 119, 120, 190, 119, 120, 191, 119, 120, 192, 119, 120, 193, 119, 120, 183, 119, 195, 0, 196, 0, 37, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 217, 216, 217, 216, 217, 217, 4, 218, 232, 4, 233, 234, 236, 270, 276, 279, 296, 305, 217, 216, 217, 219, 216, 217, 220, 216, 217, 221, 216, 217, 222, 216, 217, 223, 216, 217, 224, 216, 217, 225, 216, 217, 226, 216, 217, 227, 216, 217, 228, 216, 217, 229, 216, 217, 230, 216, 217, 231, 216, 217, 4, 216, 217, 92, 216, 217, 232, 216, 217, 235, 216, 217, 232, 216, 217, 237, 250, 233, 216, 217, 238, 216, 217, 239, 216, 217, 240, 216, 217, 241, 216, 217, 242, 216, 217, 243, 216, 217, 244, 216, 217, 245, 216, 217, 246, 216, 217, 247, 216, 217, 248, 216, 217, 249, 216, 217, 232, 216, 217, 251, 216, 217, 252, 216, 217, 253, 216, 217, 254, 216, 217, 255, 216, 217, 256, 216, 217, 257, 216, 217, 258, 216, 217, 259, 216, 217, 260, 216, 217, 261, 216, 217, 262, 216, 217, 263, 216, 217, 264, 216, 217, 265, 216, 217, 266, 216, 217, 267, 216, 217, 268, 216, 217, 269, 216, 217, 92, 216, 217, 271, 216, 217, 272, 216, 217, 273, 216, 217, 274, 216, 217, 275, 216, 217, 269, 216, 217, 277, 216, 217, 278, 216, 217, 233, 216, 217, 280, 216, 217, 281, 216, 217, 282, 216, 217, 283, 216, 217, 284, 216, 217, 285, 216, 217, 286, 216, 217, 287, 216, 217, 288, 216, 217, 289, 216, 217, 290, 216, 217, 291, 216, 217, 292, 216, 217, 293, 216, 217, 294, 216, 217, 295, 216, 217, 269, 216, 217, 297, 233, 216, 217, 298, 216, 217, 299, 216, 217, 300, 216, 217, 301, 216, 217, 302, 216, 217, 303, 216, 217, 304, 216, 217, 293, 216, 217, 306, 216, 217, 307, 216, 217, 308, 216, 217, 309, 216, 217, 310, 216, 217, 311, 216, 217, 312, 216, 217, 313, 216, 217, 314, 216, 217, 315, 216, 217, 316, 323, 216, 217, 317, 216, 217, 318, 216, 217, 319, 216, 217, 320, 216, 217, 321, 216, 217, 322, 216, 217, 233, 216, 217, 324, 216, 217, 325, 216, 217, 326, 216, 217, 327, 216, 217, 328, 216, 217, 329, 216, 217, 330, 216, 217, 331, 216, 217, 332, 216, 217, 333, 216, 217, 334, 216, 217, 335, 216, 217, 232, 216, 337, 37, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 351, 350, 351, 350, 351, 351, 4, 352, 366, 4, 367, 368, 370, 384, 391, 394, 393, 411, 351, 350, 351, 353, 350, 351, 354, 350, 351, 355, 350, 351, 356, 350, 351, 357, 350, 351, 358, 350, 351, 359, 350, 351, 360, 350, 351, 361, 350, 351, 362, 350, 351, 363, 350, 351, 364, 350, 351, 365, 350, 351, 4, 350, 351, 92, 350, 351, 366, 350, 351, 369, 350, 351, 366, 350, 351, 371, 367, 350, 351, 372, 350, 351, 373, 350, 351, 374, 350, 351, 375, 350, 351, 376, 350, 351, 377, 350, 351, 378, 350, 351, 379, 350, 351, 380, 350, 351, 381, 350, 351, 382, 350, 351, 383, 350, 351, 366, 350, 351, 385, 350, 351, 386, 350, 351, 387, 350, 351, 388, 350, 351, 389, 350, 351, 390, 350, 351, 92, 350, 351, 392, 350, 351, 393, 350, 351, 367, 350, 351, 395, 350, 351, 396, 350, 351, 397, 350, 351, 398, 350, 351, 399, 350, 351, 400, 350, 351, 401, 350, 351, 402, 350, 351, 403, 350, 351, 404, 350, 351, 405, 350, 351, 406, 350, 351, 407, 350, 351, 408, 350, 351, 409, 350, 351, 410, 350, 351, 390, 350, 351, 412, 350, 351, 413, 350, 351, 414, 350, 351, 415, 350, 351, 416, 350, 351, 417, 350, 351, 418, 350, 351, 419, 350, 351, 420, 350, 351, 421, 350, 351, 422, 429, 350, 351, 423, 350, 351, 424, 350, 351, 425, 350, 351, 426, 350, 351, 427, 350, 351, 428, 350, 351, 367, 350, 351, 430, 350, 351, 431, 350, 351, 432, 350, 351, 433, 350, 351, 434, 350, 351, 435, 350, 351, 436, 350, 351, 437, 350, 351, 438, 350, 351, 439, 350, 351, 440, 350, 351, 441, 350, 351, 366, 350, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 460, 0, 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 459, 0, 37, 0, 461, 0, 462, 0, 463, 0, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 31, 0, 473, 474, 473, 0, 478, 477, 476, 474, 477, 475, 0, 476, 474, 475, 0, 476, 475, 478, 477, 476, 474, 477, 475, 478, 478, 5, 15, 17, 31, 34, 37, 38, 40, 93, 111, 194, 197, 336, 442, 473, 478, 0, 76, 91, 75, 76, 481, 75, 76, 91, 75, 76, 483, 479, 75, 76, 484, 75, 76, 485, 75, 76, 486, 75, 76, 487, 75, 76, 488, 75, 76, 489, 75, 76, 490, 75, 76, 491, 75, 76, 492, 75, 76, 493, 75, 76, 494, 75, 76, 495, 75, 76, 91, 75, 76, 497, 75, 76, 498, 75, 76, 499, 75, 76, 500, 75, 76, 501, 75, 76, 502, 75, 76, 92, 75, 76, 504, 75, 76, 505, 75, 76, 479, 75, 76, 507, 75, 76, 508, 75, 76, 509, 75, 76, 510, 75, 76, 511, 75, 76, 512, 75, 76, 513, 75, 76, 514, 75, 76, 515, 75, 76, 516, 75, 76, 517, 75, 76, 518, 75, 76, 519, 75, 76, 520, 75, 76, 521, 75, 76, 522, 75, 76, 502, 75, 76, 524, 479, 75, 76, 525, 75, 76, 526, 75, 76, 527, 75, 76, 528, 75, 76, 529, 75, 76, 530, 75, 76, 531, 75, 76, 520, 75, 76, 533, 75, 76, 534, 75, 76, 535, 75, 76, 536, 75, 76, 537, 75, 76, 538, 75, 76, 539, 75, 76, 540, 75, 76, 541, 75, 76, 542, 75, 76, 543, 550, 75, 76, 544, 75, 76, 545, 75, 76, 546, 75, 76, 547, 75, 76, 548, 75, 76, 549, 75, 76, 479, 75, 76, 551, 75, 76, 552, 75, 76, 553, 75, 76, 554, 75, 76, 555, 75, 76, 556, 75, 76, 557, 75, 76, 558, 75, 76, 559, 75, 76, 560, 75, 76, 561, 75, 76, 562, 75, 76, 91, 75, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 21, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 563; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/en_scouse.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1238 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c" { cs = lexer_start; } #line 425 "ragel/i18n/en_scouse.c.rl" #line 1245 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/en_scouse.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/en_scouse.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/en_scouse.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/en_scouse.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/en_scouse.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/en_scouse.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/en_scouse.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/en_scouse.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/en_scouse.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/en_scouse.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/en_scouse.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/en_scouse.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/en_scouse.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/en_scouse.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/en_scouse.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/en_scouse.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/en_scouse.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/en_scouse.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/en_scouse.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/en_scouse.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/en_scouse.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/en_scouse.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/en_scouse.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/en_scouse.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1535 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/en_scouse.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1598 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c" } } } _out: {} } #line 426 "ragel/i18n/en_scouse.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_en_scouse() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "En_scouse", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/ext/gherkin_lexer_de/0000755000004100000410000000000012244512574017361 5ustar www-datawww-datagherkin-2.12.2/ext/gherkin_lexer_de/extconf.rb0000644000004100000410000000035612244512574021360 0ustar www-datawww-datarequire 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/ dir_config("gherkin_lexer_de") have_library("c", "main") create_makefile("gherkin_lexer_de") gherkin-2.12.2/ext/gherkin_lexer_de/gherkin_lexer_de.c0000644000004100000410000012061712244512574023032 0ustar www-datawww-data #line 1 "ragel/i18n/de.c.rl" #include #include #if defined(_WIN32) #include #endif #ifdef HAVE_RUBY_RE_H #include #else #include #endif #ifdef HAVE_RUBY_ENCODING_H #include #define ENCODED_STR_NEW(ptr, len) \ rb_enc_str_new(ptr, len, rb_utf8_encoding()) #else #define ENCODED_STR_NEW(ptr, len) \ rb_str_new(ptr, len) #endif #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)->ptr) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)->len) #endif #define DATA_GET(FROM, TYPE, NAME) \ Data_Get_Struct(FROM, TYPE, NAME); \ if (NAME == NULL) { \ rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \ } typedef struct lexer_state { int content_len; int line_number; int current_line; int start_col; size_t mark; size_t keyword_start; size_t keyword_end; size_t next_keyword_start; size_t content_start; size_t content_end; size_t docstring_content_type_start; size_t docstring_content_type_end; size_t query_start; size_t last_newline; size_t final_newline; } lexer_state; static VALUE mGherkin; static VALUE mGherkinLexer; static VALUE mCLexer; static VALUE cI18nLexer; static VALUE rb_eGherkinLexingError; #define LEN(AT, P) (P - data - lexer->AT) #define MARK(M, P) (lexer->M = (P) - data) #define PTR_TO(P) (data + lexer->P) #define STORE_KW_END_CON(EVENT) \ store_multiline_kw_con(listener, # EVENT, \ PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \ PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \ lexer->current_line, lexer->start_col); \ if (lexer->content_end != 0) { \ p = PTR_TO(content_end - 1); \ } \ lexer->content_end = 0 #define STORE_ATTR(ATTR) \ store_attr(listener, # ATTR, \ PTR_TO(content_start), LEN(content_start, p), \ lexer->line_number) #line 254 "ragel/i18n/de.c.rl" /** Data **/ #line 89 "ext/gherkin_lexer_de/gherkin_lexer_de.c" static const char _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, 12, 1, 13, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 2, 1, 18, 2, 4, 5, 2, 13, 0, 2, 14, 15, 2, 17, 0, 2, 17, 2, 2, 17, 16, 2, 17, 19, 2, 18, 6, 2, 18, 7, 2, 18, 8, 2, 18, 9, 2, 18, 10, 2, 18, 16, 2, 20, 21, 2, 22, 0, 2, 22, 2, 2, 22, 16, 2, 22, 19, 3, 3, 14, 15, 3, 5, 14, 15, 3, 11, 14, 15, 3, 12, 14, 15, 3, 13, 14, 15, 3, 14, 15, 18, 3, 17, 0, 11, 3, 17, 14, 15, 4, 1, 14, 15, 18, 4, 4, 5, 14, 15, 4, 17, 0, 14, 15, 5, 17, 0, 11, 14, 15 }; static const short _lexer_key_offsets[] = { 0, 0, 19, 20, 21, 39, 40, 41, 43, 45, 50, 55, 60, 65, 69, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 95, 100, 107, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 220, 222, 224, 226, 228, 230, 232, 234, 236, 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, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 491, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 529, 530, 531, 532, 533, 534, 535, 537, 538, 539, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 587, 589, 591, 593, 595, 597, 599, 601, 603, 605, 607, 609, 611, 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, 633, 635, 637, 639, 641, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 665, 667, 669, 671, 673, 675, 677, 679, 681, 683, 685, 687, 689, 691, 693, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 777, 779, 781, 783, 785, 787, 789, 791, 793, 795, 797, 799, 801, 803, 805, 807, 809, 811, 813, 815, 817, 819, 821, 823, 825, 827, 829, 831, 833, 835, 837, 839, 841, 843, 845, 847, 849, 851, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 875, 876, 877, 881, 887, 890, 892, 898, 916 }; static const char _lexer_trans_keys[] = { -17, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 70, 71, 83, 85, 87, 124, 9, 13, -69, -65, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 70, 71, 83, 85, 87, 124, 9, 13, 34, 34, 10, 13, 10, 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, 13, 10, 13, 13, 32, 64, 9, 10, 9, 10, 13, 32, 64, 11, 12, 10, 32, 64, 9, 13, 98, 110, 101, 114, 103, 101, 110, 111, 109, 109, 101, 110, 101, 105, 115, 112, 105, 101, 108, 101, 58, 10, 10, 10, 32, 35, 70, 124, 9, 13, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 32, 34, 35, 37, 42, 64, 65, 66, 68, 70, 71, 83, 85, 87, 124, 9, 13, 97, 110, 117, 110, 107, 116, 105, 111, 110, 97, 108, 105, 116, -61, -92, 116, 58, 10, 10, 10, 32, 35, 37, 64, 66, 70, 71, 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, 101, 10, 105, 10, 115, 10, 112, 10, 105, 10, 101, 10, 108, 10, 101, 10, 58, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 114, 10, 117, 10, 110, 10, 100, 10, 108, 10, 97, 10, 103, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 114, 10, 105, 10, 115, 10, 115, 101, 114, 103, 101, 98, 101, 110, 32, 115, 101, 105, 32, 101, 117, 110, 100, 108, 97, 103, 101, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 70, 71, 83, 85, 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, 98, 110, 10, 101, 10, 114, 10, 103, 10, 101, 10, 110, 10, 111, 10, 109, 10, 109, 10, 101, 10, 110, 10, 97, 10, 110, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 101, 10, 103, 10, 101, 10, 98, 10, 101, 10, 110, 10, 32, 10, 115, 10, 101, 10, 105, 10, 32, 101, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 114, 10, 105, 10, 115, 10, 115, 10, 110, 10, 100, 10, 101, 122, 101, 110, 97, 114, 105, 111, 58, 103, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 70, 71, 83, 85, 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, 98, 110, 10, 101, 10, 114, 10, 103, 10, 101, 10, 110, 10, 111, 10, 109, 10, 109, 10, 101, 10, 110, 10, 97, 10, 110, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 101, 114, 10, 103, 10, 101, 10, 98, 10, 101, 10, 110, 10, 32, 10, 115, 10, 101, 10, 105, 10, 32, 101, 10, 117, 10, 110, 10, 100, 10, 108, 10, 97, 10, 103, 10, 101, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 58, 103, 10, 114, 10, 117, 10, 110, 10, 100, 10, 114, 10, 105, 10, 115, 10, 115, 10, 110, 10, 100, 10, 101, 114, 117, 110, 100, 114, 105, 115, 115, 58, 10, 10, 10, 32, 35, 37, 42, 64, 65, 68, 70, 71, 83, 85, 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, 98, 110, 10, 101, 10, 114, 10, 103, 10, 101, 10, 110, 10, 111, 10, 109, 10, 109, 10, 101, 10, 110, 10, 97, 10, 110, 10, 117, 10, 110, 10, 107, 10, 116, 10, 105, 10, 111, 10, 110, 10, 97, 10, 108, 10, 105, 10, 116, -61, 10, -92, 10, 10, 116, 10, 58, 10, 101, 10, 103, 10, 101, 10, 98, 10, 101, 10, 110, 10, 32, 10, 115, 10, 101, 10, 105, 10, 32, 101, 10, 122, 10, 101, 10, 110, 10, 97, 10, 114, 10, 105, 10, 111, 10, 110, 10, 100, 10, 101, 110, 100, 101, 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, 68, 70, 71, 83, 85, 87, 124, 9, 13, 0 }; static const char _lexer_single_lengths[] = { 0, 17, 1, 1, 16, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 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, 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, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 13, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 4, 3, 2, 4, 16, 0 }; static const char _lexer_range_lengths[] = { 0, 1, 0, 0, 1, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 1, 1, 0, 0, 1, 1, 0 }; static const short _lexer_index_offsets[] = { 0, 0, 19, 21, 23, 41, 43, 45, 48, 51, 56, 61, 66, 71, 75, 79, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 120, 125, 132, 137, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 590, 593, 596, 599, 602, 605, 608, 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, 641, 644, 647, 650, 653, 656, 659, 662, 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, 695, 698, 701, 705, 708, 711, 714, 717, 720, 723, 726, 730, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 765, 767, 769, 771, 773, 775, 777, 780, 782, 784, 799, 802, 805, 808, 811, 814, 817, 820, 823, 826, 829, 832, 835, 838, 841, 844, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 933, 936, 939, 942, 945, 948, 951, 954, 957, 960, 964, 967, 970, 973, 976, 979, 982, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1276, 1278, 1280, 1284, 1290, 1294, 1297, 1303, 1321 }; static const short _lexer_trans_targs[] = { 2, 4, 4, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 4, 0, 3, 0, 4, 0, 4, 4, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 4, 0, 6, 0, 7, 0, 9, 8, 8, 9, 8, 8, 10, 10, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 12, 10, 10, 10, 10, 13, 10, 10, 4, 14, 14, 0, 4, 14, 14, 0, 4, 16, 15, 4, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 427, 0, 32, 0, 4, 16, 33, 4, 16, 33, 0, 0, 0, 0, 35, 36, 4, 36, 36, 34, 35, 35, 4, 36, 34, 36, 0, 38, 40, 0, 39, 0, 31, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 31, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 59, 58, 59, 58, 59, 59, 4, 60, 4, 59, 58, 59, 61, 58, 59, 62, 58, 59, 63, 58, 59, 64, 58, 59, 65, 58, 59, 66, 58, 59, 67, 58, 59, 68, 58, 59, 69, 58, 59, 70, 58, 59, 71, 58, 72, 59, 58, 73, 59, 58, 59, 74, 58, 59, 75, 58, 4, 4, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 4, 0, 77, 0, 47, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 95, 94, 95, 94, 95, 95, 4, 96, 4, 110, 119, 133, 140, 95, 94, 95, 97, 94, 95, 98, 94, 95, 99, 94, 95, 100, 94, 95, 101, 94, 95, 102, 94, 95, 103, 94, 95, 104, 94, 95, 105, 94, 95, 106, 94, 95, 107, 94, 95, 108, 94, 95, 109, 94, 95, 4, 94, 95, 111, 94, 95, 112, 94, 95, 113, 94, 95, 114, 94, 95, 115, 94, 95, 116, 94, 95, 117, 94, 95, 118, 94, 95, 75, 94, 95, 120, 94, 95, 121, 94, 95, 122, 94, 95, 123, 94, 95, 124, 94, 95, 125, 94, 95, 126, 94, 95, 127, 94, 95, 128, 94, 95, 129, 94, 95, 130, 94, 131, 95, 94, 132, 95, 94, 95, 118, 94, 95, 134, 94, 95, 135, 94, 95, 136, 94, 95, 137, 94, 95, 138, 94, 95, 139, 94, 95, 117, 94, 95, 141, 94, 95, 142, 94, 95, 143, 94, 95, 144, 94, 95, 145, 94, 95, 146, 94, 95, 147, 94, 95, 75, 148, 94, 95, 149, 94, 95, 150, 94, 95, 151, 94, 95, 152, 94, 95, 153, 94, 95, 154, 94, 95, 155, 94, 95, 118, 94, 157, 167, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 32, 47, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 177, 176, 177, 176, 177, 177, 4, 178, 192, 4, 193, 204, 206, 221, 232, 248, 250, 177, 176, 177, 179, 176, 177, 180, 176, 177, 181, 176, 177, 182, 176, 177, 183, 176, 177, 184, 176, 177, 185, 176, 177, 186, 176, 177, 187, 176, 177, 188, 176, 177, 189, 176, 177, 190, 176, 177, 191, 176, 177, 4, 176, 177, 75, 176, 177, 194, 196, 176, 177, 195, 176, 177, 192, 176, 177, 197, 176, 177, 198, 176, 177, 199, 176, 177, 200, 176, 177, 201, 176, 177, 202, 176, 177, 203, 176, 177, 192, 176, 177, 205, 176, 177, 203, 176, 177, 207, 176, 177, 208, 176, 177, 209, 176, 177, 210, 176, 177, 211, 176, 177, 212, 176, 177, 213, 176, 177, 214, 176, 177, 215, 176, 177, 216, 176, 177, 217, 176, 218, 177, 176, 219, 177, 176, 177, 220, 176, 177, 75, 176, 177, 222, 176, 177, 223, 176, 177, 224, 176, 177, 225, 176, 177, 226, 176, 177, 227, 176, 177, 228, 176, 177, 229, 176, 177, 230, 176, 177, 231, 176, 177, 75, 203, 176, 177, 233, 176, 177, 234, 176, 177, 235, 176, 177, 236, 176, 177, 237, 176, 177, 238, 176, 177, 239, 176, 177, 75, 240, 176, 177, 241, 176, 177, 242, 176, 177, 243, 176, 177, 244, 176, 177, 245, 176, 177, 246, 176, 177, 247, 176, 177, 220, 176, 177, 249, 176, 177, 192, 176, 177, 205, 176, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 342, 0, 261, 260, 261, 260, 261, 261, 4, 262, 276, 4, 277, 288, 290, 305, 323, 339, 341, 261, 260, 261, 263, 260, 261, 264, 260, 261, 265, 260, 261, 266, 260, 261, 267, 260, 261, 268, 260, 261, 269, 260, 261, 270, 260, 261, 271, 260, 261, 272, 260, 261, 273, 260, 261, 274, 260, 261, 275, 260, 261, 4, 260, 261, 75, 260, 261, 278, 280, 260, 261, 279, 260, 261, 276, 260, 261, 281, 260, 261, 282, 260, 261, 283, 260, 261, 284, 260, 261, 285, 260, 261, 286, 260, 261, 287, 260, 261, 276, 260, 261, 289, 260, 261, 287, 260, 261, 291, 260, 261, 292, 260, 261, 293, 260, 261, 294, 260, 261, 295, 260, 261, 296, 260, 261, 297, 260, 261, 298, 260, 261, 299, 260, 261, 300, 260, 261, 301, 260, 302, 261, 260, 303, 261, 260, 261, 304, 260, 261, 75, 260, 261, 306, 316, 260, 261, 307, 260, 261, 308, 260, 261, 309, 260, 261, 310, 260, 261, 311, 260, 261, 312, 260, 261, 313, 260, 261, 314, 260, 261, 315, 260, 261, 75, 287, 260, 261, 317, 260, 261, 318, 260, 261, 319, 260, 261, 320, 260, 261, 321, 260, 261, 322, 260, 261, 304, 260, 261, 324, 260, 261, 325, 260, 261, 326, 260, 261, 327, 260, 261, 328, 260, 261, 329, 260, 261, 330, 260, 261, 75, 331, 260, 261, 332, 260, 261, 333, 260, 261, 334, 260, 261, 335, 260, 261, 336, 260, 261, 337, 260, 261, 338, 260, 261, 304, 260, 261, 340, 260, 261, 276, 260, 261, 289, 260, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 353, 352, 353, 352, 353, 353, 4, 354, 368, 4, 369, 380, 382, 397, 408, 415, 417, 353, 352, 353, 355, 352, 353, 356, 352, 353, 357, 352, 353, 358, 352, 353, 359, 352, 353, 360, 352, 353, 361, 352, 353, 362, 352, 353, 363, 352, 353, 364, 352, 353, 365, 352, 353, 366, 352, 353, 367, 352, 353, 4, 352, 353, 75, 352, 353, 370, 372, 352, 353, 371, 352, 353, 368, 352, 353, 373, 352, 353, 374, 352, 353, 375, 352, 353, 376, 352, 353, 377, 352, 353, 378, 352, 353, 379, 352, 353, 368, 352, 353, 381, 352, 353, 379, 352, 353, 383, 352, 353, 384, 352, 353, 385, 352, 353, 386, 352, 353, 387, 352, 353, 388, 352, 353, 389, 352, 353, 390, 352, 353, 391, 352, 353, 392, 352, 353, 393, 352, 394, 353, 352, 395, 353, 352, 353, 396, 352, 353, 75, 352, 353, 398, 352, 353, 399, 352, 353, 400, 352, 353, 401, 352, 353, 402, 352, 353, 403, 352, 353, 404, 352, 353, 405, 352, 353, 406, 352, 353, 407, 352, 353, 75, 379, 352, 353, 409, 352, 353, 410, 352, 353, 411, 352, 353, 412, 352, 353, 413, 352, 353, 414, 352, 353, 396, 352, 353, 416, 352, 353, 368, 352, 353, 381, 352, 419, 0, 31, 0, 77, 0, 421, 422, 421, 0, 426, 425, 424, 422, 425, 423, 0, 424, 422, 423, 0, 424, 423, 426, 425, 424, 422, 425, 423, 426, 426, 5, 15, 17, 31, 34, 37, 48, 76, 78, 156, 251, 418, 420, 421, 426, 0, 0, 0 }; static const unsigned char _lexer_trans_actions[] = { 0, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 54, 0, 5, 1, 0, 29, 1, 29, 29, 29, 29, 29, 29, 29, 29, 35, 0, 43, 0, 43, 0, 43, 139, 48, 9, 106, 11, 0, 134, 45, 45, 45, 3, 122, 33, 33, 33, 0, 122, 33, 33, 33, 0, 122, 33, 0, 33, 0, 102, 7, 7, 43, 54, 0, 0, 43, 114, 25, 0, 54, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 149, 126, 57, 110, 23, 0, 43, 43, 43, 43, 0, 27, 118, 27, 27, 51, 27, 0, 54, 0, 1, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 81, 84, 81, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 21, 0, 130, 31, 60, 57, 31, 63, 57, 63, 63, 63, 63, 63, 63, 63, 63, 66, 31, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 69, 33, 69, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 13, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 72, 33, 84, 72, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 54, 15, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 15, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 15, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 0, 43, 144, 57, 54, 0, 54, 0, 75, 33, 84, 75, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 17, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 17, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 0, 43, 144, 57, 54, 0, 54, 0, 78, 33, 84, 78, 84, 84, 84, 84, 84, 84, 84, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 54, 19, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 54, 0, 0, 54, 0, 54, 0, 0, 54, 19, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 19, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 54, 0, 0, 0, 43, 0, 43, 0, 43, 0, 0, 0, 43, 54, 37, 37, 87, 37, 37, 43, 0, 39, 0, 43, 0, 0, 54, 0, 0, 39, 0, 0, 54, 0, 93, 90, 41, 96, 90, 96, 96, 96, 96, 96, 96, 96, 96, 99, 0, 43, 0, 0 }; static const unsigned char _lexer_eof_actions[] = { 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static const int lexer_start = 1; static const int lexer_first_final = 427; static const int lexer_error = 0; static const int lexer_en_main = 1; #line 258 "ragel/i18n/de.c.rl" static VALUE unindent(VALUE con, int start_col) { VALUE re; /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */ char pat[32]; snprintf(pat, 32, "^[\t ]{0,%d}", start_col); re = rb_reg_regcomp(rb_str_new2(pat)); rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2("")); return Qnil; } static void store_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line) { VALUE con = Qnil, kw = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); rb_funcall(con, rb_intern("strip!"), 0); rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); } static void store_multiline_kw_con(VALUE listener, const char * event_name, const char * keyword_at, size_t keyword_length, const char * at, size_t length, int current_line, int start_col) { VALUE split; VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil; kw = ENCODED_STR_NEW(keyword_at, keyword_length); con = ENCODED_STR_NEW(at, length); unindent(con, start_col); split = rb_str_split(con, "\n"); name = rb_funcall(split, rb_intern("shift"), 0); desc = rb_ary_join(split, rb_str_new2( "\n" )); if( name == Qnil ) { name = rb_str_new2(""); } if( rb_funcall(desc, rb_intern("size"), 0) == 0) { desc = rb_str_new2(""); } rb_funcall(name, rb_intern("strip!"), 0); rb_funcall(desc, rb_intern("rstrip!"), 0); rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); } static void store_attr(VALUE listener, const char * attr_type, const char * at, size_t length, int line) { VALUE val = ENCODED_STR_NEW(at, length); rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line)); } static void store_docstring_content(VALUE listener, int start_col, const char *type_at, size_t type_length, const char *at, size_t length, int current_line) { VALUE re2; VALUE unescape_escaped_quotes; VALUE con = ENCODED_STR_NEW(at, length); VALUE con_type = ENCODED_STR_NEW(type_at, type_length); unindent(con, start_col); re2 = rb_reg_regcomp(rb_str_new2("\r\\Z")); unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\"")); rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2("")); rb_funcall(con_type, rb_intern("strip!"), 0); rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\"")); rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line)); } static void raise_lexer_error(const char * at, int line) { rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at); } static void lexer_init(lexer_state *lexer) { lexer->content_start = 0; lexer->content_end = 0; lexer->content_len = 0; lexer->docstring_content_type_start = 0; lexer->docstring_content_type_end = 0; lexer->mark = 0; lexer->keyword_start = 0; lexer->keyword_end = 0; lexer->next_keyword_start = 0; lexer->line_number = 1; lexer->last_newline = 0; lexer->final_newline = 0; lexer->start_col = 0; } static VALUE CLexer_alloc(VALUE klass) { VALUE obj; lexer_state *lxr = ALLOC(lexer_state); lexer_init(lxr); obj = Data_Wrap_Struct(klass, NULL, -1, lxr); return obj; } static VALUE CLexer_init(VALUE self, VALUE listener) { lexer_state *lxr; rb_iv_set(self, "@listener", listener); lxr = NULL; DATA_GET(self, lexer_state, lxr); lexer_init(lxr); return self; } static VALUE CLexer_scan(VALUE self, VALUE input) { VALUE input_copy; char *data; size_t len; VALUE listener = rb_iv_get(self, "@listener"); lexer_state *lexer; lexer = NULL; DATA_GET(self, lexer_state, lexer); input_copy = rb_str_dup(input); rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%")); data = RSTRING_PTR(input_copy); len = RSTRING_LEN(input_copy); if (len == 0) { rb_raise(rb_eGherkinLexingError, "No content to lex."); } else { const char *p, *pe, *eof; int cs = 0; VALUE current_row = Qnil; p = data; pe = data + len; eof = pe; assert(*pe == '\0' && "pointer does not end on NULL"); #line 1029 "ext/gherkin_lexer_de/gherkin_lexer_de.c" { cs = lexer_start; } #line 425 "ragel/i18n/de.c.rl" #line 1036 "ext/gherkin_lexer_de/gherkin_lexer_de.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _lexer_trans_keys + _lexer_key_offsets[cs]; _trans = _lexer_index_offsets[cs]; _klen = _lexer_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _lexer_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: cs = _lexer_trans_targs[_trans]; if ( _lexer_trans_actions[_trans] == 0 ) goto _again; _acts = _lexer_actions + _lexer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 83 "ragel/i18n/de.c.rl" { MARK(content_start, p); lexer->current_line = lexer->line_number; lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2; } break; case 1: #line 89 "ragel/i18n/de.c.rl" { MARK(content_start, p); } break; case 2: #line 93 "ragel/i18n/de.c.rl" { lexer->current_line = lexer->line_number; lexer->start_col = p - data - lexer->last_newline; } break; case 3: #line 98 "ragel/i18n/de.c.rl" { int len = LEN(content_start, PTR_TO(final_newline)); int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end)); if (len < 0) len = 0; if (type_len < 0) len = 0; store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line); } break; case 4: #line 108 "ragel/i18n/de.c.rl" { MARK(docstring_content_type_start, p); } break; case 5: #line 112 "ragel/i18n/de.c.rl" { MARK(docstring_content_type_end, p); } break; case 6: #line 116 "ragel/i18n/de.c.rl" { STORE_KW_END_CON(feature); } break; case 7: #line 120 "ragel/i18n/de.c.rl" { STORE_KW_END_CON(background); } break; case 8: #line 124 "ragel/i18n/de.c.rl" { STORE_KW_END_CON(scenario); } break; case 9: #line 128 "ragel/i18n/de.c.rl" { STORE_KW_END_CON(scenario_outline); } break; case 10: #line 132 "ragel/i18n/de.c.rl" { STORE_KW_END_CON(examples); } break; case 11: #line 136 "ragel/i18n/de.c.rl" { store_kw_con(listener, "step", PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)), PTR_TO(content_start), LEN(content_start, p), lexer->current_line); } break; case 12: #line 143 "ragel/i18n/de.c.rl" { STORE_ATTR(comment); lexer->mark = 0; } break; case 13: #line 148 "ragel/i18n/de.c.rl" { STORE_ATTR(tag); lexer->mark = 0; } break; case 14: #line 153 "ragel/i18n/de.c.rl" { lexer->line_number += 1; MARK(final_newline, p); } break; case 15: #line 158 "ragel/i18n/de.c.rl" { MARK(last_newline, p + 1); } break; case 16: #line 162 "ragel/i18n/de.c.rl" { if (lexer->mark == 0) { MARK(mark, p); } } break; case 17: #line 168 "ragel/i18n/de.c.rl" { MARK(keyword_end, p); MARK(keyword_start, PTR_TO(mark)); MARK(content_start, p + 1); lexer->mark = 0; } break; case 18: #line 175 "ragel/i18n/de.c.rl" { MARK(content_end, p); } break; case 19: #line 179 "ragel/i18n/de.c.rl" { p = p - 1; lexer->current_line = lexer->line_number; current_row = rb_ary_new(); } break; case 20: #line 185 "ragel/i18n/de.c.rl" { MARK(content_start, p); } break; case 21: #line 189 "ragel/i18n/de.c.rl" { VALUE re_pipe, re_newline, re_backslash; VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p)); rb_funcall(con, rb_intern("strip!"), 0); re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|")); re_newline = rb_reg_regcomp(rb_str_new2("\\\\n")); re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\")); rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|")); rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n")); rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\")); rb_ary_push(current_row, con); } break; case 22: #line 203 "ragel/i18n/de.c.rl" { rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line)); } break; case 23: #line 207 "ragel/i18n/de.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1326 "ext/gherkin_lexer_de/gherkin_lexer_de.c" } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { const char *__acts = _lexer_actions + _lexer_eof_actions[cs]; unsigned int __nacts = (unsigned int) *__acts++; while ( __nacts-- > 0 ) { switch ( *__acts++ ) { case 23: #line 207 "ragel/i18n/de.c.rl" { int line; if (cs < lexer_first_final) { size_t count = 0; VALUE newstr_val; char *newstr; int newstr_count = 0; size_t len; const char *buff; if (lexer->last_newline != 0) { len = LEN(last_newline, eof); buff = PTR_TO(last_newline); } else { len = strlen(data); buff = data; } /* Allocate as a ruby string so that it gets cleaned up by GC */ newstr_val = rb_str_new(buff, len); newstr = RSTRING_PTR(newstr_val); for (count = 0; count < len; count++) { if(buff[count] == 10) { newstr[newstr_count] = '\0'; /* terminate new string at first newline found */ break; } else { if (buff[count] == '%') { newstr[newstr_count++] = buff[count]; newstr[newstr_count] = buff[count]; } else { newstr[newstr_count] = buff[count]; } } newstr_count++; } line = lexer->line_number; lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */ raise_lexer_error(newstr, line); } else { rb_funcall(listener, rb_intern("eof"), 0); } } break; #line 1389 "ext/gherkin_lexer_de/gherkin_lexer_de.c" } } } _out: {} } #line 426 "ragel/i18n/de.c.rl" assert(p <= pe && "data overflow after parsing execute"); assert(lexer->content_start <= len && "content starts after data end"); assert(lexer->mark < len && "mark is after data end"); /* Reset lexer by re-initializing the whole thing */ lexer_init(lexer); if (cs == lexer_error) { rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails."); } else { return Qtrue; } } } void Init_gherkin_lexer_de() { mGherkin = rb_define_module("Gherkin"); mGherkinLexer = rb_define_module_under(mGherkin, "Lexer"); rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError")); mCLexer = rb_define_module_under(mGherkin, "CLexer"); cI18nLexer = rb_define_class_under(mCLexer, "De", rb_cObject); rb_define_alloc_func(cI18nLexer, CLexer_alloc); rb_define_method(cI18nLexer, "initialize", CLexer_init, 1); rb_define_method(cI18nLexer, "scan", CLexer_scan, 1); } gherkin-2.12.2/README.md0000644000004100000410000002135112244512574014544 0ustar www-datawww-data[![Build Status](https://secure.travis-ci.org/cucumber/gherkin.png)](http://travis-ci.org/cucumber/gherkin) A fast lexer and parser for the Gherkin language based on Ragel. Gherkin is two things: * The language that has evolved out of the Cucumber project. * This library. Supported platforms: * [Ruby](https://rubygems.org/gems/gherkin) 1.9.3-2.0.0 (MRI, JRuby, REE, Rubinius) * [Pure Java](http://search.maven.org/#search%7Cga%7C1%7Cgherkin) (jar file) * [JavaScript](http://search.npmjs.org/#/gherkin) (Tested with V8/node.js/Chrome, but might work on other JavaScript engines) * [.NET](http://nuget.org/List/Packages/gherkin) (dll file) ## Installation ### Ruby/JRuby gem install gherkin #### Troubleshooting On JRuby you may get an error saying: ERROR: While executing gem ... (ArgumentError) undefined class/module YAML::Syck::DefaultKey You can get around this problem by upgrading rubygems: jruby -S gem install rubygems-update gem update --system Another problem you might encounter is: ERROR: While executing gem ... (ArgumentError) invalid byte sequence in US-ASCII If this happens, try defining your shell's encoding: # Linux export LANG=en_US.UTF-8 # OS X export LC_CTYPE=en_US.UTF-8 ### Node.js npm install gherkin ### Java The jar file is in the central Maven repo. info.cukes gherkin 2.12.2 You can get it manually from [Maven Central](http://search.maven.org/#browse%7C-2073395818) ### .NET Get the dll from [NuGet](http://nuget.org/List/Packages/gherkin) ## API Docs * [Ruby](http://cukes.info/api/gherkin/yardoc/) * [Java](http://cukes.info/api/gherkin/javadoc/) ## Hacking: Installing the toolchain Due to the cross-platform nature of this library, you have to install a lot of tools to build gherkin yourself. In order to make it easier for occasional contributors to get the development environment up and running, you don't have to install everything up front. The build scripts should tell you if you are missing something. For example, you shouldn't have to install MinGW to build windows binaries if you are a Linux user and just want to fix a bug in the C code. ### Common dependencies These are the minimal tools you need to install: * Ragel (brew install ragel or apt-get install ragel) * Ruby (any version should do). * A clone of the cucumber git repo to a "cucumber" sibling folder of your gherkin folder. (Only needed to run cucumber tests) * RVM (you may not need this if you are only building for a single platform) With this minimal tool chain installed, install Ruby gems needed by the build: gem install bundler bundle install Running RSpec and Cucumber tests rake clean spec cucumber If the RL_LANGS environment variable is set, only the parsers for the languages specified there will be built. E.g. in Bash, export RL_LANGS="en,fr,no". This can be quite helpful when modifying the Ragel grammar. See subsections for building for a specific platform. ### MRI, REE or Rubinius You'll need GCC installed. Build the gem with: rake build ### Pure Java and JRuby You must install JRuby to build the pure Java jar or the JRuby gem: rvm install jruby rvm use jruby rvm gemset create cucumber rvm gemset use cucumber gem install bundler bundle install Now you can build the jar with: rake clean jar ### JavaScript In order to build and test Gherkin for JavaScript you must install: * Node.js (0.10.9 or higher with npm) * Ragel with JavaScript support: http://github.com/dominicmarks/ragel-js * Make sure you have gcc/g++ 4.6 (4.7 is too strict to build ragel-js) * Make sure you have `autoconf` and `automake` (`brew install automake`) * Make sure you have the official ragel (`brew install ragel`) * Make sure you have kelbt (`brew install kelbt`). If that fails, install manually from http://www.complang.org/kelbt/ * `cd ragel-js/ragel-svn && ./autogen.sh && ./configure --disable-manual` * `make && make install` * Define the GHERKIN_JS environment variable in your shell (any value will do) Update gems (to install gems which are needed only for js support): bundle update Now you can build the JavaScript with: bundle exec rake js And you can try it out with node.js: node js/example/print.js spec/gherkin/fixtures/1.feature Or the json formatter: node js/example/json_formatter_example.js If you're hacking and just want to rebuild the English parser: rake js/lib/gherkin/lexer/en.js In order to test the native JavaScript implementation of JSONFormatter, you also need to define the `GHERKIN_JS_NATIVE` environment variable. It's recommended you don't do this permanently, as it will disable testing the Ruby implementation. Try this instead: GHERKIN_JS_NATIVE=true GHERKIN_JS=true bundle exec rake TODO: Make all specs pass with js lexer - replace 'c(listener)' with 'js(listener)' in i18n.rb ### .NET dll You must install Mono SDK 3.2.1 (or possibly newer). The OS X package installer is recommended, but make sure you run `brew doctor` after installing. Now we must update NuGet.exe and register our NuGet API Key: # In case we need to update mono ikvm/NuGet.exe Update -self # The key is at https://nuget.org/account mono --runtime=v4.0.30319 ikvm/NuGet.exe SetApiKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx (Note: you may need to run 'mozroots --import --sync' to help mono trusts https setificate, see http://monomvc.wordpress.com/2012/03/06/nuget-on-mono/ for more information) Now you can build the .NET dll with: mkdir release rake ikvm rake release/nuspec/lib/gherkin.dll This should build `release/nuspec/lib/gherkin.dll` ### MinGW Rubies (for Windows gems) In order to build Windows binaries (so we can release Windows gems from OS X/Linux) we first need to install MinGW: ./install_mingw_os_x.sh Now, make sure you have openssl installed - it's needed to build the rubies. brew install openssl Next, we're going to install Ruby 1.9.3 and 2.0.0 for MinGW. We need both versions so we can build Windows binaries for both. export PATH=/usr/local/mingw/bin:$PATH # Test that it's on your PATH i686-w64-mingw32-gcc -v Now we're ready to install the Windows rubies. You should be able to replace `rvm` with `rbenv` unset GHERKIN_JS # 1.9.3 rvm install 1.9.3-p448 rvm use 1.9.3-p448 rvm gemset use cucumber --create gem install bundler bundle install PATH=/usr/local/mingw/bin:$PATH CC=/usr/local/mingw/bin/i686-w64-mingw32-gcc rake-compiler cross-ruby VERSION=1.9.3-p448 # 2.0.0 rvm install 2.0.0-p247 rvm use 2.0.0-p247 rvm gemset use cucumber --create gem install bundler bundle install PATH=/usr/local/mingw/bin:$PATH CC=/usr/local/mingw/bin/i686-w64-mingw32-gcc rake-compiler cross-ruby VERSION=2.0.0-p247 Now you can build Windows gems: rake compile mkdir release PATH=/usr/local/mingw/bin:$PATH CC=/usr/local/mingw/bin/i686-w64-mingw32-gcc rake gems:win ## Release process Make sure you have access to all the servers where packages are being uploaded: * npm registry: `npm login` * rubygems.org: `gem push` * sonatype: Check `~/.m2/settings.xml` and that you have gnupg (OS X users: Install [GPGTools](http://www.gpgtools.org/installer/index.html)) * Make sure you have a key [with no sub-key](https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven) * nuget: See .NET section above Run tests once with GHERKIN_JS_NATIVE=true: GHERKIN_JS_NATIVE=true GHERKIN_JS=true bundle exec rake Now we can release: * Make sure you have rbenv installed * And that you have merged this patch: https://github.com/sstephenson/rbenv/issues/121 * `cd ~/.rbenv && git pull git@github.com:sstephenson/rbenv.git exec-next` * Make sure GHERKIN_JS is defined (see JavaScript section above) * Bump version in: * This file (Installation/Java section) * lib/gherkin/platform.rb * java/pom.xml * js/package.json * History.md * Run `bundle update`, so Gemfile.lock gets updated with the changes. * Commit changes, otherwise you will get an error at the end when a tag is made. * Run `i686-w64-mingw32-gcc -v && bundle exec rake gems:prepare && ./build_native_gems.sh && bundle exec rake release:ALL` ## Note on Patches/Pull Requests * Fork the project. * Run `bundle install` to install dependencies. * Run `rake` to make sure all the tests are passing. * Make your feature addition or bug fix. * Add tests for it. This is important so I don't break it in a future version unintentionally. * Commit, do not mess with History.md. * Send me a pull request. Bonus points for topic branches. ## Copyright Copyright (c) 2009-2013 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy. See LICENSE for details.