[rubygem-gherkin/f15] Revert "update to 2.4.5"

Chris Lalancette clalance at fedoraproject.org
Thu Sep 8 19:08:48 UTC 2011


commit e990d5753a5974d07ee56ce018c8de1a7233db14
Author: Chris Lalancette <clalance at redhat.com>
Date:   Thu Sep 8 15:08:32 2011 -0400

    Revert "update to 2.4.5"
    
    This reverts commit 486d19ab624871367db7c97196ea69a819a3c287.

 .gitignore                                         |    1 -
 gherkin-2.3.3-fix-gemspec.patch                    |   75 +
 gherkin-2.3.3-require-json-1.4.3.patch             |   11 +
 gherkin-2.4.5-fix-gemspec.patch                    |   46 -
 gherkin-extconf-flags.patch                        |  495 ++
 ...sh-line.patch => gherkin-remove-hash-line.patch | 7740 ++++++++++----------
 rubygem-gherkin.spec                               |   33 +-
 sources                                            |    4 +-
 8 files changed, 4625 insertions(+), 3780 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 75aa861..c86e03b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
 /gherkin-2.2.0.gem
 /gherkin-2.2.4.gem
 /gherkin-2.3.3.gem
-/gherkin-2.4.5.gem
diff --git a/gherkin-2.3.3-fix-gemspec.patch b/gherkin-2.3.3-fix-gemspec.patch
new file mode 100644
index 0000000..a7cdafa
--- /dev/null
+++ b/gherkin-2.3.3-fix-gemspec.patch
@@ -0,0 +1,75 @@
+diff -urp gherkin-2.3.3.orig/gherkin.gemspec gherkin-2.3.3/gherkin.gemspec
+--- gherkin-2.3.3.orig/gherkin.gemspec	2011-06-28 12:15:54.673427697 -0400
++++ gherkin-2.3.3/gherkin.gemspec	2011-06-28 12:18:31.295458209 -0400
+@@ -1,39 +1,47 @@
+ # -*- encoding: utf-8 -*-
+-gherkin_dir = Dir.pwd =~ /gherkin\/tmp/ ? File.expand_path("../../../..", Dir.pwd) : File.expand_path("..", __FILE__)
+-$LOAD_PATH.unshift File.join(gherkin_dir, 'lib')
+-require "gherkin/version"
+ 
+ Gem::Specification.new do |s|
+   s.name        = "gherkin"
+-  s.version     = Gherkin::VERSION
++  s.version     = "2.3.3"
+   s.authors     = ["Mike Sassak", "Gregory Hnatiuk", "Aslak Hellesøy"]
+   s.description = "A fast Gherkin lexer/parser based on the Ragel State Machine Compiler."
+-  s.summary     = "gherkin-#{Gherkin::VERSION}"
++  s.summary     = "gherkin-2.3.3"
+   s.email       = "cukes at googlegroups.com"
+   s.homepage    = "http://github.com/aslakhellesoy/gherkin"
+ 
+   s.rubygems_version   = "1.3.7"
+   s.default_executable = "gherkin"
+ 
+-  s.files            = `git ls-files`.split("\n")
+-  s.test_files       = `git ls-files -- {spec,features}/*`.split("\n")
+-  s.executables      = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
++  specfiles           = Dir[ "spec/gherkin/fixtures/*.feature",
++                             "spec/gherkin/fixtures/*.json",
++                             "spec/gherkin/formatter/*.rb", "spec/gherkin/*.rb",
++                             "spec/gherkin/parser/parser_spec.rb",
++                             "spec/gherkin/shared/*.rb", "spec/*.rb" ]
++  featurefiles        = Dir[ "features/*.feature", "features/*.rb" ]
++
++  s.files             = Dir[ "Gemfile", "History.txt", "LICENSE",
++                             "README.rdoc", "Rakefile", "VERSION",
++                             "build_native_gems.sh", "cucumber.yml",
++                             "gherkin.gemspec", "lib/*.rb", "lib/*.yml",
++                             "lib/gherkin/formatter/*.rb",
++                             "lib/gherkin/lexer/*.rb",
++                             "lib/gherkin/listener/*.rb",
++                             "lib/gherkin/native/*.rb",
++                             "lib/gherkin/parser/*.txt",
++                             "lib/gherkin/parser/*.rb",
++                             "lib/gherkin/rb_lexer/README.rdoc", "ragel/*.erb",
++                             "tasks/bench/*.rb",
++                             "tasks/*.rake" ] + specfiles + featurefiles
++  s.test_files        = specfiles + featurefiles
++
+   s.extra_rdoc_files = ["LICENSE", "README.rdoc", "History.txt"]
+   s.rdoc_options     = ["--charset=UTF-8"]
+   s.require_path     = "lib"
+ 
+-  s.files -= Dir['ikvm/**/*']
+-  s.files -= Dir['java/**/*']
+-  s.files -= Dir['ext/**/*']
+-  s.files -= Dir['lib/gherkin.jar']
+-  s.files -= Dir['lib/**/*.dll']
+-  s.files -= Dir['lib/**/*.bundle']
+-  s.files -= Dir['lib/**/*.so']
+-  
+   if ENV['GEM_PLATFORM']
+     puts "GEM_PLATFORM:#{ENV['GEM_PLATFORM']}"
+   end
+-  s.platform = ENV['GEM_PLATFORM'] if ENV['GEM_PLATFORM'] 
++  s.platform = ENV['GEM_PLATFORM'] if ENV['GEM_PLATFORM']
+   case s.platform.to_s
+   when /java/
+     s.files += ['lib/gherkin.jar']
+@@ -58,4 +66,4 @@ Gem::Specification.new do |s|
+   # Only needed by Cucumber. Remove when Cucumber no longer needs those.
+   s.add_development_dependency('term-ansicolor', '~> 1.0.5')
+   s.add_development_dependency('builder', '~> 3.0.0')
+-end
+\ No newline at end of file
++end
diff --git a/gherkin-2.3.3-require-json-1.4.3.patch b/gherkin-2.3.3-require-json-1.4.3.patch
new file mode 100644
index 0000000..c8780e6
--- /dev/null
+++ b/gherkin-2.3.3-require-json-1.4.3.patch
@@ -0,0 +1,11 @@
+--- gherkin-2.3.3/gherkin.gemspec.orig	2011-06-28 12:50:42.818751772 -0400
++++ gherkin-2.3.3/gherkin.gemspec	2011-06-28 12:50:52.173677468 -0400
+@@ -56,7 +56,7 @@ Gem::Specification.new do |s|
+     s.add_development_dependency('rake-compiler', '~> 0.7.5')
+   end
+ 
+-  s.add_dependency('json', '~> 1.4.6')
++  s.add_dependency('json', '~> 1.4.3')
+ 
+   s.add_development_dependency('rake', '~> 0.8.7')
+   s.add_development_dependency('bundler', '~> 1.0.7')
diff --git a/gherkin-extconf-flags.patch b/gherkin-extconf-flags.patch
new file mode 100644
index 0000000..535b6d0
--- /dev/null
+++ b/gherkin-extconf-flags.patch
@@ -0,0 +1,495 @@
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ar/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ar/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ar/extconf.rb	2011-06-27 13:39:38.495379765 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ar/extconf.rb	2011-06-27 13:46:17.565321074 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ar")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ar")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_bg/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_bg/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_bg/extconf.rb	2011-06-27 13:39:38.495379765 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_bg/extconf.rb	2011-06-27 13:46:17.582321798 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_bg")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_bg")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ca/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ca/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ca/extconf.rb	2011-06-27 13:39:38.495379765 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ca/extconf.rb	2011-06-27 13:46:17.593322266 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ca")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ca")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_cs/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_cs/extconf.rb	2011-06-27 13:39:38.496379808 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_cs/extconf.rb	2011-06-27 13:46:17.603322692 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_cs")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_cs")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cy_gb/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_cy_gb/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_cy_gb/extconf.rb	2011-06-27 13:39:38.496379808 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_cy_gb/extconf.rb	2011-06-27 13:46:17.657324990 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_cy_gb")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_cy_gb")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_da/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_da/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_da/extconf.rb	2011-06-27 13:39:38.496379808 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_da/extconf.rb	2011-06-27 13:46:17.742328608 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_da")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_da")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_de/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_de/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_de/extconf.rb	2011-06-27 13:39:38.496379808 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_de/extconf.rb	2011-06-27 13:46:17.776330055 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_de")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_de")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_en/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en/extconf.rb	2011-06-27 13:39:38.497379851 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en/extconf.rb	2011-06-27 13:46:17.803331203 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_en")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_en")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_au/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_en_au/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_au/extconf.rb	2011-06-27 13:39:38.497379851 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_au/extconf.rb	2011-06-27 13:46:17.820331927 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_en_au")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_en_au")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_lol/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_en_lol/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_lol/extconf.rb	2011-06-27 13:39:38.497379851 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_lol/extconf.rb	2011-06-27 13:46:17.854333374 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_en_lol")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_en_lol")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_pirate/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_en_pirate/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_pirate/extconf.rb	2011-06-27 13:39:38.497379851 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_pirate/extconf.rb	2011-06-27 13:46:17.869334013 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_en_pirate")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_en_pirate")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_scouse/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_en_scouse/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_scouse/extconf.rb	2011-06-27 13:39:38.498379893 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_scouse/extconf.rb	2011-06-27 13:46:17.893335034 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_en_scouse")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_en_scouse")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_tx/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_en_tx/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_tx/extconf.rb	2011-06-27 13:39:38.498379893 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_tx/extconf.rb	2011-06-27 13:46:17.915335969 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_en_tx")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_en_tx")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_eo/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_eo/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_eo/extconf.rb	2011-06-27 13:39:38.498379893 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_eo/extconf.rb	2011-06-27 13:46:17.998339503 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_eo")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_eo")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_es/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_es/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_es/extconf.rb	2011-06-27 13:39:38.498379893 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_es/extconf.rb	2011-06-27 13:46:18.025340651 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_es")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_es")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_et/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_et/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_et/extconf.rb	2011-06-27 13:39:38.499379935 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_et/extconf.rb	2011-06-27 13:46:18.045341504 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_et")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_et")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_fi/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_fi/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_fi/extconf.rb	2011-06-27 13:39:38.499379935 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_fi/extconf.rb	2011-06-27 13:46:18.077342866 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_fi")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_fi")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_fr/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_fr/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_fr/extconf.rb	2011-06-27 13:39:38.499379935 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_fr/extconf.rb	2011-06-27 13:46:18.109344228 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_fr")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_fr")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_he/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_he/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_he/extconf.rb	2011-06-27 13:39:38.499379935 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_he/extconf.rb	2011-06-27 13:46:18.163346524 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_he")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_he")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_hr/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_hr/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_hr/extconf.rb	2011-06-27 13:39:38.500379978 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_hr/extconf.rb	2011-06-27 13:46:18.214348697 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_hr")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_hr")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_hu/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_hu/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_hu/extconf.rb	2011-06-27 13:39:38.500379978 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_hu/extconf.rb	2011-06-27 13:46:18.264350824 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_hu")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_hu")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_id/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_id/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_id/extconf.rb	2011-06-27 13:39:38.500379978 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_id/extconf.rb	2011-06-27 13:46:18.331353674 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_id")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_id")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_it/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_it/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_it/extconf.rb	2011-06-27 13:39:38.500379978 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_it/extconf.rb	2011-06-27 13:46:18.393356311 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_it")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_it")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ja/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ja/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ja/extconf.rb	2011-06-27 13:39:38.501380020 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ja/extconf.rb	2011-06-27 13:46:18.426357719 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ja")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ja")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ko/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ko/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ko/extconf.rb	2011-06-27 13:39:38.501380020 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ko/extconf.rb	2011-06-27 13:46:18.466359422 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ko")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ko")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lt/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_lt/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_lt/extconf.rb	2011-06-27 13:39:38.501380020 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_lt/extconf.rb	2011-06-27 13:46:18.523361848 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_lt")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_lt")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lu/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_lu/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_lu/extconf.rb	2011-06-27 13:39:38.501380020 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_lu/extconf.rb	2011-06-27 13:46:18.604365297 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_lu")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_lu")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lv/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_lv/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_lv/extconf.rb	2011-06-27 13:39:38.502380062 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_lv/extconf.rb	2011-06-27 13:46:18.644366999 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_lv")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_lv")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_nl/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_nl/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_nl/extconf.rb	2011-06-27 13:39:38.502380062 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_nl/extconf.rb	2011-06-27 13:46:18.683368657 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_nl")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_nl")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_no/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_no/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_no/extconf.rb	2011-06-27 13:39:38.502380062 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_no/extconf.rb	2011-06-27 13:46:18.702369465 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_no")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_no")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_pl/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_pl/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_pl/extconf.rb	2011-06-27 13:39:38.502380062 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_pl/extconf.rb	2011-06-27 13:46:18.732370745 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_pl")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_pl")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_pt/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_pt/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_pt/extconf.rb	2011-06-27 13:39:38.503380105 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_pt/extconf.rb	2011-06-27 13:46:18.783372916 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_pt")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_pt")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ro/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ro/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ro/extconf.rb	2011-06-27 13:39:38.503380105 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ro/extconf.rb	2011-06-27 13:46:18.829374873 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ro")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ro")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ro_ro/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ro_ro/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ro_ro/extconf.rb	2011-06-27 13:39:38.503380105 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ro_ro/extconf.rb	2011-06-27 13:46:18.885377257 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ro_ro")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ro_ro")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ru/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_ru/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ru/extconf.rb	2011-06-27 13:39:38.503380105 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ru/extconf.rb	2011-06-27 13:46:18.994381894 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_ru")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_ru")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sk/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_sk/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sk/extconf.rb	2011-06-27 13:39:38.504380147 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sk/extconf.rb	2011-06-27 13:46:19.106386663 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_sk")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_sk")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sr_cyrl/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_sr_cyrl/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sr_cyrl/extconf.rb	2011-06-27 13:39:38.504380147 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sr_cyrl/extconf.rb	2011-06-27 13:46:19.158388874 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_sr_cyrl")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_sr_cyrl")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sr_latn/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_sr_latn/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sr_latn/extconf.rb	2011-06-27 13:39:38.504380147 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sr_latn/extconf.rb	2011-06-27 13:46:19.218391428 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_sr_latn")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_sr_latn")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sv/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_sv/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sv/extconf.rb	2011-06-27 13:39:38.504380147 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sv/extconf.rb	2011-06-27 13:46:19.284394235 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_sv")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_sv")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_tr/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_tr/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_tr/extconf.rb	2011-06-27 13:39:38.505380189 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_tr/extconf.rb	2011-06-27 13:46:19.312395431 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_tr")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_tr")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_uk/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_uk/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_uk/extconf.rb	2011-06-27 13:39:38.505380189 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_uk/extconf.rb	2011-06-27 13:46:19.355397258 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_uk")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_uk")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_uz/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_uz/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_uz/extconf.rb	2011-06-27 13:39:38.505380189 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_uz/extconf.rb	2011-06-27 13:46:19.406399430 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_uz")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_uz")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_vi/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_vi/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_vi/extconf.rb	2011-06-27 13:39:38.505380189 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_vi/extconf.rb	2011-06-27 13:46:19.508403770 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_vi")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_vi")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_zh_cn/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_zh_cn/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_zh_cn/extconf.rb	2011-06-27 13:39:38.506380232 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_zh_cn/extconf.rb	2011-06-27 13:46:19.555405772 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_zh_cn")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_zh_cn")
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_zh_tw/extconf.rb gherkin-2.3.3/ext/gherkin_lexer_zh_tw/extconf.rb
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_zh_tw/extconf.rb	2011-06-27 13:39:38.506380232 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_zh_tw/extconf.rb	2011-06-27 13:46:19.576406665 -0400
+@@ -1,6 +1,6 @@
+ require 'mkmf'
+ CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
+-$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
++$CFLAGS << ' -O2 -Wall ' if CONFIG['CC'] =~ /gcc/
+ dir_config("gherkin_lexer_zh_tw")
+ have_library("c", "main")
+ create_makefile("gherkin_lexer_zh_tw")
diff --git a/gherkin-2.4.5-remove-hash-line.patch b/gherkin-remove-hash-line.patch
similarity index 71%
rename from gherkin-2.4.5-remove-hash-line.patch
rename to gherkin-remove-hash-line.patch
index 4d8ba02..dc83ea2 100644
--- a/gherkin-2.4.5-remove-hash-line.patch
+++ b/gherkin-remove-hash-line.patch
@@ -1,9 +1,10 @@
---- gherkin-2.4.5/ext/gherkin_lexer_sv/gherkin_lexer_sv.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_sv/gherkin_lexer_sv.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ar/gherkin_lexer_ar.c gherkin-2.3.3/ext/gherkin_lexer_ar/gherkin_lexer_ar.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ar/gherkin_lexer_ar.c	2011-06-27 13:39:38.466378538 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ar/gherkin_lexer_ar.c	2011-06-27 13:46:17.579321670 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -11,260 +12,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+
+-#line 87 "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, 
-@@ -749,7 +749,7 @@ static const int lexer_error = 0;
+@@ -856,7 +856,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -914,14 +914,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1012,14 +1012,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 918 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+
+-#line 1016 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
      
