[rubygem-gherkin] update to 2.4.5

Mohammed Morsi mmorsi at fedoraproject.org
Wed Jul 13 15:31:15 UTC 2011


commit 486d19ab624871367db7c97196ea69a819a3c287
Author: Mo Morsi <mmorsi at redhat.com>
Date:   Wed Jul 13 11:23:42 2011 -0400

    update to 2.4.5

 .gitignore                                         |    1 +
 gherkin-2.3.3-fix-gemspec.patch                    |   75 -
 gherkin-2.3.3-require-json-1.4.3.patch             |   11 -
 gherkin-2.4.5-fix-gemspec.patch                    |   46 +
 ...e.patch => gherkin-2.4.5-remove-hash-line.patch | 7740 ++++++++++----------
 gherkin-extconf-flags.patch                        |  495 --
 rubygem-gherkin.spec                               |   33 +-
 sources                                            |    4 +-
 8 files changed, 3780 insertions(+), 4625 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index c86e03b..75aa861 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 /gherkin-2.2.0.gem
 /gherkin-2.2.4.gem
 /gherkin-2.3.3.gem
+/gherkin-2.4.5.gem
diff --git a/gherkin-2.4.5-fix-gemspec.patch b/gherkin-2.4.5-fix-gemspec.patch
new file mode 100644
index 0000000..7900505
--- /dev/null
+++ b/gherkin-2.4.5-fix-gemspec.patch
@@ -0,0 +1,46 @@
+--- gherkin-2.4.5/gherkin.gemspec.orig	2011-07-12 22:18:28.000000000 -0400
++++ gherkin-2.4.5/gherkin.gemspec	2011-07-12 22:22:16.000000000 -0400
+@@ -9,21 +9,31 @@ Gem::Specification.new do |s|
+   s.email       = "cukes at googlegroups.com"
+   s.homepage    = "http://github.com/cucumber/gherkin"
+ 
+-  s.files            = `git ls-files`.split("\n")
+-  s.test_files       = `git ls-files -- {spec,features}/*`.split("\n")
+-  s.executables      = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
++  specfiles           = Dir[ "spec/gherkin/fixtures/*.feature",
++                             "spec/gherkin/fixtures/*.json",
++                             "spec/gherkin/formatter/*.rb", "spec/gherkin/*.rb",
++                             "spec/gherkin/parser/parser_spec.rb",
++                             "spec/gherkin/shared/*.rb", "spec/*.rb" ]
++  featurefiles        = Dir[ "features/*.feature", "features/*.rb" ]
++  
++  s.files             = Dir[ "Gemfile", "History.txt", "LICENSE",
++                             "README.rdoc", "Rakefile", "VERSION",
++                             "build_native_gems.sh", "cucumber.yml",
++                             "gherkin.gemspec", "lib/*.rb", "lib/*.yml",
++                             "lib/gherkin/formatter/*.rb",
++                             "lib/gherkin/lexer/*.rb",
++                             "lib/gherkin/listener/*.rb",
++                             "lib/gherkin/native/*.rb",
++                             "lib/gherkin/parser/*.txt",
++                             "lib/gherkin/parser/*.rb",
++                             "lib/gherkin/rb_lexer/README.rdoc", "ragel/*.erb",
++                             "tasks/bench/*.rb",
++                             "tasks/*.rake" ] + specfiles + featurefiles
++  s.test_files        = specfiles + featurefiles
++
+   s.rdoc_options     = ["--charset=UTF-8"]
+   s.require_path     = "lib"
+ 
+-  s.files -= Dir['ikvm/**/*']
+-  s.files -= Dir['java/**/*']
+-  s.files -= Dir['js/**/*']
+-  s.files -= Dir['ext/**/*']
+-  s.files -= Dir['lib/gherkin.jar']
+-  s.files -= Dir['lib/**/*.dll']
+-  s.files -= Dir['lib/**/*.bundle']
+-  s.files -= Dir['lib/**/*.so']
+-  
+   if ENV['GEM_PLATFORM']
+     puts "GEM_PLATFORM:#{ENV['GEM_PLATFORM']}"
+   end
diff --git a/gherkin-remove-hash-line.patch b/gherkin-2.4.5-remove-hash-line.patch
similarity index 71%
rename from gherkin-remove-hash-line.patch
rename to gherkin-2.4.5-remove-hash-line.patch
index dc83ea2..4d8ba02 100644
--- a/gherkin-remove-hash-line.patch
+++ b/gherkin-2.4.5-remove-hash-line.patch
@@ -1,10 +1,9 @@
-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
+--- gherkin-2.4.5/ext/gherkin_lexer_sv/gherkin_lexer_sv.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_sv/gherkin_lexer_sv.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -12,261 +11,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ar/gherkin_lexer_ar.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+ 
+-#line 87 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -856,7 +856,7 @@ static const int lexer_error = 0;
+@@ -749,7 +749,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1012,14 +1012,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -914,14 +914,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"
-+ 
+-#line 918 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
      
--#line 1023 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+ 
+-#line 925 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1093,7 +1093,7 @@ _match:
+@@ -995,7 +995,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1101,20 +1101,20 @@ _match:
+@@ -1003,20 +1003,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/ar.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1124,37 +1124,37 @@ _match:
+@@ -1026,37 +1026,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1163,34 +1163,34 @@ _match:
+@@ -1065,34 +1065,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1198,7 +1198,7 @@ _match:
+@@ -1100,7 +1100,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1207,13 +1207,13 @@ _match:
+@@ -1109,13 +1109,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1221,13 +1221,13 @@ _match:
+@@ -1123,13 +1123,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1242,13 +1242,13 @@ _match:
+@@ -1145,13 +1145,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 191 "/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/ar.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1294,7 +1294,7 @@ _match:
+@@ -1197,7 +1197,7 @@ _match:
      }
    }
  	break;
--#line 1298 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+ 
+-#line 1201 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++
  		}
  	}
  
-@@ -1311,7 +1311,7 @@ _again:
+@@ -1214,7 +1214,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1357,7 +1357,7 @@ _again:
+@@ -1260,7 +1260,7 @@ _again:
      }
    }
  	break;
--#line 1361 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
-+ 
+-#line 1264 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
++
  		}
  	}
  	}
-@@ -1365,7 +1365,7 @@ _again:
+@@ -1268,7 +1268,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_id/gherkin_lexer_id.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_id/gherkin_lexer_id.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -274,261 +272,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_bg/gherkin_lexer_bg.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+ 
+-#line 87 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1082,7 +1082,7 @@ static const int lexer_error = 0;
+@@ -630,7 +630,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1238,14 +1238,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -795,14 +795,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"
-+ 
+-#line 799 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
      
--#line 1249 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+ 
+-#line 806 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1319,7 +1319,7 @@ _match:
+@@ -876,7 +876,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1327,20 +1327,20 @@ _match:
+@@ -884,20 +884,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/bg.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1350,37 +1350,37 @@ _match:
+@@ -907,37 +907,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1389,34 +1389,34 @@ _match:
+@@ -946,34 +946,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1424,7 +1424,7 @@ _match:
+@@ -981,7 +981,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1433,13 +1433,13 @@ _match:
+@@ -990,13 +990,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1447,13 +1447,13 @@ _match:
+@@ -1004,13 +1004,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1468,13 +1468,13 @@ _match:
+@@ -1026,13 +1026,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 191 "/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/bg.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1520,7 +1520,7 @@ _match:
+@@ -1078,7 +1078,7 @@ _match:
      }
    }
  	break;
--#line 1524 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+ 
+-#line 1082 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++
  		}
  	}
  
-@@ -1537,7 +1537,7 @@ _again:
+@@ -1095,7 +1095,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1583,7 +1583,7 @@ _again:
+@@ -1141,7 +1141,7 @@ _again:
      }
    }
  	break;
--#line 1587 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
-+ 
+-#line 1145 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
++
  		}
  	}
  	}
-@@ -1591,7 +1591,7 @@ _again:
+@@ -1149,7 +1149,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_lu/gherkin_lexer_lu.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_lu/gherkin_lexer_lu.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -536,261 +533,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ca/gherkin_lexer_ca.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+ 
+-#line 87 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1008,7 +1008,7 @@ static const int lexer_error = 0;
+@@ -814,7 +814,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1164,14 +1164,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -979,14 +979,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"
-+ 
+-#line 983 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
      
--#line 1175 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+ 
+-#line 990 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1245,7 +1245,7 @@ _match:
+@@ -1060,7 +1060,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1253,20 +1253,20 @@ _match:
+@@ -1068,20 +1068,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/ca.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1276,37 +1276,37 @@ _match:
+@@ -1091,37 +1091,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1315,34 +1315,34 @@ _match:
+@@ -1130,34 +1130,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1350,7 +1350,7 @@ _match:
+@@ -1165,7 +1165,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1359,13 +1359,13 @@ _match:
+@@ -1174,13 +1174,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1373,13 +1373,13 @@ _match:
+@@ -1188,13 +1188,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1394,13 +1394,13 @@ _match:
+@@ -1210,13 +1210,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 191 "/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/ca.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1446,7 +1446,7 @@ _match:
+@@ -1262,7 +1262,7 @@ _match:
      }
    }
  	break;
--#line 1450 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+ 
+-#line 1266 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++
  		}
  	}
  
-@@ -1463,7 +1463,7 @@ _again:
+@@ -1279,7 +1279,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1509,7 +1509,7 @@ _again:
+@@ -1325,7 +1325,7 @@ _again:
      }
    }
  	break;
--#line 1513 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
-+ 
+-#line 1329 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
++
  		}
  	}
  	}
-@@ -1517,7 +1517,7 @@ _again:
+@@ -1333,7 +1333,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_cs/gherkin_lexer_cs.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_cs/gherkin_lexer_cs.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
 -#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -798,14 +794,14 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
+-#line 242 "/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, 
@@ -813,51 +809,51 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
+-#line 246 "/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
+@@ -1019,14 +1019,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"
-+ 
+-#line 1023 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++
      
--#line 1021 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+ 
+-#line 1030 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1091,7 +1091,7 @@ _match:
+@@ -1100,7 +1100,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:
+@@ -1108,20 +1108,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;
@@ -865,60 +861,60 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3
  	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:
+@@ -1131,37 +1131,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:
+@@ -1170,34 +1170,34 @@ _match:
    }
  	break;
  	case 10:
 -#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
@@ -926,7 +922,7 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3
  	break;
  	case 11:
 -#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
@@ -934,7 +930,7 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3
  	break;
  	case 12:
 -#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
@@ -942,117 +938,116 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cs/gherkin_lexer_cs.c gherkin-2.3
  	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:
+@@ -1205,7 +1205,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:
+@@ -1214,13 +1214,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:
+@@ -1228,13 +1228,13 @@ _match:
    }
  	break;
  	case 18:
 -#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
 -#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1240,13 +1240,13 @@ _match:
+@@ -1250,13 +1250,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
+-#line 191 "/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"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1292,7 +1292,7 @@ _match:
+@@ -1302,7 +1302,7 @@ _match:
      }
    }
  	break;
