[rubygem-gherkin] Big revamp of the spec file.

Chris Lalancette clalance at fedoraproject.org
Mon Jun 27 21:02:14 UTC 2011


commit 7f7c9c793d6ff7609eecd78d45f94e3ae1b31e4a
Author: Chris Lalancette <clalance at redhat.com>
Date:   Mon Jun 27 16:43:17 2011 -0400

    Big revamp of the spec file.
    
    gherkin failed to compile on F-15/F-16 due to the -Werror flag
    on the build line.  What we need to do is to change the flags
    so that we remove -Werror for now.  Unfortunately due to the way
    that the gherkin RPM was done, that was not possible.  So
    we rewrite the way the spec file is done.  It turns out to be a
    bit of a manual process to get everything patched and installed,
    but the result is much more Fedora-like and allows us to
    actually compile on F-15/F-16.
    
    Signed-off-by: Chris Lalancette <clalance at redhat.com>

 gherkin-extconf-flags.patch    |  495 ++
 gherkin-remove-hash-line.patch |11790 ++++++++++++++++++++++++++++++++++++++++
 rubygem-gherkin.spec           |  110 +-
 3 files changed, 12333 insertions(+), 62 deletions(-)
---
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-remove-hash-line.patch b/gherkin-remove-hash-line.patch
new file mode 100644
index 0000000..dc83ea2
--- /dev/null
+++ b/gherkin-remove-hash-line.patch
@@ -0,0 +1,11790 @@
+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/ar.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/ar.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -856,7 +856,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1012,14 +1012,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1016 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+     
+-#line 1023 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1093,7 +1093,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1101,20 +1101,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ar.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1124,37 +1124,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ar.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ar.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ar.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1163,34 +1163,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ar.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ar.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1198,7 +1198,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1207,13 +1207,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ar.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1221,13 +1221,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ar.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1242,13 +1242,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1294,7 +1294,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1298 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1311,7 +1311,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1357,7 +1357,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1361 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1365,7 +1365,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/bg.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/bg.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1082,7 +1082,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1238,14 +1238,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1242 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+     
+-#line 1249 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1319,7 +1319,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1327,20 +1327,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/bg.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1350,37 +1350,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/bg.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/bg.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/bg.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1389,34 +1389,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/bg.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/bg.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1424,7 +1424,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1433,13 +1433,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/bg.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1447,13 +1447,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/bg.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1468,13 +1468,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1520,7 +1520,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1524 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1537,7 +1537,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1583,7 +1583,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1587 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1591,7 +1591,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/ca.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/ca.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1008,7 +1008,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1164,14 +1164,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1168 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+     
+-#line 1175 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1245,7 +1245,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1253,20 +1253,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ca.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1276,37 +1276,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ca.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ca.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ca.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1315,34 +1315,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ca.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ca.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1350,7 +1350,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1359,13 +1359,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ca.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1373,13 +1373,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ca.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1394,13 +1394,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1446,7 +1446,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1450 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1463,7 +1463,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1509,7 +1509,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1513 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1517,7 +1517,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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>
+ 
+@@ -78,12 +78,12 @@ static VALUE rb_eGherkinLexingError;
+       lexer->line_number)
+ 
+ 
+-#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, 
+@@ -854,7 +854,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1010,14 +1010,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1014 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+     
+-#line 1021 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -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;
+@@ -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;
+   }
+ 	break;
+ 	case 3:
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -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)),
+@@ -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;
+   }
+ 	break;
+ 	case 11:
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+ 	{
+     lexer->line_number += 1;
+     MARK(final_newline, p);
+   }
+ 	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);
+@@ -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));
+@@ -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;
+@@ -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 con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1240,13 +1240,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1292,7 +1292,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1296 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1309,7 +1309,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1355,7 +1355,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1359 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1363,7 +1363,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/cy_gb.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/cy_gb.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -709,7 +709,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -865,14 +865,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 869 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+     
+-#line 876 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -946,7 +946,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -954,20 +954,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/cy_gb.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -977,37 +977,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1016,34 +1016,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1051,7 +1051,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1060,13 +1060,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1074,13 +1074,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/cy_gb.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1095,13 +1095,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1147,7 +1147,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1151 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1164,7 +1164,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1210,7 +1210,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1214 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1218,7 +1218,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/da.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/da.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -725,7 +725,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -881,14 +881,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 885 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+     
+-#line 892 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -962,7 +962,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -970,20 +970,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/da.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -993,37 +993,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/da.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/da.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/da.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1032,34 +1032,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/da.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/da.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1067,7 +1067,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1076,13 +1076,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/da.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1090,13 +1090,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/da.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1111,13 +1111,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1163,7 +1163,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1167 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1180,7 +1180,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1226,7 +1226,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1230 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1234,7 +1234,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/de.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/de.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -842,7 +842,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -998,14 +998,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1002 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+     
+-#line 1009 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1079,7 +1079,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1087,20 +1087,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/de.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1110,37 +1110,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/de.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/de.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/de.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1149,34 +1149,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/de.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/de.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1184,7 +1184,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1193,13 +1193,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/de.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1207,13 +1207,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/de.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1228,13 +1228,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1280,7 +1280,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1284 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1297,7 +1297,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1343,7 +1343,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1347 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1351,7 +1351,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/en.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.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 852 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+     
+-#line 859 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -929,7 +929,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -937,20 +937,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/en.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -960,37 +960,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/en.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/en_au.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/en_au.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -957,34 +957,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/en_au.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/en_au.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -992,7 +992,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1001,13 +1001,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/en_au.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1015,13 +1015,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/en_au.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1036,13 +1036,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1088,7 +1088,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1092 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1105,7 +1105,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1151,7 +1151,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1155 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1159,7 +1159,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/en_lol.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_lol.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -602,7 +602,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -758,14 +758,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 762 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+     
+-#line 769 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -839,7 +839,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -847,20 +847,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/en_lol.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -870,37 +870,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -909,34 +909,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -944,7 +944,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -953,13 +953,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -967,13 +967,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/en_lol.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -988,13 +988,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1040,7 +1040,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1044 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1057,7 +1057,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1103,7 +1103,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1107 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1111,7 +1111,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/en_pirate.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_pirate.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -898,7 +898,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1054,14 +1054,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1058 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+     
+-#line 1065 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1135,7 +1135,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1143,20 +1143,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/en_pirate.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1166,37 +1166,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1205,34 +1205,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1240,7 +1240,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1249,13 +1249,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1263,13 +1263,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/en_pirate.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1284,13 +1284,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1336,7 +1336,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1340 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1353,7 +1353,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1399,7 +1399,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1403 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1407,7 +1407,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/en_scouse.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_scouse.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1059,7 +1059,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1215,14 +1215,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1219 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+     
+-#line 1226 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1296,7 +1296,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1304,20 +1304,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/en_scouse.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1327,37 +1327,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1366,34 +1366,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1401,7 +1401,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1410,13 +1410,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1424,13 +1424,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/en_scouse.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1445,13 +1445,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1497,7 +1497,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1501 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1514,7 +1514,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1560,7 +1560,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1564 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1568,7 +1568,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/en_tx.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_tx.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 852 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
+     
+-#line 859 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -929,7 +929,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -937,20 +937,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/en_tx.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -960,37 +960,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/en_tx.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/en_tx.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/en_tx.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_tx.c.rl"
++ 
+ 	{
+     STORE_ATTR(comment);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 11:
+-#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/en_tx.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"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.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_tx.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_tx.c.rl"
++ 
+ 	{
+     MARK(content_end, p);
+   }
+ 	break;
+ 	case 17:
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.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_tx.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+   }
+ 	break;
+ 	case 19:
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.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_tx.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_tx.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1130,7 +1130,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1134 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1147,7 +1147,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1193,7 +1193,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1197 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1201,7 +1201,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/eo.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/eo.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -663,7 +663,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -819,14 +819,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 823 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+     
+-#line 830 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -900,7 +900,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -908,20 +908,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/eo.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -931,37 +931,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/eo.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/eo.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/eo.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -970,34 +970,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/eo.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/eo.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1005,7 +1005,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1014,13 +1014,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/eo.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1028,13 +1028,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/eo.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1049,13 +1049,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1101,7 +1101,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1105 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1118,7 +1118,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1164,7 +1164,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1168 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1172,7 +1172,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/es.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/es.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -805,7 +805,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -961,14 +961,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 965 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+     
+-#line 972 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1042,7 +1042,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1050,20 +1050,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/es.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1073,37 +1073,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/es.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/es.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/es.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1112,34 +1112,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/es.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/es.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1147,7 +1147,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1156,13 +1156,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/es.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1170,13 +1170,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/es.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1191,13 +1191,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1243,7 +1243,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1247 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1260,7 +1260,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1306,7 +1306,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1310 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1314,7 +1314,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/et.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/et.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -661,7 +661,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -817,14 +817,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 821 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+     
+-#line 828 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -898,7 +898,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -906,20 +906,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/et.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -929,37 +929,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/et.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/et.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/et.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -968,34 +968,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/et.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/et.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1003,7 +1003,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1012,13 +1012,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/et.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1026,13 +1026,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/et.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1047,13 +1047,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1099,7 +1099,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1103 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1116,7 +1116,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1162,7 +1162,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1166 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1170,7 +1170,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/fi.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/fi.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -640,7 +640,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -796,14 +796,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 800 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+     
+-#line 807 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -877,7 +877,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -885,20 +885,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/fi.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -908,37 +908,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/fi.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/fi.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/fi.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -947,34 +947,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/fi.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/fi.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -982,7 +982,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -991,13 +991,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/fi.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1005,13 +1005,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/fi.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1026,13 +1026,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1078,7 +1078,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1082 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1095,7 +1095,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1141,7 +1141,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1145 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1149,7 +1149,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/fr.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/fr.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -878,7 +878,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1034,14 +1034,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1038 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+     
+-#line 1045 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1115,7 +1115,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1123,20 +1123,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/fr.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1146,37 +1146,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/fr.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/fr.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/fr.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1185,34 +1185,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/fr.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/fr.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1220,7 +1220,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1229,13 +1229,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/fr.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1243,13 +1243,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/fr.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1264,13 +1264,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1316,7 +1316,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1320 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1333,7 +1333,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1379,7 +1379,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1383 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1387,7 +1387,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/he.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/he.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -801,7 +801,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -957,14 +957,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 961 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+     
+-#line 968 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1038,7 +1038,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1046,20 +1046,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/he.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1069,37 +1069,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/he.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/he.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/he.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1108,34 +1108,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/he.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/he.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1143,7 +1143,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1152,13 +1152,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/he.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1166,13 +1166,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/he.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1187,13 +1187,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1239,7 +1239,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1243 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1256,7 +1256,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1302,7 +1302,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1306 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1310,7 +1310,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/hr.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/hr.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -750,7 +750,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -906,14 +906,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 910 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+     
+-#line 917 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -987,7 +987,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -995,20 +995,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/hr.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1018,37 +1018,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/hr.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/hr.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/hr.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1057,34 +1057,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/hr.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/hr.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1092,7 +1092,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1101,13 +1101,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/hr.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1115,13 +1115,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/hr.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1136,13 +1136,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1188,7 +1188,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1192 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1205,7 +1205,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1251,7 +1251,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1255 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1259,7 +1259,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/hu.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/hu.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -801,7 +801,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -957,14 +957,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 961 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+     
+-#line 968 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1038,7 +1038,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1046,20 +1046,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/hu.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1069,37 +1069,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/hu.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/hu.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/hu.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1108,34 +1108,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/hu.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/hu.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1143,7 +1143,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1152,13 +1152,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/hu.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1166,13 +1166,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/hu.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1187,13 +1187,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1239,7 +1239,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1243 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1256,7 +1256,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1302,7 +1302,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1306 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1310,7 +1310,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/id.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/id.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -630,7 +630,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -786,14 +786,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 790 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+     
+-#line 797 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -867,7 +867,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -875,20 +875,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/id.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -898,37 +898,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/id.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/id.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/id.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -937,34 +937,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/id.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/id.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -972,7 +972,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -981,13 +981,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/id.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -995,13 +995,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/id.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1016,13 +1016,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1068,7 +1068,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1072 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1085,7 +1085,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1131,7 +1131,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1135 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1139,7 +1139,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/it.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/it.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -759,7 +759,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -915,14 +915,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 919 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+     
+-#line 926 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -996,7 +996,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1004,20 +1004,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/it.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1027,37 +1027,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/it.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/it.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/it.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1066,34 +1066,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/it.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/it.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1101,7 +1101,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1110,13 +1110,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/it.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1124,13 +1124,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/it.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1145,13 +1145,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1197,7 +1197,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1201 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1214,7 +1214,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1260,7 +1260,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1264 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1268,7 +1268,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/ja.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/ja.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1126,7 +1126,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1282,14 +1282,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1286 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+     
+-#line 1293 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1363,7 +1363,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1371,20 +1371,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ja.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1394,37 +1394,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ja.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ja.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ja.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1433,34 +1433,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ja.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ja.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1468,7 +1468,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1477,13 +1477,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ja.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1491,13 +1491,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ja.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1512,13 +1512,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1564,7 +1564,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1568 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1581,7 +1581,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1627,7 +1627,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1631 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1635,7 +1635,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/ko.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/ko.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -787,7 +787,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -943,14 +943,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 947 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+     
+-#line 954 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1024,7 +1024,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1032,20 +1032,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ko.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1055,37 +1055,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ko.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ko.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ko.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1094,34 +1094,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ko.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ko.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1129,7 +1129,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1138,13 +1138,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ko.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1152,13 +1152,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ko.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1173,13 +1173,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1225,7 +1225,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1229 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1242,7 +1242,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1288,7 +1288,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1292 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1296,7 +1296,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/lt.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/lt.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -722,7 +722,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -878,14 +878,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 882 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+     
+-#line 889 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -959,7 +959,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -967,20 +967,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/lt.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -990,37 +990,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/lt.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/lt.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/lt.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1029,34 +1029,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/lt.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/lt.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1064,7 +1064,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1073,13 +1073,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/lt.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1087,13 +1087,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/lt.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1108,13 +1108,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1160,7 +1160,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1164 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1177,7 +1177,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1223,7 +1223,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1227 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1231,7 +1231,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/lu.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/lu.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -814,7 +814,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -970,14 +970,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 974 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+     
+-#line 981 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1051,7 +1051,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1059,20 +1059,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/lu.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1082,37 +1082,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/lu.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/lu.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/lu.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1121,34 +1121,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/lu.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/lu.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1156,7 +1156,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1165,13 +1165,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/lu.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1179,13 +1179,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/lu.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1200,13 +1200,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1252,7 +1252,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1256 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1269,7 +1269,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1315,7 +1315,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1319 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1323,7 +1323,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/lv.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/lv.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -852,7 +852,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1008,14 +1008,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1012 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+     
+-#line 1019 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1089,7 +1089,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1097,20 +1097,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/lv.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1120,37 +1120,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/lv.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/lv.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/lv.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1159,34 +1159,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/lv.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/lv.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1194,7 +1194,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1203,13 +1203,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/lv.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1217,13 +1217,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/lv.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1238,13 +1238,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1290,7 +1290,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1294 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1307,7 +1307,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1353,7 +1353,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1357 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1361,7 +1361,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/nl.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/nl.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -790,7 +790,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -946,14 +946,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 950 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+     
+-#line 957 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1027,7 +1027,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1035,20 +1035,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/nl.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1058,37 +1058,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/nl.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/nl.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/nl.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1097,34 +1097,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/nl.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/nl.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1132,7 +1132,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1141,13 +1141,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/nl.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1155,13 +1155,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/nl.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1176,13 +1176,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1228,7 +1228,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1232 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1245,7 +1245,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1291,7 +1291,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1295 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1299,7 +1299,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/no.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/no.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -738,7 +738,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -894,14 +894,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 898 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+     
+-#line 905 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -975,7 +975,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -983,20 +983,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/no.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1006,37 +1006,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/no.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/no.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/no.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1045,34 +1045,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/no.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/no.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1080,7 +1080,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1089,13 +1089,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/no.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1103,13 +1103,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/no.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1124,13 +1124,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1176,7 +1176,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1180 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1193,7 +1193,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1239,7 +1239,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1243 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1247,7 +1247,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/pl.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/pl.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -904,7 +904,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1060,14 +1060,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1064 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+     
+-#line 1071 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1141,7 +1141,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1149,20 +1149,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/pl.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1172,37 +1172,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/pl.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/pl.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/pl.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1211,34 +1211,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/pl.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/pl.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1246,7 +1246,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1255,13 +1255,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/pl.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1269,13 +1269,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/pl.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1290,13 +1290,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1342,7 +1342,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1346 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1359,7 +1359,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1405,7 +1405,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1409 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1413,7 +1413,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/pt.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/pt.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -754,7 +754,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -910,14 +910,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 914 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+     
+-#line 921 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -991,7 +991,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -999,20 +999,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/pt.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1022,37 +1022,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/pt.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/pt.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/pt.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1061,34 +1061,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/pt.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/pt.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1096,7 +1096,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1105,13 +1105,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/pt.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1119,13 +1119,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/pt.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1140,13 +1140,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1192,7 +1192,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1196 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1209,7 +1209,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1255,7 +1255,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1259 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1263,7 +1263,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/ro.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/ro.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -751,7 +751,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -907,14 +907,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 911 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+     
+-#line 918 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -988,7 +988,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -996,20 +996,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ro.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1019,37 +1019,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ro.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ro.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ro.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1058,34 +1058,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ro.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ro.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1093,7 +1093,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1102,13 +1102,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ro.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1116,13 +1116,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ro.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1137,13 +1137,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1189,7 +1189,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1193 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1206,7 +1206,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1252,7 +1252,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1256 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1260,7 +1260,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/ro_ro.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/ro_ro.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -795,7 +795,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -951,14 +951,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 955 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+     
+-#line 962 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1032,7 +1032,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1040,20 +1040,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ro_ro.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1063,37 +1063,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1102,34 +1102,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1137,7 +1137,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1146,13 +1146,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1160,13 +1160,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ro_ro.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1181,13 +1181,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1233,7 +1233,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1237 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1250,7 +1250,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1296,7 +1296,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1300 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1304,7 +1304,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/ru.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/ru.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1355,7 +1355,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1511,14 +1511,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1515 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+     
+-#line 1522 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1592,7 +1592,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1600,20 +1600,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/ru.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1623,37 +1623,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/ru.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/ru.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/ru.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1662,34 +1662,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/ru.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/ru.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1697,7 +1697,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1706,13 +1706,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/ru.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1720,13 +1720,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/ru.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1741,13 +1741,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1793,7 +1793,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1797 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1810,7 +1810,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1856,7 +1856,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1860 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1864,7 +1864,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/sk.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/sk.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -725,7 +725,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -881,14 +881,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 885 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+     
+-#line 892 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -962,7 +962,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -970,20 +970,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/sk.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -993,37 +993,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/sk.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/sk.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/sk.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1032,34 +1032,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/sk.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/sk.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1067,7 +1067,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1076,13 +1076,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/sk.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1090,13 +1090,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/sk.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1111,13 +1111,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1163,7 +1163,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1167 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1180,7 +1180,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1226,7 +1226,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1230 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1234,7 +1234,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/sr_cyrl.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/sr_cyrl.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1537,7 +1537,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1693,14 +1693,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1697 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+     
+-#line 1704 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1774,7 +1774,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1782,20 +1782,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/sr_cyrl.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1805,37 +1805,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1844,34 +1844,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1879,7 +1879,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1888,13 +1888,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1902,13 +1902,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/sr_cyrl.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1923,13 +1923,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1975,7 +1975,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1979 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1992,7 +1992,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -2038,7 +2038,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 2042 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -2046,7 +2046,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/sr_latn.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/sr_latn.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -994,7 +994,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1150,14 +1150,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1154 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+     
+-#line 1161 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1231,7 +1231,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1239,20 +1239,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/sr_latn.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1262,37 +1262,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1301,34 +1301,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1336,7 +1336,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1345,13 +1345,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1359,13 +1359,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/sr_latn.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1380,13 +1380,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1432,7 +1432,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1436 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1449,7 +1449,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1495,7 +1495,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1499 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1503,7 +1503,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/sv.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/sv.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -749,7 +749,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -905,14 +905,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 909 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+     
+-#line 916 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -986,7 +986,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -994,20 +994,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/sv.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1017,37 +1017,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/sv.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/sv.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/sv.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1056,34 +1056,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/sv.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/sv.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1091,7 +1091,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1100,13 +1100,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/sv.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1114,13 +1114,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/sv.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1135,13 +1135,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1187,7 +1187,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1191 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1204,7 +1204,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1250,7 +1250,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1254 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1258,7 +1258,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/tr.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/tr.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -767,7 +767,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -923,14 +923,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 927 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+     
+-#line 934 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1004,7 +1004,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1012,20 +1012,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/tr.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1035,37 +1035,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/tr.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/tr.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/tr.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1074,34 +1074,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/tr.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/tr.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1109,7 +1109,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1118,13 +1118,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/tr.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1132,13 +1132,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/tr.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1153,13 +1153,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1205,7 +1205,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1209 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1222,7 +1222,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1268,7 +1268,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1272 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1276,7 +1276,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/uk.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/uk.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1368,7 +1368,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1524,14 +1524,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1528 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+     
+-#line 1535 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1605,7 +1605,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1613,20 +1613,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/uk.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1636,37 +1636,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/uk.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/uk.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/uk.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1675,34 +1675,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/uk.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/uk.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1710,7 +1710,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1719,13 +1719,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/uk.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1733,13 +1733,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/uk.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1754,13 +1754,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1806,7 +1806,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1810 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1823,7 +1823,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1869,7 +1869,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1873 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1877,7 +1877,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/uz.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/uz.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -1078,7 +1078,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1234,14 +1234,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1238 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+     
+-#line 1245 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1315,7 +1315,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1323,20 +1323,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/uz.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1346,37 +1346,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/uz.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/uz.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/uz.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1385,34 +1385,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/uz.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/uz.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1420,7 +1420,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1429,13 +1429,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/uz.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1443,13 +1443,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/uz.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1464,13 +1464,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1516,7 +1516,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1520 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1533,7 +1533,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1579,7 +1579,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1583 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1587,7 +1587,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/vi.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/vi.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -883,7 +883,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -1039,14 +1039,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 1043 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+     
+-#line 1050 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -1120,7 +1120,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -1128,20 +1128,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/vi.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -1151,37 +1151,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/vi.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/vi.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/vi.c.rl"
++ 
+ 	{
+     store_kw_con(listener, "step",
+       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
+@@ -1190,34 +1190,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/vi.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/vi.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -1225,7 +1225,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1234,13 +1234,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/vi.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1248,13 +1248,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/vi.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1269,13 +1269,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1321,7 +1321,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1325 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1338,7 +1338,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1384,7 +1384,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1388 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1392,7 +1392,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/zh_cn.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/zh_cn.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -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/zh_cn.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_zh_cn/gherkin_lexer_zh_cn.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
+     
+-#line 817 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -887,7 +887,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.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/zh_cn.c.rl"
++ 
+ 	{
+     MARK(content_start, p);
+   }
+ 	break;
+ 	case 2:
+-#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/zh_cn.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/zh_cn.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(feature);
+   }
+ 	break;
+ 	case 5:
+-#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/zh_cn.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario);
+   }
+ 	break;
+ 	case 7:
+-#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/zh_cn.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(examples);
+   }
+ 	break;
+ 	case 9:
+-#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)),
+@@ -957,34 +957,34 @@ _match:
+   }
+ 	break;
+ 	case 10:
+-#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/zh_cn.c.rl"
++ 
+ 	{
+     STORE_ATTR(tag);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 12:
+-#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/zh_cn.c.rl"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
+ 	{
+     if (lexer->mark == 0) {
+       MARK(mark, p);
+@@ -992,7 +992,7 @@ _match:
+   }
+ 	break;
+ 	case 15:
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
+ 	{
+     MARK(keyword_end, p);
+     MARK(keyword_start, PTR_TO(mark));
+@@ -1001,13 +1001,13 @@ _match:
+   }
+ 	break;
+ 	case 16:
+-#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/zh_cn.c.rl"
++ 
+ 	{
+     p = p - 1;
+     lexer->current_line = lexer->line_number;
+@@ -1015,13 +1015,13 @@ _match:
+   }
+ 	break;
+ 	case 18:
+-#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/zh_cn.c.rl"
++ 
+ 	{
+     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
+     rb_funcall(con, rb_intern("strip!"), 0);
+@@ -1036,13 +1036,13 @@ _match:
+   }
+ 	break;
+ 	case 20:
+-#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 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1088,7 +1088,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1092 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1105,7 +1105,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1151,7 +1151,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1155 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1159,7 +1159,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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");
+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/zh_tw.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/zh_tw.c.rl"
++ 
+ 
+ 
+ /** Data **/
+ 
+-#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, 
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+ static const int lexer_en_main = 1;
+ 
+ 
+-#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
+ 
+ static VALUE 
+ unindent(VALUE con, int start_col)
+@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+     assert(*pe == '\0' && "pointer does not end on NULL");
+     
+     
+-#line 852 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
+ 	{
+ 	cs = lexer_start;
+ 	}
+ 
+-#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
+     
+-#line 859 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
+ 	{
+ 	int _klen;
+ 	unsigned int _trans;
+@@ -929,7 +929,7 @@ _match:
+ 		switch ( *_acts++ )
+ 		{
+ 	case 0:
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+     lexer->current_line = lexer->line_number;
+@@ -937,20 +937,20 @@ _match:
+   }
+ 	break;
+ 	case 1:
+-#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/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/zh_tw.c.rl"
++ 
+ 	{
+     int len = LEN(content_start, PTR_TO(final_newline));
+ 
+@@ -960,37 +960,37 @@ _match:
+   }
+ 	break;
+ 	case 4:
+-#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/zh_tw.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(background);
+   }
+ 	break;
+ 	case 6:
+-#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/zh_tw.c.rl"
++ 
+ 	{
+     STORE_KW_END_CON(scenario_outline);
+   }
+ 	break;
+ 	case 8:
+-#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/zh_tw.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/zh_tw.c.rl"
++ 
+ 	{
+     STORE_ATTR(comment);
+     lexer->mark = 0;
+   }
+ 	break;
+ 	case 11:
+-#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/zh_tw.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"
++ 
+ 	{
+     MARK(last_newline, p + 1);
+   }
+ 	break;
+ 	case 14:
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.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/zh_tw.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/zh_tw.c.rl"
++ 
+ 	{
+     MARK(content_end, p);
+   }
+ 	break;
+ 	case 17:
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.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/zh_tw.c.rl"
++ 
+ 	{
+ 		MARK(content_start, p);
+   }
+ 	break;
+ 	case 19:
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.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/zh_tw.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/zh_tw.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1130,7 +1130,7 @@ _match:
+     }
+   }
+ 	break;
+-#line 1134 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
+ 		}
+ 	}
+ 
+@@ -1147,7 +1147,7 @@ _again:
+ 	while ( __nacts-- > 0 ) {
+ 		switch ( *__acts++ ) {
+ 	case 21:
+-#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++ 
+ 	{
+     if (cs < lexer_first_final) {
+       if (raise_lexer_error != NULL) {
+@@ -1193,7 +1193,7 @@ _again:
+     }
+   }
+ 	break;
+-#line 1197 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++ 
+ 		}
+ 	}
+ 	}
+@@ -1201,7 +1201,7 @@ _again:
+ 	_out: {}
+ 	}
+ 
+-#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 6b72a62..e4dee1b 100644
--- a/rubygem-gherkin.spec
+++ b/rubygem-gherkin.spec
@@ -12,6 +12,8 @@ Group: Development/Languages
 License: MIT
 URL: http://github.com/aslakhellesoy/gherkin
 Source0: http://rubygems.org/gems/%{gemname}-%{version}.gem