--#line 925 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+
+-#line 1023 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -995,7 +995,7 @@ _match:
+@@ -1093,7 +1093,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1003,20 +1003,20 @@ _match:
+@@ -1101,20 +1101,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1026,37 +1026,37 @@ _match:
+@@ -1124,37 +1124,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1065,34 +1065,34 @@ _match:
+@@ -1163,34 +1163,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1100,7 +1100,7 @@ _match:
+@@ -1198,7 +1198,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1109,13 +1109,13 @@ _match:
+@@ -1207,13 +1207,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1123,13 +1123,13 @@ _match:
+@@ -1221,13 +1221,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1145,13 +1145,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1242,13 +1242,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1197,7 +1197,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1294,7 +1294,7 @@ _match:
      }
    }
  	break;
--#line 1201 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+
+-#line 1298 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
  		}
  	}
  
-@@ -1214,7 +1214,7 @@ _again:
+@@ -1311,7 +1311,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1260,7 +1260,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1357,7 +1357,7 @@ _again:
      }
    }
  	break;
--#line 1264 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+
+-#line 1361 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
  		}
  	}
  	}
-@@ -1268,7 +1268,7 @@ _again:
+@@ -1365,7 +1365,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_id/gherkin_lexer_id.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_id/gherkin_lexer_id.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_bg/gherkin_lexer_bg.c gherkin-2.3.3/ext/gherkin_lexer_bg/gherkin_lexer_bg.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_bg/gherkin_lexer_bg.c	2011-06-27 13:39:38.466378538 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_bg/gherkin_lexer_bg.c	2011-06-27 13:46:17.589322095 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -272,260 +274,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+
+-#line 87 "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, 
-@@ -630,7 +630,7 @@ static const int lexer_error = 0;
+@@ -1082,7 +1082,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -795,14 +795,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1238,14 +1238,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 799 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+
+-#line 1242 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
      
--#line 806 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+
+-#line 1249 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -876,7 +876,7 @@ _match:
+@@ -1319,7 +1319,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -884,20 +884,20 @@ _match:
+@@ -1327,20 +1327,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -907,37 +907,37 @@ _match:
+@@ -1350,37 +1350,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -946,34 +946,34 @@ _match:
+@@ -1389,34 +1389,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -981,7 +981,7 @@ _match:
+@@ -1424,7 +1424,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -990,13 +990,13 @@ _match:
+@@ -1433,13 +1433,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1004,13 +1004,13 @@ _match:
+@@ -1447,13 +1447,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1026,13 +1026,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1468,13 +1468,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1078,7 +1078,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1520,7 +1520,7 @@ _match:
      }
    }
  	break;
--#line 1082 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+
+-#line 1524 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
  		}
  	}
  
-@@ -1095,7 +1095,7 @@ _again:
+@@ -1537,7 +1537,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1141,7 +1141,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1583,7 +1583,7 @@ _again:
      }
    }
  	break;
--#line 1145 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+
+-#line 1587 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
  		}
  	}
  	}
-@@ -1149,7 +1149,7 @@ _again:
+@@ -1591,7 +1591,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_lu/gherkin_lexer_lu.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_lu/gherkin_lexer_lu.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ca/gherkin_lexer_ca.c gherkin-2.3.3/ext/gherkin_lexer_ca/gherkin_lexer_ca.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ca/gherkin_lexer_ca.c	2011-06-27 13:39:38.466378538 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ca/gherkin_lexer_ca.c	2011-06-27 13:46:17.599322521 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -533,260 +536,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+
+-#line 87 "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, 
-@@ -814,7 +814,7 @@ static const int lexer_error = 0;
+@@ -1008,7 +1008,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -979,14 +979,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1164,14 +1164,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 983 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+
+-#line 1168 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
      
--#line 990 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+
+-#line 1175 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1060,7 +1060,7 @@ _match:
+@@ -1245,7 +1245,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1068,20 +1068,20 @@ _match:
+@@ -1253,20 +1253,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1091,37 +1091,37 @@ _match:
+@@ -1276,37 +1276,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1130,34 +1130,34 @@ _match:
+@@ -1315,34 +1315,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1165,7 +1165,7 @@ _match:
+@@ -1350,7 +1350,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1174,13 +1174,13 @@ _match:
+@@ -1359,13 +1359,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1188,13 +1188,13 @@ _match:
+@@ -1373,13 +1373,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1210,13 +1210,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1394,13 +1394,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1262,7 +1262,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1446,7 +1446,7 @@ _match:
      }
    }
  	break;
--#line 1266 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+
+-#line 1450 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
  		}
  	}
  
-@@ -1279,7 +1279,7 @@ _again:
+@@ -1463,7 +1463,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1325,7 +1325,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1509,7 +1509,7 @@ _again:
      }
    }
  	break;
--#line 1329 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+
+-#line 1513 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
  		}
  	}
  	}
-@@ -1333,7 +1333,7 @@ _again:
+@@ -1517,7 +1517,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_cs/gherkin_lexer_cs.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_cs/gherkin_lexer_cs.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3.3/ext/gherkin_lexer_cs/gherkin_lexer_cs.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c	2011-06-27 13:39:38.467378580 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_cs/gherkin_lexer_cs.c	2011-06-27 13:46:17.654324862 -0400
 @@ -1,5 +1,5 @@
  
 -#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -794,14 +798,14 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
  
  
  /** Data **/
  
 -#line 87 "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, 
@@ -809,51 +813,51 @@
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1019,14 +1019,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1010,14 +1010,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1023 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+
+-#line 1014 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
      
--#line 1030 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+
+-#line 1021 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1100,7 +1100,7 @@ _match:
+@@ -1091,7 +1091,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
 -#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1108,20 +1108,20 @@ _match:
+@@ -1099,20 +1099,20 @@ _match:
    }
  	break;
  	case 1:
 -#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
 -#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
@@ -861,60 +865,60 @@
  	break;
  	case 3:
 -#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1131,37 +1131,37 @@ _match:
+@@ -1122,37 +1122,37 @@ _match:
    }
  	break;
  	case 4:
 -#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
 -#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
 -#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
 -#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
 -#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
 -#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1170,34 +1170,34 @@ _match:
+@@ -1161,34 +1161,34 @@ _match:
    }
  	break;
  	case 10:
 -#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
@@ -922,7 +926,7 @@
  	break;
  	case 11:
 -#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
@@ -930,7 +934,7 @@
  	break;
  	case 12:
 -#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
@@ -938,116 +942,117 @@
  	break;
  	case 13:
 -#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
 -#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1205,7 +1205,7 @@ _match:
+@@ -1196,7 +1196,7 @@ _match:
    }
  	break;
  	case 15:
 -#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1214,13 +1214,13 @@ _match:
+@@ -1205,13 +1205,13 @@ _match:
    }
  	break;
  	case 16:
 -#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
 -#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1228,13 +1228,13 @@ _match:
+@@ -1219,13 +1219,13 @@ _match:
    }
  	break;
  	case 18:
 -#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
 -#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1250,13 +1250,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1240,13 +1240,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1302,7 +1302,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1292,7 +1292,7 @@ _match:
      }
    }
  	break;
--#line 1306 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+
+-#line 1296 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
  		}
  	}
  
-@@ -1319,7 +1319,7 @@ _again:
+@@ -1309,7 +1309,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1365,7 +1365,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1355,7 +1355,7 @@ _again:
      }
    }
  	break;
--#line 1369 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+
+-#line 1359 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
  		}
  	}
  	}
-@@ -1373,7 +1373,7 @@ _again:
+@@ -1363,7 +1363,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_pt/gherkin_lexer_pt.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_pt/gherkin_lexer_pt.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c gherkin-2.3.3/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c	2011-06-27 13:39:38.467378580 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c	2011-06-27 13:46:17.738328437 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -1055,260 +1060,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+
+-#line 87 "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, 
-@@ -754,7 +754,7 @@ static const int lexer_error = 0;
+@@ -709,7 +709,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -919,14 +919,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -865,14 +865,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 923 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+
+-#line 869 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
      
--#line 930 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+
+-#line 876 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1000,7 +1000,7 @@ _match:
+@@ -946,7 +946,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1008,20 +1008,20 @@ _match:
+@@ -954,20 +954,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1031,37 +1031,37 @@ _match:
+@@ -977,37 +977,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1070,34 +1070,34 @@ _match:
+@@ -1016,34 +1016,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1105,7 +1105,7 @@ _match:
+@@ -1051,7 +1051,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1114,13 +1114,13 @@ _match:
+@@ -1060,13 +1060,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1128,13 +1128,13 @@ _match:
+@@ -1074,13 +1074,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1150,13 +1150,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1095,13 +1095,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1202,7 +1202,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1147,7 +1147,7 @@ _match:
      }
    }
  	break;