--#line 1296 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+ 
+-#line 1306 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++
  		}
  	}
  
-@@ -1309,7 +1309,7 @@ _again:
+@@ -1319,7 +1319,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1355,7 +1355,7 @@ _again:
+@@ -1365,7 +1365,7 @@ _again:
      }
    }
  	break;
--#line 1359 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
-+ 
+-#line 1369 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
++
  		}
  	}
  	}
-@@ -1363,7 +1363,7 @@ _again:
+@@ -1373,7 +1373,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cs.c.rl"
-+ 
+-#line 411 "/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
+--- gherkin-2.4.5/ext/gherkin_lexer_pt/gherkin_lexer_pt.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_pt/gherkin_lexer_pt.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -1060,261 +1055,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c gherk
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+ 
+-#line 87 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -709,7 +709,7 @@ static const int lexer_error = 0;
+@@ -754,7 +754,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -865,14 +865,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -919,14 +919,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"
-+ 
+-#line 923 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
      
--#line 876 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+ 
+-#line 930 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -946,7 +946,7 @@ _match:
+@@ -1000,7 +1000,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -954,20 +954,20 @@ _match:
+@@ -1008,20 +1008,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/cy_gb.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -977,37 +977,37 @@ _match:
+@@ -1031,37 +1031,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1016,34 +1016,34 @@ _match:
+@@ -1070,34 +1070,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1051,7 +1051,7 @@ _match:
+@@ -1105,7 +1105,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1060,13 +1060,13 @@ _match:
+@@ -1114,13 +1114,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1074,13 +1074,13 @@ _match:
+@@ -1128,13 +1128,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1095,13 +1095,13 @@ _match:
+@@ -1150,13 +1150,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 191 "/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/cy_gb.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1147,7 +1147,7 @@ _match:
+@@ -1202,7 +1202,7 @@ _match:
      }
    }
  	break;
--#line 1151 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+ 
+-#line 1206 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++
  		}
  	}
  
-@@ -1164,7 +1164,7 @@ _again:
+@@ -1219,7 +1219,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1210,7 +1210,7 @@ _again:
+@@ -1265,7 +1265,7 @@ _again:
      }
    }
  	break;
--#line 1214 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
-+ 
+-#line 1269 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
++
  		}
  	}
  	}
-@@ -1218,7 +1218,7 @@ _again:
+@@ -1273,7 +1273,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_bg/gherkin_lexer_bg.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_bg/gherkin_lexer_bg.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -1322,261 +1316,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_da/gherkin_lexer_da.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+ 
+-#line 87 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -725,7 +725,7 @@ static const int lexer_error = 0;
+@@ -1082,7 +1082,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -881,14 +881,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1247,14 +1247,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"
-+ 
+-#line 1251 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
      
--#line 892 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+ 
+-#line 1258 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -962,7 +962,7 @@ _match:
+@@ -1328,7 +1328,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -970,20 +970,20 @@ _match:
+@@ -1336,20 +1336,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/da.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -993,37 +993,37 @@ _match:
+@@ -1359,37 +1359,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1032,34 +1032,34 @@ _match:
+@@ -1398,34 +1398,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1067,7 +1067,7 @@ _match:
+@@ -1433,7 +1433,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1076,13 +1076,13 @@ _match:
+@@ -1442,13 +1442,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1090,13 +1090,13 @@ _match:
+@@ -1456,13 +1456,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1111,13 +1111,13 @@ _match:
+@@ -1478,13 +1478,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 191 "/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/da.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1163,7 +1163,7 @@ _match:
+@@ -1530,7 +1530,7 @@ _match:
      }
    }
  	break;
--#line 1167 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+ 
+-#line 1534 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++
  		}
  	}
  
-@@ -1180,7 +1180,7 @@ _again:
+@@ -1547,7 +1547,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/bg.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1226,7 +1226,7 @@ _again:
+@@ -1593,7 +1593,7 @@ _again:
      }
    }
  	break;
--#line 1230 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
-+ 
+-#line 1597 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
++
  		}
  	}
  	}
-@@ -1234,7 +1234,7 @@ _again:
+@@ -1601,7 +1601,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_lt/gherkin_lexer_lt.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_lt/gherkin_lexer_lt.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -1584,523 +1577,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_de/gherkin_lexer_de.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.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"
-+ 
+-#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, 
-@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+@@ -722,7 +722,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -887,14 +887,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"
-+ 
+-#line 891 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
      
--#line 859 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+ 
+-#line 898 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -929,7 +929,7 @@ _match:
+@@ -968,7 +968,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -937,20 +937,20 @@ _match:
+@@ -976,20 +976,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -960,37 +960,37 @@ _match:
+@@ -999,37 +999,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -999,34 +999,34 @@ _match:
+@@ -1038,34 +1038,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1034,7 +1034,7 @@ _match:
+@@ -1073,7 +1073,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1043,13 +1043,13 @@ _match:
+@@ -1082,13 +1082,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1057,13 +1057,13 @@ _match:
+@@ -1096,13 +1096,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1078,13 +1078,13 @@ _match:
+@@ -1118,13 +1118,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 191 "/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/en.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1130,7 +1130,7 @@ _match:
+@@ -1170,7 +1170,7 @@ _match:
      }
    }
  	break;
--#line 1134 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+ 
+-#line 1174 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++
  		}
  	}
  
-@@ -1147,7 +1147,7 @@ _again:
+@@ -1187,7 +1187,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1193,7 +1193,7 @@ _again:
+@@ -1233,7 +1233,7 @@ _again:
      }
    }
  	break;
--#line 1197 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
-+ 
+-#line 1237 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
++
  		}
  	}
  	}
-@@ -1201,7 +1201,7 @@ _again:
+@@ -1241,7 +1241,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_he/gherkin_lexer_he.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_he/gherkin_lexer_he.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -2108,261 +1838,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c gherk
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+ 
+-#line 87 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -650,7 +650,7 @@ static const int lexer_error = 0;
+@@ -801,7 +801,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -806,14 +806,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -966,14 +966,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"
-+ 
+-#line 970 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
      
--#line 817 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+ 
+-#line 977 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -887,7 +887,7 @@ _match:
+@@ -1047,7 +1047,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -895,20 +895,20 @@ _match:
+@@ -1055,20 +1055,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/en_au.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -918,37 +918,37 @@ _match:
+@@ -1078,37 +1078,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -957,34 +957,34 @@ _match:
+@@ -1117,34 +1117,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -992,7 +992,7 @@ _match:
+@@ -1152,7 +1152,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1001,13 +1001,13 @@ _match:
+@@ -1161,13 +1161,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1015,13 +1015,13 @@ _match:
+@@ -1175,13 +1175,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1036,13 +1036,13 @@ _match:
+@@ -1197,13 +1197,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 191 "/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/en_au.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1088,7 +1088,7 @@ _match:
+@@ -1249,7 +1249,7 @@ _match:
      }
    }
  	break;
--#line 1092 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+ 
+-#line 1253 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++
  		}
  	}
  
-@@ -1105,7 +1105,7 @@ _again:
+@@ -1266,7 +1266,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1151,7 +1151,7 @@ _again:
+@@ -1312,7 +1312,7 @@ _again:
      }
    }
  	break;
--#line 1155 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
-+ 
+-#line 1316 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
++
  		}
  	}
  	}
-@@ -1159,7 +1159,7 @@ _again:
+@@ -1320,7 +1320,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -2370,261 +2099,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c ghe
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+ 
+-#line 87 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -602,7 +602,7 @@ static const int lexer_error = 0;
+@@ -994,7 +994,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -758,14 +758,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1159,14 +1159,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"
-+ 
+-#line 1163 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
      
--#line 769 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+ 
+-#line 1170 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -839,7 +839,7 @@ _match:
+@@ -1240,7 +1240,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -847,20 +847,20 @@ _match:
+@@ -1248,20 +1248,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/en_lol.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -870,37 +870,37 @@ _match:
+@@ -1271,37 +1271,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -909,34 +909,34 @@ _match:
+@@ -1310,34 +1310,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -944,7 +944,7 @@ _match:
+@@ -1345,7 +1345,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -953,13 +953,13 @@ _match:
+@@ -1354,13 +1354,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -967,13 +967,13 @@ _match:
+@@ -1368,13 +1368,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -988,13 +988,13 @@ _match:
+@@ -1390,13 +1390,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 191 "/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/en_lol.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1040,7 +1040,7 @@ _match:
+@@ -1442,7 +1442,7 @@ _match:
      }
    }
  	break;
--#line 1044 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+ 
+-#line 1446 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++
  		}
  	}
  
-@@ -1057,7 +1057,7 @@ _again:
+@@ -1459,7 +1459,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1103,7 +1103,7 @@ _again:
+@@ -1505,7 +1505,7 @@ _again:
      }
    }
  	break;
--#line 1107 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
-+ 
+-#line 1509 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
++
  		}
  	}
  	}
-@@ -1111,7 +1111,7 @@ _again:
+@@ -1513,7 +1513,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_de/gherkin_lexer_de.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_de/gherkin_lexer_de.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -2632,261 +2360,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+ 
+-#line 87 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -898,7 +898,7 @@ static const int lexer_error = 0;
+@@ -842,7 +842,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1054,14 +1054,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1007,14 +1007,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"
-+ 
+-#line 1011 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
      
--#line 1065 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+ 
+-#line 1018 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1135,7 +1135,7 @@ _match:
+@@ -1088,7 +1088,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1143,20 +1143,20 @@ _match:
+@@ -1096,20 +1096,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/en_pirate.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1166,37 +1166,37 @@ _match:
+@@ -1119,37 +1119,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1205,34 +1205,34 @@ _match:
+@@ -1158,34 +1158,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1240,7 +1240,7 @@ _match:
+@@ -1193,7 +1193,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1249,13 +1249,13 @@ _match:
+@@ -1202,13 +1202,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1263,13 +1263,13 @@ _match:
+@@ -1216,13 +1216,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1284,13 +1284,13 @@ _match:
+@@ -1238,13 +1238,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 191 "/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/en_pirate.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1336,7 +1336,7 @@ _match:
+@@ -1290,7 +1290,7 @@ _match:
      }
    }
  	break;
--#line 1340 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+ 
+-#line 1294 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++
  		}
  	}
  
-@@ -1353,7 +1353,7 @@ _again:
+@@ -1307,7 +1307,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/de.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1399,7 +1399,7 @@ _again:
+@@ -1353,7 +1353,7 @@ _again:
      }
    }
  	break;
--#line 1403 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
-+ 
+-#line 1357 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
++
  		}
  	}
  	}
-@@ -1407,7 +1407,7 @@ _again:
+@@ -1361,7 +1361,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_hr/gherkin_lexer_hr.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_hr/gherkin_lexer_hr.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -2894,261 +2621,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+ 
+-#line 87 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1059,7 +1059,7 @@ static const int lexer_error = 0;
+@@ -750,7 +750,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1215,14 +1215,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -915,14 +915,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1219 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+ 
+-#line 919 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
      