+Patch1: gherkin-remove-hash-line.patch
+Patch2: gherkin-extconf-flags.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 Requires: ruby(abi) = %{rubyabi}
 Requires: rubygems
@@ -34,74 +36,60 @@ A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.
 
 %prep
 %setup -q -c -T
-mkdir -p ./%{gemdir}
-gem install \
-	--local \
-	--install-dir ./%{gemdir} \
-	--force \
-	%{SOURCE0}
+gem unpack %{SOURCE0}
+cd %{gemname}-%{version}
+%patch1 -p1
+%patch2 -p1
 
 
 %build
-pushd %{_builddir}/%{name}-%{version}/%{geminstdir}/ext
-# Recompile all shared libraries using -O2 optimization flag
-rm -rf ../lib/*.so
+pushd %{_builddir}/%{name}-%{version}/%{gemname}-%{version}
+pushd ext
 for lexer_dir in */ ; do
-  pushd $lexer_dir
-  mkdir ext
-  pushd ext
-  ln -sf .. ${lexer_dir%/}
-  popd
-  sed -i 's/ -O0 / -O2 /' extconf.rb
-  # Remove #line lines from C codes
-  sed -ie 's/^#line .*$ / -O2 /' *.c
-  CONFIGURE_ARGS="--with-cflags='%{optflags}'" ruby extconf.rb
-  make clean && make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
-  make install RUBYARCHDIR="../../lib"
-  popd
+    pushd $lexer_dir
+    CONFIGURE_ARGS="--with-cflags='%{optflags}'" ruby extconf.rb
+    make clean && make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
+    make install RUBYARCHDIR="../../lib"
+    popd
 done