--#line 1206 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+
+-#line 1151 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
  		}
  	}
  
-@@ -1219,7 +1219,7 @@ _again:
+@@ -1164,7 +1164,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1265,7 +1265,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1210,7 +1210,7 @@ _again:
      }
    }
  	break;
--#line 1269 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+
+-#line 1214 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
  		}
  	}
  	}
-@@ -1273,7 +1273,7 @@ _again:
+@@ -1218,7 +1218,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_bg/gherkin_lexer_bg.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_bg/gherkin_lexer_bg.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_da/gherkin_lexer_da.c gherkin-2.3.3/ext/gherkin_lexer_da/gherkin_lexer_da.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_da/gherkin_lexer_da.c	2011-06-27 13:39:38.467378580 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_da/gherkin_lexer_da.c	2011-06-27 13:46:17.772329884 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -1316,260 +1322,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+
+-#line 87 "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, 
-@@ -1082,7 +1082,7 @@ static const int lexer_error = 0;
+@@ -725,7 +725,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1247,14 +1247,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -881,14 +881,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1251 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+
+-#line 885 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
      
--#line 1258 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+
+-#line 892 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1328,7 +1328,7 @@ _match:
+@@ -962,7 +962,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1336,20 +1336,20 @@ _match:
+@@ -970,20 +970,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1359,37 +1359,37 @@ _match:
+@@ -993,37 +993,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1398,34 +1398,34 @@ _match:
+@@ -1032,34 +1032,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1433,7 +1433,7 @@ _match:
+@@ -1067,7 +1067,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1442,13 +1442,13 @@ _match:
+@@ -1076,13 +1076,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1456,13 +1456,13 @@ _match:
+@@ -1090,13 +1090,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1478,13 +1478,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1111,13 +1111,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1530,7 +1530,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1163,7 +1163,7 @@ _match:
      }
    }
  	break;
--#line 1534 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+
+-#line 1167 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
  		}
  	}
  
-@@ -1547,7 +1547,7 @@ _again:
+@@ -1180,7 +1180,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1593,7 +1593,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1226,7 +1226,7 @@ _again:
      }
    }
  	break;
--#line 1597 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+
+-#line 1230 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
  		}
  	}
  	}
-@@ -1601,7 +1601,7 @@ _again:
+@@ -1234,7 +1234,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_lt/gherkin_lexer_lt.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_lt/gherkin_lexer_lt.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_de/gherkin_lexer_de.c gherkin-2.3.3/ext/gherkin_lexer_de/gherkin_lexer_de.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_de/gherkin_lexer_de.c	2011-06-27 13:39:38.468378623 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_de/gherkin_lexer_de.c	2011-06-27 13:46:17.798330991 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -1577,260 +1584,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+
+-#line 87 "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, 
-@@ -722,7 +722,7 @@ static const int lexer_error = 0;
+@@ -842,7 +842,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -887,14 +887,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -998,14 +998,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 891 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+
+-#line 1002 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
      
--#line 898 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+
+-#line 1009 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -968,7 +968,7 @@ _match:
+@@ -1079,7 +1079,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -976,20 +976,20 @@ _match:
+@@ -1087,20 +1087,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -999,37 +999,37 @@ _match:
+@@ -1110,37 +1110,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1038,34 +1038,34 @@ _match:
+@@ -1149,34 +1149,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1073,7 +1073,7 @@ _match:
+@@ -1184,7 +1184,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1082,13 +1082,13 @@ _match:
+@@ -1193,13 +1193,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1096,13 +1096,13 @@ _match:
+@@ -1207,13 +1207,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1118,13 +1118,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1228,13 +1228,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1170,7 +1170,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1280,7 +1280,7 @@ _match:
      }
    }
  	break;
--#line 1174 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+
+-#line 1284 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
  		}
  	}
  
-@@ -1187,7 +1187,7 @@ _again:
+@@ -1297,7 +1297,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1233,7 +1233,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1343,7 +1343,7 @@ _again:
      }
    }
  	break;
--#line 1237 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+
+-#line 1347 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
  		}
  	}
  	}
-@@ -1241,7 +1241,7 @@ _again:
+@@ -1351,7 +1351,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_he/gherkin_lexer_he.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_he/gherkin_lexer_he.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en/gherkin_lexer_en.c gherkin-2.3.3/ext/gherkin_lexer_en/gherkin_lexer_en.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en/gherkin_lexer_en.c	2011-06-27 13:39:38.483379258 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en/gherkin_lexer_en.c	2011-06-27 13:46:17.817331800 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -1838,260 +1846,523 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+
+-#line 87 "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, 
-@@ -801,7 +801,7 @@ static const int lexer_error = 0;
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -966,14 +966,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 970 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+
+-#line 852 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
      
--#line 977 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+
+-#line 859 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1047,7 +1047,7 @@ _match:
+@@ -929,7 +929,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1055,20 +1055,20 @@ _match:
+@@ -937,20 +937,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1078,37 +1078,37 @@ _match:
+@@ -960,37 +960,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario);
+   }
+ 	break;
+ 	case 7:
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(examples);
+   }
+ 	break;
+ 	case 9:
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -999,34 +999,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     STORE_ATTR(comment);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 11:
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     lexer->line_number += 1;
+     MARK(final_newline, p);
+   }
+ 	break;
+ 	case 13:
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1034,7 +1034,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1043,13 +1043,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     MARK(content_end, p);
+   }
+ 	break;
+ 	case 17:
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1057,13 +1057,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+   }
+ 	break;
+ 	case 19:
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1078,13 +1078,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
+   }
+ 	break;
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1130,7 +1130,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1134 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1147,7 +1147,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1193,7 +1193,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1197 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1201,7 +1201,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 
+     assert(p <= pe && "data overflow after parsing execute");
+     assert(lexer->content_start <= len && "content starts after data end");
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c gherkin-2.3.3/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c	2011-06-27 13:39:38.483379258 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c	2011-06-27 13:46:17.850333204 -0400
+@@ -1,5 +1,5 @@
+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ #include <assert.h>
+ #include <ruby.h>
+ 
+@@ -78,12 +78,12 @@ static VALUE rb_eGherkinLexingError;
+       lexer->line_number)
+ 
+ 
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#line 87 "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, 
+@@ -650,7 +650,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -806,14 +806,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 810 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+     
+-#line 817 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -887,7 +887,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -895,20 +895,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     MARK(content_start, p);
+   }
+ 	break;
+ 	case 2:
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     lexer->current_line = lexer->line_number;
+     lexer->start_col = p - data - lexer->last_newline;
+   }
+ 	break;
+ 	case 3:
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -918,37 +918,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(feature);
+   }
+ 	break;
+ 	case 5:
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1117,34 +1117,34 @@ _match:
+@@ -957,34 +957,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1152,7 +1152,7 @@ _match:
+@@ -992,7 +992,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1161,13 +1161,13 @@ _match:
+@@ -1001,13 +1001,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1175,13 +1175,13 @@ _match:
+@@ -1015,13 +1015,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1197,13 +1197,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1036,13 +1036,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1249,7 +1249,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1088,7 +1088,7 @@ _match:
      }
    }
  	break;
--#line 1253 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+
+-#line 1092 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++ 
  		}
  	}
  
-@@ -1266,7 +1266,7 @@ _again:
+@@ -1105,7 +1105,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1312,7 +1312,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1151,7 +1151,7 @@ _again:
      }
    }
  	break;
--#line 1316 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+
+-#line 1155 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++ 
  		}
  	}
  	}
-@@ -1320,7 +1320,7 @@ _again:
+@@ -1159,7 +1159,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c gherkin-2.3.3/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c	2011-06-27 13:39:38.483379258 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c	2011-06-27 13:46:17.866333885 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -2099,260 +2370,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+
+-#line 87 "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, 
-@@ -994,7 +994,7 @@ static const int lexer_error = 0;
+@@ -602,7 +602,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1159,14 +1159,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -758,14 +758,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1163 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+
+-#line 762 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
      
--#line 1170 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+
+-#line 769 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1240,7 +1240,7 @@ _match:
+@@ -839,7 +839,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1248,20 +1248,20 @@ _match:
+@@ -847,20 +847,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1271,37 +1271,37 @@ _match:
+@@ -870,37 +870,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1310,34 +1310,34 @@ _match:
+@@ -909,34 +909,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1345,7 +1345,7 @@ _match:
+@@ -944,7 +944,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1354,13 +1354,13 @@ _match:
+@@ -953,13 +953,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1368,13 +1368,13 @@ _match:
+@@ -967,13 +967,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1390,13 +1390,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -988,13 +988,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1442,7 +1442,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1040,7 +1040,7 @@ _match:
      }
    }
  	break;
--#line 1446 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+
+-#line 1044 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
  		}
  	}
  
-@@ -1459,7 +1459,7 @@ _again:
+@@ -1057,7 +1057,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1505,7 +1505,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1103,7 +1103,7 @@ _again:
      }
    }
  	break;
--#line 1509 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+
+-#line 1107 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
  		}
  	}
  	}
-@@ -1513,7 +1513,7 @@ _again:
+@@ -1111,7 +1111,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_de/gherkin_lexer_de.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_de/gherkin_lexer_de.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c gherkin-2.3.3/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c	2011-06-27 13:39:38.484379300 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c	2011-06-27 13:46:17.891334949 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -2360,260 +2632,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
-+
+-#line 87 "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, 
-@@ -842,7 +842,7 @@ static const int lexer_error = 0;
+@@ -898,7 +898,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1007,14 +1007,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1054,14 +1054,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1011 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
-+
+-#line 1058 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
      
--#line 1018 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
-+
+-#line 1065 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1088,7 +1088,7 @@ _match:
+@@ -1135,7 +1135,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1096,20 +1096,20 @@ _match:
+@@ -1143,20 +1143,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1119,37 +1119,37 @@ _match:
+@@ -1166,37 +1166,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1158,34 +1158,34 @@ _match:
+@@ -1205,34 +1205,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1193,7 +1193,7 @@ _match:
+@@ -1240,7 +1240,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1202,13 +1202,13 @@ _match:
+@@ -1249,13 +1249,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1216,13 +1216,13 @@ _match:
+@@ -1263,13 +1263,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1238,13 +1238,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1284,13 +1284,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1290,7 +1290,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1336,7 +1336,7 @@ _match:
      }
    }
  	break;
--#line 1294 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
-+
+-#line 1340 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
  		}
  	}
  
-@@ -1307,7 +1307,7 @@ _again:
+@@ -1353,7 +1353,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1353,7 +1353,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1399,7 +1399,7 @@ _again:
      }
    }
  	break;
--#line 1357 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
-+
+-#line 1403 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
  		}
  	}
  	}
-@@ -1361,7 +1361,7 @@ _again:
+@@ -1407,7 +1407,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_hr/gherkin_lexer_hr.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_hr/gherkin_lexer_hr.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c gherkin-2.3.3/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c	2011-06-27 13:39:38.484379300 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c	2011-06-27 13:46:17.912335843 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -2621,260 +2894,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+
+-#line 87 "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, 
-@@ -750,7 +750,7 @@ static const int lexer_error = 0;
+@@ -1059,7 +1059,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -915,14 +915,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1215,14 +1215,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 919 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+
+-#line 1219 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
      
--#line 926 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+
+-#line 1226 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -996,7 +996,7 @@ _match:
+@@ -1296,7 +1296,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1004,20 +1004,20 @@ _match:
+@@ -1304,20 +1304,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1027,37 +1027,37 @@ _match:
+@@ -1327,37 +1327,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1066,34 +1066,34 @@ _match:
+@@ -1366,34 +1366,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1101,7 +1101,7 @@ _match:
+@@ -1401,7 +1401,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1110,13 +1110,13 @@ _match:
+@@ -1410,13 +1410,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1124,13 +1124,13 @@ _match:
+@@ -1424,13 +1424,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1146,13 +1146,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1445,13 +1445,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1198,7 +1198,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1497,7 +1497,7 @@ _match:
      }
    }
  	break;
--#line 1202 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+
+-#line 1501 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
  		}
  	}
  
-@@ -1215,7 +1215,7 @@ _again:
+@@ -1514,7 +1514,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1261,7 +1261,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1560,7 +1560,7 @@ _again:
      }
    }
  	break;
--#line 1265 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+
+-#line 1564 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
  		}
  	}
  	}