--#line 1226 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+ 
+-#line 926 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1296,7 +1296,7 @@ _match:
+@@ -996,7 +996,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1304,20 +1304,20 @@ _match:
+@@ -1004,20 +1004,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/en_scouse.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1327,37 +1327,37 @@ _match:
+@@ -1027,37 +1027,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1366,34 +1366,34 @@ _match:
+@@ -1066,34 +1066,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1401,7 +1401,7 @@ _match:
+@@ -1101,7 +1101,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1410,13 +1410,13 @@ _match:
+@@ -1110,13 +1110,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1424,13 +1424,13 @@ _match:
+@@ -1124,13 +1124,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1445,13 +1445,13 @@ _match:
+@@ -1146,13 +1146,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 191 "/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/en_scouse.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1497,7 +1497,7 @@ _match:
+@@ -1198,7 +1198,7 @@ _match:
      }
    }
  	break;
--#line 1501 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+ 
+-#line 1202 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++
  		}
  	}
  
-@@ -1514,7 +1514,7 @@ _again:
+@@ -1215,7 +1215,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1560,7 +1560,7 @@ _again:
+@@ -1261,7 +1261,7 @@ _again:
      }
    }
  	break;
--#line 1564 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
-+ 
+-#line 1265 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
++
  		}
  	}
  	}
-@@ -1568,7 +1568,7 @@ _again:
+@@ -1269,7 +1269,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_ru/gherkin_lexer_ru.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_ru/gherkin_lexer_ru.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -3156,261 +2882,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c gherk
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+ 
+-#line 87 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+@@ -1482,7 +1482,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"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1647,14 +1647,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"
-+ 
+-#line 1651 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
      
--#line 859 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+ 
+-#line 1658 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -929,7 +929,7 @@ _match:
+@@ -1728,7 +1728,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -937,20 +937,20 @@ _match:
+@@ -1736,20 +1736,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -960,37 +960,37 @@ _match:
+@@ -1759,37 +1759,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -999,34 +999,34 @@ _match:
+@@ -1798,34 +1798,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1034,7 +1034,7 @@ _match:
+@@ -1833,7 +1833,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1043,13 +1043,13 @@ _match:
+@@ -1842,13 +1842,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1057,13 +1057,13 @@ _match:
+@@ -1856,13 +1856,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1078,13 +1078,13 @@ _match:
+@@ -1878,13 +1878,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 191 "/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/en_tx.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1130,7 +1130,7 @@ _match:
+@@ -1930,7 +1930,7 @@ _match:
      }
    }
  	break;
--#line 1134 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+ 
+-#line 1934 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++
  		}
  	}
  
-@@ -1147,7 +1147,7 @@ _again:
+@@ -1947,7 +1947,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1193,7 +1193,7 @@ _again:
+@@ -1993,7 +1993,7 @@ _again:
      }
    }
  	break;
--#line 1197 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
-+ 
+-#line 1997 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
++
  		}
  	}
  	}
-@@ -1201,7 +1201,7 @@ _again:
+@@ -2001,7 +2001,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -3418,261 +3143,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_eo/gherkin_lexer_eo.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+ 
+-#line 87 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -663,7 +663,7 @@ static const int lexer_error = 0;
+@@ -650,7 +650,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -819,14 +819,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -815,14 +815,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"
-+ 
+-#line 819 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
      
--#line 830 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+ 
+-#line 826 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -900,7 +900,7 @@ _match:
+@@ -896,7 +896,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -908,20 +908,20 @@ _match:
+@@ -904,20 +904,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/eo.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -931,37 +931,37 @@ _match:
+@@ -927,37 +927,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -970,34 +970,34 @@ _match:
+@@ -966,34 +966,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1005,7 +1005,7 @@ _match:
+@@ -1001,7 +1001,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1014,13 +1014,13 @@ _match:
+@@ -1010,13 +1010,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1028,13 +1028,13 @@ _match:
+@@ -1024,13 +1024,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1049,13 +1049,13 @@ _match:
+@@ -1046,13 +1046,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 191 "/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/eo.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1101,7 +1101,7 @@ _match:
+@@ -1098,7 +1098,7 @@ _match:
      }
    }
  	break;
--#line 1105 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+ 
+-#line 1102 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++
  		}
  	}
  
-@@ -1118,7 +1118,7 @@ _again:
+@@ -1115,7 +1115,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1164,7 +1164,7 @@ _again:
+@@ -1161,7 +1161,7 @@ _again:
      }
    }
  	break;
--#line 1168 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
-+ 
+-#line 1165 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
++
  		}
  	}
  	}
-@@ -1172,7 +1172,7 @@ _again:
+@@ -1169,7 +1169,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_eo/gherkin_lexer_eo.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_eo/gherkin_lexer_eo.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -3680,261 +3404,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_es/gherkin_lexer_es.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+ 
+-#line 87 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -805,7 +805,7 @@ static const int lexer_error = 0;
+@@ -663,7 +663,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -961,14 +961,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -828,14 +828,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"
-+ 
+-#line 832 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
      
--#line 972 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+ 
+-#line 839 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1042,7 +1042,7 @@ _match:
+@@ -909,7 +909,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1050,20 +1050,20 @@ _match:
+@@ -917,20 +917,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/es.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1073,37 +1073,37 @@ _match:
+@@ -940,37 +940,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1112,34 +1112,34 @@ _match:
+@@ -979,34 +979,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1147,7 +1147,7 @@ _match:
+@@ -1014,7 +1014,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1156,13 +1156,13 @@ _match:
+@@ -1023,13 +1023,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1170,13 +1170,13 @@ _match:
+@@ -1037,13 +1037,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1191,13 +1191,13 @@ _match:
+@@ -1059,13 +1059,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 191 "/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/es.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1243,7 +1243,7 @@ _match:
+@@ -1111,7 +1111,7 @@ _match:
      }
    }
  	break;
--#line 1247 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+ 
+-#line 1115 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++
  		}
  	}
  
-@@ -1260,7 +1260,7 @@ _again:
+@@ -1128,7 +1128,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/eo.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1306,7 +1306,7 @@ _again:
+@@ -1174,7 +1174,7 @@ _again:
      }
    }
  	break;
--#line 1310 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
-+ 
+-#line 1178 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
++
  		}
  	}
  	}
-@@ -1314,7 +1314,7 @@ _again:
+@@ -1182,7 +1182,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_nl/gherkin_lexer_nl.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_nl/gherkin_lexer_nl.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -3942,261 +3665,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_et/gherkin_lexer_et.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+ 
+-#line 87 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -661,7 +661,7 @@ static const int lexer_error = 0;
+@@ -790,7 +790,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -817,14 +817,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -955,14 +955,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"
-+ 
+-#line 959 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
      
--#line 828 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+ 
+-#line 966 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -898,7 +898,7 @@ _match:
+@@ -1036,7 +1036,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -906,20 +906,20 @@ _match:
+@@ -1044,20 +1044,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/et.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -929,37 +929,37 @@ _match:
+@@ -1067,37 +1067,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -968,34 +968,34 @@ _match:
+@@ -1106,34 +1106,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1003,7 +1003,7 @@ _match:
+@@ -1141,7 +1141,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1012,13 +1012,13 @@ _match:
+@@ -1150,13 +1150,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1026,13 +1026,13 @@ _match:
+@@ -1164,13 +1164,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1047,13 +1047,13 @@ _match:
+@@ -1186,13 +1186,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 191 "/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/et.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1099,7 +1099,7 @@ _match:
+@@ -1238,7 +1238,7 @@ _match:
      }
    }
  	break;
--#line 1103 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+ 
+-#line 1242 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++
  		}
  	}
  
-@@ -1116,7 +1116,7 @@ _again:
+@@ -1255,7 +1255,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1162,7 +1162,7 @@ _again:
+@@ -1301,7 +1301,7 @@ _again:
      }
    }
  	break;
--#line 1166 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
-+ 
+-#line 1305 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
++
  		}
  	}
  	}
-@@ -1170,7 +1170,7 @@ _again:
+@@ -1309,7 +1309,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -4204,261 +3926,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_fi/gherkin_lexer_fi.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+ 
+-#line 87 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -640,7 +640,7 @@ static const int lexer_error = 0;
+@@ -602,7 +602,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -796,14 +796,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -767,14 +767,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"
-+ 
+-#line 771 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
      
--#line 807 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+ 
+-#line 778 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -877,7 +877,7 @@ _match:
+@@ -848,7 +848,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -885,20 +885,20 @@ _match:
+@@ -856,20 +856,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/fi.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -908,37 +908,37 @@ _match:
+@@ -879,37 +879,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -947,34 +947,34 @@ _match:
+@@ -918,34 +918,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -982,7 +982,7 @@ _match:
+@@ -953,7 +953,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -991,13 +991,13 @@ _match:
+@@ -962,13 +962,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1005,13 +1005,13 @@ _match:
+@@ -976,13 +976,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1026,13 +1026,13 @@ _match:
+@@ -998,13 +998,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 191 "/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/fi.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1078,7 +1078,7 @@ _match:
+@@ -1050,7 +1050,7 @@ _match:
      }
    }
  	break;
--#line 1082 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+ 
+-#line 1054 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++
  		}
  	}
  
-@@ -1095,7 +1095,7 @@ _again:
+@@ -1067,7 +1067,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1141,7 +1141,7 @@ _again:
+@@ -1113,7 +1113,7 @@ _again:
      }
    }
  	break;
--#line 1145 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
-+ 
+-#line 1117 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
++
  		}
  	}
  	}
-@@ -1149,7 +1149,7 @@ _again:
+@@ -1121,7 +1121,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -4466,261 +4187,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_fr/gherkin_lexer_fr.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+ 
+-#line 87 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -878,7 +878,7 @@ static const int lexer_error = 0;
+@@ -898,7 +898,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1034,14 +1034,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1063,14 +1063,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"
-+ 
+-#line 1067 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
      
--#line 1045 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+ 
+-#line 1074 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1115,7 +1115,7 @@ _match:
+@@ -1144,7 +1144,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1123,20 +1123,20 @@ _match:
+@@ -1152,20 +1152,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/fr.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1146,37 +1146,37 @@ _match:
+@@ -1175,37 +1175,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1185,34 +1185,34 @@ _match:
+@@ -1214,34 +1214,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1220,7 +1220,7 @@ _match:
+@@ -1249,7 +1249,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1229,13 +1229,13 @@ _match:
+@@ -1258,13 +1258,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1243,13 +1243,13 @@ _match:
+@@ -1272,13 +1272,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1264,13 +1264,13 @@ _match:
+@@ -1294,13 +1294,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 191 "/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/fr.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1316,7 +1316,7 @@ _match:
+@@ -1346,7 +1346,7 @@ _match:
      }
    }
  	break;
--#line 1320 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+ 
+-#line 1350 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++
  		}
  	}
  
-@@ -1333,7 +1333,7 @@ _again:
+@@ -1363,7 +1363,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1379,7 +1379,7 @@ _again:
+@@ -1409,7 +1409,7 @@ _again:
      }
    }
  	break;