-
+popd
+rdoc -o rdoc
+rdoc --ri -o ri
 
 %install
 rm -rf %{buildroot}
-mkdir -p %{buildroot}%{ruby_sitearch}/%{gemname}
-mkdir -p %{buildroot}%{gemdir}
-mkdir -p %{buildroot}%{_prefix}
-cp -a ./%{gemdir}/* %{buildroot}%{gemdir}
-mv -f %{buildroot}%{geminstdir}/lib/*.so %{buildroot}%{ruby_sitearch}/
-# Remove duplicate object files
-rm -f %{buildroot}%{geminstdir}/ext/*/*.so
-rm -f %{buildroot}%{geminstdir}/ext/*/*.o
-rm -f %{buildroot}%{geminstdir}/ext/*/Makefile
-# Remove git files
-rm -f %{buildroot}%{geminstdir}/.gitattributes
-rm -f %{buildroot}%{geminstdir}/.gitignore
-rm -f %{buildroot}%{geminstdir}/.mailmap
-rm -f %{buildroot}%{geminstdir}/.rspec
-rm -f %{buildroot}%{geminstdir}/ikvm/.gitignore
-rm -f %{buildroot}%{geminstdir}/java/.gitignore
-rm -f %{buildroot}%{geminstdir}/java/src/main/java/gherkin/lexer/.gitignore
-rm -f %{buildroot}%{geminstdir}/tasks/bench/generated/.gitignore
-rm -f %{buildroot}%{geminstdir}/lib/gherkin/rb_lexer/.gitignore
-rm -f %{buildroot}%{geminstdir}/java/src/main/resources/gherkin/.gitignore
-rm -f %{buildroot}%{geminstdir}/lib/.gitignore
-rm -f %{buildroot}%{geminstdir}/.rvmrc
-rm -rf %{buildroot}%{geminstdir}/.yardoc
-# Fix JSON dependency hell
-sed -i -e "s|~> 1.4.6|>= 1.1.9|" %{buildroot}%{gemdir}/specifications/%{gemname}-%{version}.gemspec
-sed -i -e "s|~> 1.4.6|>= 1.1.9|" %{buildroot}%{geminstdir}/%{gemname}.gemspec
-
-find $RPM_BUILD_ROOT%{geminstdir} -type f | grep '.gitignore' | xargs rm -f
-# Fix wrong executable flag on files
-chmod -x %{buildroot}%{geminstdir}/tasks/ragel_task.rb
-chmod -x %{buildroot}%{geminstdir}/tasks/compile.rake
-# Fix DOS formatted line ends
-sed -i -e "s|\r||" %{buildroot}%{geminstdir}/spec/gherkin/fixtures/dos_line_endings.feature
-sed -i -e "s|\r||" %{buildroot}%{geminstdir}/spec/gherkin/fixtures/with_bom.feature
-# Fix incompatible version of RSpec
-# TODO: Update these packages in Fedora and remove this lines
-sed -i -e "s|2.0.0.beta.17|1.3.0|" %{buildroot}%{geminstdir}/Rakefile
-sed -i -e "s|2.0.0.beta.17|1.3.0|" %{buildroot}%{gemdir}/specifications/%{gemname}-%{version}.gemspec
+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 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
+
+# files for the main package
+cp %{SOURCE0} %{buildroot}%{gemdir}/cache/
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/features %{buildroot}%{geminstdir}
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/lib %{buildroot}%{geminstdir}
+# the .so files go in the sitearch, so remove them from lib
+find %{buildroot}%{geminstdir} -iname '*.so' -exec rm -f {} \;
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/ragel %{buildroot}%{geminstdir}
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/spec %{buildroot}%{geminstdir}
+cp %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/gherkin.gemspec %{buildroot}/%{gemdir}/specifications/%{gemname}-%{version}.gemspec
+
+find %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/ext -iname '*.so' -exec cp {} %{buildroot}%{ruby_sitearch} \;
+
+# files for the -doc subpackage
+cp %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/Rakefile %{buildroot}%{geminstdir}
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/ext %{buildroot}%{geminstdir}
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/tasks %{buildroot}%{geminstdir}
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/rdoc %{buildroot}%{gemdir}/doc/%{gemname}-%{version}
+cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/ri %{buildroot}%{gemdir}/doc/%{gemname}-%{version}
+
+# clean out any gitignore
+find %{_builddir}/%{name}-%{version}/%{gemname}-%{version} -iname '.gitignore' -exec rm -f {} \;
 
 %clean
 rm -rf %{buildroot}
@@ -112,8 +100,6 @@ rm -rf %{buildroot}
 %{ruby_sitearch}/%{gemname}_*.so
 %{geminstdir}/lib
 %{geminstdir}/ragel
-%{geminstdir}/java
-%{geminstdir}/ikvm
 %{geminstdir}/build_native_gems.sh
 %doc %{geminstdir}/features
 %doc %{geminstdir}/spec


More information about the scm-commits mailing list