-@@ -1269,7 +1269,7 @@ _again:
+@@ -1568,7 +1568,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_ru/gherkin_lexer_ru.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_ru/gherkin_lexer_ru.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c gherkin-2.3.3/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c	2011-06-27 13:39:38.484379300 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c	2011-06-27 13:46:17.993339290 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -2882,260 +3156,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+
+-#line 87 "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, 
-@@ -1482,7 +1482,7 @@ static const int lexer_error = 0;
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1647,14 +1647,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1651 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+
+-#line 852 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
      
--#line 1658 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+
+-#line 859 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1728,7 +1728,7 @@ _match:
+@@ -929,7 +929,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1736,20 +1736,20 @@ _match:
+@@ -937,20 +937,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1759,37 +1759,37 @@ _match:
+@@ -960,37 +960,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1798,34 +1798,34 @@ _match:
+@@ -999,34 +999,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1833,7 +1833,7 @@ _match:
+@@ -1034,7 +1034,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1842,13 +1842,13 @@ _match:
+@@ -1043,13 +1043,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1856,13 +1856,13 @@ _match:
+@@ -1057,13 +1057,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1878,13 +1878,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1078,13 +1078,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1930,7 +1930,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1130,7 +1130,7 @@ _match:
      }
    }
  	break;
--#line 1934 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+
+-#line 1134 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
  		}
  	}
  
-@@ -1947,7 +1947,7 @@ _again:
+@@ -1147,7 +1147,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1993,7 +1993,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1193,7 +1193,7 @@ _again:
      }
    }
  	break;
--#line 1997 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+
+-#line 1197 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
  		}
  	}
  	}
-@@ -2001,7 +2001,7 @@ _again:
+@@ -1201,7 +1201,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_eo/gherkin_lexer_eo.c gherkin-2.3.3/ext/gherkin_lexer_eo/gherkin_lexer_eo.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_eo/gherkin_lexer_eo.c	2011-06-27 13:39:38.485379342 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_eo/gherkin_lexer_eo.c	2011-06-27 13:46:18.021340482 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -3143,260 +3418,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+
+-#line 87 "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, 
-@@ -650,7 +650,7 @@ static const int lexer_error = 0;
+@@ -663,7 +663,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -815,14 +815,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -819,14 +819,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 819 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+
+-#line 823 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
      
--#line 826 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+
+-#line 830 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -896,7 +896,7 @@ _match:
+@@ -900,7 +900,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -904,20 +904,20 @@ _match:
+@@ -908,20 +908,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -927,37 +927,37 @@ _match:
+@@ -931,37 +931,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -966,34 +966,34 @@ _match:
+@@ -970,34 +970,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1001,7 +1001,7 @@ _match:
+@@ -1005,7 +1005,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1010,13 +1010,13 @@ _match:
+@@ -1014,13 +1014,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1024,13 +1024,13 @@ _match:
+@@ -1028,13 +1028,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1046,13 +1046,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1049,13 +1049,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1098,7 +1098,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1101,7 +1101,7 @@ _match:
      }
    }
  	break;
--#line 1102 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+
+-#line 1105 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
  		}
  	}
  
-@@ -1115,7 +1115,7 @@ _again:
+@@ -1118,7 +1118,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1161,7 +1161,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1164,7 +1164,7 @@ _again:
      }
    }
  	break;
--#line 1165 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+
+-#line 1168 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
  		}
  	}
  	}
-@@ -1169,7 +1169,7 @@ _again:
+@@ -1172,7 +1172,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_eo/gherkin_lexer_eo.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_eo/gherkin_lexer_eo.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_es/gherkin_lexer_es.c gherkin-2.3.3/ext/gherkin_lexer_es/gherkin_lexer_es.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_es/gherkin_lexer_es.c	2011-06-27 13:39:38.485379342 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_es/gherkin_lexer_es.c	2011-06-27 13:46:18.042341376 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -3404,260 +3680,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+
+-#line 87 "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, 
-@@ -663,7 +663,7 @@ static const int lexer_error = 0;
+@@ -805,7 +805,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -828,14 +828,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -961,14 +961,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 832 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+
+-#line 965 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
      
--#line 839 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+
+-#line 972 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -909,7 +909,7 @@ _match:
+@@ -1042,7 +1042,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -917,20 +917,20 @@ _match:
+@@ -1050,20 +1050,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -940,37 +940,37 @@ _match:
+@@ -1073,37 +1073,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -979,34 +979,34 @@ _match:
+@@ -1112,34 +1112,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1014,7 +1014,7 @@ _match:
+@@ -1147,7 +1147,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1023,13 +1023,13 @@ _match:
+@@ -1156,13 +1156,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1037,13 +1037,13 @@ _match:
+@@ -1170,13 +1170,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1059,13 +1059,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1191,13 +1191,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1111,7 +1111,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1243,7 +1243,7 @@ _match:
      }
    }
  	break;
--#line 1115 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+
+-#line 1247 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
  		}
  	}
  
-@@ -1128,7 +1128,7 @@ _again:
+@@ -1260,7 +1260,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1174,7 +1174,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1306,7 +1306,7 @@ _again:
      }
    }
  	break;
--#line 1178 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+
+-#line 1310 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
  		}
  	}
  	}
-@@ -1182,7 +1182,7 @@ _again:
+@@ -1314,7 +1314,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_nl/gherkin_lexer_nl.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_nl/gherkin_lexer_nl.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_et/gherkin_lexer_et.c gherkin-2.3.3/ext/gherkin_lexer_et/gherkin_lexer_et.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_et/gherkin_lexer_et.c	2011-06-27 13:39:38.485379342 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_et/gherkin_lexer_et.c	2011-06-27 13:46:18.073342695 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -3665,260 +3942,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+
+-#line 87 "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, 
-@@ -790,7 +790,7 @@ static const int lexer_error = 0;
+@@ -661,7 +661,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -955,14 +955,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -817,14 +817,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 959 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+
+-#line 821 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
      
--#line 966 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+
+-#line 828 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1036,7 +1036,7 @@ _match:
+@@ -898,7 +898,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1044,20 +1044,20 @@ _match:
+@@ -906,20 +906,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1067,37 +1067,37 @@ _match:
+@@ -929,37 +929,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1106,34 +1106,34 @@ _match:
+@@ -968,34 +968,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1141,7 +1141,7 @@ _match:
+@@ -1003,7 +1003,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1150,13 +1150,13 @@ _match:
+@@ -1012,13 +1012,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1164,13 +1164,13 @@ _match:
+@@ -1026,13 +1026,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1186,13 +1186,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1047,13 +1047,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1238,7 +1238,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1099,7 +1099,7 @@ _match:
      }
    }
  	break;
--#line 1242 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+
+-#line 1103 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
  		}
  	}
  
-@@ -1255,7 +1255,7 @@ _again:
+@@ -1116,7 +1116,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1301,7 +1301,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1162,7 +1162,7 @@ _again:
      }
    }
  	break;
--#line 1305 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+
+-#line 1166 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
  		}
  	}
  	}
-@@ -1309,7 +1309,7 @@ _again:
+@@ -1170,7 +1170,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_fi/gherkin_lexer_fi.c gherkin-2.3.3/ext/gherkin_lexer_fi/gherkin_lexer_fi.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_fi/gherkin_lexer_fi.c	2011-06-27 13:39:38.485379342 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_fi/gherkin_lexer_fi.c	2011-06-27 13:46:18.105344053 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -3926,260 +4204,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+
+-#line 87 "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, 
-@@ -602,7 +602,7 @@ static const int lexer_error = 0;
+@@ -640,7 +640,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -767,14 +767,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -796,14 +796,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 771 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+
+-#line 800 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
      
--#line 778 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+
+-#line 807 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -848,7 +848,7 @@ _match:
+@@ -877,7 +877,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -856,20 +856,20 @@ _match:
+@@ -885,20 +885,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -879,37 +879,37 @@ _match:
+@@ -908,37 +908,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -918,34 +918,34 @@ _match:
+@@ -947,34 +947,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -953,7 +953,7 @@ _match:
+@@ -982,7 +982,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -962,13 +962,13 @@ _match:
+@@ -991,13 +991,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -976,13 +976,13 @@ _match:
+@@ -1005,13 +1005,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -998,13 +998,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1026,13 +1026,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1050,7 +1050,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1078,7 +1078,7 @@ _match:
      }
    }
  	break;
--#line 1054 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+
+-#line 1082 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
  		}
  	}
  
-@@ -1067,7 +1067,7 @@ _again:
+@@ -1095,7 +1095,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1113,7 +1113,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1141,7 +1141,7 @@ _again:
      }
    }
  	break;
--#line 1117 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+
+-#line 1145 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
  		}
  	}
  	}
-@@ -1121,7 +1121,7 @@ _again:
+@@ -1149,7 +1149,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_fr/gherkin_lexer_fr.c gherkin-2.3.3/ext/gherkin_lexer_fr/gherkin_lexer_fr.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_fr/gherkin_lexer_fr.c	2011-06-27 13:39:38.486379385 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_fr/gherkin_lexer_fr.c	2011-06-27 13:46:18.159346356 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -4187,260 +4466,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+
+-#line 87 "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, 
-@@ -898,7 +898,7 @@ static const int lexer_error = 0;
+@@ -878,7 +878,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1063,14 +1063,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1034,14 +1034,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1067 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+
+-#line 1038 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
      
--#line 1074 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+
+-#line 1045 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1144,7 +1144,7 @@ _match:
+@@ -1115,7 +1115,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1152,20 +1152,20 @@ _match:
+@@ -1123,20 +1123,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1175,37 +1175,37 @@ _match:
+@@ -1146,37 +1146,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1214,34 +1214,34 @@ _match:
+@@ -1185,34 +1185,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1249,7 +1249,7 @@ _match:
+@@ -1220,7 +1220,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1258,13 +1258,13 @@ _match:
+@@ -1229,13 +1229,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1272,13 +1272,13 @@ _match:
+@@ -1243,13 +1243,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1294,13 +1294,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1264,13 +1264,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1346,7 +1346,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1316,7 +1316,7 @@ _match:
      }
    }
  	break;
--#line 1350 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+
+-#line 1320 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
  		}
  	}
  
-@@ -1363,7 +1363,7 @@ _again:
+@@ -1333,7 +1333,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1409,7 +1409,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1379,7 +1379,7 @@ _again:
      }
    }
  	break;
--#line 1413 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+
+-#line 1383 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
  		}
  	}
  	}
-@@ -1417,7 +1417,7 @@ _again:
+@@ -1387,7 +1387,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_fi/gherkin_lexer_fi.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_fi/gherkin_lexer_fi.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_he/gherkin_lexer_he.c gherkin-2.3.3/ext/gherkin_lexer_he/gherkin_lexer_he.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_he/gherkin_lexer_he.c	2011-06-27 13:39:38.486379385 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_he/gherkin_lexer_he.c	2011-06-27 13:46:18.210348524 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -4448,260 +4728,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+
+-#line 87 "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, 
-@@ -640,7 +640,7 @@ static const int lexer_error = 0;
+@@ -801,7 +801,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -805,14 +805,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -957,14 +957,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 809 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+
+-#line 961 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
      
--#line 816 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+
+-#line 968 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -886,7 +886,7 @@ _match:
+@@ -1038,7 +1038,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -894,20 +894,20 @@ _match:
+@@ -1046,20 +1046,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -917,37 +917,37 @@ _match:
+@@ -1069,37 +1069,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -956,34 +956,34 @@ _match:
+@@ -1108,34 +1108,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -991,7 +991,7 @@ _match:
+@@ -1143,7 +1143,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1000,13 +1000,13 @@ _match:
+@@ -1152,13 +1152,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1014,13 +1014,13 @@ _match:
+@@ -1166,13 +1166,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1036,13 +1036,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1187,13 +1187,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1088,7 +1088,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1239,7 +1239,7 @@ _match:
      }
    }
  	break;
--#line 1092 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+
+-#line 1243 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
  		}
  	}
  
-@@ -1105,7 +1105,7 @@ _again:
+@@ -1256,7 +1256,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1151,7 +1151,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1302,7 +1302,7 @@ _again:
      }
    }
  	break;
--#line 1155 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+
+-#line 1306 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
  		}
  	}
  	}
-@@ -1159,7 +1159,7 @@ _again:
+@@ -1310,7 +1310,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_sk/gherkin_lexer_sk.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_sk/gherkin_lexer_sk.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_hr/gherkin_lexer_hr.c gherkin-2.3.3/ext/gherkin_lexer_hr/gherkin_lexer_hr.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_hr/gherkin_lexer_hr.c	2011-06-27 13:39:38.486379385 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_hr/gherkin_lexer_hr.c	2011-06-27 13:46:18.260350654 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -4709,260 +4990,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+
+-#line 87 "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, 
-@@ -725,7 +725,7 @@ static const int lexer_error = 0;
+@@ -750,7 +750,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -890,14 +890,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -906,14 +906,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 894 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+
+-#line 910 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
      