--#line 1383 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
-+ 
+-#line 1413 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
++
  		}
  	}
  	}
-@@ -1387,7 +1387,7 @@ _again:
+@@ -1417,7 +1417,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_fi/gherkin_lexer_fi.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_fi/gherkin_lexer_fi.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -4728,261 +4448,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_he/gherkin_lexer_he.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+ 
+-#line 87 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -801,7 +801,7 @@ static const int lexer_error = 0;
+@@ -640,7 +640,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -957,14 +957,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -805,14 +805,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"
-+ 
+-#line 809 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
      
--#line 968 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+ 
+-#line 816 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1038,7 +1038,7 @@ _match:
+@@ -886,7 +886,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1046,20 +1046,20 @@ _match:
+@@ -894,20 +894,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/he.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1069,37 +1069,37 @@ _match:
+@@ -917,37 +917,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1108,34 +1108,34 @@ _match:
+@@ -956,34 +956,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1143,7 +1143,7 @@ _match:
+@@ -991,7 +991,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1152,13 +1152,13 @@ _match:
+@@ -1000,13 +1000,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1166,13 +1166,13 @@ _match:
+@@ -1014,13 +1014,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1187,13 +1187,13 @@ _match:
+@@ -1036,13 +1036,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 191 "/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/he.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1239,7 +1239,7 @@ _match:
+@@ -1088,7 +1088,7 @@ _match:
      }
    }
  	break;
--#line 1243 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+ 
+-#line 1092 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++
  		}
  	}
  
-@@ -1256,7 +1256,7 @@ _again:
+@@ -1105,7 +1105,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fi.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1302,7 +1302,7 @@ _again:
+@@ -1151,7 +1151,7 @@ _again:
      }
    }
  	break;
--#line 1306 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
-+ 
+-#line 1155 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
++
  		}
  	}
  	}
-@@ -1310,7 +1310,7 @@ _again:
+@@ -1159,7 +1159,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/he.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_sk/gherkin_lexer_sk.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_sk/gherkin_lexer_sk.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -4990,261 +4709,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_hr/gherkin_lexer_hr.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+ 
+-#line 87 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -750,7 +750,7 @@ static const int lexer_error = 0;
+@@ -725,7 +725,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -906,14 +906,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -890,14 +890,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"
-+ 
+-#line 894 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
      
--#line 917 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+ 
+-#line 901 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -987,7 +987,7 @@ _match:
+@@ -971,7 +971,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -995,20 +995,20 @@ _match:
+@@ -979,20 +979,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/hr.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1018,37 +1018,37 @@ _match:
+@@ -1002,37 +1002,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1057,34 +1057,34 @@ _match:
+@@ -1041,34 +1041,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1092,7 +1092,7 @@ _match:
+@@ -1076,7 +1076,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1101,13 +1101,13 @@ _match:
+@@ -1085,13 +1085,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1115,13 +1115,13 @@ _match:
+@@ -1099,13 +1099,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1136,13 +1136,13 @@ _match:
+@@ -1121,13 +1121,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 191 "/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/hr.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1188,7 +1188,7 @@ _match:
+@@ -1173,7 +1173,7 @@ _match:
      }
    }
  	break;
--#line 1192 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+ 
+-#line 1177 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++
  		}
  	}
  
-@@ -1205,7 +1205,7 @@ _again:
+@@ -1190,7 +1190,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1251,7 +1251,7 @@ _again:
+@@ -1236,7 +1236,7 @@ _again:
      }
    }
  	break;
--#line 1255 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
-+ 
+-#line 1240 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
++
  		}
  	}
  	}
-@@ -1259,7 +1259,7 @@ _again:
+@@ -1244,7 +1244,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hr.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -5252,261 +4970,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_hu/gherkin_lexer_hu.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+ 
+-#line 87 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -801,7 +801,7 @@ static const int lexer_error = 0;
+@@ -1537,7 +1537,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -957,14 +957,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1702,14 +1702,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"
-+ 
+-#line 1706 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
      
--#line 968 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+ 
+-#line 1713 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1038,7 +1038,7 @@ _match:
+@@ -1783,7 +1783,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1046,20 +1046,20 @@ _match:
+@@ -1791,20 +1791,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/hu.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1069,37 +1069,37 @@ _match:
+@@ -1814,37 +1814,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1108,34 +1108,34 @@ _match:
+@@ -1853,34 +1853,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1143,7 +1143,7 @@ _match:
+@@ -1888,7 +1888,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1152,13 +1152,13 @@ _match:
+@@ -1897,13 +1897,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1166,13 +1166,13 @@ _match:
+@@ -1911,13 +1911,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1187,13 +1187,13 @@ _match:
+@@ -1933,13 +1933,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 191 "/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/hu.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1239,7 +1239,7 @@ _match:
+@@ -1985,7 +1985,7 @@ _match:
      }
    }
  	break;
--#line 1243 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+ 
+-#line 1989 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++
  		}
  	}
  
-@@ -1256,7 +1256,7 @@ _again:
+@@ -2002,7 +2002,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1302,7 +1302,7 @@ _again:
+@@ -2048,7 +2048,7 @@ _again:
      }
    }
  	break;
--#line 1306 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
-+ 
+-#line 2052 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
++
  		}
  	}
  	}
-@@ -1310,7 +1310,7 @@ _again:
+@@ -2056,7 +2056,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_fr/gherkin_lexer_fr.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_fr/gherkin_lexer_fr.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -5514,261 +5231,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_id/gherkin_lexer_id.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+ 
+-#line 87 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -630,7 +630,7 @@ static const int lexer_error = 0;
+@@ -878,7 +878,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -786,14 +786,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1043,14 +1043,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"
-+ 
+-#line 1047 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
      
--#line 797 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+ 
+-#line 1054 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -867,7 +867,7 @@ _match:
+@@ -1124,7 +1124,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -875,20 +875,20 @@ _match:
+@@ -1132,20 +1132,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/id.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -898,37 +898,37 @@ _match:
+@@ -1155,37 +1155,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -937,34 +937,34 @@ _match:
+@@ -1194,34 +1194,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -972,7 +972,7 @@ _match:
+@@ -1229,7 +1229,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -981,13 +981,13 @@ _match:
+@@ -1238,13 +1238,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -995,13 +995,13 @@ _match:
+@@ -1252,13 +1252,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1016,13 +1016,13 @@ _match:
+@@ -1274,13 +1274,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 191 "/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/id.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1068,7 +1068,7 @@ _match:
+@@ -1326,7 +1326,7 @@ _match:
      }
    }
  	break;
--#line 1072 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+ 
+-#line 1330 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++
  		}
  	}
  
-@@ -1085,7 +1085,7 @@ _again:
+@@ -1343,7 +1343,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/fr.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1131,7 +1131,7 @@ _again:
+@@ -1389,7 +1389,7 @@ _again:
      }
    }
  	break;
--#line 1135 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
-+ 
+-#line 1393 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
++
  		}
  	}
  	}
-@@ -1139,7 +1139,7 @@ _again:
+@@ -1397,7 +1397,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/id.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_da/gherkin_lexer_da.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_da/gherkin_lexer_da.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -5776,261 +5492,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_it/gherkin_lexer_it.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+ 
+-#line 87 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -759,7 +759,7 @@ static const int lexer_error = 0;
+@@ -725,7 +725,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -915,14 +915,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -890,14 +890,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"
-+ 
+-#line 894 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
      
--#line 926 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+ 
+-#line 901 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -996,7 +996,7 @@ _match:
+@@ -971,7 +971,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1004,20 +1004,20 @@ _match:
+@@ -979,20 +979,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/it.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1027,37 +1027,37 @@ _match:
+@@ -1002,37 +1002,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1066,34 +1066,34 @@ _match:
+@@ -1041,34 +1041,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1101,7 +1101,7 @@ _match:
+@@ -1076,7 +1076,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1110,13 +1110,13 @@ _match:
+@@ -1085,13 +1085,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1124,13 +1124,13 @@ _match:
+@@ -1099,13 +1099,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1145,13 +1145,13 @@ _match:
+@@ -1121,13 +1121,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 191 "/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/it.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1197,7 +1197,7 @@ _match:
+@@ -1173,7 +1173,7 @@ _match:
      }
    }
  	break;
--#line 1201 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+ 
+-#line 1177 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++
  		}
  	}
  
-@@ -1214,7 +1214,7 @@ _again:
+@@ -1190,7 +1190,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/da.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1260,7 +1260,7 @@ _again:
+@@ -1236,7 +1236,7 @@ _again:
      }
    }
  	break;
--#line 1264 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
-+ 
+-#line 1240 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
++
  		}
  	}
  	}
-@@ -1268,7 +1268,7 @@ _again:
+@@ -1244,7 +1244,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_et/gherkin_lexer_et.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_et/gherkin_lexer_et.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -6038,261 +5753,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ja/gherkin_lexer_ja.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+ 
+-#line 87 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1126,7 +1126,7 @@ static const int lexer_error = 0;
+@@ -661,7 +661,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1282,14 +1282,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -826,14 +826,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"
-+ 
+-#line 830 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
      
--#line 1293 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+ 
+-#line 837 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1363,7 +1363,7 @@ _match:
+@@ -907,7 +907,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1371,20 +1371,20 @@ _match:
+@@ -915,20 +915,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/ja.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1394,37 +1394,37 @@ _match:
+@@ -938,37 +938,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1433,34 +1433,34 @@ _match:
+@@ -977,34 +977,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1468,7 +1468,7 @@ _match:
+@@ -1012,7 +1012,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1477,13 +1477,13 @@ _match:
+@@ -1021,13 +1021,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1491,13 +1491,13 @@ _match:
+@@ -1035,13 +1035,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1512,13 +1512,13 @@ _match:
+@@ -1057,13 +1057,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 191 "/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/ja.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1564,7 +1564,7 @@ _match:
+@@ -1109,7 +1109,7 @@ _match:
      }
    }
  	break;
--#line 1568 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+ 
+-#line 1113 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++
  		}
  	}
  
-@@ -1581,7 +1581,7 @@ _again:
+@@ -1126,7 +1126,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/et.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1627,7 +1627,7 @@ _again:
+@@ -1172,7 +1172,7 @@ _again:
      }
    }
  	break;
--#line 1631 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
-+ 
+-#line 1176 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
++
  		}
  	}
  	}
-@@ -1635,7 +1635,7 @@ _again:
+@@ -1180,7 +1180,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_vi/gherkin_lexer_vi.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_vi/gherkin_lexer_vi.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -6300,261 +6014,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ko/gherkin_lexer_ko.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+ 
+-#line 87 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -787,7 +787,7 @@ static const int lexer_error = 0;
+@@ -883,7 +883,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -943,14 +943,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1048,14 +1048,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"
-+ 
+-#line 1052 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
      