--#line 901 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+
+-#line 917 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -971,7 +971,7 @@ _match:
+@@ -987,7 +987,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -979,20 +979,20 @@ _match:
+@@ -995,20 +995,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1002,37 +1002,37 @@ _match:
+@@ -1018,37 +1018,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1041,34 +1041,34 @@ _match:
+@@ -1057,34 +1057,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1076,7 +1076,7 @@ _match:
+@@ -1092,7 +1092,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1085,13 +1085,13 @@ _match:
+@@ -1101,13 +1101,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1099,13 +1099,13 @@ _match:
+@@ -1115,13 +1115,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1121,13 +1121,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1136,13 +1136,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1173,7 +1173,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1188,7 +1188,7 @@ _match:
      }
    }
  	break;
--#line 1177 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+
+-#line 1192 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
  		}
  	}
  
-@@ -1190,7 +1190,7 @@ _again:
+@@ -1205,7 +1205,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1236,7 +1236,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1251,7 +1251,7 @@ _again:
      }
    }
  	break;
--#line 1240 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+
+-#line 1255 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
  		}
  	}
  	}
-@@ -1244,7 +1244,7 @@ _again:
+@@ -1259,7 +1259,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_hu/gherkin_lexer_hu.c gherkin-2.3.3/ext/gherkin_lexer_hu/gherkin_lexer_hu.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_hu/gherkin_lexer_hu.c	2011-06-27 13:39:38.487379427 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_hu/gherkin_lexer_hu.c	2011-06-27 13:46:18.327353508 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -4970,260 +5252,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+
+-#line 87 "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, 
-@@ -1537,7 +1537,7 @@ static const int lexer_error = 0;
+@@ -801,7 +801,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1702,14 +1702,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -957,14 +957,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1706 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+
+-#line 961 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
      
--#line 1713 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+
+-#line 968 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1783,7 +1783,7 @@ _match:
+@@ -1038,7 +1038,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1791,20 +1791,20 @@ _match:
+@@ -1046,20 +1046,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1814,37 +1814,37 @@ _match:
+@@ -1069,37 +1069,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1853,34 +1853,34 @@ _match:
+@@ -1108,34 +1108,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1888,7 +1888,7 @@ _match:
+@@ -1143,7 +1143,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1897,13 +1897,13 @@ _match:
+@@ -1152,13 +1152,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1911,13 +1911,13 @@ _match:
+@@ -1166,13 +1166,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1933,13 +1933,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1187,13 +1187,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1985,7 +1985,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1239,7 +1239,7 @@ _match:
      }
    }
  	break;
--#line 1989 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+
+-#line 1243 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
  		}
  	}
  
-@@ -2002,7 +2002,7 @@ _again:
+@@ -1256,7 +1256,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -2048,7 +2048,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1302,7 +1302,7 @@ _again:
      }
    }
  	break;
--#line 2052 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+
+-#line 1306 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
  		}
  	}
  	}
-@@ -2056,7 +2056,7 @@ _again:
+@@ -1310,7 +1310,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_fr/gherkin_lexer_fr.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_fr/gherkin_lexer_fr.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_id/gherkin_lexer_id.c gherkin-2.3.3/ext/gherkin_lexer_id/gherkin_lexer_id.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_id/gherkin_lexer_id.c	2011-06-27 13:39:38.487379427 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_id/gherkin_lexer_id.c	2011-06-27 13:46:18.388356104 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -5231,260 +5514,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+
+-#line 87 "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, 
-@@ -878,7 +878,7 @@ static const int lexer_error = 0;
+@@ -630,7 +630,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1043,14 +1043,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -786,14 +786,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1047 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+
+-#line 790 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
      
--#line 1054 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+
+-#line 797 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1124,7 +1124,7 @@ _match:
+@@ -867,7 +867,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1132,20 +1132,20 @@ _match:
+@@ -875,20 +875,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1155,37 +1155,37 @@ _match:
+@@ -898,37 +898,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1194,34 +1194,34 @@ _match:
+@@ -937,34 +937,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1229,7 +1229,7 @@ _match:
+@@ -972,7 +972,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1238,13 +1238,13 @@ _match:
+@@ -981,13 +981,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1252,13 +1252,13 @@ _match:
+@@ -995,13 +995,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1274,13 +1274,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1016,13 +1016,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1326,7 +1326,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1068,7 +1068,7 @@ _match:
      }
    }
  	break;
--#line 1330 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+
+-#line 1072 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
  		}
  	}
  
-@@ -1343,7 +1343,7 @@ _again:
+@@ -1085,7 +1085,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1389,7 +1389,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1131,7 +1131,7 @@ _again:
      }
    }
  	break;
--#line 1393 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+
+-#line 1135 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
  		}
  	}
  	}
-@@ -1397,7 +1397,7 @@ _again:
+@@ -1139,7 +1139,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_da/gherkin_lexer_da.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_da/gherkin_lexer_da.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_it/gherkin_lexer_it.c gherkin-2.3.3/ext/gherkin_lexer_it/gherkin_lexer_it.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_it/gherkin_lexer_it.c	2011-06-27 13:39:38.487379427 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_it/gherkin_lexer_it.c	2011-06-27 13:46:18.421357507 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -5492,260 +5776,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+
+-#line 87 "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, 
-@@ -725,7 +725,7 @@ static const int lexer_error = 0;
+@@ -759,7 +759,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -890,14 +890,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -915,14 +915,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 894 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+
+-#line 919 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
      
--#line 901 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+
+-#line 926 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -971,7 +971,7 @@ _match:
+@@ -996,7 +996,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -979,20 +979,20 @@ _match:
+@@ -1004,20 +1004,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1002,37 +1002,37 @@ _match:
+@@ -1027,37 +1027,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1041,34 +1041,34 @@ _match:
+@@ -1066,34 +1066,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1076,7 +1076,7 @@ _match:
+@@ -1101,7 +1101,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1085,13 +1085,13 @@ _match:
+@@ -1110,13 +1110,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1099,13 +1099,13 @@ _match:
+@@ -1124,13 +1124,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1121,13 +1121,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1145,13 +1145,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1173,7 +1173,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1197,7 +1197,7 @@ _match:
      }
    }
  	break;
--#line 1177 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+
+-#line 1201 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
  		}
  	}
  
-@@ -1190,7 +1190,7 @@ _again:
+@@ -1214,7 +1214,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1236,7 +1236,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1260,7 +1260,7 @@ _again:
      }
    }
  	break;
--#line 1240 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+
+-#line 1264 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
  		}
  	}
  	}
-@@ -1244,7 +1244,7 @@ _again:
+@@ -1268,7 +1268,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_et/gherkin_lexer_et.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_et/gherkin_lexer_et.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ja/gherkin_lexer_ja.c gherkin-2.3.3/ext/gherkin_lexer_ja/gherkin_lexer_ja.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ja/gherkin_lexer_ja.c	2011-06-27 13:39:38.488379469 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ja/gherkin_lexer_ja.c	2011-06-27 13:46:18.461359207 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -5753,260 +6038,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+
+-#line 87 "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, 
-@@ -661,7 +661,7 @@ static const int lexer_error = 0;
+@@ -1126,7 +1126,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -826,14 +826,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1282,14 +1282,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 830 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+
+-#line 1286 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
      
--#line 837 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+
+-#line 1293 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -907,7 +907,7 @@ _match:
+@@ -1363,7 +1363,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -915,20 +915,20 @@ _match:
+@@ -1371,20 +1371,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -938,37 +938,37 @@ _match:
+@@ -1394,37 +1394,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -977,34 +977,34 @@ _match:
+@@ -1433,34 +1433,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1012,7 +1012,7 @@ _match:
+@@ -1468,7 +1468,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1021,13 +1021,13 @@ _match:
+@@ -1477,13 +1477,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1035,13 +1035,13 @@ _match:
+@@ -1491,13 +1491,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1057,13 +1057,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1512,13 +1512,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1109,7 +1109,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1564,7 +1564,7 @@ _match:
      }
    }
  	break;
--#line 1113 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+
+-#line 1568 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
  		}
  	}
  
-@@ -1126,7 +1126,7 @@ _again:
+@@ -1581,7 +1581,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1172,7 +1172,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1627,7 +1627,7 @@ _again:
      }
    }
  	break;
--#line 1176 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+
+-#line 1631 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
  		}
  	}
  	}
-@@ -1180,7 +1180,7 @@ _again:
+@@ -1635,7 +1635,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_vi/gherkin_lexer_vi.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_vi/gherkin_lexer_vi.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ko/gherkin_lexer_ko.c gherkin-2.3.3/ext/gherkin_lexer_ko/gherkin_lexer_ko.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ko/gherkin_lexer_ko.c	2011-06-27 13:39:38.488379469 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ko/gherkin_lexer_ko.c	2011-06-27 13:46:18.520361720 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -6014,260 +6300,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+
+-#line 87 "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, 
-@@ -883,7 +883,7 @@ static const int lexer_error = 0;
+@@ -787,7 +787,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1048,14 +1048,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -943,14 +943,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1052 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+
+-#line 947 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
      
--#line 1059 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+
+-#line 954 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1129,7 +1129,7 @@ _match:
+@@ -1024,7 +1024,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1137,20 +1137,20 @@ _match:
+@@ -1032,20 +1032,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1160,37 +1160,37 @@ _match:
+@@ -1055,37 +1055,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1199,34 +1199,34 @@ _match:
+@@ -1094,34 +1094,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1234,7 +1234,7 @@ _match:
+@@ -1129,7 +1129,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1243,13 +1243,13 @@ _match:
+@@ -1138,13 +1138,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1257,13 +1257,13 @@ _match:
+@@ -1152,13 +1152,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1279,13 +1279,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1173,13 +1173,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1331,7 +1331,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1225,7 +1225,7 @@ _match:
      }
    }
  	break;
--#line 1335 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+
+-#line 1229 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
  		}
  	}
  
-@@ -1348,7 +1348,7 @@ _again:
+@@ -1242,7 +1242,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1394,7 +1394,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1288,7 +1288,7 @@ _again:
      }
    }
  	break;
--#line 1398 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+
+-#line 1292 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
  		}
  	}
  	}
-@@ -1402,7 +1402,7 @@ _again:
+@@ -1296,7 +1296,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lt/gherkin_lexer_lt.c gherkin-2.3.3/ext/gherkin_lexer_lt/gherkin_lexer_lt.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_lt/gherkin_lexer_lt.c	2011-06-27 13:39:38.488379469 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_lt/gherkin_lexer_lt.c	2011-06-27 13:46:18.602365214 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -6275,260 +6562,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+
+-#line 87 "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, 
-@@ -1059,7 +1059,7 @@ static const int lexer_error = 0;
+@@ -722,7 +722,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1224,14 +1224,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -878,14 +878,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1228 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+
+-#line 882 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
      
--#line 1235 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+
+-#line 889 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1305,7 +1305,7 @@ _match:
+@@ -959,7 +959,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1313,20 +1313,20 @@ _match:
+@@ -967,20 +967,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1336,37 +1336,37 @@ _match:
+@@ -990,37 +990,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1375,34 +1375,34 @@ _match:
+@@ -1029,34 +1029,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1410,7 +1410,7 @@ _match:
+@@ -1064,7 +1064,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1419,13 +1419,13 @@ _match:
+@@ -1073,13 +1073,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1433,13 +1433,13 @@ _match:
+@@ -1087,13 +1087,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1455,13 +1455,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1108,13 +1108,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1507,7 +1507,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1160,7 +1160,7 @@ _match:
      }
    }
  	break;
--#line 1511 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+
+-#line 1164 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
  		}
  	}
  
-@@ -1524,7 +1524,7 @@ _again:
+@@ -1177,7 +1177,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1570,7 +1570,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1223,7 +1223,7 @@ _again:
      }
    }
  	break;
--#line 1574 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+
+-#line 1227 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
  		}
  	}
  	}
-@@ -1578,7 +1578,7 @@ _again:
+@@ -1231,7 +1231,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_ro/gherkin_lexer_ro.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_ro/gherkin_lexer_ro.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lu/gherkin_lexer_lu.c gherkin-2.3.3/ext/gherkin_lexer_lu/gherkin_lexer_lu.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_lu/gherkin_lexer_lu.c	2011-06-27 13:39:38.489379512 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_lu/gherkin_lexer_lu.c	2011-06-27 13:46:18.640366824 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -6536,260 +6824,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+
+-#line 87 "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, 
-@@ -852,7 +852,7 @@ static const int lexer_error = 0;
+@@ -814,7 +814,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1017,14 +1017,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -970,14 +970,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1021 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+
+-#line 974 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
      
--#line 1028 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+
+-#line 981 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1098,7 +1098,7 @@ _match:
+@@ -1051,7 +1051,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1106,20 +1106,20 @@ _match:
+@@ -1059,20 +1059,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1129,37 +1129,37 @@ _match:
+@@ -1082,37 +1082,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1168,34 +1168,34 @@ _match:
+@@ -1121,34 +1121,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1203,7 +1203,7 @@ _match:
+@@ -1156,7 +1156,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1212,13 +1212,13 @@ _match:
+@@ -1165,13 +1165,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1226,13 +1226,13 @@ _match:
+@@ -1179,13 +1179,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1248,13 +1248,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1200,13 +1200,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1300,7 +1300,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1252,7 +1252,7 @@ _match:
      }
    }
  	break;
--#line 1304 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+
+-#line 1256 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
  		}
  	}
  
-@@ -1317,7 +1317,7 @@ _again:
+@@ -1269,7 +1269,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1363,7 +1363,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1315,7 +1315,7 @@ _again:
      }
    }
  	break;
--#line 1367 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+
+-#line 1319 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
  		}
  	}
  	}
-@@ -1371,7 +1371,7 @@ _again:
+@@ -1323,7 +1323,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_hu/gherkin_lexer_hu.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_hu/gherkin_lexer_hu.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lv/gherkin_lexer_lv.c gherkin-2.3.3/ext/gherkin_lexer_lv/gherkin_lexer_lv.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_lv/gherkin_lexer_lv.c	2011-06-27 13:39:38.489379512 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_lv/gherkin_lexer_lv.c	2011-06-27 13:46:18.680368531 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -6797,260 +7086,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+
+-#line 87 "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, 
-@@ -801,7 +801,7 @@ static const int lexer_error = 0;
+@@ -852,7 +852,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -966,14 +966,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1008,14 +1008,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 970 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+
+-#line 1012 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
      
--#line 977 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+
+-#line 1019 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1047,7 +1047,7 @@ _match:
+@@ -1089,7 +1089,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1055,20 +1055,20 @@ _match:
+@@ -1097,20 +1097,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1078,37 +1078,37 @@ _match:
+@@ -1120,37 +1120,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1117,34 +1117,34 @@ _match:
+@@ -1159,34 +1159,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1152,7 +1152,7 @@ _match:
+@@ -1194,7 +1194,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1161,13 +1161,13 @@ _match:
+@@ -1203,13 +1203,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1175,13 +1175,13 @@ _match:
+@@ -1217,13 +1217,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1197,13 +1197,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1238,13 +1238,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1249,7 +1249,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1290,7 +1290,7 @@ _match:
      }
    }
  	break;
--#line 1253 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+
+-#line 1294 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
  		}
  	}
  
-@@ -1266,7 +1266,7 @@ _again:
+@@ -1307,7 +1307,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1312,7 +1312,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1353,7 +1353,7 @@ _again:
      }
    }
  	break;
--#line 1316 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+
+-#line 1357 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
  		}
  	}
  	}
-@@ -1320,7 +1320,7 @@ _again:
+@@ -1361,7 +1361,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_ja/gherkin_lexer_ja.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_ja/gherkin_lexer_ja.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_nl/gherkin_lexer_nl.c gherkin-2.3.3/ext/gherkin_lexer_nl/gherkin_lexer_nl.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_nl/gherkin_lexer_nl.c	2011-06-27 13:39:38.489379512 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_nl/gherkin_lexer_nl.c	2011-06-27 13:46:18.698369298 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -7058,260 +7348,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+
+-#line 87 "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, 
-@@ -1126,7 +1126,7 @@ static const int lexer_error = 0;
+@@ -790,7 +790,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1291,14 +1291,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -946,14 +946,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1295 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+
+-#line 950 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
      
--#line 1302 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+
+-#line 957 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1372,7 +1372,7 @@ _match:
+@@ -1027,7 +1027,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1380,20 +1380,20 @@ _match:
+@@ -1035,20 +1035,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1403,37 +1403,37 @@ _match:
+@@ -1058,37 +1058,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1442,34 +1442,34 @@ _match:
+@@ -1097,34 +1097,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1477,7 +1477,7 @@ _match:
+@@ -1132,7 +1132,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1486,13 +1486,13 @@ _match:
+@@ -1141,13 +1141,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1500,13 +1500,13 @@ _match:
+@@ -1155,13 +1155,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1522,13 +1522,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1176,13 +1176,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1574,7 +1574,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1228,7 +1228,7 @@ _match:
      }
    }
  	break;
--#line 1578 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+
+-#line 1232 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
  		}
  	}
  
-@@ -1591,7 +1591,7 @@ _again:
+@@ -1245,7 +1245,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1637,7 +1637,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1291,7 +1291,7 @@ _again:
      }
    }
  	break;
--#line 1641 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+
+-#line 1295 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
  		}
  	}
  	}
-@@ -1645,7 +1645,7 @@ _again:
+@@ -1299,7 +1299,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_no/gherkin_lexer_no.c gherkin-2.3.3/ext/gherkin_lexer_no/gherkin_lexer_no.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_no/gherkin_lexer_no.c	2011-06-27 13:39:38.490379554 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_no/gherkin_lexer_no.c	2011-06-27 13:46:18.727370528 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -7319,260 +7610,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+
+-#line 87 "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, 
-@@ -650,7 +650,7 @@ static const int lexer_error = 0;
+@@ -738,7 +738,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -815,14 +815,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -894,14 +894,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 819 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+
+-#line 898 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
      
--#line 826 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+
+-#line 905 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -896,7 +896,7 @@ _match:
+@@ -975,7 +975,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -904,20 +904,20 @@ _match:
+@@ -983,20 +983,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -927,37 +927,37 @@ _match:
+@@ -1006,37 +1006,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -966,34 +966,34 @@ _match:
+@@ -1045,34 +1045,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1001,7 +1001,7 @@ _match:
+@@ -1080,7 +1080,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1010,13 +1010,13 @@ _match:
+@@ -1089,13 +1089,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1024,13 +1024,13 @@ _match:
+@@ -1103,13 +1103,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1046,13 +1046,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1124,13 +1124,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1098,7 +1098,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1176,7 +1176,7 @@ _match:
      }
    }
  	break;
--#line 1102 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+
+-#line 1180 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
  		}
  	}
  
-@@ -1115,7 +1115,7 @@ _again:
+@@ -1193,7 +1193,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1161,7 +1161,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1239,7 +1239,7 @@ _again:
      }
    }
  	break;
--#line 1165 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+
+-#line 1243 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
  		}
  	}
  	}
-@@ -1169,7 +1169,7 @@ _again:
+@@ -1247,7 +1247,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_ca/gherkin_lexer_ca.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_ca/gherkin_lexer_ca.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_pl/gherkin_lexer_pl.c gherkin-2.3.3/ext/gherkin_lexer_pl/gherkin_lexer_pl.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_pl/gherkin_lexer_pl.c	2011-06-27 13:39:38.490379554 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_pl/gherkin_lexer_pl.c	2011-06-27 13:46:18.780372783 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -7580,260 +7872,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+
+-#line 87 "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, 
-@@ -1008,7 +1008,7 @@ static const int lexer_error = 0;
+@@ -904,7 +904,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1173,14 +1173,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1060,14 +1060,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1177 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+
+-#line 1064 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
      
--#line 1184 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+
+-#line 1071 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1254,7 +1254,7 @@ _match:
+@@ -1141,7 +1141,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1262,20 +1262,20 @@ _match:
+@@ -1149,20 +1149,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1285,37 +1285,37 @@ _match:
+@@ -1172,37 +1172,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1324,34 +1324,34 @@ _match:
+@@ -1211,34 +1211,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1359,7 +1359,7 @@ _match:
+@@ -1246,7 +1246,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1368,13 +1368,13 @@ _match:
+@@ -1255,13 +1255,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1382,13 +1382,13 @@ _match:
+@@ -1269,13 +1269,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1404,13 +1404,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1290,13 +1290,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1456,7 +1456,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1342,7 +1342,7 @@ _match:
      }
    }
  	break;
--#line 1460 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+
+-#line 1346 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
  		}
  	}
  
-@@ -1473,7 +1473,7 @@ _again:
+@@ -1359,7 +1359,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1519,7 +1519,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1405,7 +1405,7 @@ _again:
      }
    }
  	break;
--#line 1523 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+
+-#line 1409 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
  		}
  	}
  	}
-@@ -1527,7 +1527,7 @@ _again:
+@@ -1413,7 +1413,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_uk/gherkin_lexer_uk.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_uk/gherkin_lexer_uk.c	2011-07-12 21:56:49.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_pt/gherkin_lexer_pt.c gherkin-2.3.3/ext/gherkin_lexer_pt/gherkin_lexer_pt.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_pt/gherkin_lexer_pt.c	2011-06-27 13:39:38.490379554 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_pt/gherkin_lexer_pt.c	2011-06-27 13:46:18.824374657 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -7841,260 +8134,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+
+-#line 87 "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, 
-@@ -1368,7 +1368,7 @@ static const int lexer_error = 0;
+@@ -754,7 +754,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1533,14 +1533,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -910,14 +910,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1537 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+
+-#line 914 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
      
--#line 1544 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+
+-#line 921 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1614,7 +1614,7 @@ _match:
+@@ -991,7 +991,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1622,20 +1622,20 @@ _match:
+@@ -999,20 +999,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1645,37 +1645,37 @@ _match:
+@@ -1022,37 +1022,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1684,34 +1684,34 @@ _match:
+@@ -1061,34 +1061,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1719,7 +1719,7 @@ _match:
+@@ -1096,7 +1096,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1728,13 +1728,13 @@ _match:
+@@ -1105,13 +1105,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1742,13 +1742,13 @@ _match:
+@@ -1119,13 +1119,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1764,13 +1764,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1140,13 +1140,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1816,7 +1816,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1192,7 +1192,7 @@ _match:
      }
    }
  	break;
--#line 1820 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+
+-#line 1196 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
  		}
  	}
  
-@@ -1833,7 +1833,7 @@ _again:
+@@ -1209,7 +1209,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1879,7 +1879,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1255,7 +1255,7 @@ _again:
      }
    }
  	break;
--#line 1883 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+
+-#line 1259 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
  		}
  	}
  	}
-@@ -1887,7 +1887,7 @@ _again:
+@@ -1263,7 +1263,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_it/gherkin_lexer_it.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_it/gherkin_lexer_it.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ro/gherkin_lexer_ro.c gherkin-2.3.3/ext/gherkin_lexer_ro/gherkin_lexer_ro.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ro/gherkin_lexer_ro.c	2011-06-27 13:39:38.490379555 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ro/gherkin_lexer_ro.c	2011-06-27 13:46:18.880377039 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -8102,260 +8396,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+
+-#line 87 "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, 
-@@ -759,7 +759,7 @@ static const int lexer_error = 0;
+@@ -751,7 +751,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -924,14 +924,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -907,14 +907,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 928 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+
+-#line 911 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
      
--#line 935 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+
+-#line 918 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1005,7 +1005,7 @@ _match:
+@@ -988,7 +988,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1013,20 +1013,20 @@ _match:
+@@ -996,20 +996,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1036,37 +1036,37 @@ _match:
+@@ -1019,37 +1019,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1075,34 +1075,34 @@ _match:
+@@ -1058,34 +1058,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1110,7 +1110,7 @@ _match:
+@@ -1093,7 +1093,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1119,13 +1119,13 @@ _match:
+@@ -1102,13 +1102,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1133,13 +1133,13 @@ _match:
+@@ -1116,13 +1116,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1155,13 +1155,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1137,13 +1137,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1207,7 +1207,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1189,7 +1189,7 @@ _match:
      }
    }
  	break;
--#line 1211 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+
+-#line 1193 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
  		}
  	}
  
-@@ -1224,7 +1224,7 @@ _again:
+@@ -1206,7 +1206,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1270,7 +1270,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1252,7 +1252,7 @@ _again:
      }
    }
  	break;
--#line 1274 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+
+-#line 1256 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
  		}
  	}
  	}
-@@ -1278,7 +1278,7 @@ _again:
+@@ -1260,7 +1260,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_tr/gherkin_lexer_tr.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_tr/gherkin_lexer_tr.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c gherkin-2.3.3/ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c	2011-06-27 13:39:38.490379555 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c	2011-06-27 13:46:18.990381723 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -8363,260 +8658,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+
+-#line 87 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -767,7 +767,7 @@ static const int lexer_error = 0;
+@@ -795,7 +795,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -932,14 +932,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -951,14 +951,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 936 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+
+-#line 955 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
      
--#line 943 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+
+-#line 962 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1013,7 +1013,7 @@ _match:
+@@ -1032,7 +1032,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1021,20 +1021,20 @@ _match:
+@@ -1040,20 +1040,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1044,37 +1044,37 @@ _match:
+@@ -1063,37 +1063,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1083,34 +1083,34 @@ _match:
+@@ -1102,34 +1102,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1118,7 +1118,7 @@ _match:
+@@ -1137,7 +1137,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1127,13 +1127,13 @@ _match:
+@@ -1146,13 +1146,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1141,13 +1141,13 @@ _match:
+@@ -1160,13 +1160,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
-     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-@@ -1163,13 +1163,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1181,13 +1181,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1215,7 +1215,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1233,7 +1233,7 @@ _match:
      }
    }
  	break;