--#line 954 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+ 
+-#line 1059 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1024,7 +1024,7 @@ _match:
+@@ -1129,7 +1129,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1032,20 +1032,20 @@ _match:
+@@ -1137,20 +1137,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/ko.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1055,37 +1055,37 @@ _match:
+@@ -1160,37 +1160,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1094,34 +1094,34 @@ _match:
+@@ -1199,34 +1199,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1129,7 +1129,7 @@ _match:
+@@ -1234,7 +1234,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1138,13 +1138,13 @@ _match:
+@@ -1243,13 +1243,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1152,13 +1152,13 @@ _match:
+@@ -1257,13 +1257,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1173,13 +1173,13 @@ _match:
+@@ -1279,13 +1279,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 191 "/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/ko.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1225,7 +1225,7 @@ _match:
+@@ -1331,7 +1331,7 @@ _match:
      }
    }
  	break;
--#line 1229 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+ 
+-#line 1335 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++
  		}
  	}
  
-@@ -1242,7 +1242,7 @@ _again:
+@@ -1348,7 +1348,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1288,7 +1288,7 @@ _again:
+@@ -1394,7 +1394,7 @@ _again:
      }
    }
  	break;
--#line 1292 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
-+ 
+-#line 1398 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
++
  		}
  	}
  	}
-@@ -1296,7 +1296,7 @@ _again:
+@@ -1402,7 +1402,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -6562,261 +6275,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lt/gherkin_lexer_lt.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+ 
+-#line 87 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -722,7 +722,7 @@ static const int lexer_error = 0;
+@@ -1059,7 +1059,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -878,14 +878,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1224,14 +1224,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"
-+ 
+-#line 1228 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
      
--#line 889 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+ 
+-#line 1235 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -959,7 +959,7 @@ _match:
+@@ -1305,7 +1305,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -967,20 +967,20 @@ _match:
+@@ -1313,20 +1313,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/lt.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -990,37 +990,37 @@ _match:
+@@ -1336,37 +1336,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1029,34 +1029,34 @@ _match:
+@@ -1375,34 +1375,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1064,7 +1064,7 @@ _match:
+@@ -1410,7 +1410,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1073,13 +1073,13 @@ _match:
+@@ -1419,13 +1419,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1087,13 +1087,13 @@ _match:
+@@ -1433,13 +1433,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1108,13 +1108,13 @@ _match:
+@@ -1455,13 +1455,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 191 "/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/lt.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1160,7 +1160,7 @@ _match:
+@@ -1507,7 +1507,7 @@ _match:
      }
    }
  	break;
--#line 1164 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+ 
+-#line 1511 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++
  		}
  	}
  
-@@ -1177,7 +1177,7 @@ _again:
+@@ -1524,7 +1524,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1223,7 +1223,7 @@ _again:
+@@ -1570,7 +1570,7 @@ _again:
      }
    }
  	break;
--#line 1227 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
-+ 
+-#line 1574 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
++
  		}
  	}
  	}
-@@ -1231,7 +1231,7 @@ _again:
+@@ -1578,7 +1578,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lt.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_ro/gherkin_lexer_ro.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_ro/gherkin_lexer_ro.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -6824,261 +6536,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lu/gherkin_lexer_lu.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+ 
+-#line 87 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -814,7 +814,7 @@ static const int lexer_error = 0;
+@@ -852,7 +852,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -970,14 +970,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1017,14 +1017,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"
-+ 
+-#line 1021 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
      
--#line 981 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+ 
+-#line 1028 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1051,7 +1051,7 @@ _match:
+@@ -1098,7 +1098,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1059,20 +1059,20 @@ _match:
+@@ -1106,20 +1106,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/lu.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1082,37 +1082,37 @@ _match:
+@@ -1129,37 +1129,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1121,34 +1121,34 @@ _match:
+@@ -1168,34 +1168,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1156,7 +1156,7 @@ _match:
+@@ -1203,7 +1203,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1165,13 +1165,13 @@ _match:
+@@ -1212,13 +1212,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1179,13 +1179,13 @@ _match:
+@@ -1226,13 +1226,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1200,13 +1200,13 @@ _match:
+@@ -1248,13 +1248,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 191 "/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/lu.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1252,7 +1252,7 @@ _match:
+@@ -1300,7 +1300,7 @@ _match:
      }
    }
  	break;
--#line 1256 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+ 
+-#line 1304 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++
  		}
  	}
  
-@@ -1269,7 +1269,7 @@ _again:
+@@ -1317,7 +1317,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1315,7 +1315,7 @@ _again:
+@@ -1363,7 +1363,7 @@ _again:
      }
    }
  	break;
--#line 1319 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
-+ 
+-#line 1367 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
++
  		}
  	}
  	}
-@@ -1323,7 +1323,7 @@ _again:
+@@ -1371,7 +1371,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lu.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_hu/gherkin_lexer_hu.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_hu/gherkin_lexer_hu.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -7086,261 +6797,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_lv/gherkin_lexer_lv.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+ 
+-#line 87 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -852,7 +852,7 @@ static const int lexer_error = 0;
+@@ -801,7 +801,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1008,14 +1008,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -966,14 +966,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"
-+ 
+-#line 970 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
      
--#line 1019 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+ 
+-#line 977 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1089,7 +1089,7 @@ _match:
+@@ -1047,7 +1047,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1097,20 +1097,20 @@ _match:
+@@ -1055,20 +1055,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/lv.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1120,37 +1120,37 @@ _match:
+@@ -1078,37 +1078,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1159,34 +1159,34 @@ _match:
+@@ -1117,34 +1117,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1194,7 +1194,7 @@ _match:
+@@ -1152,7 +1152,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1203,13 +1203,13 @@ _match:
+@@ -1161,13 +1161,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1217,13 +1217,13 @@ _match:
+@@ -1175,13 +1175,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1238,13 +1238,13 @@ _match:
+@@ -1197,13 +1197,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 191 "/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/lv.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1290,7 +1290,7 @@ _match:
+@@ -1249,7 +1249,7 @@ _match:
      }
    }
  	break;
--#line 1294 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+ 
+-#line 1253 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++
  		}
  	}
  
-@@ -1307,7 +1307,7 @@ _again:
+@@ -1266,7 +1266,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/hu.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1353,7 +1353,7 @@ _again:
+@@ -1312,7 +1312,7 @@ _again:
      }
    }
  	break;
--#line 1357 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
-+ 
+-#line 1316 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
++
  		}
  	}
  	}
-@@ -1361,7 +1361,7 @@ _again:
+@@ -1320,7 +1320,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_ja/gherkin_lexer_ja.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_ja/gherkin_lexer_ja.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -7348,261 +7058,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_nl/gherkin_lexer_nl.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+ 
+-#line 87 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -790,7 +790,7 @@ static const int lexer_error = 0;
+@@ -1126,7 +1126,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -946,14 +946,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1291,14 +1291,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"
-+ 
+-#line 1295 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
      
--#line 957 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+ 
+-#line 1302 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1027,7 +1027,7 @@ _match:
+@@ -1372,7 +1372,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1035,20 +1035,20 @@ _match:
+@@ -1380,20 +1380,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/nl.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1058,37 +1058,37 @@ _match:
+@@ -1403,37 +1403,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1097,34 +1097,34 @@ _match:
+@@ -1442,34 +1442,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1132,7 +1132,7 @@ _match:
+@@ -1477,7 +1477,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1141,13 +1141,13 @@ _match:
+@@ -1486,13 +1486,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1155,13 +1155,13 @@ _match:
+@@ -1500,13 +1500,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1176,13 +1176,13 @@ _match:
+@@ -1522,13 +1522,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 191 "/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/nl.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1228,7 +1228,7 @@ _match:
+@@ -1574,7 +1574,7 @@ _match:
      }
    }
  	break;
--#line 1232 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+ 
+-#line 1578 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++
  		}
  	}
  
-@@ -1245,7 +1245,7 @@ _again:
+@@ -1591,7 +1591,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ja.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1291,7 +1291,7 @@ _again:
+@@ -1637,7 +1637,7 @@ _again:
      }
    }
  	break;
--#line 1295 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
-+ 
+-#line 1641 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
++
  		}
  	}
  	}
-@@ -1299,7 +1299,7 @@ _again:
+@@ -1645,7 +1645,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/nl.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -7610,261 +7319,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_no/gherkin_lexer_no.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+ 
+-#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, 
-@@ -738,7 +738,7 @@ static const int lexer_error = 0;
+@@ -650,7 +650,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -894,14 +894,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -815,14 +815,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"
-+ 
+-#line 819 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
      
--#line 905 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+ 
+-#line 826 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -975,7 +975,7 @@ _match:
+@@ -896,7 +896,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -983,20 +983,20 @@ _match:
+@@ -904,20 +904,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/no.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1006,37 +1006,37 @@ _match:
+@@ -927,37 +927,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1045,34 +1045,34 @@ _match:
+@@ -966,34 +966,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1080,7 +1080,7 @@ _match:
+@@ -1001,7 +1001,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1089,13 +1089,13 @@ _match:
+@@ -1010,13 +1010,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1103,13 +1103,13 @@ _match:
+@@ -1024,13 +1024,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1124,13 +1124,13 @@ _match:
+@@ -1046,13 +1046,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 191 "/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/no.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1176,7 +1176,7 @@ _match:
+@@ -1098,7 +1098,7 @@ _match:
      }
    }
  	break;
--#line 1180 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+ 
+-#line 1102 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++
  		}
  	}
  
-@@ -1193,7 +1193,7 @@ _again:
+@@ -1115,7 +1115,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_au.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1239,7 +1239,7 @@ _again:
+@@ -1161,7 +1161,7 @@ _again:
      }
    }
  	break;
--#line 1243 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
-+ 
+-#line 1165 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
++
  		}
  	}
  	}
-@@ -1247,7 +1247,7 @@ _again:
+@@ -1169,7 +1169,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_ca/gherkin_lexer_ca.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_ca/gherkin_lexer_ca.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -7872,261 +7580,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_pl/gherkin_lexer_pl.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+ 
+-#line 87 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -904,7 +904,7 @@ static const int lexer_error = 0;
+@@ -1008,7 +1008,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1060,14 +1060,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1173,14 +1173,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"
-+ 
+-#line 1177 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
      
--#line 1071 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+ 
+-#line 1184 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1141,7 +1141,7 @@ _match:
+@@ -1254,7 +1254,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1149,20 +1149,20 @@ _match:
+@@ -1262,20 +1262,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/pl.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1172,37 +1172,37 @@ _match:
+@@ -1285,37 +1285,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1211,34 +1211,34 @@ _match:
+@@ -1324,34 +1324,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1246,7 +1246,7 @@ _match:
+@@ -1359,7 +1359,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1255,13 +1255,13 @@ _match:
+@@ -1368,13 +1368,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1269,13 +1269,13 @@ _match:
+@@ -1382,13 +1382,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1290,13 +1290,13 @@ _match:
+@@ -1404,13 +1404,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 191 "/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/pl.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1342,7 +1342,7 @@ _match:
+@@ -1456,7 +1456,7 @@ _match:
      }
    }
  	break;
--#line 1346 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+ 
+-#line 1460 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++
  		}
  	}
  
-@@ -1359,7 +1359,7 @@ _again:
+@@ -1473,7 +1473,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ca.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1405,7 +1405,7 @@ _again:
+@@ -1519,7 +1519,7 @@ _again:
      }
    }
  	break;