--#line 1219 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+
+-#line 1237 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
  		}
  	}
  
-@@ -1232,7 +1232,7 @@ _again:
+@@ -1250,7 +1250,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1278,7 +1278,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1296,7 +1296,7 @@ _again:
      }
    }
  	break;
--#line 1282 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+
+-#line 1300 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
  		}
  	}
  	}
-@@ -1286,7 +1286,7 @@ _again:
+@@ -1304,7 +1304,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ru/gherkin_lexer_ru.c gherkin-2.3.3/ext/gherkin_lexer_ru/gherkin_lexer_ru.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_ru/gherkin_lexer_ru.c	2011-06-27 13:39:38.490379555 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_ru/gherkin_lexer_ru.c	2011-06-27 13:46:19.102386487 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -8624,260 +8920,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+
+-#line 87 "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, 
-@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+@@ -1355,7 +1355,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -857,14 +857,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1511,14 +1511,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 861 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+
+-#line 1515 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
      
--#line 868 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+
+-#line 1522 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -938,7 +938,7 @@ _match:
+@@ -1592,7 +1592,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -946,20 +946,20 @@ _match:
+@@ -1600,20 +1600,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -969,37 +969,37 @@ _match:
+@@ -1623,37 +1623,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1008,34 +1008,34 @@ _match:
+@@ -1662,34 +1662,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1043,7 +1043,7 @@ _match:
+@@ -1697,7 +1697,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1052,13 +1052,13 @@ _match:
+@@ -1706,13 +1706,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1066,13 +1066,13 @@ _match:
+@@ -1720,13 +1720,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1088,13 +1088,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1741,13 +1741,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1140,7 +1140,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1793,7 +1793,7 @@ _match:
      }
    }
  	break;
--#line 1144 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+
+-#line 1797 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
  		}
  	}
  
-@@ -1157,7 +1157,7 @@ _again:
+@@ -1810,7 +1810,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1203,7 +1203,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1856,7 +1856,7 @@ _again:
      }
    }
  	break;
--#line 1207 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+
+-#line 1860 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
  		}
  	}
  	}
-@@ -1211,7 +1211,7 @@ _again:
+@@ -1864,7 +1864,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sk/gherkin_lexer_sk.c gherkin-2.3.3/ext/gherkin_lexer_sk/gherkin_lexer_sk.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sk/gherkin_lexer_sk.c	2011-06-27 13:39:38.490379555 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sk/gherkin_lexer_sk.c	2011-06-27 13:46:19.155388746 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -8885,260 +9182,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+
+-#line 87 "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, 
-@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+@@ -725,7 +725,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -857,14 +857,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -881,14 +881,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 861 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+
+-#line 885 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
      
--#line 868 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+
+-#line 892 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -938,7 +938,7 @@ _match:
+@@ -962,7 +962,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -946,20 +946,20 @@ _match:
+@@ -970,20 +970,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -969,37 +969,37 @@ _match:
+@@ -993,37 +993,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1008,34 +1008,34 @@ _match:
+@@ -1032,34 +1032,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1043,7 +1043,7 @@ _match:
+@@ -1067,7 +1067,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1052,13 +1052,13 @@ _match:
+@@ -1076,13 +1076,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1066,13 +1066,13 @@ _match:
+@@ -1090,13 +1090,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1088,13 +1088,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1111,13 +1111,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1140,7 +1140,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1163,7 +1163,7 @@ _match:
      }
    }
  	break;
--#line 1144 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+
+-#line 1167 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
  		}
  	}
  
-@@ -1157,7 +1157,7 @@ _again:
+@@ -1180,7 +1180,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1203,7 +1203,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1226,7 +1226,7 @@ _again:
      }
    }
  	break;
--#line 1207 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+
+-#line 1230 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
  		}
  	}
  	}
-@@ -1211,7 +1211,7 @@ _again:
+@@ -1234,7 +1234,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_en/gherkin_lexer_en.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_en/gherkin_lexer_en.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c gherkin-2.3.3/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c	2011-06-27 13:39:38.492379637 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c	2011-06-27 13:46:19.214391258 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -9146,260 +9444,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+
+-#line 87 "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, 
-@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+@@ -1537,7 +1537,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -857,14 +857,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1693,14 +1693,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 861 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+
+-#line 1697 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
      
--#line 868 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+
+-#line 1704 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -938,7 +938,7 @@ _match:
+@@ -1774,7 +1774,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -946,20 +946,20 @@ _match:
+@@ -1782,20 +1782,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -969,37 +969,37 @@ _match:
+@@ -1805,37 +1805,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1008,34 +1008,34 @@ _match:
+@@ -1844,34 +1844,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1043,7 +1043,7 @@ _match:
+@@ -1879,7 +1879,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1052,13 +1052,13 @@ _match:
+@@ -1888,13 +1888,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1066,13 +1066,13 @@ _match:
+@@ -1902,13 +1902,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1088,13 +1088,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1923,13 +1923,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1140,7 +1140,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1975,7 +1975,7 @@ _match:
      }
    }
  	break;
--#line 1144 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+
+-#line 1979 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
  		}
  	}
  
-@@ -1157,7 +1157,7 @@ _again:
+@@ -1992,7 +1992,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1203,7 +1203,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -2038,7 +2038,7 @@ _again:
      }
    }
  	break;
--#line 1207 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+
+-#line 2042 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
  		}
  	}
  	}
-@@ -1211,7 +1211,7 @@ _again:
+@@ -2046,7 +2046,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_uz/gherkin_lexer_uz.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_uz/gherkin_lexer_uz.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c gherkin-2.3.3/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c	2011-06-27 13:39:38.492379637 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c	2011-06-27 13:46:19.280394067 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -9407,260 +9706,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+
+-#line 87 "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, 
-@@ -1078,7 +1078,7 @@ static const int lexer_error = 0;
+@@ -994,7 +994,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1243,14 +1243,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1150,14 +1150,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1247 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+
+-#line 1154 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
      
--#line 1254 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+
+-#line 1161 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1324,7 +1324,7 @@ _match:
+@@ -1231,7 +1231,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1332,20 +1332,20 @@ _match:
+@@ -1239,20 +1239,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1355,37 +1355,37 @@ _match:
+@@ -1262,37 +1262,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1394,34 +1394,34 @@ _match:
+@@ -1301,34 +1301,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1429,7 +1429,7 @@ _match:
+@@ -1336,7 +1336,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1438,13 +1438,13 @@ _match:
+@@ -1345,13 +1345,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1452,13 +1452,13 @@ _match:
+@@ -1359,13 +1359,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1474,13 +1474,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1380,13 +1380,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1526,7 +1526,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1432,7 +1432,7 @@ _match:
      }
    }
  	break;
--#line 1530 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+
+-#line 1436 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
  		}
  	}
  
-@@ -1543,7 +1543,7 @@ _again:
+@@ -1449,7 +1449,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1589,7 +1589,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1495,7 +1495,7 @@ _again:
      }
    }
  	break;
--#line 1593 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+
+-#line 1499 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
  		}
  	}
  	}
-@@ -1597,7 +1597,7 @@ _again:
+@@ -1503,7 +1503,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_no/gherkin_lexer_no.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_no/gherkin_lexer_no.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sv/gherkin_lexer_sv.c gherkin-2.3.3/ext/gherkin_lexer_sv/gherkin_lexer_sv.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_sv/gherkin_lexer_sv.c	2011-06-27 13:39:38.493379679 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_sv/gherkin_lexer_sv.c	2011-06-27 13:46:19.309395298 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -9668,260 +9968,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+
+-#line 87 "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, 
-@@ -738,7 +738,7 @@ static const int lexer_error = 0;
+@@ -749,7 +749,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -903,14 +903,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -905,14 +905,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 907 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+
+-#line 909 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
      
--#line 914 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+
+-#line 916 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -984,7 +984,7 @@ _match:
+@@ -986,7 +986,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -992,20 +992,20 @@ _match:
+@@ -994,20 +994,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1015,37 +1015,37 @@ _match:
+@@ -1017,37 +1017,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1054,34 +1054,34 @@ _match:
+@@ -1056,34 +1056,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1089,7 +1089,7 @@ _match:
+@@ -1091,7 +1091,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1098,13 +1098,13 @@ _match:
+@@ -1100,13 +1100,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1112,13 +1112,13 @@ _match:
+@@ -1114,13 +1114,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1134,13 +1134,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1135,13 +1135,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1186,7 +1186,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1187,7 +1187,7 @@ _match:
      }
    }
  	break;
--#line 1190 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+
+-#line 1191 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
  		}
  	}
  
-@@ -1203,7 +1203,7 @@ _again:
+@@ -1204,7 +1204,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1249,7 +1249,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1250,7 +1250,7 @@ _again:
      }
    }
  	break;
--#line 1253 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+
+-#line 1254 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
  		}
  	}
  	}
-@@ -1257,7 +1257,7 @@ _again:
+@@ -1258,7 +1258,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_lv/gherkin_lexer_lv.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_lv/gherkin_lexer_lv.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_tr/gherkin_lexer_tr.c gherkin-2.3.3/ext/gherkin_lexer_tr/gherkin_lexer_tr.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_tr/gherkin_lexer_tr.c	2011-06-27 13:39:38.493379679 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_tr/gherkin_lexer_tr.c	2011-06-27 13:46:19.351397089 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -9929,260 +10230,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+
+-#line 87 "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, 
-@@ -852,7 +852,7 @@ static const int lexer_error = 0;
+@@ -767,7 +767,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1017,14 +1017,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -923,14 +923,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1021 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+
+-#line 927 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
      
--#line 1028 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+
+-#line 934 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1098,7 +1098,7 @@ _match:
+@@ -1004,7 +1004,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1106,20 +1106,20 @@ _match:
+@@ -1012,20 +1012,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1129,37 +1129,37 @@ _match:
+@@ -1035,37 +1035,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1168,34 +1168,34 @@ _match:
+@@ -1074,34 +1074,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1203,7 +1203,7 @@ _match:
+@@ -1109,7 +1109,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1212,13 +1212,13 @@ _match:
+@@ -1118,13 +1118,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1226,13 +1226,13 @@ _match:
+@@ -1132,13 +1132,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1248,13 +1248,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1153,13 +1153,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1300,7 +1300,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1205,7 +1205,7 @@ _match:
      }
    }
  	break;
--#line 1304 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+
+-#line 1209 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
  		}
  	}
  
-@@ -1317,7 +1317,7 @@ _again:
+@@ -1222,7 +1222,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1363,7 +1363,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1268,7 +1268,7 @@ _again:
      }
    }
  	break;
--#line 1367 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+
+-#line 1272 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
  		}
  	}
  	}
-@@ -1371,7 +1371,7 @@ _again:
+@@ -1276,7 +1276,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_es/gherkin_lexer_es.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_es/gherkin_lexer_es.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_uk/gherkin_lexer_uk.c gherkin-2.3.3/ext/gherkin_lexer_uk/gherkin_lexer_uk.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_uk/gherkin_lexer_uk.c	2011-06-27 13:39:38.493379679 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_uk/gherkin_lexer_uk.c	2011-06-27 13:46:19.401399217 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -10190,260 +10492,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+
+-#line 87 "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, 
-@@ -805,7 +805,7 @@ static const int lexer_error = 0;
+@@ -1368,7 +1368,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -970,14 +970,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1524,14 +1524,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 974 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+
+-#line 1528 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
      
--#line 981 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+
+-#line 1535 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1051,7 +1051,7 @@ _match:
+@@ -1605,7 +1605,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1059,20 +1059,20 @@ _match:
+@@ -1613,20 +1613,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1082,37 +1082,37 @@ _match:
+@@ -1636,37 +1636,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1121,34 +1121,34 @@ _match:
+@@ -1675,34 +1675,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1156,7 +1156,7 @@ _match:
+@@ -1710,7 +1710,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1165,13 +1165,13 @@ _match:
+@@ -1719,13 +1719,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1179,13 +1179,13 @@ _match:
+@@ -1733,13 +1733,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1201,13 +1201,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1754,13 +1754,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1253,7 +1253,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1806,7 +1806,7 @@ _match:
      }
    }
  	break;
--#line 1257 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+
+-#line 1810 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
  		}
  	}
  
-@@ -1270,7 +1270,7 @@ _again:
+@@ -1823,7 +1823,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1316,7 +1316,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1869,7 +1869,7 @@ _again:
      }
    }
  	break;
--#line 1320 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+
+-#line 1873 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
  		}
  	}
  	}