--#line 1409 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
-+ 
+-#line 1523 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
++
  		}
  	}
  	}
-@@ -1413,7 +1413,7 @@ _again:
+@@ -1527,7 +1527,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_uk/gherkin_lexer_uk.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_uk/gherkin_lexer_uk.c	2011-07-12 21:56:49.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -8134,261 +7841,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_pt/gherkin_lexer_pt.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+ 
+-#line 87 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -754,7 +754,7 @@ static const int lexer_error = 0;
+@@ -1368,7 +1368,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -910,14 +910,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1533,14 +1533,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"
-+ 
+-#line 1537 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
      
--#line 921 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+ 
+-#line 1544 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -991,7 +991,7 @@ _match:
+@@ -1614,7 +1614,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -999,20 +999,20 @@ _match:
+@@ -1622,20 +1622,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/pt.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1022,37 +1022,37 @@ _match:
+@@ -1645,37 +1645,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1061,34 +1061,34 @@ _match:
+@@ -1684,34 +1684,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1096,7 +1096,7 @@ _match:
+@@ -1719,7 +1719,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1105,13 +1105,13 @@ _match:
+@@ -1728,13 +1728,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1119,13 +1119,13 @@ _match:
+@@ -1742,13 +1742,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1140,13 +1140,13 @@ _match:
+@@ -1764,13 +1764,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 191 "/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/pt.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1192,7 +1192,7 @@ _match:
+@@ -1816,7 +1816,7 @@ _match:
      }
    }
  	break;
--#line 1196 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+ 
+-#line 1820 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++
  		}
  	}
  
-@@ -1209,7 +1209,7 @@ _again:
+@@ -1833,7 +1833,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1255,7 +1255,7 @@ _again:
+@@ -1879,7 +1879,7 @@ _again:
      }
    }
  	break;
--#line 1259 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
-+ 
+-#line 1883 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
++
  		}
  	}
  	}
-@@ -1263,7 +1263,7 @@ _again:
+@@ -1887,7 +1887,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pt.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_it/gherkin_lexer_it.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_it/gherkin_lexer_it.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -8396,261 +8102,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ro/gherkin_lexer_ro.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+ 
+-#line 87 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -751,7 +751,7 @@ static const int lexer_error = 0;
+@@ -759,7 +759,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -907,14 +907,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -924,14 +924,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"
-+ 
+-#line 928 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
      
--#line 918 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+ 
+-#line 935 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -988,7 +988,7 @@ _match:
+@@ -1005,7 +1005,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -996,20 +996,20 @@ _match:
+@@ -1013,20 +1013,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/ro.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1019,37 +1019,37 @@ _match:
+@@ -1036,37 +1036,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1058,34 +1058,34 @@ _match:
+@@ -1075,34 +1075,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1093,7 +1093,7 @@ _match:
+@@ -1110,7 +1110,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1102,13 +1102,13 @@ _match:
+@@ -1119,13 +1119,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1116,13 +1116,13 @@ _match:
+@@ -1133,13 +1133,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1137,13 +1137,13 @@ _match:
+@@ -1155,13 +1155,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 191 "/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/ro.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1189,7 +1189,7 @@ _match:
+@@ -1207,7 +1207,7 @@ _match:
      }
    }
  	break;
--#line 1193 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+ 
+-#line 1211 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++
  		}
  	}
  
-@@ -1206,7 +1206,7 @@ _again:
+@@ -1224,7 +1224,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/it.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1252,7 +1252,7 @@ _again:
+@@ -1270,7 +1270,7 @@ _again:
      }
    }
  	break;
--#line 1256 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
-+ 
+-#line 1274 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
++
  		}
  	}
  	}
-@@ -1260,7 +1260,7 @@ _again:
+@@ -1278,7 +1278,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_tr/gherkin_lexer_tr.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_tr/gherkin_lexer_tr.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -8658,261 +8363,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c gherk
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
-+ 
+-#line 87 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -795,7 +795,7 @@ static const int lexer_error = 0;
+@@ -767,7 +767,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -951,14 +951,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -932,14 +932,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"
-+ 
+-#line 936 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
      
--#line 962 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
-+ 
+-#line 943 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1032,7 +1032,7 @@ _match:
+@@ -1013,7 +1013,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1040,20 +1040,20 @@ _match:
+@@ -1021,20 +1021,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1063,37 +1063,37 @@ _match:
+@@ -1044,37 +1044,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1102,34 +1102,34 @@ _match:
+@@ -1083,34 +1083,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1137,7 +1137,7 @@ _match:
+@@ -1118,7 +1118,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1146,13 +1146,13 @@ _match:
+@@ -1127,13 +1127,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1160,13 +1160,13 @@ _match:
+@@ -1141,13 +1141,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1181,13 +1181,13 @@ _match:
+@@ -1163,13 +1163,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 191 "/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/ro_ro.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1233,7 +1233,7 @@ _match:
+@@ -1215,7 +1215,7 @@ _match:
      }
    }
  	break;
--#line 1237 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
-+ 
+-#line 1219 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++
  		}
  	}
  
-@@ -1250,7 +1250,7 @@ _again:
+@@ -1232,7 +1232,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1296,7 +1296,7 @@ _again:
+@@ -1278,7 +1278,7 @@ _again:
      }
    }
  	break;
--#line 1300 "ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c"
-+ 
+-#line 1282 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
++
  		}
  	}
  	}
-@@ -1304,7 +1304,7 @@ _again:
+@@ -1286,7 +1286,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ro_ro.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -8920,261 +8624,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_ru/gherkin_lexer_ru.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+ 
+-#line 87 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1355,7 +1355,7 @@ static const int lexer_error = 0;
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1511,14 +1511,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -857,14 +857,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"
-+ 
+-#line 861 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
      
--#line 1522 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+ 
+-#line 868 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1592,7 +1592,7 @@ _match:
+@@ -938,7 +938,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1600,20 +1600,20 @@ _match:
+@@ -946,20 +946,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      lexer->current_line = lexer->line_number;
      lexer->start_col = p - data - lexer->last_newline;
    }
  	break;
  	case 3:
--#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1623,37 +1623,37 @@ _match:
+@@ -969,37 +969,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1662,34 +1662,34 @@ _match:
+@@ -1008,34 +1008,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1697,7 +1697,7 @@ _match:
+@@ -1043,7 +1043,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1706,13 +1706,13 @@ _match:
+@@ -1052,13 +1052,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1720,13 +1720,13 @@ _match:
+@@ -1066,13 +1066,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1741,13 +1741,13 @@ _match:
+@@ -1088,13 +1088,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 191 "/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/ru.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1793,7 +1793,7 @@ _match:
+@@ -1140,7 +1140,7 @@ _match:
      }
    }
  	break;
--#line 1797 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+ 
+-#line 1144 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++
  		}
  	}
  
-@@ -1810,7 +1810,7 @@ _again:
+@@ -1157,7 +1157,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1856,7 +1856,7 @@ _again:
+@@ -1203,7 +1203,7 @@ _again:
      }
    }
  	break;
--#line 1860 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
-+ 
+-#line 1207 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
++
  		}
  	}
  	}
-@@ -1864,7 +1864,7 @@ _again:
+@@ -1211,7 +1211,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ru.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -9182,261 +8885,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sk/gherkin_lexer_sk.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+ 
+-#line 87 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -725,7 +725,7 @@ static const int lexer_error = 0;
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -881,14 +881,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -857,14 +857,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"
-+ 
+-#line 861 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
      
--#line 892 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+ 
+-#line 868 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -962,7 +962,7 @@ _match:
+@@ -938,7 +938,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -970,20 +970,20 @@ _match:
+@@ -946,20 +946,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/sk.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -993,37 +993,37 @@ _match:
+@@ -969,37 +969,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1032,34 +1032,34 @@ _match:
+@@ -1008,34 +1008,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1067,7 +1067,7 @@ _match:
+@@ -1043,7 +1043,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1076,13 +1076,13 @@ _match:
+@@ -1052,13 +1052,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1090,13 +1090,13 @@ _match:
+@@ -1066,13 +1066,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1111,13 +1111,13 @@ _match:
+@@ -1088,13 +1088,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 191 "/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/sk.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1163,7 +1163,7 @@ _match:
+@@ -1140,7 +1140,7 @@ _match:
      }
    }
  	break;
--#line 1167 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+ 
+-#line 1144 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++
  		}
  	}
  
-@@ -1180,7 +1180,7 @@ _again:
+@@ -1157,7 +1157,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1226,7 +1226,7 @@ _again:
+@@ -1203,7 +1203,7 @@ _again:
      }
    }
  	break;
--#line 1230 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
-+ 
+-#line 1207 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
++
  		}
  	}
  	}
-@@ -1234,7 +1234,7 @@ _again:
+@@ -1211,7 +1211,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sk.c.rl"
-+ 
+-#line 411 "/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 -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
+--- gherkin-2.4.5/ext/gherkin_lexer_en/gherkin_lexer_en.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_en/gherkin_lexer_en.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -9444,261 +9146,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c g
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+ 
+-#line 87 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1537,7 +1537,7 @@ static const int lexer_error = 0;
+@@ -692,7 +692,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1693,14 +1693,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -857,14 +857,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"
-+ 
+-#line 861 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
      
--#line 1704 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+ 
+-#line 868 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1774,7 +1774,7 @@ _match:
+@@ -938,7 +938,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1782,20 +1782,20 @@ _match:
+@@ -946,20 +946,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/sr_cyrl.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1805,37 +1805,37 @@ _match:
+@@ -969,37 +969,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1844,34 +1844,34 @@ _match:
+@@ -1008,34 +1008,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1879,7 +1879,7 @@ _match:
+@@ -1043,7 +1043,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1888,13 +1888,13 @@ _match:
+@@ -1052,13 +1052,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1902,13 +1902,13 @@ _match:
+@@ -1066,13 +1066,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1923,13 +1923,13 @@ _match:
+@@ -1088,13 +1088,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 191 "/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/sr_cyrl.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1975,7 +1975,7 @@ _match:
+@@ -1140,7 +1140,7 @@ _match:
      }
    }
  	break;
--#line 1979 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+ 
+-#line 1144 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++
  		}
  	}
  
-@@ -1992,7 +1992,7 @@ _again:
+@@ -1157,7 +1157,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -2038,7 +2038,7 @@ _again:
+@@ -1203,7 +1203,7 @@ _again:
      }
    }
  	break;
--#line 2042 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
-+ 
+-#line 1207 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
++
  		}
  	}
  	}
-@@ -2046,7 +2046,7 @@ _again:
+@@ -1211,7 +1211,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_uz/gherkin_lexer_uz.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_uz/gherkin_lexer_uz.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -9706,261 +9407,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c g
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+ 
+-#line 87 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -994,7 +994,7 @@ static const int lexer_error = 0;
+@@ -1078,7 +1078,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1150,14 +1150,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1243,14 +1243,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"
-+ 
+-#line 1247 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
      
--#line 1161 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+ 
+-#line 1254 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1231,7 +1231,7 @@ _match:
+@@ -1324,7 +1324,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1239,20 +1239,20 @@ _match:
+@@ -1332,20 +1332,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/sr_latn.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1262,37 +1262,37 @@ _match:
+@@ -1355,37 +1355,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1301,34 +1301,34 @@ _match:
+@@ -1394,34 +1394,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1336,7 +1336,7 @@ _match:
+@@ -1429,7 +1429,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1345,13 +1345,13 @@ _match:
+@@ -1438,13 +1438,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1359,13 +1359,13 @@ _match:
+@@ -1452,13 +1452,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1380,13 +1380,13 @@ _match:
+@@ -1474,13 +1474,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 191 "/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/sr_latn.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1432,7 +1432,7 @@ _match:
+@@ -1526,7 +1526,7 @@ _match:
      }
    }
  	break;
--#line 1436 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+ 
+-#line 1530 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++
  		}
  	}
  
-@@ -1449,7 +1449,7 @@ _again:
+@@ -1543,7 +1543,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1495,7 +1495,7 @@ _again:
+@@ -1589,7 +1589,7 @@ _again:
      }
    }
  	break;
--#line 1499 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
-+ 
+-#line 1593 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
++
  		}
  	}
  	}
-@@ -1503,7 +1503,7 @@ _again:
+@@ -1597,7 +1597,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_no/gherkin_lexer_no.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_no/gherkin_lexer_no.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -9968,261 +9668,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_sv/gherkin_lexer_sv.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+ 
+-#line 87 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -749,7 +749,7 @@ static const int lexer_error = 0;
+@@ -738,7 +738,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -905,14 +905,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -903,14 +903,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"
-+ 
+-#line 907 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
      
--#line 916 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+ 
+-#line 914 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -986,7 +986,7 @@ _match:
+@@ -984,7 +984,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -994,20 +994,20 @@ _match:
+@@ -992,20 +992,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/sv.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1017,37 +1017,37 @@ _match:
+@@ -1015,37 +1015,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1056,34 +1056,34 @@ _match:
+@@ -1054,34 +1054,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1091,7 +1091,7 @@ _match:
+@@ -1089,7 +1089,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1100,13 +1100,13 @@ _match:
+@@ -1098,13 +1098,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1114,13 +1114,13 @@ _match:
+@@ -1112,13 +1112,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1135,13 +1135,13 @@ _match:
+@@ -1134,13 +1134,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 191 "/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/sv.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1187,7 +1187,7 @@ _match:
+@@ -1186,7 +1186,7 @@ _match:
      }
    }
  	break;
--#line 1191 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+ 
+-#line 1190 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++
  		}
  	}
  
-@@ -1204,7 +1204,7 @@ _again:
+@@ -1203,7 +1203,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/no.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1250,7 +1250,7 @@ _again:
+@@ -1249,7 +1249,7 @@ _again:
      }
    }
  	break;
--#line 1254 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
-+ 
+-#line 1253 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
++
  		}
  	}
  	}
-@@ -1258,7 +1258,7 @@ _again:
+@@ -1257,7 +1257,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/sv.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_lv/gherkin_lexer_lv.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_lv/gherkin_lexer_lv.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -10230,261 +9929,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_tr/gherkin_lexer_tr.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+ 
+-#line 87 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -767,7 +767,7 @@ static const int lexer_error = 0;
+@@ -852,7 +852,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -923,14 +923,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1017,14 +1017,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"
-+ 
+-#line 1021 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
      
--#line 934 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+ 
+-#line 1028 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1004,7 +1004,7 @@ _match:
+@@ -1098,7 +1098,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1012,20 +1012,20 @@ _match:
+@@ -1106,20 +1106,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/tr.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1035,37 +1035,37 @@ _match:
+@@ -1129,37 +1129,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1074,34 +1074,34 @@ _match:
+@@ -1168,34 +1168,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1109,7 +1109,7 @@ _match:
+@@ -1203,7 +1203,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1118,13 +1118,13 @@ _match:
+@@ -1212,13 +1212,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1132,13 +1132,13 @@ _match:
+@@ -1226,13 +1226,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1153,13 +1153,13 @@ _match:
+@@ -1248,13 +1248,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 191 "/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/tr.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1205,7 +1205,7 @@ _match:
+@@ -1300,7 +1300,7 @@ _match:
      }
    }
  	break;
--#line 1209 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+ 
+-#line 1304 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++
  		}
  	}
  
-@@ -1222,7 +1222,7 @@ _again:
+@@ -1317,7 +1317,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/lv.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1268,7 +1268,7 @@ _again:
+@@ -1363,7 +1363,7 @@ _again:
      }
    }
  	break;
--#line 1272 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
-+ 
+-#line 1367 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
++
  		}
  	}
  	}
-@@ -1276,7 +1276,7 @@ _again:
+@@ -1371,7 +1371,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/tr.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_es/gherkin_lexer_es.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_es/gherkin_lexer_es.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -10492,261 +10190,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_uk/gherkin_lexer_uk.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+ 
+-#line 87 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1368,7 +1368,7 @@ static const int lexer_error = 0;
+@@ -805,7 +805,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1524,14 +1524,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -970,14 +970,14 @@ static VALUE CLexer_scan(VALUE self, VAL
      assert(*pe == '\0' && "pointer does not end on NULL");
      
      
--#line 1528 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+ 
+-#line 974 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
      
--#line 1535 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+ 
+-#line 981 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1605,7 +1605,7 @@ _match:
+@@ -1051,7 +1051,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1613,20 +1613,20 @@ _match:
+@@ -1059,20 +1059,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/uk.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1636,37 +1636,37 @@ _match:
+@@ -1082,37 +1082,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1675,34 +1675,34 @@ _match:
+@@ -1121,34 +1121,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1710,7 +1710,7 @@ _match:
+@@ -1156,7 +1156,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1719,13 +1719,13 @@ _match:
+@@ -1165,13 +1165,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1733,13 +1733,13 @@ _match:
+@@ -1179,13 +1179,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1754,13 +1754,13 @@ _match:
+@@ -1201,13 +1201,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 191 "/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/uk.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1806,7 +1806,7 @@ _match:
+@@ -1253,7 +1253,7 @@ _match:
      }
    }
  	break;
--#line 1810 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+ 
+-#line 1257 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++
  		}
  	}
  
-@@ -1823,7 +1823,7 @@ _again:
+@@ -1270,7 +1270,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/es.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1869,7 +1869,7 @@ _again:
+@@ -1316,7 +1316,7 @@ _again:
      }
    }
  	break;
--#line 1873 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
-+ 
+-#line 1320 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
++
  		}
  	}
  	}
-@@ -1877,7 +1877,7 @@ _again:
+@@ -1324,7 +1324,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uk.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_ko/gherkin_lexer_ko.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_ko/gherkin_lexer_ko.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -10754,261 +10451,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_uz/gherkin_lexer_uz.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+ 
+-#line 87 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -1078,7 +1078,7 @@ static const int lexer_error = 0;
+@@ -787,7 +787,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1234,14 +1234,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -952,14 +952,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"
-+ 
+-#line 956 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
      
--#line 1245 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+ 
+-#line 963 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1315,7 +1315,7 @@ _match:
+@@ -1033,7 +1033,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1323,20 +1323,20 @@ _match:
+@@ -1041,20 +1041,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/uz.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1346,37 +1346,37 @@ _match:
+@@ -1064,37 +1064,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1385,34 +1385,34 @@ _match:
+@@ -1103,34 +1103,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1420,7 +1420,7 @@ _match:
+@@ -1138,7 +1138,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1429,13 +1429,13 @@ _match:
+@@ -1147,13 +1147,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1443,13 +1443,13 @@ _match:
+@@ -1161,13 +1161,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1464,13 +1464,13 @@ _match:
+@@ -1183,13 +1183,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 191 "/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/uz.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1516,7 +1516,7 @@ _match:
+@@ -1235,7 +1235,7 @@ _match:
      }
    }
  	break;
--#line 1520 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+ 
+-#line 1239 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++
  		}
  	}
  
-@@ -1533,7 +1533,7 @@ _again:
+@@ -1252,7 +1252,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ko.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1579,7 +1579,7 @@ _again:
+@@ -1298,7 +1298,7 @@ _again:
      }
    }
  	break;
--#line 1583 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
-+ 
+-#line 1302 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
++
  		}
  	}
  	}
-@@ -1587,7 +1587,7 @@ _again:
+@@ -1306,7 +1306,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/uz.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_pl/gherkin_lexer_pl.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_pl/gherkin_lexer_pl.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -11016,261 +10712,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_vi/gherkin_lexer_vi.c gherkin-2.3
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+ 
+-#line 87 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -883,7 +883,7 @@ static const int lexer_error = 0;
+@@ -904,7 +904,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -1039,14 +1039,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1069,14 +1069,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"
-+ 
+-#line 1073 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
      
--#line 1050 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+ 
+-#line 1080 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -1120,7 +1120,7 @@ _match:
+@@ -1150,7 +1150,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -1128,20 +1128,20 @@ _match:
+@@ -1158,20 +1158,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/vi.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -1151,37 +1151,37 @@ _match:
+@@ -1181,37 +1181,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -1190,34 +1190,34 @@ _match:
+@@ -1220,34 +1220,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1225,7 +1225,7 @@ _match:
+@@ -1255,7 +1255,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1234,13 +1234,13 @@ _match:
+@@ -1264,13 +1264,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1248,13 +1248,13 @@ _match:
+@@ -1278,13 +1278,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1269,13 +1269,13 @@ _match:
+@@ -1300,13 +1300,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 191 "/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/vi.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1321,7 +1321,7 @@ _match:
+@@ -1352,7 +1352,7 @@ _match:
      }
    }
  	break;
--#line 1325 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+ 
+-#line 1356 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++
  		}
  	}
  
-@@ -1338,7 +1338,7 @@ _again:
+@@ -1369,7 +1369,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/pl.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1384,7 +1384,7 @@ _again:
+@@ -1415,7 +1415,7 @@ _again:
      }
    }
  	break;
--#line 1388 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
-+ 
+-#line 1419 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
++
  		}
  	}
  	}
-@@ -1392,7 +1392,7 @@ _again:
+@@ -1423,7 +1423,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/vi.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_ar/gherkin_lexer_ar.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_ar/gherkin_lexer_ar.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -11278,261 +10973,260 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c gherk
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+ 
+-#line 87 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -650,7 +650,7 @@ static const int lexer_error = 0;
+@@ -856,7 +856,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -806,14 +806,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -1021,14 +1021,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"
-+ 
+-#line 1025 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
      