-@@ -1324,7 +1324,7 @@ _again:
+@@ -1877,7 +1877,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_ko/gherkin_lexer_ko.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_ko/gherkin_lexer_ko.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_uz/gherkin_lexer_uz.c gherkin-2.3.3/ext/gherkin_lexer_uz/gherkin_lexer_uz.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_uz/gherkin_lexer_uz.c	2011-06-27 13:39:38.494379722 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_uz/gherkin_lexer_uz.c	2011-06-27 13:46:19.452401387 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -10451,260 +10754,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+
+-#line 87 "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, 
-@@ -787,7 +787,7 @@ static const int lexer_error = 0;
+@@ -1078,7 +1078,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -952,14 +952,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1234,14 +1234,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 956 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+
+-#line 1238 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
      
--#line 963 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+
+-#line 1245 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1033,7 +1033,7 @@ _match:
+@@ -1315,7 +1315,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1041,20 +1041,20 @@ _match:
+@@ -1323,20 +1323,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1064,37 +1064,37 @@ _match:
+@@ -1346,37 +1346,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1103,34 +1103,34 @@ _match:
+@@ -1385,34 +1385,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1138,7 +1138,7 @@ _match:
+@@ -1420,7 +1420,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1147,13 +1147,13 @@ _match:
+@@ -1429,13 +1429,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1161,13 +1161,13 @@ _match:
+@@ -1443,13 +1443,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1183,13 +1183,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1464,13 +1464,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1235,7 +1235,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1516,7 +1516,7 @@ _match:
      }
    }
  	break;
--#line 1239 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+
+-#line 1520 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
  		}
  	}
  
-@@ -1252,7 +1252,7 @@ _again:
+@@ -1533,7 +1533,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1298,7 +1298,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1579,7 +1579,7 @@ _again:
      }
    }
  	break;
--#line 1302 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+
+-#line 1583 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
  		}
  	}
  	}
-@@ -1306,7 +1306,7 @@ _again:
+@@ -1587,7 +1587,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_pl/gherkin_lexer_pl.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_pl/gherkin_lexer_pl.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_vi/gherkin_lexer_vi.c gherkin-2.3.3/ext/gherkin_lexer_vi/gherkin_lexer_vi.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_vi/gherkin_lexer_vi.c	2011-06-27 13:39:38.494379722 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_vi/gherkin_lexer_vi.c	2011-06-27 13:46:19.551405601 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -10712,260 +11016,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+
+-#line 87 "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, 
-@@ -904,7 +904,7 @@ static const int lexer_error = 0;
+@@ -883,7 +883,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1069,14 +1069,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1039,14 +1039,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1073 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+
+-#line 1043 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
      
--#line 1080 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+
+-#line 1050 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1150,7 +1150,7 @@ _match:
+@@ -1120,7 +1120,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1158,20 +1158,20 @@ _match:
+@@ -1128,20 +1128,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1181,37 +1181,37 @@ _match:
+@@ -1151,37 +1151,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1220,34 +1220,34 @@ _match:
+@@ -1190,34 +1190,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1255,7 +1255,7 @@ _match:
+@@ -1225,7 +1225,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1264,13 +1264,13 @@ _match:
+@@ -1234,13 +1234,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1278,13 +1278,13 @@ _match:
+@@ -1248,13 +1248,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1300,13 +1300,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1269,13 +1269,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1352,7 +1352,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1321,7 +1321,7 @@ _match:
      }
    }
  	break;
--#line 1356 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+
+-#line 1325 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
  		}
  	}
  
-@@ -1369,7 +1369,7 @@ _again:
+@@ -1338,7 +1338,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1415,7 +1415,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1384,7 +1384,7 @@ _again:
      }
    }
  	break;
--#line 1419 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+
+-#line 1388 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
  		}
  	}
  	}
-@@ -1423,7 +1423,7 @@ _again:
+@@ -1392,7 +1392,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_ar/gherkin_lexer_ar.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_ar/gherkin_lexer_ar.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c gherkin-2.3.3/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c	2011-06-27 13:39:38.494379722 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c	2011-06-27 13:46:19.574406580 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -10973,260 +11278,261 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+
+-#line 87 "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, 
-@@ -856,7 +856,7 @@ static const int lexer_error = 0;
+@@ -650,7 +650,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1021,14 +1021,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -806,14 +806,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1025 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+
+-#line 810 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
      
--#line 1032 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+
+-#line 817 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1102,7 +1102,7 @@ _match:
+@@ -887,7 +887,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1110,20 +1110,20 @@ _match:
+@@ -895,20 +895,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1133,37 +1133,37 @@ _match:
+@@ -918,37 +918,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1172,34 +1172,34 @@ _match:
+@@ -957,34 +957,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1207,7 +1207,7 @@ _match:
+@@ -992,7 +992,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1216,13 +1216,13 @@ _match:
+@@ -1001,13 +1001,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1230,13 +1230,13 @@ _match:
+@@ -1015,13 +1015,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1252,13 +1252,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1036,13 +1036,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1304,7 +1304,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1088,7 +1088,7 @@ _match:
      }
    }
  	break;
--#line 1308 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+
+-#line 1092 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
  		}
  	}
  
-@@ -1321,7 +1321,7 @@ _again:
+@@ -1105,7 +1105,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1367,7 +1367,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1151,7 +1151,7 @@ _again:
      }
    }
  	break;
--#line 1371 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+
+-#line 1155 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
  		}
  	}
  	}
-@@ -1375,7 +1375,7 @@ _again:
+@@ -1159,7 +1159,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
---- gherkin-2.4.5/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c.orig	2011-07-12 21:56:17.000000000 -0400
-+++ gherkin-2.4.5/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c	2011-07-12 21:56:50.000000000 -0400
+diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c gherkin-2.3.3/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c
+--- gherkin-2.3.3.orig/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c	2011-06-27 13:39:38.495379765 -0400
++++ gherkin-2.3.3/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c	2011-06-27 13:46:19.615408324 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  #include <assert.h>
  #include <ruby.h>
  
@@ -11234,251 +11540,251 @@
        lexer->line_number)
  
  
--#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+
+-#line 87 "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, 
-@@ -709,7 +709,7 @@ static const int lexer_error = 0;
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -874,14 +874,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 878 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+
+-#line 852 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
  	{
  	cs = lexer_start;
  	}
  
--#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
      
--#line 885 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+
+-#line 859 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -955,7 +955,7 @@ _match:
+@@ -929,7 +929,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -963,20 +963,20 @@ _match:
+@@ -937,20 +937,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -986,37 +986,37 @@ _match:
+@@ -960,37 +960,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1025,34 +1025,34 @@ _match:
+@@ -999,34 +999,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1060,7 +1060,7 @@ _match:
+@@ -1034,7 +1034,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1069,13 +1069,13 @@ _match:
+@@ -1043,13 +1043,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1083,13 +1083,13 @@ _match:
+@@ -1057,13 +1057,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../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));
-@@ -1105,13 +1105,13 @@ _match:
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1078,13 +1078,13 @@ _match:
    }
  	break;
  	case 20:
--#line 191 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
      rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
    }
  	break;
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1157,7 +1157,7 @@ _match:
+       if (raise_lexer_error != NULL) {
+@@ -1130,7 +1130,7 @@ _match:
      }
    }
  	break;
--#line 1161 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+
+-#line 1134 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
  		}
  	}
  
-@@ -1174,7 +1174,7 @@ _again:
+@@ -1147,7 +1147,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  	{
-     int line;
      if (cs < lexer_first_final) {
-@@ -1220,7 +1220,7 @@ _again:
+       if (raise_lexer_error != NULL) {
+@@ -1193,7 +1193,7 @@ _again:
      }
    }
  	break;
--#line 1224 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+
+-#line 1197 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
  		}
  	}
  	}
-@@ -1228,7 +1228,7 @@ _again:
+@@ -1201,7 +1201,7 @@ _again:
  	_out: {}
  	}
  
--#line 411 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+
+-#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
  
      assert(p <= pe && "data overflow after parsing execute");
      assert(lexer->content_start <= len && "content starts after data end");
diff --git a/rubygem-gherkin.spec b/rubygem-gherkin.spec
index 23b80f2..c554404 100644
--- a/rubygem-gherkin.spec
+++ b/rubygem-gherkin.spec
@@ -6,21 +6,17 @@
 
 Summary: Fast Gherkin lexer/parser
 Name: rubygem-%{gemname}
-Version: 2.4.5
-Release: 1%{?dist}
+Version: 2.3.3
+Release: 3%{?dist}
 Group: Development/Languages
 License: MIT
 URL: http://github.com/aslakhellesoy/gherkin
 Source0: http://rubygems.org/gems/%{gemname}-%{version}.gem
-
-# generated by running:
-# ruby -rfileutils Dir.glob("gherkin/gherkin-2.4.5/ext/gherkin_lexer_*/").each { |d| Dir.glob("#{d}*.c"){ |f| FileUtils.cp(f,  d + f.split('/').last + ".orig" ) }}
-# find ./gherkin/gherkin-2.4.5/ext/ -name *.c -exec sed -i 's/#line.*//g' {} \; 
-# ruby -rfileutils Dir.glob('gherkin/gherkin-2.4.5/ext/*/*.c').each { |f| puts `diff -sup #{f}.orig #{f}` }
-Patch1: gherkin-2.4.5-remove-hash-line.patch
-
-Patch2: gherkin-2.4.5-fix-gemspec.patch
-
+Patch1: gherkin-remove-hash-line.patch
+Patch2: gherkin-extconf-flags.patch
+Patch3: gherkin-2.3.3-fix-gemspec.patch
+Patch4: gherkin-2.3.3-require-json-1.4.3.patch
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 Requires: ruby(abi) = %{rubyabi}
 Requires: rubygems
 Requires: rubygem(json)
@@ -47,6 +43,8 @@ gem unpack %{SOURCE0}
 cd %{gemname}-%{version}
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
+%patch4 -p1
 
 %build
 pushd %{_builddir}/%{name}-%{version}/%{gemname}-%{version}
@@ -63,13 +61,15 @@ rdoc -o rdoc
 rdoc --ri -o ri
 
 %install
+rm -rf %{buildroot}
 mkdir -p %{buildroot}%{geminstdir}
 mkdir -p %{buildroot}%{gemdir}/cache
 mkdir -p %{buildroot}%{gemdir}/specifications
 mkdir -p %{buildroot}%{ruby_sitearch}
 mkdir -p %{buildroot}%{gemdir}/doc/%{gemname}-%{version}
 
-for file in Gemfile LICENSE build_native_gems.sh cucumber.yml gherkin.gemspec; do
+for file in Gemfile History.txt LICENSE README.rdoc VERSION \
+    build_native_gems.sh cucumber.yml gherkin.gemspec; do
     cp %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/$file %{buildroot}%{geminstdir}
 done
 
@@ -95,6 +95,9 @@ cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/ri %{buildroot}%{gem
 # clean out any gitignore
 find %{buildroot} -iname '.gitignore' -exec rm -f {} \;
 
+%clean
+rm -rf %{buildroot}
+
 %files
 %defattr(-, root, root, -)
 %dir %{geminstdir}
@@ -105,7 +108,10 @@ find %{buildroot} -iname '.gitignore' -exec rm -f {} \;
 %doc %{geminstdir}/features
 %doc %{geminstdir}/spec
 %doc %{geminstdir}/LICENSE
+%doc %{geminstdir}/README.rdoc
+%doc %{geminstdir}/History.txt
 %doc %{geminstdir}/cucumber.yml
+%doc %{geminstdir}/VERSION
 %doc %{geminstdir}/Gemfile
 %{geminstdir}/%{gemname}.gemspec
 %{gemdir}/cache/%{gemname}-%{version}.gem
@@ -119,9 +125,6 @@ find %{buildroot} -iname '.gitignore' -exec rm -f {} \;
 %{gemdir}/doc/%{gemname}-%{version}
 
 %changelog
-* Tue Jul 12 2011 Mo Morsi <mmorsi at redhat.com> - 2.4.5-1
-- Update to latest upstream release
-
 * Tue Jun 08 2011 Chris Lalancette <clalance at redhat.com> - 2.3.3-3
 - Significantly revamped spec to conform more to fedora standards
 - Fix build on Rawhide
diff --git a/sources b/sources
index 5c805b5..add52e4 100644
--- a/sources
+++ b/sources
@@ -1 +1,3 @@
-11c2ac26de3e10a88ddd0ece85d0cc0f  gherkin-2.4.5.gem
+8d21ab3f6a2ee70b23adafb44d0323bd  gherkin-2.2.0.gem
+b93d361f7c6f9ae4a0179f17e543da0b  gherkin-2.2.4.gem
+ff6ea551cd8d98b7f5ae9964c8f8a58b  gherkin-2.3.3.gem


More information about the scm-commits mailing list