--#line 817 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+ 
+-#line 1032 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -887,7 +887,7 @@ _match:
+@@ -1102,7 +1102,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -895,20 +895,20 @@ _match:
+@@ -1110,20 +1110,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/zh_cn.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -918,37 +918,37 @@ _match:
+@@ -1133,37 +1133,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -957,34 +957,34 @@ _match:
+@@ -1172,34 +1172,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -992,7 +992,7 @@ _match:
+@@ -1207,7 +1207,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1001,13 +1001,13 @@ _match:
+@@ -1216,13 +1216,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1015,13 +1015,13 @@ _match:
+@@ -1230,13 +1230,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1036,13 +1036,13 @@ _match:
+@@ -1252,13 +1252,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 191 "/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/zh_cn.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1088,7 +1088,7 @@ _match:
+@@ -1304,7 +1304,7 @@ _match:
      }
    }
  	break;
--#line 1092 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+ 
+-#line 1308 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++
  		}
  	}
  
-@@ -1105,7 +1105,7 @@ _again:
+@@ -1321,7 +1321,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/ar.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1151,7 +1151,7 @@ _again:
+@@ -1367,7 +1367,7 @@ _again:
      }
    }
  	break;
--#line 1155 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
-+ 
+-#line 1371 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
++
  		}
  	}
  	}
-@@ -1159,7 +1159,7 @@ _again:
+@@ -1375,7 +1375,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-+ 
+-#line 411 "/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_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
+--- gherkin-2.4.5/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c.orig	2011-07-12 21:56:17.000000000 -0400
++++ gherkin-2.4.5/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c	2011-07-12 21:56:50.000000000 -0400
 @@ -1,5 +1,5 @@
  
--#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  #include <assert.h>
  #include <ruby.h>
  
@@ -11540,251 +11234,251 @@ diff -urp gherkin-2.3.3.orig/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c gherk
        lexer->line_number)
  
  
--#line 241 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 242 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  
  
  /** Data **/
  
--#line 87 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+ 
+-#line 87 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++
  static const char _lexer_actions[] = {
  	0, 1, 0, 1, 1, 1, 2, 1, 
  	3, 1, 4, 1, 5, 1, 6, 1, 
-@@ -692,7 +692,7 @@ static const int lexer_error = 0;
+@@ -709,7 +709,7 @@ static const int lexer_error = 0;
  static const int lexer_en_main = 1;
  
  
--#line 245 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 246 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  
  static VALUE 
  unindent(VALUE con, int start_col)
-@@ -848,14 +848,14 @@ static VALUE CLexer_scan(VALUE self, VAL
+@@ -874,14 +874,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"
-+ 
+-#line 878 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++
  	{
  	cs = lexer_start;
  	}
  
--#line 400 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 410 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
      
--#line 859 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+ 
+-#line 885 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++
  	{
  	int _klen;
  	unsigned int _trans;
-@@ -929,7 +929,7 @@ _match:
+@@ -955,7 +955,7 @@ _match:
  		switch ( *_acts++ )
  		{
  	case 0:
--#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 81 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
  		MARK(content_start, p);
      lexer->current_line = lexer->line_number;
-@@ -937,20 +937,20 @@ _match:
+@@ -963,20 +963,20 @@ _match:
    }
  	break;
  	case 1:
--#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      MARK(content_start, p);
    }
  	break;
  	case 2:
--#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 91 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/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/zh_tw.c.rl"
-+ 
+-#line 96 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      int len = LEN(content_start, PTR_TO(final_newline));
  
-@@ -960,37 +960,37 @@ _match:
+@@ -986,37 +986,37 @@ _match:
    }
  	break;
  	case 4:
--#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 104 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_KW_END_CON(feature);
    }
  	break;
  	case 5:
--#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 108 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_KW_END_CON(background);
    }
  	break;
  	case 6:
--#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 112 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_KW_END_CON(scenario);
    }
  	break;
  	case 7:
--#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 116 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_KW_END_CON(scenario_outline);
    }
  	break;
  	case 8:
--#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_KW_END_CON(examples);
    }
  	break;
  	case 9:
--#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 124 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      store_kw_con(listener, "step",
        PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-@@ -999,34 +999,34 @@ _match:
+@@ -1025,34 +1025,34 @@ _match:
    }
  	break;
  	case 10:
--#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 131 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_ATTR(comment);
      lexer->mark = 0;
    }
  	break;
  	case 11:
--#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 136 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      STORE_ATTR(tag);
      lexer->mark = 0;
    }
  	break;
  	case 12:
--#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 141 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      lexer->line_number += 1;
      MARK(final_newline, p);
    }
  	break;
  	case 13:
--#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 146 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      MARK(last_newline, p + 1);
    }
  	break;
  	case 14:
--#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 150 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      if (lexer->mark == 0) {
        MARK(mark, p);
-@@ -1034,7 +1034,7 @@ _match:
+@@ -1060,7 +1060,7 @@ _match:
    }
  	break;
  	case 15:
--#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 156 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      MARK(keyword_end, p);
      MARK(keyword_start, PTR_TO(mark));
-@@ -1043,13 +1043,13 @@ _match:
+@@ -1069,13 +1069,13 @@ _match:
    }
  	break;
  	case 16:
--#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 163 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      MARK(content_end, p);
    }
  	break;
  	case 17:
--#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 167 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
      p = p - 1;
      lexer->current_line = lexer->line_number;
-@@ -1057,13 +1057,13 @@ _match:
+@@ -1083,13 +1083,13 @@ _match:
    }
  	break;
  	case 18:
--#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 173 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
  		MARK(content_start, p);
    }
  	break;
  	case 19:
--#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 177 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
+     VALUE re_pipe, re_newline, re_backslash;
      VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-@@ -1078,13 +1078,13 @@ _match:
+@@ -1105,13 +1105,13 @@ _match:
    }
  	break;
  	case 20:
--#line 190 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 191 "/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/zh_tw.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1130,7 +1130,7 @@ _match:
+@@ -1157,7 +1157,7 @@ _match:
      }
    }
  	break;
--#line 1134 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+ 
+-#line 1161 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++
  		}
  	}
  
-@@ -1147,7 +1147,7 @@ _again:
+@@ -1174,7 +1174,7 @@ _again:
  	while ( __nacts-- > 0 ) {
  		switch ( *__acts++ ) {
  	case 21:
--#line 194 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 195 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
++
  	{
+     int line;
      if (cs < lexer_first_final) {
-       if (raise_lexer_error != NULL) {
-@@ -1193,7 +1193,7 @@ _again:
+@@ -1220,7 +1220,7 @@ _again:
      }
    }
  	break;
--#line 1197 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
-+ 
+-#line 1224 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
++
  		}
  	}
  	}
-@@ -1201,7 +1201,7 @@ _again:
+@@ -1228,7 +1228,7 @@ _again:
  	_out: {}
  	}
  
--#line 401 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-+ 
+-#line 411 "/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 --git a/rubygem-gherkin.spec b/rubygem-gherkin.spec
index c554404..23b80f2 100644
--- a/rubygem-gherkin.spec
+++ b/rubygem-gherkin.spec
@@ -6,17 +6,21 @@
 
 Summary: Fast Gherkin lexer/parser
 Name: rubygem-%{gemname}
-Version: 2.3.3
-Release: 3%{?dist}
+Version: 2.4.5
+Release: 1%{?dist}
 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
-Patch3: gherkin-2.3.3-fix-gemspec.patch
-Patch4: gherkin-2.3.3-require-json-1.4.3.patch
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+# generated by running:
+# ruby -rfileutils Dir.glob("gherkin/gherkin-2.4.5/ext/gherkin_lexer_*/").each { |d| Dir.glob("#{d}*.c"){ |f| FileUtils.cp(f,  d + f.split('/').last + ".orig" ) }}
+# find ./gherkin/gherkin-2.4.5/ext/ -name *.c -exec sed -i 's/#line.*//g' {} \; 
+# ruby -rfileutils Dir.glob('gherkin/gherkin-2.4.5/ext/*/*.c').each { |f| puts `diff -sup #{f}.orig #{f}` }
+Patch1: gherkin-2.4.5-remove-hash-line.patch
+
+Patch2: gherkin-2.4.5-fix-gemspec.patch
+
 Requires: ruby(abi) = %{rubyabi}
 Requires: rubygems
 Requires: rubygem(json)
@@ -43,8 +47,6 @@ gem unpack %{SOURCE0}
 cd %{gemname}-%{version}
 %patch1 -p1
 %patch2 -p1
-%patch3 -p1
-%patch4 -p1
 
 %build
 pushd %{_builddir}/%{name}-%{version}/%{gemname}-%{version}
@@ -61,15 +63,13 @@ rdoc -o rdoc
 rdoc --ri -o ri
 
 %install
-rm -rf %{buildroot}
 mkdir -p %{buildroot}%{geminstdir}
 mkdir -p %{buildroot}%{gemdir}/cache
 mkdir -p %{buildroot}%{gemdir}/specifications
 mkdir -p %{buildroot}%{ruby_sitearch}
 mkdir -p %{buildroot}%{gemdir}/doc/%{gemname}-%{version}
 
-for file in Gemfile History.txt LICENSE README.rdoc VERSION \
-    build_native_gems.sh cucumber.yml gherkin.gemspec; do
+for file in Gemfile LICENSE build_native_gems.sh cucumber.yml gherkin.gemspec; do
     cp %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/$file %{buildroot}%{geminstdir}
 done
 
@@ -95,9 +95,6 @@ cp -a %{_builddir}/%{name}-%{version}/%{gemname}-%{version}/ri %{buildroot}%{gem
 # clean out any gitignore
 find %{buildroot} -iname '.gitignore' -exec rm -f {} \;
 
-%clean
-rm -rf %{buildroot}
-
 %files
 %defattr(-, root, root, -)
 %dir %{geminstdir}
@@ -108,10 +105,7 @@ rm -rf %{buildroot}
 %doc %{geminstdir}/features
 %doc %{geminstdir}/spec
 %doc %{geminstdir}/LICENSE
-%doc %{geminstdir}/README.rdoc
-%doc %{geminstdir}/History.txt
 %doc %{geminstdir}/cucumber.yml
-%doc %{geminstdir}/VERSION
 %doc %{geminstdir}/Gemfile
 %{geminstdir}/%{gemname}.gemspec
 %{gemdir}/cache/%{gemname}-%{version}.gem
@@ -125,6 +119,9 @@ rm -rf %{buildroot}
 %{gemdir}/doc/%{gemname}-%{version}
 
 %changelog
+* Tue Jul 12 2011 Mo Morsi <mmorsi at redhat.com> - 2.4.5-1
+- Update to latest upstream release
+
 * Tue Jun 08 2011 Chris Lalancette <clalance at redhat.com> - 2.3.3-3
 - Significantly revamped spec to conform more to fedora standards
 - Fix build on Rawhide
diff --git a/sources b/sources
index add52e4..5c805b5 100644
--- a/sources
+++ b/sources
@@ -1,3 +1 @@
-8d21ab3f6a2ee70b23adafb44d0323bd  gherkin-2.2.0.gem
-b93d361f7c6f9ae4a0179f17e543da0b  gherkin-2.2.4.gem
-ff6ea551cd8d98b7f5ae9964c8f8a58b  gherkin-2.3.3.gem
+11c2ac26de3e10a88ddd0ece85d0cc0f  gherkin-2.4.5.gem


More information about the scm-commits mailing list