[liblingua-stem-snowball-perl] 12/19: new upstream release

dom at earth.li dom at earth.li
Sun Apr 24 10:25:24 UTC 2016


This is an automated email from the git hooks/post-receive script.

dom pushed a commit to branch master
in repository liblingua-stem-snowball-perl.

commit 9b6bdfb2e7ff59d26b6dc51d962b45b6a23650fb
Author: Dominic Hargreaves <dom at earth.li>
Date:   Mon Feb 23 16:17:38 2009 +0000

    new upstream release
---
 Build.PL                                           |    9 +-
 Changes                                            |   11 +
 MANIFEST                                           |   26 +-
 META.yml                                           |    7 +-
 README                                             |    7 +-
 bin/generate_tests.plx                             |   63 -
 debian/changelog                                   |    6 +
 debian/rules                                       |    4 +-
 {bin => devel}/benchmark_stemmers.plx              |   22 +-
 devel/generate_tests.plx                           |   93 +
 lib/Lingua/Stem/Snowball.pm                        |   74 +-
 lib/Lingua/Stem/Snowball.xs                        |  237 ++-
 libstemmer_c/MANIFEST                              |   72 +
 libstemmer_c/README                                |   43 +
 libstemmer_c/examples/stemwords.c.disabled         |   44 +-
 libstemmer_c/libstemmer/libstemmer.c               |    5 +-
 .../{libstemmer.c => libstemmer_utf8.c.disabled}   |    7 +-
 libstemmer_c/libstemmer/modules.h                  |   42 +-
 libstemmer_c/libstemmer/modules.txt                |   50 +
 libstemmer_c/libstemmer/modules_utf8.h             |  121 ++
 libstemmer_c/libstemmer/modules_utf8.txt           |   49 +
 libstemmer_c/mkinc.mak                             |  137 +-
 libstemmer_c/mkinc_utf8.mak                        |   52 +
 libstemmer_c/runtime/api.c                         |   17 +-
 libstemmer_c/runtime/api.h                         |    7 +-
 libstemmer_c/runtime/header.h                      |   38 +-
 libstemmer_c/runtime/utilities.c                   |  168 +-
 libstemmer_c/src_c/stem_ISO_8859_1_danish.c        |  247 ++-
 libstemmer_c/src_c/stem_ISO_8859_1_dutch.c         |  365 ++--
 libstemmer_c/src_c/stem_ISO_8859_1_english.c       |  907 ++++----
 libstemmer_c/src_c/stem_ISO_8859_1_finnish.c       |  582 +++---
 libstemmer_c/src_c/stem_ISO_8859_1_french.c        | 1326 ++++++------
 libstemmer_c/src_c/stem_ISO_8859_1_german.c        |  331 ++-
 libstemmer_c/src_c/stem_ISO_8859_1_hungarian.c     | 1230 +++++++++++
 libstemmer_c/src_c/stem_ISO_8859_1_hungarian.h     |   16 +
 libstemmer_c/src_c/stem_ISO_8859_1_italian.c       |  804 ++++---
 libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c     |  223 +-
 libstemmer_c/src_c/stem_ISO_8859_1_porter.c        |  553 +++--
 libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c    |  742 ++++---
 libstemmer_c/src_c/stem_ISO_8859_1_spanish.c       |  808 ++++---
 libstemmer_c/src_c/stem_ISO_8859_1_swedish.c       |  242 +--
 libstemmer_c/src_c/stem_ISO_8859_2_romanian.c      |  998 +++++++++
 libstemmer_c/src_c/stem_ISO_8859_2_romanian.h      |   16 +
 libstemmer_c/src_c/stem_KOI8_R_russian.c           |  489 +++--
 libstemmer_c/src_c/stem_UTF_8_danish.c             |  257 ++-
 libstemmer_c/src_c/stem_UTF_8_dutch.c              |  403 ++--
 libstemmer_c/src_c/stem_UTF_8_english.c            |  937 ++++-----
 libstemmer_c/src_c/stem_UTF_8_finnish.c            |  608 +++---
 libstemmer_c/src_c/stem_UTF_8_french.c             | 1358 ++++++------
 libstemmer_c/src_c/stem_UTF_8_german.c             |  357 ++--
 libstemmer_c/src_c/stem_UTF_8_hungarian.c          | 1234 +++++++++++
 libstemmer_c/src_c/stem_UTF_8_hungarian.h          |   16 +
 libstemmer_c/src_c/stem_UTF_8_italian.c            |  842 ++++----
 libstemmer_c/src_c/stem_UTF_8_norwegian.c          |  233 +--
 libstemmer_c/src_c/stem_UTF_8_porter.c             |  581 +++---
 libstemmer_c/src_c/stem_UTF_8_portuguese.c         |  774 ++++---
 libstemmer_c/src_c/stem_UTF_8_romanian.c           | 1004 +++++++++
 libstemmer_c/src_c/stem_UTF_8_romanian.h           |   16 +
 libstemmer_c/src_c/stem_UTF_8_russian.c            |  491 +++--
 libstemmer_c/src_c/stem_UTF_8_spanish.c            |  834 ++++----
 libstemmer_c/src_c/stem_UTF_8_swedish.c            |  250 ++-
 libstemmer_c/src_c/stem_UTF_8_turkish.c            | 2205 ++++++++++++++++++++
 libstemmer_c/src_c/stem_UTF_8_turkish.h            |   16 +
 ppport.h                                           | 1221 ++++++++---
 t/2-full.t                                         |   65 +-
 t/99-TestPodCoverage.t                             |    4 +-
 t/test_voc/hu.default_enc                          |  100 +
 t/test_voc/hu.utf8                                 |  100 +
 t/test_voc/ro.default_enc                          |  100 +
 t/test_voc/ro.utf8                                 |  100 +
 t/test_voc/tr.utf8                                 |  100 +
 typemap                                            |   23 +
 72 files changed, 16731 insertions(+), 8788 deletions(-)

diff --git a/Build.PL b/Build.PL
index f8707e8..5a9922a 100644
--- a/Build.PL
+++ b/Build.PL
@@ -7,12 +7,15 @@ my $builder = Module::Build->new(
     license           => 'perl',
     dist_author       => 'Marvin Humphrey <marvin at rectangular dot com>',
     dist_version_from => 'lib/Lingua/Stem/Snowball.pm',
-    requires          => { 'Test::More' => 0, },
+    requires          => {
+        'Test::More' => 0,
+        'perl'       => '5.6.2',
+    },
     build_requires => {
         'ExtUtils::CBuilder' => 0,
         'ExtUtils::ParseXS'  => 0,
-        },
-    add_to_cleanup    =>
+    },
+    add_to_cleanup =>
         [ 'Lingua-Stem-Snowball-*', 'MANIFEST.bak', 'Makefile' ],
     create_makefile_pl => 'passthrough',
     c_source           => 'libstemmer_c',
diff --git a/Changes b/Changes
index 1d9282b..7c8a51c 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,14 @@
+v0.952  2008-08-28
+    * Export C symbols via PL_modglobal.
+
+v0.951  2008-08-21
+    * Fix Perl 5.6.2 compatibility.
+    * Specify Perl 5.6.2 as a minimum version.
+
+v0.95   2008-08-17
+    * Add Hungarian, Romanian, and Turkish. 
+    * Export Snowball C symbols via DynaLoader.
+      
 v0.941  2006-08-18
     * Add ExtUtils::CBuilder and ExtUtils::ParseXS as dependencies now that
       Module::Build doesn't do it's own C handling.
diff --git a/MANIFEST b/MANIFEST
index c55788f..7b8047f 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,15 +1,21 @@
-bin/benchmark_stemmers.plx
-bin/generate_tests.plx
 Build.PL
 Changes
+devel/benchmark_stemmers.plx
+devel/generate_tests.plx
 lib/Lingua/Stem/Snowball.pm
 lib/Lingua/Stem/Snowball.xs
 libstemmer_c/examples/stemwords.c.disabled
 libstemmer_c/include/libstemmer.h
 libstemmer_c/libstemmer/libstemmer.c
+libstemmer_c/libstemmer/libstemmer_utf8.c.disabled
 libstemmer_c/libstemmer/modules.h
+libstemmer_c/libstemmer/modules.txt
+libstemmer_c/libstemmer/modules_utf8.h
+libstemmer_c/libstemmer/modules_utf8.txt
 libstemmer_c/Makefile
+libstemmer_c/MANIFEST
 libstemmer_c/mkinc.mak
+libstemmer_c/mkinc_utf8.mak
 libstemmer_c/README
 libstemmer_c/runtime/api.c
 libstemmer_c/runtime/api.h
@@ -27,6 +33,8 @@ libstemmer_c/src_c/stem_ISO_8859_1_french.c
 libstemmer_c/src_c/stem_ISO_8859_1_french.h
 libstemmer_c/src_c/stem_ISO_8859_1_german.c
 libstemmer_c/src_c/stem_ISO_8859_1_german.h
+libstemmer_c/src_c/stem_ISO_8859_1_hungarian.c
+libstemmer_c/src_c/stem_ISO_8859_1_hungarian.h
 libstemmer_c/src_c/stem_ISO_8859_1_italian.c
 libstemmer_c/src_c/stem_ISO_8859_1_italian.h
 libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
@@ -39,6 +47,8 @@ libstemmer_c/src_c/stem_ISO_8859_1_spanish.c
 libstemmer_c/src_c/stem_ISO_8859_1_spanish.h
 libstemmer_c/src_c/stem_ISO_8859_1_swedish.c
 libstemmer_c/src_c/stem_ISO_8859_1_swedish.h
+libstemmer_c/src_c/stem_ISO_8859_2_romanian.c
+libstemmer_c/src_c/stem_ISO_8859_2_romanian.h
 libstemmer_c/src_c/stem_KOI8_R_russian.c
 libstemmer_c/src_c/stem_KOI8_R_russian.h
 libstemmer_c/src_c/stem_UTF_8_danish.c
@@ -53,6 +63,8 @@ libstemmer_c/src_c/stem_UTF_8_french.c
 libstemmer_c/src_c/stem_UTF_8_french.h
 libstemmer_c/src_c/stem_UTF_8_german.c
 libstemmer_c/src_c/stem_UTF_8_german.h
+libstemmer_c/src_c/stem_UTF_8_hungarian.c
+libstemmer_c/src_c/stem_UTF_8_hungarian.h
 libstemmer_c/src_c/stem_UTF_8_italian.c
 libstemmer_c/src_c/stem_UTF_8_italian.h
 libstemmer_c/src_c/stem_UTF_8_norwegian.c
@@ -61,12 +73,16 @@ libstemmer_c/src_c/stem_UTF_8_porter.c
 libstemmer_c/src_c/stem_UTF_8_porter.h
 libstemmer_c/src_c/stem_UTF_8_portuguese.c
 libstemmer_c/src_c/stem_UTF_8_portuguese.h
+libstemmer_c/src_c/stem_UTF_8_romanian.c
+libstemmer_c/src_c/stem_UTF_8_romanian.h
 libstemmer_c/src_c/stem_UTF_8_russian.c
 libstemmer_c/src_c/stem_UTF_8_russian.h
 libstemmer_c/src_c/stem_UTF_8_spanish.c
 libstemmer_c/src_c/stem_UTF_8_spanish.h
 libstemmer_c/src_c/stem_UTF_8_swedish.c
 libstemmer_c/src_c/stem_UTF_8_swedish.h
+libstemmer_c/src_c/stem_UTF_8_turkish.c
+libstemmer_c/src_c/stem_UTF_8_turkish.h
 Makefile.PL
 MANIFEST
 META.yml			Module meta-data (added by MakeMaker)
@@ -90,6 +106,8 @@ t/test_voc/fi.default_enc
 t/test_voc/fi.utf8
 t/test_voc/fr.default_enc
 t/test_voc/fr.utf8
+t/test_voc/hu.default_enc
+t/test_voc/hu.utf8
 t/test_voc/it.default_enc
 t/test_voc/it.utf8
 t/test_voc/nl.default_enc
@@ -98,7 +116,11 @@ t/test_voc/no.default_enc
 t/test_voc/no.utf8
 t/test_voc/pt.default_enc
 t/test_voc/pt.utf8
+t/test_voc/ro.default_enc
+t/test_voc/ro.utf8
 t/test_voc/ru.default_enc
 t/test_voc/ru.utf8
 t/test_voc/sv.default_enc
 t/test_voc/sv.utf8
+t/test_voc/tr.utf8
+typemap
diff --git a/META.yml b/META.yml
index cfcb152..c253f88 100644
--- a/META.yml
+++ b/META.yml
@@ -1,6 +1,6 @@
 ---
 name: Lingua-Stem-Snowball
-version: 0.941
+version: 0.952
 author:
   - 'Marvin Humphrey <marvin at rectangular dot com>'
 abstract: Perl interface to Snowball stemmers.
@@ -9,14 +9,15 @@ resources:
   license: http://dev.perl.org/licenses/
 requires:
   Test::More: 0
+  perl: 5.6.2
 build_requires:
   ExtUtils::CBuilder: 0
   ExtUtils::ParseXS: 0
 provides:
   Lingua::Stem::Snowball:
     file: lib/Lingua/Stem/Snowball.pm
-    version: 0.941
-generated_by: Module::Build version 0.2805
+    version: 0.952
+generated_by: Module::Build version 0.2808
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.2.html
   version: 1.2
diff --git a/README b/README
index ebb877a..83858ac 100644
--- a/README
+++ b/README
@@ -12,11 +12,16 @@ To install this module type the following:
 
 COPYRIGHT AND LICENCE
 
-Currently maintained by Fabien Potencier, fabpot at cpan.org
+Perl bindings copyright 2004-2008 by Marvin Humphrey, Fabien Potencier, Oleg
+Bartunov and Teodor Sigaev.
+
+Currently maintained by Marvin Humphrey, marvin at rectangular dot com
 Original authors Oleg Bartunov, oleg at sai.msu.su, Teodor Sigaev, teodor at stack.net
+Previously maintained by Fabien Potencier, fabpot at cpan.org
 
 This library is free software; you can redistribute it and/or modify
 it under the same terms as Perl itself, either Perl version 5.8.3 or,
 at your option, any later version of Perl 5 you may have available.
 
 Snowball files and stemmers are covered by the BSD license.
+
diff --git a/bin/generate_tests.plx b/bin/generate_tests.plx
deleted file mode 100755
index 62b9a4b..0000000
--- a/bin/generate_tests.plx
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-
-# generate_tests.plx 
-# 
-# Grab a sampling of vocab diffs from Snowball project and generate test pairs
-# in both the default encoding and UTF-8.
-
-use Encode;
-use Getopt::Long qw( GetOptions );
-use File::Spec::Functions qw( catfile catdir );
-
-# --snowdir must be the "snowball_all" directory
-my $snowdir;
-GetOptions( 'snowdir=s' => \$snowdir );
-die "Usage: ./bin/generate_tests.plx --snowdir=SNOWDIR"
-    unless defined $snowdir;
-
-my %languages = (
-    en => 'english',
-    da => 'danish',
-    de => 'german',
-    es => 'spanish',
-    fi => 'finnish',
-    fr => 'french',
-    it => 'italian',
-    nl => 'dutch',
-    no => 'norwegian',
-    pt => 'portuguese',
-    ru => 'russian',
-    sv => 'swedish',
-);
-
-# create t/testvoc if it doesn't exist already
-my $test_voc_dir = catdir( 't', 'test_voc' );
-if ( !-d $test_voc_dir ) {
-    mkdir $test_voc_dir or die $!;
-}
-
-while ( my ( $iso, $language ) = each %languages ) {
-    # suck in all the lines of the relevant diffs.txt.
-    my $in_filepath
-        = catfile( $snowdir, 'algorithms', $language, 'diffs.txt' );
-    open( my $in_fh, '<', $in_filepath ) or die $!;
-    my @diffs = <$in_fh>;
-
-    # these files are in the default encoding, so we'll have to decode UTF-8
-    my $source_enc = $iso eq 'ru' ? 'koi8-r' : 'iso-8859-1';
-    open( my $utf8_fh, '>:utf8', catfile( $test_voc_dir, "$iso.utf8" ) )
-        or die $!;
-    open( my $default_fh, ">", catfile( $test_voc_dir, "$iso.default_enc" ) )
-        or die $!;
-
-    # grab 100 random pairs
-    for ( 1 .. 100 ) {
-        my $pair = $diffs[ rand @diffs ];
-        print $default_fh $pair or die $!;
-        $pair = decode( $source_enc, $pair );
-        print $utf8_fh $pair or die $!;
-    }
-}
-
diff --git a/debian/changelog b/debian/changelog
index 4a6b61f..3c8ab27 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+liblingua-stem-snowball-perl (0.952-1) UNRELEASED; urgency=low
+
+  * New upstream release
+
+ -- Dominic Hargreaves <dom at earth.li>  Mon, 23 Feb 2009 16:16:27 +0000
+
 liblingua-stem-snowball-perl (0.941-2) unstable; urgency=low
 
   * Clarify copyright file further
diff --git a/debian/rules b/debian/rules
index b9f1af3..544c80a 100755
--- a/debian/rules
+++ b/debian/rules
@@ -48,7 +48,7 @@ install-stamp: build-stamp
 	# Add commands to install the package into $(TMP) here
 	$(PERL) Build install destdir=$(TMP) create_packlist=0
 	# Install these as examples instead
-	rm -f $(TMP)/usr/bin/benchmark_stemmers.plx $(TMP)/usr/bin/generate_tests.plx
+	rm -f $(TMP)/usr/devel/benchmark_stemmers.plx $(TMP)/usr/devel/generate_tests.plx
 	rmdir --ignore-fail-on-non-empty $(TMP)/usr/bin
 
 	touch $@
@@ -62,7 +62,7 @@ binary-arch: build install
 	dh_testdir
 	dh_testroot
 	dh_installdocs
-	dh_installexamples bin/benchmark_stemmers.plx bin/generate_tests.plx
+	dh_installexamples devel/benchmark_stemmers.plx devel/generate_tests.plx
 	dh_installchangelogs Changes
 	dh_shlibdeps
 	dh_strip
diff --git a/bin/benchmark_stemmers.plx b/devel/benchmark_stemmers.plx
similarity index 89%
rename from bin/benchmark_stemmers.plx
rename to devel/benchmark_stemmers.plx
index b4d3b10..77b834e 100755
--- a/bin/benchmark_stemmers.plx
+++ b/devel/benchmark_stemmers.plx
@@ -15,10 +15,10 @@ my $timer = Benchmark::Timer->new;
 die "Usage: ./bin/benchmark_stemmers.plx TEXTFILES"
     unless @ARGV;
 
-# retrieve, pre-process and tokenize text
+# Retrieve, pre-process and tokenize text.
 sub retrieve_text {
     my $filepath = shift;
-    my $text = do {
+    my $text     = do {
         open( my $fh, '<', $filepath )
             or die "Couldn't open file '$filepath' for reading: $!";
         local $/;
@@ -33,7 +33,7 @@ sub retrieve_text {
 }
 
 my @token_arrays = map { retrieve_text($_) } @ARGV;
-# prepare vars used in the report
+# Prepare vars used in the report.
 my %unique;
 my $num_tokens = 0;
 for my $tokens (@token_arrays) {
@@ -48,7 +48,7 @@ for my $iter ( 1 .. ITERS ) {
     my $snowball    = Lingua::Stem::Snowball->new( lang => 'en' );
     my $lingua_stem = Lingua::Stem->new( -locale        => 'EN' );
 
-    # LS without cache
+    # LS without cache.
     for my $tokens (@token_arrays) {
         $timer->start('LS');
         $out = $lingua_stem->stem(@$tokens);
@@ -56,23 +56,23 @@ for my $iter ( 1 .. ITERS ) {
         undef $out;
     }
 
-    # turn stem_caching on for LS
+    # Turn stem_caching on for LS.
     $lingua_stem->stem_caching( { -level => 2 } );
 
     for my $tokens (@token_arrays) {
-        # LS, with stem caching
+        # LS, with stem caching.
         $timer->start('LS2');
         $out = $lingua_stem->stem(@$tokens);
         $timer->stop('LS2');
         undef $out;
 
-        # LSS
+        # LSS.
         $timer->start('LSS');
         @out = $snowball->stem($tokens);
         $timer->stop('LSS');
         undef @out;
 
-        # stem_in_place, if this version of LSS is recent enough
+        # stem_in_place, if this version of LSS is recent enough.
         if ( $snowball->can('stem_in_place') ) {
             my @copy = @$tokens;
             $timer->start('LSS2');
@@ -81,7 +81,7 @@ for my $iter ( 1 .. ITERS ) {
         }
     }
 
-    # LS's stem_cache is global per locale, so clear it each iter
+    # LS's stem_cache is global per -locale, so clear it each iter.
     $lingua_stem->clear_stem_cache;
 }
 
@@ -89,10 +89,10 @@ my $ls_ver  = $Lingua::Stem::VERSION;
 my $lss_ver = $Lingua::Stem::Snowball::VERSION;
 $lss_ver =~ s/_.*//;
 my %results = $timer->results;
-# make each result the average time per iter to stem all docs 
+# Make each result the average time per iter to stem all docs.
 $_ *= scalar @ARGV for values %results;
 
-# print the report
+# Print the report.
 printf( '
 |--------------------------------------------------------------------|
 | total words: %-6d | unique words: %-6d                         |
diff --git a/devel/generate_tests.plx b/devel/generate_tests.plx
new file mode 100755
index 0000000..1c1e304
--- /dev/null
+++ b/devel/generate_tests.plx
@@ -0,0 +1,93 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+# generate_tests.plx
+#
+# Grab a sampling of vocab diffs from Snowball project and generate test pairs
+# in both the default encoding and UTF-8.
+
+use Encode;
+use Getopt::Long qw( GetOptions );
+use File::Spec::Functions qw( catfile catdir );
+
+# --snowdir must be the "snowball_all" directory
+my $snowdir;
+GetOptions( 'snowdir=s' => \$snowdir );
+die "Usage: perl devel/generate_tests.plx --snowdir=SNOWDIR"
+    unless defined $snowdir;
+
+my %languages = (
+    en => 'english',
+    da => 'danish',
+    de => 'german',
+    es => 'spanish',
+    fi => 'finnish',
+    fr => 'french',
+    it => 'italian',
+    nl => 'dutch',
+    hu => 'hungarian',
+    no => 'norwegian',
+    pt => 'portuguese',
+    ro => 'romanian',
+    ru => 'russian',
+    sv => 'swedish',
+    tr => 'turkish',
+);
+
+# Create t/test_voc if it doesn't exist already.
+my $test_voc_dir = catdir( 't', 'test_voc' );
+if ( !-d $test_voc_dir ) {
+    mkdir $test_voc_dir or die $!;
+}
+
+while ( my ( $iso, $language ) = each %languages ) {
+    # Only create new files, don't mod existing ones.
+    my $utf8_filepath    = catfile( $test_voc_dir, "$iso.utf8" );
+    my $default_filepath = catfile( $test_voc_dir, "$iso.default_enc" );
+    next if ( -e $utf8_filepath and -e $default_filepath );
+    my ( $utf8_fh, $default_fh );
+    if ( 1 or !-e $utf8_filepath ) {
+        open( $utf8_fh, '>:utf8', $utf8_filepath ) or die $!;
+    }
+    if ( 1 or !-e $default_filepath ) {
+        if ( $iso ne 'tr' ) {    # Turkish is UTF-8 only.
+            open( $default_fh, '>', $default_filepath ) or die $!;
+        }
+    }
+
+    # Suck in all the lines of the relevant vocabulary example files.
+    my $voc_filepath
+        = catfile( $snowdir, 'algorithms', $language, 'voc.txt' );
+    my $answers_filepath
+        = catfile( $snowdir, 'algorithms', $language, 'output.txt' );
+
+    open( my $voc_fh,     '<:utf8', $voc_filepath )     or die $!;
+    open( my $answers_fh, '<:utf8', $answers_filepath ) or die $!;
+    my @voc     = <$voc_fh>;
+    my @answers = <$answers_fh>;
+
+    # These files are in UTF-8, so we'll have to encode tests for the default
+    # encoding.
+    my $default_enc
+        = $iso eq 'ru' ? 'koi8-r'
+        : $iso eq 'ro' ? 'iso-8859-2'
+        : $iso eq 'tr' ? undef
+        :                'iso-8859-1';
+
+    # Grab 100 random pairs.
+    for ( 1 .. 100 ) {
+        my $tick = int( rand @voc );
+        my $voc  = $voc[$tick];
+        chomp $voc;
+        my $pair = "$voc $answers[$tick]";
+        if ($default_fh) {
+            my $encoded = encode( $default_enc, $pair );
+            print $default_fh $encoded or die $!;
+        }
+        if ($utf8_fh) {
+            print $utf8_fh $pair or die $!;
+        }
+    }
+}
+
diff --git a/lib/Lingua/Stem/Snowball.pm b/lib/Lingua/Stem/Snowball.pm
index 261b860..a50a1da 100644
--- a/lib/Lingua/Stem/Snowball.pm
+++ b/lib/Lingua/Stem/Snowball.pm
@@ -1,5 +1,7 @@
 package Lingua::Stem::Snowball;
 use strict;
+use warnings;
+use 5.006002;
 
 use Carp;
 use Exporter;
@@ -13,16 +15,20 @@ use vars qw(
     %instance_vars
 );
 
-$VERSION = '0.941';
+$VERSION = '0.952';
 
- at ISA         = qw( Exporter );
+ at ISA         = qw( Exporter DynaLoader );
 %EXPORT_TAGS = ( 'all' => [qw( stemmers stem )] );
 @EXPORT_OK   = ( @{ $EXPORT_TAGS{'all'} } );
 
-require XSLoader;
-XSLoader::load( 'Lingua::Stem::Snowball', $VERSION );
+require DynaLoader;
+__PACKAGE__->bootstrap($VERSION);
 
-# a shared home for the actual struct sb_stemmer C modules.
+# Ensure that C symbols are exported so that other shared libaries (e.g.
+# KinoSearch) can use them.  See Dynaloader docs.
+sub dl_load_flags {0x01}
+
+# A shared home for the actual struct sb_stemmer C modules.
 $stemmifier = Lingua::Stem::Snowball::Stemmifier->new;
 
 %instance_vars = (
@@ -35,12 +41,16 @@ $stemmifier = Lingua::Stem::Snowball::Stemmifier->new;
 
 sub new {
     my $class = shift;
-    my $self  = bless { %instance_vars, @_ }, ref($class) || $class;
+    my $self = bless { %instance_vars, @_ }, ref($class) || $class;
 
-    # validate lang, validate/guess encoding, and get an sb_stemmer
+    # Validate lang, validate/guess encoding, and get an sb_stemmer.
     $self->lang( $self->{lang} );
     if ( !defined $self->{encoding} ) {
-        $self->{encoding} = $self->{lang} eq 'ru' ? 'KOI8-R' : 'ISO-8859-1';
+        $self->{encoding}
+            = $self->{lang} eq 'ru' ? 'KOI8-R'
+            : $self->{lang} eq 'ro' ? 'ISO-8859-2'
+            : $self->{lang} eq 'tr' ? 'UTF-8'
+            :                         'ISO-8859-1';
     }
     $self->_derive_stemmer;
 
@@ -50,7 +60,7 @@ sub new {
 sub stem {
     my ( $self, $lang, $words, $locale, $is_stemmed );
 
-    # support lots of DWIMmery
+    # Support lots of DWIMmery.
     if ( UNIVERSAL::isa( $_[0], 'HASH' ) ) {
         ( $self, $words, $is_stemmed ) = @_;
     }
@@ -59,18 +69,18 @@ sub stem {
         $self = __PACKAGE__->new( lang => $lang );
     }
 
-    # bail if we don't have a valid lang
+    # Bail if we don't have a valid lang.
     return undef unless $self->{lang};
 
-    # bail if there's no input
+    # Bail if there's no input.
     return undef unless ( ref($words) or length($words) );
 
-    # duplicate the input array and transform it into an array of stems
+    # Duplicate the input array and transform it into an array of stems.
     $words = ref($words) ? $words : [$words];
     my @stems = map {lc} @$words;
     $self->stem_in_place( \@stems );
 
-    # determine whether any stemming took place, if requested
+    # Determine whether any stemming took place, if requested.
     if ( ref($is_stemmed) ) {
         $$is_stemmed = 0;
         if ( $self->{stemmer_id} == -1 ) {
@@ -95,7 +105,7 @@ sub lang {
         $lang = $lang eq 'dk' ? 'nl' : $lang;    # backwards compat
         if ( _validate_language($lang) ) {
             $self->{lang} = $lang;
-            # force stemmer_id regen at next call to stem_in_place
+            # Force stemmer_id regen at next call to stem_in_place().
             $self->{stemmer_id} = -1;
         }
         else {
@@ -109,15 +119,15 @@ sub encoding {
     my ( $self, $encoding ) = @_;
     if ( defined $encoding ) {
         croak("Invalid value for encoding: '$encoding'")
-            unless $encoding =~ /^(?:UTF-8|KOI8-R|ISO-8859-1)$/;
+            unless $encoding =~ /^(?:UTF-8|KOI8-R|ISO-8859-[12])$/;
         $self->{encoding} = $encoding;
-        # force stemmer_id regen at next call to stem_in_place
+        # Force stemmer_id regen at next call to stem_in_place().
         $self->{stemmer_id} = -1;
     }
     return $self->{encoding};
 }
 
-# deprecated, has no effect on stemming behavior
+# Deprecated, has no effect on stemming behavior.
 sub strip_apostrophes {
     my ( $self, $boolean ) = @_;
     if ( defined $boolean ) {
@@ -126,7 +136,7 @@ sub strip_apostrophes {
     return $self->{strip_apostrophes};
 }
 
-# deprecated, has no effect on stemming behavior
+# Deprecated, has no effect on stemming behavior.
 sub locale {
     my ( $self, $locale ) = @_;
     if ($locale) {
@@ -151,24 +161,24 @@ Lingua::Stem::Snowball - Perl interface to Snowball stemmers.
     my $stemmer = Lingua::Stem::Snowball->new( lang => 'en' );
     $stemmer->stem_in_place( \@words ); # qw( hors hoov )
 
-    # plain interface:
+    # Functional interface:
     my @stems = stem( 'en', \@words );
 
 =head1 DESCRIPTION
 
-Stemming reduces related words to a common root form. For instance, "horse",
+Stemming reduces related words to a common root form -- for instance, "horse",
 "horses", and "horsing" all become "hors".  Most commonly, stemming is
 deployed as part of a search application, allowing searches for a given term
 to match documents which contain other forms of that term.
 
-This module is very similar to L<Lingua::Stem|Lingua::Stem> -- however,
-Lingua::Stem is pure Perl, while Lingua::Stem::Snowball is an XS module which
-provides a Perl interface to the C version of the Snowball stemmers.
+This module is very similar to L<Lingua::Stem> -- however, Lingua::Stem is
+pure Perl, while Lingua::Stem::Snowball is an XS module which provides a Perl
+interface to the C version of the Snowball stemmers.
 (L<http://snowball.tartarus.org>).  
 
 =head2 Supported Languages
 
-The following stemmers are available (as of Lingua::Stem::Snowball 0.94):
+The following stemmers are available (as of Lingua::Stem::Snowball 0.95):
 
     |-----------------------------------------------------------|
     | Language   | ISO code | default encoding | also available |
@@ -179,12 +189,15 @@ The following stemmers are available (as of Lingua::Stem::Snowball 0.94):
     | Finnish    | fi       | ISO-8859-1       | UTF-8          | 
     | French     | fr       | ISO-8859-1       | UTF-8          |
     | German     | de       | ISO-8859-1       | UTF-8          | 
+    | Hungarian  | hu       | ISO-8859-1       | UTF-8          | 
     | Italian    | it       | ISO-8859-1       | UTF-8          | 
     | Norwegian  | no       | ISO-8859-1       | UTF-8          | 
     | Portuguese | pt       | ISO-8859-1       | UTF-8          | 
+    | Romanian   | ro       | ISO-8859-2       | UTF-8          | 
+    | Russian    | ru       | KOI8-R           | UTF-8          | 
     | Spanish    | es       | ISO-8859-1       | UTF-8          | 
     | Swedish    | sv       | ISO-8859-1       | UTF-8          | 
-    | Russian    | ru       | KOI8-R           | UTF-8          | 
+    | Turkish    | tr       | UTF-8            |                | 
     |-----------------------------------------------------------|
 
 =head2 Benchmarks
@@ -193,7 +206,7 @@ Here is a comparison of Lingua::Stem::Snowball and Lingua::Stem, using The
 Works of Edgar Allen Poe, volumes 1-5 (via Project Gutenberg) as source
 material.  It was produced on a 3.2GHz Pentium 4 running FreeBSD 5.3 and Perl
 5.8.7.  (The benchmarking script is included in this distribution:
-bin/benchmark_stemmers.plx.)
+devel/benchmark_stemmers.plx.)
 
     |--------------------------------------------------------------------|
     | total words: 454285 | unique words: 22748                          |
@@ -240,7 +253,7 @@ change: stem() will always return undef, and stem_in_place() will be a no-op.
 =head2 stem
 
     @stemmed = $stemmer->stem( WORDS, [IS_STEMMED] );
-    @stemmed = stem( ISO_CODE, WORDS, [LOCALE, IS_STEMMED] );
+    @stemmed = stem( ISO_CODE, WORDS, [LOCALE], [IS_STEMMED] );
 
 Return lowercased and stemmed output.  WORDS may be either an array of words
 or a single scalar word.  
@@ -312,9 +325,10 @@ Currently maintained by Marvin Humphrey E<lt>marvin at rectangular dot
 comE<gt>.  Previously maintained by Fabien Potencier E<lt>fabpot at cpan dot
 orgE<gt>.  
 
-=head1 COPYRIGHT
+=head1 COPYRIGHT AND LICENSE
 
-Copyright 2004-2006
+Perl bindings copyright 2004-2008 by Marvin Humphrey, Fabien Potencier, Oleg
+Bartunov and Teodor Sigaev.
 
 This software may be freely copied and distributed under the same
 terms and conditions as Perl.
@@ -326,5 +340,3 @@ Snowball files and stemmers are covered by the BSD license.
 L<http://snowball.tartarus.org>, L<Lingua::Stem|Lingua::Stem>.
 
 =cut
-
-
diff --git a/lib/Lingua/Stem/Snowball.xs b/lib/Lingua/Stem/Snowball.xs
index 20ea13f..a6acc1a 100644
--- a/lib/Lingua/Stem/Snowball.xs
+++ b/lib/Lingua/Stem/Snowball.xs
@@ -2,21 +2,30 @@
 #include "perl.h"
 #include "XSUB.h"
 
+#define NEED_sv_2pv_flags
 #define NEED_sv_2pv_nolen
 #include "../ppport.h"
 
-#define NUMLANG 12
-#define NUMSTEM 24
+#define NUMLANG 15
+#define NUMSTEM 29
 
 #include "include/libstemmer.h"
 
-typedef struct sb_stemmer SnowStemmer;
+/* All Lingua::Stem::Snowball objects and all calls to stem(),
+ * stem_in_place(), etc, reference the same set of Snowball struct
+ * sb_stemmers, all held in the singleton object
+ * $Lingua::Stem::Snowball::stemmifier, of class
+ * Lingua::Stem::Snowball::Stemmifier.  Each sb_stemmer is created lazily, as
+ * soon as there is a need for its unique combination of language and
+ * encoding.  They are destroyed during global cleanup, when
+ * $Lingua::Stem::Snowball::stemmifier is reclaimed.
+ */
 
-typedef struct stemmifier {
-    SnowStemmer **stemmers;
+typedef struct Stemmifier {
+    struct sb_stemmer **stemmers;
 } Stemmifier;
 
-typedef struct langenc {
+typedef struct LangEnc {
     char *lang;
     char *encoding; /* the real name of the encoding */
     char *snowenc;  /* the variant that libstemmer_c needs */
@@ -30,11 +39,14 @@ LangEnc lang_encs[] = {
     { "es", "ISO-8859-1", "ISO_8859_1" },
     { "fi", "ISO-8859-1", "ISO_8859_1" },
     { "fr", "ISO-8859-1", "ISO_8859_1" },
+    { "hu", "ISO-8859-1", "ISO_8859_1" },
     { "it", "ISO-8859-1", "ISO_8859_1" },
     { "no", "ISO-8859-1", "ISO_8859_1" },
     { "pt", "ISO-8859-1", "ISO_8859_1" },
+    { "ro", "ISO-8859-2", "ISO_8859_2" },
     { "ru", "KOI8-R",     "KOI8_R",    },
     { "sv", "ISO-8859-1", "ISO_8859_1" },
+    { "tr", "UTF-8",      "UTF_8"      },
     { "da", "UTF-8",      "UTF_8"      },
     { "de", "UTF-8",      "UTF_8"      },
     { "nl", "UTF-8",      "UTF_8"      },
@@ -42,9 +54,11 @@ LangEnc lang_encs[] = {
     { "es", "UTF-8",      "UTF_8"      },
     { "fi", "UTF-8",      "UTF_8"      },
     { "fr", "UTF-8",      "UTF_8"      },
+    { "hu", "UTF-8",      "UTF_8"      },
     { "it", "UTF-8",      "UTF_8"      },
     { "no", "UTF-8",      "UTF_8"      },
     { "pt", "UTF-8",      "UTF_8"      },
+    { "ro", "UTF-8",      "UTF_8"      },
     { "ru", "UTF-8",      "UTF_8"      },
     { "sv", "UTF-8",      "UTF_8"      },
 };
@@ -53,54 +67,77 @@ MODULE = Lingua::Stem::Snowball  PACKAGE = Lingua::Stem::Snowball
 
 PROTOTYPES: disable 
 
+BOOT:
+{
+    SV *sb_stemmer_list_sv   = newSViv(PTR2IV(sb_stemmer_list));
+    SV *sb_stemmer_new_sv    = newSViv(PTR2IV(sb_stemmer_new));
+    SV *sb_stemmer_delete_sv = newSViv(PTR2IV(sb_stemmer_delete));
+    SV *sb_stemmer_stem_sv   = newSViv(PTR2IV(sb_stemmer_stem));
+    SV *sb_stemmer_length_sv = newSViv(PTR2IV(sb_stemmer_length));
+    hv_store(PL_modglobal, "Lingua::Stem::Snowball::sb_stemmer_list", 39,
+        sb_stemmer_list_sv, 0);
+    hv_store(PL_modglobal, "Lingua::Stem::Snowball::sb_stemmer_new", 38,
+        sb_stemmer_new_sv, 0);
+    hv_store(PL_modglobal, "Lingua::Stem::Snowball::sb_stemmer_delete", 41,
+        sb_stemmer_delete_sv, 0);
+    hv_store(PL_modglobal, "Lingua::Stem::Snowball::sb_stemmer_stem", 39,
+        sb_stemmer_stem_sv, 0);
+    hv_store(PL_modglobal, "Lingua::Stem::Snowball::sb_stemmer_length", 41,
+        sb_stemmer_length_sv, 0);
+}
+
 void
-_derive_stemmer(obj_hash)
-    HV *obj_hash;
-PREINIT:
+_derive_stemmer(self_hash)
+    HV *self_hash;
+PPCODE:
+{
+    SV   **sv_ptr;
     char  *lang;
     char  *encoding;
-    SV   **sv_ptr;
-    int i;
-    int stemmer_id;
-PPCODE:
-    /* extract lang and encoding member variables */
-    sv_ptr = hv_fetch(obj_hash, "lang", 4, 0);
+    int    i;
+    int    stemmer_id = -1;
+
+    /* Extract lang and encoding member variables. */
+    sv_ptr = hv_fetch(self_hash, "lang", 4, 0);
     if (!sv_ptr)
         croak("Couldn't find member variable 'lang'");
     lang = SvPV_nolen(*sv_ptr);
-    sv_ptr = hv_fetch(obj_hash, "encoding", 8, 0);
+    sv_ptr = hv_fetch(self_hash, "encoding", 8, 0);
     if (!sv_ptr)
         croak("Couldn't find member variable 'encoding'");
     encoding = SvPV_nolen(*sv_ptr);
 
-    /* see if the combo of lang and encoding is supported */
-    stemmer_id = -1;
+    /* See if the combo of lang and encoding is supported. */
     for(i = 0; i < NUMSTEM; i++) {
         if (   strcmp(lang,     lang_encs[i].lang)     == 0 
             && strcmp(encoding, lang_encs[i].encoding) == 0 
         ) {
-            IV          temp;
             Stemmifier *stemmifier;
             SV         *stemmifier_sv;
 
-            /* we have a match, so we know the stemmer id now */
+            /* We have a match, so we know the stemmer id now. */
             stemmer_id = i;
 
-            /* retrieve communal Stemmifier */
-            stemmifier_sv 
-                = get_sv("Lingua::Stem::Snowball::stemmifier", TRUE);
-            if (!SvROK(stemmifier_sv)) {
-                croak("Internal error: can't access stemmifier");
+            /* Retrieve communal Stemmifier. */
+            stemmifier_sv = get_sv("Lingua::Stem::Snowball::stemmifier", TRUE);
+            if (   sv_isobject(stemmifier_sv)
+                && sv_derived_from(stemmifier_sv, 
+                    "Lingua::Stem::Snowball::Stemmifier")
+            ) {
+                IV tmp = SvIV(SvRV(stemmifier_sv));
+                stemmifier = INT2PTR(Stemmifier*, tmp);
+            }
+            else {
+                croak("$L::S::S::stemmifier isn't a Stemmifier");
             }
-            temp = SvIV(SvRV(stemmifier_sv));
-            stemmifier = INT2PTR(Stemmifier*, temp);
 
-            /* construct a stemmer for lang/enc if there isn't one yet */
+            /* Construct a stemmer for lang/enc if there isn't one yet. */
             if ( ! stemmifier->stemmers[stemmer_id] ) {
                 stemmifier->stemmers[stemmer_id] 
                     = sb_stemmer_new(lang, lang_encs[stemmer_id].snowenc);
                 if ( ! stemmifier->stemmers[stemmer_id]  ) {
-                    croak("Failed to allocate an sb_stemmer - out of mem");
+                    croak("Failed to allocate an sb_stemmer for %s %s", lang,
+                        encoding);
                 }
             } 
 
@@ -108,73 +145,64 @@ PPCODE:
         }
     }
 
-    /* set the value of $self->{stemmer_id} */
-    sv_ptr = hv_fetch(obj_hash, "stemmer_id", 10, 0);
+    /* Set the value of $self->{stemmer_id}. */
+    sv_ptr = hv_fetch(self_hash, "stemmer_id", 10, 0);
     if (!sv_ptr)
         croak("Couldn't access $self->{stemmer_id}");
     sv_setiv(*sv_ptr, stemmer_id);
+}
 
 bool
-_validate_language(lang_sv)
-    SV *lang_sv;
-PREINIT:
-    char   *lang;
-    STRLEN  len;
-    int     i;
+_validate_language(language)
+    char *language;
 CODE:
-    lang = SvPV(lang_sv, len);
-
+{
+    int i;
     RETVAL = FALSE;
     for (i = 0; i < NUMLANG; i++) {
-        if ( strcmp(lang, lang_encs[i].lang) == 0 )
-            RETVAL = TRUE;
+        if ( strcmp(language, lang_encs[i].lang) == 0 ) RETVAL = TRUE;
     }
+}
 OUTPUT: RETVAL
 
-
 void
 stemmers(...)
-PREINIT:
-    int  i;
 PPCODE:
+{
+    int i;
     for (i = 0; i < NUMLANG; i++) {
         XPUSHs( sv_2mortal(
             newSVpvn( lang_encs[i].lang, strlen(lang_encs[i].lang) )
         ));
     }
     XSRETURN(NUMLANG);
+}
 
 void
-stem_in_place(obj, words_av)
-    SV  *obj;
+stem_in_place(self_hash, words_av)
+    HV  *self_hash;
     AV  *words_av;
-PREINIT:
-    HV                *obj_hash;
-    SV               **sv_ptr;
-    IV                 stemmer_id;
-    SV                *stemmifier_sv;
-    Stemmifier        *stemmifier;
-    STRLEN             len;
-    SnowStemmer       *stemmer;
-    const sb_symbol   *input_text;
-    const sb_symbol   *stemmed_output;
-    IV                 i, max;
 PPCODE:
-    /* extract hash from object */
-    if (SvROK(obj) && SvTYPE(SvRV(obj))==SVt_PVHV)
-        obj_hash = (HV*)SvRV(obj);
-    else    
-        croak("not a hash reference");
-
-    /* retrieve the stemmifier */
+{
+    IV stemmer_id;
+    SV **sv_ptr;
+    Stemmifier *stemmifier;
+    SV *stemmifier_sv;
+    
+    /* Retrieve the stemmifier. */
     stemmifier_sv = get_sv("Lingua::Stem::Snowball::stemmifier", TRUE);
-    if(!SvROK(stemmifier_sv))
+    if (   sv_isobject(stemmifier_sv)
+        && sv_derived_from(stemmifier_sv, "Lingua::Stem::Snowball::Stemmifier")
+    ) {
+        IV tmp = SvIV(SvRV(stemmifier_sv));
+        stemmifier = INT2PTR(Stemmifier*, tmp);
+    }
+    else {
         croak("$Lingua::Stem::Snowball::stemmifier isn't a Stemmifier");
-    i = SvIV(SvRV(stemmifier_sv));
-    stemmifier = INT2PTR(Stemmifier*, i);
+    }
 
-    /* figure out which sb_stemmer to use */
-    sv_ptr = hv_fetch(obj_hash, "stemmer_id", 10, 0);
+    /* Figure out which sb_stemmer to use. */
+    sv_ptr = hv_fetch(self_hash, "stemmer_id", 10, 0);
     if (!sv_ptr)
         croak("Couldn't access stemmer_id");
     stemmer_id = SvIV(*sv_ptr);
@@ -186,66 +214,61 @@ PPCODE:
         ENTER;
         SAVETMPS;
         PUSHMARK(SP);
-        XPUSHs(obj);
+        XPUSHs(ST(0));
         PUTBACK;
         call_method("_derive_stemmer", G_DISCARD);
         FREETMPS;
         LEAVE;
     
-        /* extract what should now be a valid stemmer_id */
-        sv_ptr = hv_fetch(obj_hash, "stemmer_id", 10, 0);
+        /* Extract what should now be a valid stemmer_id. */
+        sv_ptr = hv_fetch(self_hash, "stemmer_id", 10, 0);
         stemmer_id = SvIV(*sv_ptr);
     }
 	if (stemmer_id != -1) {
-		stemmer = stemmifier->stemmers[stemmer_id];
+		struct sb_stemmer *stemmer = stemmifier->stemmers[stemmer_id];
+        IV i, max;
 
-		max = av_len(words_av);
-		for (i = 0; i <= max; i++) {
+		for (i = 0, max = av_len(words_av); i <= max; i++) {
 			sv_ptr = av_fetch(words_av, i, 0);
-			if (!SvOK(*sv_ptr))
-				continue;
-			input_text     = (const sb_symbol*)SvPV(*sv_ptr, len);
-			stemmed_output = sb_stemmer_stem(stemmer, input_text, (int)len);
-			len = sb_stemmer_length(stemmer);
-			sv_setpvn(*sv_ptr, (char*)stemmed_output, len);
+			if (SvOK(*sv_ptr)) {
+                STRLEN len;
+                sb_symbol *input_text = (sb_symbol*)SvPV(*sv_ptr, len);
+                const sb_symbol *stemmed_output 
+                    = sb_stemmer_stem(stemmer, input_text, (int)len);
+                len = sb_stemmer_length(stemmer);
+                sv_setpvn(*sv_ptr, (char*)stemmed_output, len);
+            }
 		}
 	}
+}
 
 MODULE = Lingua::Stem::Snowball PACKAGE = Lingua::Stem::Snowball::Stemmifier
 
-=for comment
-
-Create a new Stemmifier object.
-
-=cut
-
-void
-new(class)
-    char* class;
-PREINIT:
+SV*
+new(class_name)
+    char* class_name;
+CODE:
+{
     Stemmifier *stemmifier;
-PPCODE:
     New(0, stemmifier, 1, Stemmifier);
-    Newz(0, stemmifier->stemmers, NUMSTEM, SnowStemmer*);
-    ST(0) = sv_newmortal();
-    sv_setref_pv(ST(0), class, (void*)stemmifier);
-    XSRETURN(1);
+    Newz(0, stemmifier->stemmers, NUMSTEM, struct sb_stemmer*);
+    RETVAL = newSV(0);
+    sv_setref_pv(RETVAL, class_name, (void*)stemmifier);
+}
+OUTPUT: RETVAL
 
 void
-DESTROY(obj_ref)
-    SV *obj_ref;
-PREINIT:
-    Stemmifier *stemmifier;
-    IV          temp;
-    int         i;
+DESTROY(self_sv)
+    SV *self_sv;
 PPCODE:
-    temp = SvIV( SvRV(obj_ref) );
-    stemmifier = INT2PTR(Stemmifier*, temp);
+{
+    int i;
+    IV temp = SvIV( SvRV(self_sv) );
+    Stemmifier *stemmifier = INT2PTR(Stemmifier*, temp);
     for (i = 0; i < NUMSTEM; i++) {
         if (stemmifier->stemmers[i] != NULL)
             sb_stemmer_delete(stemmifier->stemmers[i]);
     }
     Safefree(stemmifier);
-    
-    
-    
+}
+
diff --git a/libstemmer_c/MANIFEST b/libstemmer_c/MANIFEST
new file mode 100644
index 0000000..93a313d
--- /dev/null
+++ b/libstemmer_c/MANIFEST
@@ -0,0 +1,72 @@
+README
+src_c/stem_ISO_8859_1_danish.c
+src_c/stem_ISO_8859_1_danish.h
+src_c/stem_ISO_8859_1_dutch.c
+src_c/stem_ISO_8859_1_dutch.h
+src_c/stem_ISO_8859_1_english.c
+src_c/stem_ISO_8859_1_english.h
+src_c/stem_ISO_8859_1_finnish.c
+src_c/stem_ISO_8859_1_finnish.h
+src_c/stem_ISO_8859_1_french.c
+src_c/stem_ISO_8859_1_french.h
+src_c/stem_ISO_8859_1_german.c
+src_c/stem_ISO_8859_1_german.h
+src_c/stem_ISO_8859_1_hungarian.c
+src_c/stem_ISO_8859_1_hungarian.h
+src_c/stem_ISO_8859_1_italian.c
+src_c/stem_ISO_8859_1_italian.h
+src_c/stem_ISO_8859_1_norwegian.c
+src_c/stem_ISO_8859_1_norwegian.h
+src_c/stem_ISO_8859_1_porter.c
+src_c/stem_ISO_8859_1_porter.h
+src_c/stem_ISO_8859_1_portuguese.c
+src_c/stem_ISO_8859_1_portuguese.h
+src_c/stem_ISO_8859_1_spanish.c
+src_c/stem_ISO_8859_1_spanish.h
+src_c/stem_ISO_8859_1_swedish.c
+src_c/stem_ISO_8859_1_swedish.h
+src_c/stem_ISO_8859_2_romanian.c
+src_c/stem_ISO_8859_2_romanian.h
+src_c/stem_KOI8_R_russian.c
+src_c/stem_KOI8_R_russian.h
+src_c/stem_UTF_8_danish.c
+src_c/stem_UTF_8_danish.h
+src_c/stem_UTF_8_dutch.c
+src_c/stem_UTF_8_dutch.h
+src_c/stem_UTF_8_english.c
+src_c/stem_UTF_8_english.h
+src_c/stem_UTF_8_finnish.c
+src_c/stem_UTF_8_finnish.h
+src_c/stem_UTF_8_french.c
+src_c/stem_UTF_8_french.h
+src_c/stem_UTF_8_german.c
+src_c/stem_UTF_8_german.h
+src_c/stem_UTF_8_hungarian.c
+src_c/stem_UTF_8_hungarian.h
+src_c/stem_UTF_8_italian.c
+src_c/stem_UTF_8_italian.h
+src_c/stem_UTF_8_norwegian.c
+src_c/stem_UTF_8_norwegian.h
+src_c/stem_UTF_8_porter.c
+src_c/stem_UTF_8_porter.h
+src_c/stem_UTF_8_portuguese.c
+src_c/stem_UTF_8_portuguese.h
+src_c/stem_UTF_8_romanian.c
+src_c/stem_UTF_8_romanian.h
+src_c/stem_UTF_8_russian.c
+src_c/stem_UTF_8_russian.h
+src_c/stem_UTF_8_spanish.c
+src_c/stem_UTF_8_spanish.h
+src_c/stem_UTF_8_swedish.c
+src_c/stem_UTF_8_swedish.h
+src_c/stem_UTF_8_turkish.c
+src_c/stem_UTF_8_turkish.h
+runtime/api.c
+runtime/api.h
+runtime/header.h
+runtime/utilities.c
+libstemmer/libstemmer.c
+libstemmer/libstemmer_utf8.c
+libstemmer/modules.h
+libstemmer/modules_utf8.h
+include/libstemmer.h
diff --git a/libstemmer_c/README b/libstemmer_c/README
index 3ff66e4..9d3af8b 100644
--- a/libstemmer_c/README
+++ b/libstemmer_c/README
@@ -19,6 +19,15 @@ system (or call the compiler directly).  The files to compile are
 all contained in the "libstemmer", "runtime" and "src_c" directories,
 and the public header file is contained in the "include" directory.
 
+The library comes in two flavours; UTF-8 only, and UTF-8 plus other character
+sets.  To use the utf-8 only flavour, compile "libstemmer_utf8.c" instead of
+"libstemmer.c".
+
+For convenience "mkinc.mak" is a makefile fragment listing the source files and
+header files used to compile the standard version of the library.
+"mkinc_utf8.mak" is a comparable makefile fragment listing just the source
+files for the UTF-8 only version of the library.
+
 
 Using the library
 =================
@@ -80,3 +89,37 @@ format for inclusion by a Makefile.  By including this file in your build
 system, you can link the snowball system into your program with a few
 extra rules.
 
+Using the library in a system using GNU autotools
+=================================================
+
+The libstemmer_c library can be integrated into a larger system which uses the
+GNU autotool framework (and in particular, automake and autoconf) as follows:
+
+1) Unpack libstemmer_c.tgz in the top level project directory so that there is
+   a libstemmer_c subdirectory of the top level directory of the project.
+
+2) Add a file "Makefile.am" to the unpacked libstemmer_c folder, containing:
+   
+noinst_LTLIBRARIES = libstemmer.la
+include $(srcdir)/mkinc.mak
+noinst_HEADERS = $(snowball_headers)
+libstemmer_la_SOURCES = $(snowball_sources) 
+
+(You may also need to add other lines to this, for example, if you are using
+compiler options which are not compatible with compiling the libstemmer
+library.)
+
+3) Add libstemmer_c to the AC_CONFIG_FILES declaration in the project's
+   configure.ac file.
+
+4) Add to the top level makefile the following lines (or modify existing
+   assignments to these variables appropriately):
+
+AUTOMAKE_OPTIONS = subdir-objects
+AM_CPPFLAGS = -I$(top_srcdir)/libstemmer_c/include
+SUBDIRS=libstemmer_c
+<name>_LIBADD = libstemmer_c/libstemmer.la
+
+(Where <name> is the name of the library or executable which links against
+libstemmer.) 
+
diff --git a/libstemmer_c/examples/stemwords.c.disabled b/libstemmer_c/examples/stemwords.c.disabled
index a951ba4..128ea7a 100644
--- a/libstemmer_c/examples/stemwords.c.disabled
+++ b/libstemmer_c/examples/stemwords.c.disabled
@@ -26,6 +26,7 @@ stem_file(struct sb_stemmer * stemmer, FILE * f_in, FILE * f_out)
         }
         {
             int i = 0;
+	    int inlen = 0;
             while(1) {
                 if (ch == '\n' || ch == EOF) break;
                 if (i == lim) {
@@ -36,6 +37,8 @@ stem_file(struct sb_stemmer * stemmer, FILE * f_in, FILE * f_out)
 		    b = newb;
                     lim = lim + INC;
                 }
+		/* Update count of utf-8 characters. */
+		if (ch < 0x80 || ch > 0xBF) inlen += 1;
                 /* force lower case: */
                 if (isupper(ch)) ch = tolower(ch);
 
@@ -44,11 +47,6 @@ stem_file(struct sb_stemmer * stemmer, FILE * f_in, FILE * f_out)
                 ch = getc(f_in);
             }
 
-            if (pretty) {
-                int j;
-                for (j = 0; j < i; j++) fprintf(f_out, "%c", b[j]);
-                fprintf(f_out, "%s", " -> ");
-            }
 	    {
 		const sb_symbol * stemmed = sb_stemmer_stem(stemmer, b, i);
                 if (stemmed == NULL)
@@ -57,13 +55,28 @@ stem_file(struct sb_stemmer * stemmer, FILE * f_in, FILE * f_out)
                     exit(1);
                 }
                 else
-                {
-                    int j;
-                    /*for (j = 0; j < z->l; j++) */
-                    for (j = 0; stemmed[j] != 0; j++)
-                        fprintf(f_out, "%c", stemmed[j]);
-                    fprintf(f_out, "\n");
-                }
+		{
+		    if (pretty == 1) {
+			fwrite(b, i, 1, f_out);
+			fputs(" -> ", f_out);
+		    } else if (pretty == 2) {
+			fwrite(b, i, 1, f_out);
+			if (sb_stemmer_length(stemmer) > 0) {
+			    int j;
+			    if (inlen < 30) {
+				for (j = 30 - inlen; j > 0; j--)
+				    fputs(" ", f_out);
+			    } else {
+				fputs("\n", f_out);
+				for (j = 30; j > 0; j--)
+				    fputs(" ", f_out);
+			    }
+			}
+		    }
+
+		    fputs((char *)stemmed, f_out);
+		    putc('\n', f_out);
+		}
             }
         }
     }
@@ -78,7 +91,7 @@ error:
 static void
 usage(int n)
 {
-    printf("usage: %s [-l <language>] [-i <input file>] [-o <output file>] [-c <character encoding>] [-p] [-h]\n"
+    printf("usage: %s [-l <language>] [-i <input file>] [-o <output file>] [-c <character encoding>] [-p[2]] [-h]\n"
 	  "\n"
 	  "The input file consists of a list of words to be stemmed, one per\n"
 	  "line. Words should be in lower case, but (for English) A-Z letters\n"
@@ -90,6 +103,9 @@ usage(int n)
 	  "\n"
 	  "If -p is given the output file consists of each word of the input\n"
 	  "file followed by \"->\" followed by its stemmed equivalent.\n"
+	  "If -p2 is given the output file is a two column layout containing\n"
+	  "the input words in the first column and the stemmed eqivalents in\n"
+	  "the second column.\n"
 	  "Otherwise, the output file consists of the stemmed words, one per\n"
 	  "line.\n"
 	  "\n"
@@ -143,6 +159,8 @@ main(int argc, char * argv[])
 		    exit(1);
 		}
 		charenc = argv[i++];
+	    } else if (strcmp(s, "-p2") == 0) {
+		pretty = 2;
 	    } else if (strcmp(s, "-p") == 0) {
 		pretty = 1;
 	    } else if (strcmp(s, "-h") == 0) {
diff --git a/libstemmer_c/libstemmer/libstemmer.c b/libstemmer_c/libstemmer/libstemmer.c
index 1e51026..5c3852a 100644
--- a/libstemmer_c/libstemmer/libstemmer.c
+++ b/libstemmer_c/libstemmer/libstemmer.c
@@ -19,7 +19,8 @@ sb_stemmer_list(void)
     return algorithm_names;
 }
 
-static stemmer_encoding sb_getenc(const char * charenc)
+static stemmer_encoding_t
+sb_getenc(const char * charenc)
 {
     struct stemmer_encoding * encoding;
     if (charenc == NULL) return ENC_UTF_8;
@@ -33,7 +34,7 @@ static stemmer_encoding sb_getenc(const char * charenc)
 extern struct sb_stemmer *
 sb_stemmer_new(const char * algorithm, const char * charenc)
 {
-    stemmer_encoding enc;
+    stemmer_encoding_t enc;
     struct stemmer_modules * module;
     struct sb_stemmer * stemmer =
 	    (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer));
diff --git a/libstemmer_c/libstemmer/libstemmer.c b/libstemmer_c/libstemmer/libstemmer_utf8.c.disabled
similarity index 94%
copy from libstemmer_c/libstemmer/libstemmer.c
copy to libstemmer_c/libstemmer/libstemmer_utf8.c.disabled
index 1e51026..793a081 100644
--- a/libstemmer_c/libstemmer/libstemmer.c
+++ b/libstemmer_c/libstemmer/libstemmer_utf8.c.disabled
@@ -3,7 +3,7 @@
 #include <string.h>
 #include "../include/libstemmer.h"
 #include "../runtime/api.h"
-#include "modules.h"
+#include "modules_utf8.h"
 
 struct sb_stemmer {
     struct SN_env * (*create)(void);
@@ -19,7 +19,8 @@ sb_stemmer_list(void)
     return algorithm_names;
 }
 
-static stemmer_encoding sb_getenc(const char * charenc)
+static stemmer_encoding_t
+sb_getenc(const char * charenc)
 {
     struct stemmer_encoding * encoding;
     if (charenc == NULL) return ENC_UTF_8;
@@ -33,7 +34,7 @@ static stemmer_encoding sb_getenc(const char * charenc)
 extern struct sb_stemmer *
 sb_stemmer_new(const char * algorithm, const char * charenc)
 {
-    stemmer_encoding enc;
+    stemmer_encoding_t enc;
     struct stemmer_modules * module;
     struct sb_stemmer * stemmer =
 	    (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer));
diff --git a/libstemmer_c/libstemmer/modules.h b/libstemmer_c/libstemmer/modules.h
index f4a5118..7a1f685 100644
--- a/libstemmer_c/libstemmer/modules.h
+++ b/libstemmer_c/libstemmer/modules.h
@@ -4,7 +4,8 @@
  * Do not edit manually.
  *
  * Modules included by this file are: danish, dutch, english, finnish, french,
- * german, italian, norwegian, porter, portuguese, russian, spanish, swedish
+ * german, hungarian, italian, norwegian, porter, portuguese, romanian,
+ * russian, spanish, swedish, turkish
  */
 
 #include "../src_c/stem_ISO_8859_1_danish.h"
@@ -19,6 +20,8 @@
 #include "../src_c/stem_UTF_8_french.h"
 #include "../src_c/stem_ISO_8859_1_german.h"
 #include "../src_c/stem_UTF_8_german.h"
+#include "../src_c/stem_ISO_8859_1_hungarian.h"
+#include "../src_c/stem_UTF_8_hungarian.h"
 #include "../src_c/stem_ISO_8859_1_italian.h"
 #include "../src_c/stem_UTF_8_italian.h"
 #include "../src_c/stem_ISO_8859_1_norwegian.h"
@@ -27,34 +30,39 @@
 #include "../src_c/stem_UTF_8_porter.h"
 #include "../src_c/stem_ISO_8859_1_portuguese.h"
 #include "../src_c/stem_UTF_8_portuguese.h"
+#include "../src_c/stem_ISO_8859_2_romanian.h"
+#include "../src_c/stem_UTF_8_romanian.h"
 #include "../src_c/stem_KOI8_R_russian.h"
 #include "../src_c/stem_UTF_8_russian.h"
 #include "../src_c/stem_ISO_8859_1_spanish.h"
 #include "../src_c/stem_UTF_8_spanish.h"
 #include "../src_c/stem_ISO_8859_1_swedish.h"
 #include "../src_c/stem_UTF_8_swedish.h"
+#include "../src_c/stem_UTF_8_turkish.h"
 
 typedef enum {
-  ENC_UNKNOWN,
+  ENC_UNKNOWN=0,
   ENC_ISO_8859_1,
+  ENC_ISO_8859_2,
   ENC_KOI8_R,
   ENC_UTF_8
-} stemmer_encoding;
+} stemmer_encoding_t;
 
 struct stemmer_encoding {
   const char * name;
-  stemmer_encoding enc;
+  stemmer_encoding_t enc;
 };
 static struct stemmer_encoding encodings[] = {
   {"ISO_8859_1", ENC_ISO_8859_1},
+  {"ISO_8859_2", ENC_ISO_8859_2},
   {"KOI8_R", ENC_KOI8_R},
   {"UTF_8", ENC_UTF_8},
-  {0,0}
+  {0,ENC_UNKNOWN}
 };
 
 struct stemmer_modules {
   const char * name;
-  stemmer_encoding enc; 
+  stemmer_encoding_t enc; 
   struct SN_env * (*create)(void);
   void (*close)(struct SN_env *);
   int (*stem)(struct SN_env *);
@@ -102,6 +110,12 @@ static struct stemmer_modules modules[] = {
   {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
   {"german", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem},
   {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+  {"hu", ENC_ISO_8859_1, hungarian_ISO_8859_1_create_env, hungarian_ISO_8859_1_close_env, hungarian_ISO_8859_1_stem},
+  {"hu", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem},
+  {"hun", ENC_ISO_8859_1, hungarian_ISO_8859_1_create_env, hungarian_ISO_8859_1_close_env, hungarian_ISO_8859_1_stem},
+  {"hun", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem},
+  {"hungarian", ENC_ISO_8859_1, hungarian_ISO_8859_1_create_env, hungarian_ISO_8859_1_close_env, hungarian_ISO_8859_1_stem},
+  {"hungarian", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem},
   {"it", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem},
   {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem},
   {"ita", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem},
@@ -126,8 +140,16 @@ static struct stemmer_modules modules[] = {
   {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem},
   {"pt", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem},
   {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem},
+  {"ro", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem},
+  {"ro", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
+  {"romanian", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem},
+  {"romanian", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
+  {"ron", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem},
+  {"ron", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
   {"ru", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem},
   {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem},
+  {"rum", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem},
+  {"rum", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
   {"rus", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem},
   {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem},
   {"russian", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem},
@@ -142,7 +164,10 @@ static struct stemmer_modules modules[] = {
   {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem},
   {"swedish", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem},
   {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem},
-  {0,0,0,0,0}
+  {"tr", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem},
+  {"tur", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem},
+  {"turkish", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem},
+  {0,ENC_UNKNOWN,0,0,0}
 };
 static const char * algorithm_names[] = {
   "danish", 
@@ -151,12 +176,15 @@ static const char * algorithm_names[] = {
   "finnish", 
   "french", 
   "german", 
+  "hungarian", 
   "italian", 
   "norwegian", 
   "porter", 
   "portuguese", 
+  "romanian", 
   "russian", 
   "spanish", 
   "swedish", 
+  "turkish", 
   0
 };
diff --git a/libstemmer_c/libstemmer/modules.txt b/libstemmer_c/libstemmer/modules.txt
new file mode 100644
index 0000000..ddde920
--- /dev/null
+++ b/libstemmer_c/libstemmer/modules.txt
@@ -0,0 +1,50 @@
+# This file contains a list of stemmers to include in the distribution.
+# The format is a set of space separated lines - on each line:
+#  First item is name of stemmer.
+#  Second item is comma separated list of character sets.
+#  Third item is comma separated list of names to refer to the stemmer by.
+#
+# Lines starting with a #, or blank lines, are ignored.
+
+# List all the main algorithms for each language, in UTF-8, and also with
+# the most commonly used encoding.
+
+danish          UTF_8,ISO_8859_1        danish,da,dan
+dutch           UTF_8,ISO_8859_1        dutch,nl,dut,nld
+english         UTF_8,ISO_8859_1        english,en,eng
+finnish         UTF_8,ISO_8859_1        finnish,fi,fin
+french          UTF_8,ISO_8859_1        french,fr,fre,fra
+german          UTF_8,ISO_8859_1        german,de,ger,deu
+hungarian       UTF_8,ISO_8859_1        hungarian,hu,hun
+italian         UTF_8,ISO_8859_1        italian,it,ita
+norwegian       UTF_8,ISO_8859_1        norwegian,no,nor
+portuguese      UTF_8,ISO_8859_1        portuguese,pt,por
+romanian        UTF_8,ISO_8859_2        romanian,ro,rum,ron
+russian         UTF_8,KOI8_R            russian,ru,rus
+spanish         UTF_8,ISO_8859_1        spanish,es,esl,spa
+swedish         UTF_8,ISO_8859_1        swedish,sv,swe
+turkish         UTF_8                   turkish,tr,tur
+
+# Also include the traditional porter algorithm for english.
+# The porter algorithm is included in the libstemmer distribution to assist
+# with backwards compatibility, but for new systems the english algorithm
+# should be used in preference.
+porter          UTF_8,ISO_8859_1        porter
+
+# Some other stemmers in the snowball project are not included in the standard
+# distribution. To compile a libstemmer with them in, add them to this list,
+# and regenerate the distribution. (You will need a full source checkout for
+# this.) They are included in the snowball website as curiosities, but are not
+# intended for general use, and use of them is is not fully supported.  These
+# algorithms are:
+#
+# german2          - This is a slight modification of the german stemmer.
+#german2          UTF_8,ISO_8859_1        german2
+#
+# kraaij_pohlmann  - This is a different dutch stemmer.
+#kraaij_pohlmann  UTF_8,ISO_8859_1        kraaij_pohlmann
+#
+# lovins           - This is an english stemmer, but fairly outdated, and
+#                    only really applicable to a restricted type of input text
+#                    (keywords in academic publications).
+#lovins           UTF_8,ISO_8859_1        lovins
diff --git a/libstemmer_c/libstemmer/modules_utf8.h b/libstemmer_c/libstemmer/modules_utf8.h
new file mode 100644
index 0000000..6a7cc92
--- /dev/null
+++ b/libstemmer_c/libstemmer/modules_utf8.h
@@ -0,0 +1,121 @@
+/* libstemmer/modules_utf8.h: List of stemming modules.
+ *
+ * This file is generated by mkmodules.pl from a list of module names.
+ * Do not edit manually.
+ *
+ * Modules included by this file are: danish, dutch, english, finnish, french,
+ * german, hungarian, italian, norwegian, porter, portuguese, romanian,
+ * russian, spanish, swedish, turkish
+ */
+
+#include "../src_c/stem_UTF_8_danish.h"
+#include "../src_c/stem_UTF_8_dutch.h"
+#include "../src_c/stem_UTF_8_english.h"
+#include "../src_c/stem_UTF_8_finnish.h"
+#include "../src_c/stem_UTF_8_french.h"
+#include "../src_c/stem_UTF_8_german.h"
+#include "../src_c/stem_UTF_8_hungarian.h"
+#include "../src_c/stem_UTF_8_italian.h"
+#include "../src_c/stem_UTF_8_norwegian.h"
+#include "../src_c/stem_UTF_8_porter.h"
+#include "../src_c/stem_UTF_8_portuguese.h"
+#include "../src_c/stem_UTF_8_romanian.h"
+#include "../src_c/stem_UTF_8_russian.h"
+#include "../src_c/stem_UTF_8_spanish.h"
+#include "../src_c/stem_UTF_8_swedish.h"
+#include "../src_c/stem_UTF_8_turkish.h"
+
+typedef enum {
+  ENC_UNKNOWN=0,
+  ENC_UTF_8
+} stemmer_encoding_t;
+
+struct stemmer_encoding {
+  const char * name;
+  stemmer_encoding_t enc;
+};
+static struct stemmer_encoding encodings[] = {
+  {"UTF_8", ENC_UTF_8},
+  {0,ENC_UNKNOWN}
+};
+
+struct stemmer_modules {
+  const char * name;
+  stemmer_encoding_t enc; 
+  struct SN_env * (*create)(void);
+  void (*close)(struct SN_env *);
+  int (*stem)(struct SN_env *);
+};
+static struct stemmer_modules modules[] = {
+  {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem},
+  {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem},
+  {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem},
+  {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+  {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+  {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+  {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+  {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem},
+  {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem},
+  {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem},
+  {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+  {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+  {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem},
+  {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem},
+  {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem},
+  {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+  {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+  {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+  {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+  {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+  {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+  {"hu", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem},
+  {"hun", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem},
+  {"hungarian", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem},
+  {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem},
+  {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem},
+  {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem},
+  {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+  {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+  {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem},
+  {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem},
+  {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem},
+  {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem},
+  {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem},
+  {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem},
+  {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem},
+  {"ro", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
+  {"romanian", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
+  {"ron", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
+  {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem},
+  {"rum", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem},
+  {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem},
+  {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem},
+  {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+  {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+  {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem},
+  {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem},
+  {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem},
+  {"tr", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem},
+  {"tur", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem},
+  {"turkish", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem},
+  {0,ENC_UNKNOWN,0,0,0}
+};
+static const char * algorithm_names[] = {
+  "danish", 
+  "dutch", 
+  "english", 
+  "finnish", 
+  "french", 
+  "german", 
+  "hungarian", 
+  "italian", 
+  "norwegian", 
+  "porter", 
+  "portuguese", 
+  "romanian", 
+  "russian", 
+  "spanish", 
+  "swedish", 
+  "turkish", 
+  0
+};
diff --git a/libstemmer_c/libstemmer/modules_utf8.txt b/libstemmer_c/libstemmer/modules_utf8.txt
new file mode 100644
index 0000000..60a0e1d
--- /dev/null
+++ b/libstemmer_c/libstemmer/modules_utf8.txt
@@ -0,0 +1,49 @@
+# This file contains a list of stemmers to include in the distribution.
+# The format is a set of space separated lines - on each line:
+#  First item is name of stemmer.
+#  Second item is comma separated list of character sets.
+#  Third item is comma separated list of names to refer to the stemmer by.
+#
+# Lines starting with a #, or blank lines, are ignored.
+
+# List all the main algorithms for each language, in UTF-8.
+
+danish          UTF_8                   danish,da,dan
+dutch           UTF_8                   dutch,nl,dut,nld
+english         UTF_8                   english,en,eng
+finnish         UTF_8                   finnish,fi,fin
+french          UTF_8                   french,fr,fre,fra
+german          UTF_8                   german,de,ger,deu
+hungarian       UTF_8                   hungarian,hu,hun
+italian         UTF_8                   italian,it,ita
+norwegian       UTF_8                   norwegian,no,nor
+portuguese      UTF_8                   portuguese,pt,por
+romanian        UTF_8                   romanian,ro,rum,ron
+russian         UTF_8                   russian,ru,rus
+spanish         UTF_8                   spanish,es,esl,spa
+swedish         UTF_8                   swedish,sv,swe
+turkish         UTF_8                   turkish,tr,tur
+
+# Also include the traditional porter algorithm for english.
+# The porter algorithm is included in the libstemmer distribution to assist
+# with backwards compatibility, but for new systems the english algorithm
+# should be used in preference.
+porter          UTF_8                   porter
+
+# Some other stemmers in the snowball project are not included in the standard
+# distribution. To compile a libstemmer with them in, add them to this list,
+# and regenerate the distribution. (You will need a full source checkout for
+# this.) They are included in the snowball website as curiosities, but are not
+# intended for general use, and use of them is is not fully supported.  These
+# algorithms are:
+#
+# german2          - This is a slight modification of the german stemmer.
+#german2          UTF_8                   german2
+#
+# kraaij_pohlmann  - This is a different dutch stemmer.
+#kraaij_pohlmann  UTF_8                   kraaij_pohlmann
+#
+# lovins           - This is an english stemmer, but fairly outdated, and
+#                    only really applicable to a restricted type of input text
+#                    (keywords in academic publications).
+#lovins           UTF_8                   lovins
diff --git a/libstemmer_c/mkinc.mak b/libstemmer_c/mkinc.mak
index fdf2fa2..0c07199 100644
--- a/libstemmer_c/mkinc.mak
+++ b/libstemmer_c/mkinc.mak
@@ -1,63 +1,82 @@
+# libstemmer/mkinc.mak: List of stemming module source files
+#
+# This file is generated by mkmodules.pl from a list of module names.
+# Do not edit manually.
+#
+# Modules included by this file are: danish, dutch, english, finnish, french,
+# german, hungarian, italian, norwegian, porter, portuguese, romanian,
+# russian, spanish, swedish, turkish
+
 snowball_sources= \
-libstemmer/libstemmer.c \
-runtime/api.c \
-runtime/utilities.c \
-src_c/stem_ISO_8859_1_danish.c \
-src_c/stem_ISO_8859_1_dutch.c \
-src_c/stem_ISO_8859_1_english.c \
-src_c/stem_ISO_8859_1_finnish.c \
-src_c/stem_ISO_8859_1_french.c \
-src_c/stem_ISO_8859_1_german.c \
-src_c/stem_ISO_8859_1_italian.c \
-src_c/stem_ISO_8859_1_norwegian.c \
-src_c/stem_ISO_8859_1_porter.c \
-src_c/stem_ISO_8859_1_portuguese.c \
-src_c/stem_ISO_8859_1_spanish.c \
-src_c/stem_ISO_8859_1_swedish.c \
-src_c/stem_KOI8_R_russian.c \
-src_c/stem_UTF_8_danish.c \
-src_c/stem_UTF_8_dutch.c \
-src_c/stem_UTF_8_english.c \
-src_c/stem_UTF_8_finnish.c \
-src_c/stem_UTF_8_french.c \
-src_c/stem_UTF_8_german.c \
-src_c/stem_UTF_8_italian.c \
-src_c/stem_UTF_8_norwegian.c \
-src_c/stem_UTF_8_porter.c \
-src_c/stem_UTF_8_portuguese.c \
-src_c/stem_UTF_8_russian.c \
-src_c/stem_UTF_8_spanish.c \
-src_c/stem_UTF_8_swedish.c
+  src_c/stem_ISO_8859_1_danish.c \
+  src_c/stem_UTF_8_danish.c \
+  src_c/stem_ISO_8859_1_dutch.c \
+  src_c/stem_UTF_8_dutch.c \
+  src_c/stem_ISO_8859_1_english.c \
+  src_c/stem_UTF_8_english.c \
+  src_c/stem_ISO_8859_1_finnish.c \
+  src_c/stem_UTF_8_finnish.c \
+  src_c/stem_ISO_8859_1_french.c \
+  src_c/stem_UTF_8_french.c \
+  src_c/stem_ISO_8859_1_german.c \
+  src_c/stem_UTF_8_german.c \
+  src_c/stem_ISO_8859_1_hungarian.c \
+  src_c/stem_UTF_8_hungarian.c \
+  src_c/stem_ISO_8859_1_italian.c \
+  src_c/stem_UTF_8_italian.c \
+  src_c/stem_ISO_8859_1_norwegian.c \
+  src_c/stem_UTF_8_norwegian.c \
+  src_c/stem_ISO_8859_1_porter.c \
+  src_c/stem_UTF_8_porter.c \
+  src_c/stem_ISO_8859_1_portuguese.c \
+  src_c/stem_UTF_8_portuguese.c \
+  src_c/stem_ISO_8859_2_romanian.c \
+  src_c/stem_UTF_8_romanian.c \
+  src_c/stem_KOI8_R_russian.c \
+  src_c/stem_UTF_8_russian.c \
+  src_c/stem_ISO_8859_1_spanish.c \
+  src_c/stem_UTF_8_spanish.c \
+  src_c/stem_ISO_8859_1_swedish.c \
+  src_c/stem_UTF_8_swedish.c \
+  src_c/stem_UTF_8_turkish.c \
+  runtime/api.c \
+  runtime/utilities.c \
+  libstemmer/libstemmer.c
 
 snowball_headers= \
-include/libstemmer.h \
-libstemmer/modules.h \
-runtime/api.h \
-runtime/header.h \
-src_c/stem_ISO_8859_1_danish.h \
-src_c/stem_ISO_8859_1_dutch.h \
-src_c/stem_ISO_8859_1_english.h \
-src_c/stem_ISO_8859_1_finnish.h \
-src_c/stem_ISO_8859_1_french.h \
-src_c/stem_ISO_8859_1_german.h \
-src_c/stem_ISO_8859_1_italian.h \
-src_c/stem_ISO_8859_1_norwegian.h \
-src_c/stem_ISO_8859_1_porter.h \
-src_c/stem_ISO_8859_1_portuguese.h \
-src_c/stem_ISO_8859_1_spanish.h \
-src_c/stem_ISO_8859_1_swedish.h \
-src_c/stem_KOI8_R_russian.h \
-src_c/stem_UTF_8_danish.h \
-src_c/stem_UTF_8_dutch.h \
-src_c/stem_UTF_8_english.h \
-src_c/stem_UTF_8_finnish.h \
-src_c/stem_UTF_8_french.h \
-src_c/stem_UTF_8_german.h \
-src_c/stem_UTF_8_italian.h \
-src_c/stem_UTF_8_norwegian.h \
-src_c/stem_UTF_8_porter.h \
-src_c/stem_UTF_8_portuguese.h \
-src_c/stem_UTF_8_russian.h \
-src_c/stem_UTF_8_spanish.h \
-src_c/stem_UTF_8_swedish.h
+  src_c/stem_ISO_8859_1_danish.h \
+  src_c/stem_UTF_8_danish.h \
+  src_c/stem_ISO_8859_1_dutch.h \
+  src_c/stem_UTF_8_dutch.h \
+  src_c/stem_ISO_8859_1_english.h \
+  src_c/stem_UTF_8_english.h \
+  src_c/stem_ISO_8859_1_finnish.h \
+  src_c/stem_UTF_8_finnish.h \
+  src_c/stem_ISO_8859_1_french.h \
+  src_c/stem_UTF_8_french.h \
+  src_c/stem_ISO_8859_1_german.h \
+  src_c/stem_UTF_8_german.h \
+  src_c/stem_ISO_8859_1_hungarian.h \
+  src_c/stem_UTF_8_hungarian.h \
+  src_c/stem_ISO_8859_1_italian.h \
+  src_c/stem_UTF_8_italian.h \
+  src_c/stem_ISO_8859_1_norwegian.h \
+  src_c/stem_UTF_8_norwegian.h \
+  src_c/stem_ISO_8859_1_porter.h \
+  src_c/stem_UTF_8_porter.h \
+  src_c/stem_ISO_8859_1_portuguese.h \
+  src_c/stem_UTF_8_portuguese.h \
+  src_c/stem_ISO_8859_2_romanian.h \
+  src_c/stem_UTF_8_romanian.h \
+  src_c/stem_KOI8_R_russian.h \
+  src_c/stem_UTF_8_russian.h \
+  src_c/stem_ISO_8859_1_spanish.h \
+  src_c/stem_UTF_8_spanish.h \
+  src_c/stem_ISO_8859_1_swedish.h \
+  src_c/stem_UTF_8_swedish.h \
+  src_c/stem_UTF_8_turkish.h \
+  include/libstemmer.h \
+  libstemmer/modules.h \
+  runtime/api.h \
+  runtime/header.h
 
diff --git a/libstemmer_c/mkinc_utf8.mak b/libstemmer_c/mkinc_utf8.mak
new file mode 100644
index 0000000..a8b260a
--- /dev/null
+++ b/libstemmer_c/mkinc_utf8.mak
@@ -0,0 +1,52 @@
+# libstemmer/mkinc_utf8.mak: List of stemming module source files
+#
+# This file is generated by mkmodules.pl from a list of module names.
+# Do not edit manually.
+#
+# Modules included by this file are: danish, dutch, english, finnish, french,
+# german, hungarian, italian, norwegian, porter, portuguese, romanian,
+# russian, spanish, swedish, turkish
+
+snowball_sources= \
+  src_c/stem_UTF_8_danish.c \
+  src_c/stem_UTF_8_dutch.c \
+  src_c/stem_UTF_8_english.c \
+  src_c/stem_UTF_8_finnish.c \
+  src_c/stem_UTF_8_french.c \
+  src_c/stem_UTF_8_german.c \
+  src_c/stem_UTF_8_hungarian.c \
+  src_c/stem_UTF_8_italian.c \
+  src_c/stem_UTF_8_norwegian.c \
+  src_c/stem_UTF_8_porter.c \
+  src_c/stem_UTF_8_portuguese.c \
+  src_c/stem_UTF_8_romanian.c \
+  src_c/stem_UTF_8_russian.c \
+  src_c/stem_UTF_8_spanish.c \
+  src_c/stem_UTF_8_swedish.c \
+  src_c/stem_UTF_8_turkish.c \
+  runtime/api.c \
+  runtime/utilities.c \
+  libstemmer/libstemmer_utf8.c
+
+snowball_headers= \
+  src_c/stem_UTF_8_danish.h \
+  src_c/stem_UTF_8_dutch.h \
+  src_c/stem_UTF_8_english.h \
+  src_c/stem_UTF_8_finnish.h \
+  src_c/stem_UTF_8_french.h \
+  src_c/stem_UTF_8_german.h \
+  src_c/stem_UTF_8_hungarian.h \
+  src_c/stem_UTF_8_italian.h \
+  src_c/stem_UTF_8_norwegian.h \
+  src_c/stem_UTF_8_porter.h \
+  src_c/stem_UTF_8_portuguese.h \
+  src_c/stem_UTF_8_romanian.h \
+  src_c/stem_UTF_8_russian.h \
+  src_c/stem_UTF_8_spanish.h \
+  src_c/stem_UTF_8_swedish.h \
+  src_c/stem_UTF_8_turkish.h \
+  include/libstemmer.h \
+  libstemmer/modules_utf8.h \
+  runtime/api.h \
+  runtime/header.h
+
diff --git a/libstemmer_c/runtime/api.c b/libstemmer_c/runtime/api.c
index 9dd5a3b..40039ef 100644
--- a/libstemmer_c/runtime/api.c
+++ b/libstemmer_c/runtime/api.c
@@ -19,43 +19,40 @@ extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size)
             z->S[i] = create_s();
             if (z->S[i] == NULL) goto error;
         }
-        z->S_size = S_size;
     }
 
     if (I_size)
     {
         z->I = (int *) calloc(I_size, sizeof(int));
         if (z->I == NULL) goto error;
-        z->I_size = I_size;
     }
 
     if (B_size)
     {
-        z->B = (symbol *) calloc(B_size, sizeof(symbol));
+        z->B = (unsigned char *) calloc(B_size, sizeof(unsigned char));
         if (z->B == NULL) goto error;
-        z->B_size = B_size;
     }
 
     return z;
 error:
-    SN_close_env(z);
+    SN_close_env(z, S_size);
     return NULL;
 }
 
-extern void SN_close_env(struct SN_env * z)
+extern void SN_close_env(struct SN_env * z, int S_size)
 {
     if (z == NULL) return;
-    if (z->S_size)
+    if (S_size)
     {
         int i;
-        for (i = 0; i < z->S_size; i++)
+        for (i = 0; i < S_size; i++)
         {
             lose_s(z->S[i]);
         }
         free(z->S);
     }
-    if (z->I_size) free(z->I);
-    if (z->B_size) free(z->B);
+    free(z->I);
+    free(z->B);
     if (z->p) lose_s(z->p);
     free(z);
 }
diff --git a/libstemmer_c/runtime/api.h b/libstemmer_c/runtime/api.h
index adc2282..8b997f0 100644
--- a/libstemmer_c/runtime/api.h
+++ b/libstemmer_c/runtime/api.h
@@ -13,15 +13,14 @@ typedef unsigned char symbol;
 
 struct SN_env {
     symbol * p;
-    int c; int a; int l; int lb; int bra; int ket;
-    int S_size; int I_size; int B_size;
+    int c; int l; int lb; int bra; int ket;
     symbol * * S;
     int * I;
-    symbol * B;
+    unsigned char * B;
 };
 
 extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size);
-extern void SN_close_env(struct SN_env * z);
+extern void SN_close_env(struct SN_env * z, int S_size);
 
 extern int SN_set_current(struct SN_env * z, int size, const symbol * s);
 
diff --git a/libstemmer_c/runtime/header.h b/libstemmer_c/runtime/header.h
index c0721d6..4d3078f 100644
--- a/libstemmer_c/runtime/header.h
+++ b/libstemmer_c/runtime/header.h
@@ -14,7 +14,7 @@
 
 struct among
 {   int s_size;     /* number of chars in string */
-    symbol * s;       /* search string */
+    const symbol * s;       /* search string */
     int substring_i;/* index to longest matching substring */
     int result;     /* result of the lookup */
     int (* function)(struct SN_env *);
@@ -25,31 +25,31 @@ extern void lose_s(symbol * p);
 
 extern int skip_utf8(const symbol * p, int c, int lb, int l, int n);
 
-extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max);
-extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max);
-extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max);
-extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max);
+extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
+extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
+extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
+extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
 
-extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max);
-extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max);
-extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max);
-extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max);
+extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
+extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
+extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
+extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
 
-extern int eq_s(struct SN_env * z, int s_size, symbol * s);
-extern int eq_s_b(struct SN_env * z, int s_size, symbol * s);
-extern int eq_v(struct SN_env * z, symbol * p);
-extern int eq_v_b(struct SN_env * z, symbol * p);
+extern int eq_s(struct SN_env * z, int s_size, const symbol * s);
+extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s);
+extern int eq_v(struct SN_env * z, const symbol * p);
+extern int eq_v_b(struct SN_env * z, const symbol * p);
 
-extern int find_among(struct SN_env * z, struct among * v, int v_size);
-extern int find_among_b(struct SN_env * z, struct among * v, int v_size);
+extern int find_among(struct SN_env * z, const struct among * v, int v_size);
+extern int find_among_b(struct SN_env * z, const struct among * v, int v_size);
 
 extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment);
-extern int slice_from_s(struct SN_env * z, int s_size, symbol * s);
-extern int slice_from_v(struct SN_env * z, symbol * p);
+extern int slice_from_s(struct SN_env * z, int s_size, const symbol * s);
+extern int slice_from_v(struct SN_env * z, const symbol * p);
 extern int slice_del(struct SN_env * z);
 
-extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s);
-extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p);
+extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s);
+extern int insert_v(struct SN_env * z, int bra, int ket, const symbol * p);
 
 extern symbol * slice_to(struct SN_env * z, symbol * p);
 extern symbol * assign_to(struct SN_env * z, symbol * p);
diff --git a/libstemmer_c/runtime/utilities.c b/libstemmer_c/runtime/utilities.c
index a6bfa5c..1840f02 100644
--- a/libstemmer_c/runtime/utilities.c
+++ b/libstemmer_c/runtime/utilities.c
@@ -25,8 +25,8 @@ extern void lose_s(symbol * p) {
 }
 
 /*
-   new_p = X_skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c
-   if n +ve, or n characters backwards from p +c - 1 if n -ve. new_p is the new
+   new_p = skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c
+   if n +ve, or n characters backwards from p + c - 1 if n -ve. new_p is the new
    position, or 0 on failure.
 
    -- used to implement hop and next in the utf8 case.
@@ -76,7 +76,7 @@ static int get_utf8(const symbol * p, int c, int l, int * slot) {
     if (b0 < 0xE0 || c == l) {   /* 1110 0000 */
         * slot = (b0 & 0x1F) << 6 | (b1 & 0x3F); return 2;
     }
-    * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (*p & 0x3F); return 3;
+    * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (p[c] & 0x3F); return 3;
 }
 
 static int get_b_utf8(const symbol * p, int c, int lb, int * slot) {
@@ -90,94 +90,126 @@ static int get_b_utf8(const symbol * p, int c, int lb, int * slot) {
     if (b1 >= 0xC0 || c == lb) {   /* 1100 0000 */
         * slot = (b1 & 0x1F) << 6 | (b0 & 0x3F); return 2;
     }
-    * slot = (*p & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3;
+    * slot = (p[c] & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3;
 }
 
-extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    int w = get_utf8(z->p, z->c, z->l, & ch);
-    unless (w) return 0;
-    if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c += w; return 1;
+extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	int w = get_utf8(z->p, z->c, z->l, & ch);
+	unless (w) return -1;
+	if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return w;
+	z->c += w;
+    } while (repeat);
+    return 0;
 }
 
-extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    int w = get_b_utf8(z->p, z->c, z->lb, & ch);
-    unless (w) return 0;
-    if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c -= w; return 1;
+extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	int w = get_b_utf8(z->p, z->c, z->lb, & ch);
+	unless (w) return -1;
+	if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return w;
+	z->c -= w;
+    } while (repeat);
+    return 0;
 }
 
-extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    int w = get_utf8(z->p, z->c, z->l, & ch);
-    unless (w) return 0;
-    unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c += w; return 1;
+extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	int w = get_utf8(z->p, z->c, z->l, & ch);
+	unless (w) return -1;
+	unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return w;
+	z->c += w;
+    } while (repeat);
+    return 0;
 }
 
-extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    int w = get_b_utf8(z->p, z->c, z->lb, & ch);
-    unless (w) return 0;
-    unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c -= w; return 1;
+extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	int w = get_b_utf8(z->p, z->c, z->lb, & ch);
+	unless (w) return -1;
+	unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return w;
+	z->c -= w;
+    } while (repeat);
+    return 0;
 }
 
 /* Code for character groupings: non-utf8 cases */
 
-extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    if (z->c >= z->l) return 0;
-    ch = z->p[z->c];
-    if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c++; return 1;
+extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	if (z->c >= z->l) return -1;
+	ch = z->p[z->c];
+	if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return 1;
+	z->c++;
+    } while (repeat);
+    return 0;
 }
 
-extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    if (z->c <= z->lb) return 0;
-    ch = z->p[z->c - 1];
-    if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c--; return 1;
+extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	if (z->c <= z->lb) return -1;
+	ch = z->p[z->c - 1];
+	if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return 1;
+	z->c--;
+    } while (repeat);
+    return 0;
 }
 
-extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    if (z->c >= z->l) return 0;
-    ch = z->p[z->c];
-    unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c++; return 1;
+extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	if (z->c >= z->l) return -1;
+	ch = z->p[z->c];
+	unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return 1;
+	z->c++;
+    } while (repeat);
+    return 0;
 }
 
-extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) {
-    int ch;
-    if (z->c <= z->lb) return 0;
-    ch = z->p[z->c - 1];
-    unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0;
-    z->c--; return 1;
+extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) {
+    do {
+	int ch;
+	if (z->c <= z->lb) return -1;
+	ch = z->p[z->c - 1];
+	unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)
+	    return 1;
+	z->c--;
+    } while (repeat);
+    return 0;
 }
 
-extern int eq_s(struct SN_env * z, int s_size, symbol * s) {
+extern int eq_s(struct SN_env * z, int s_size, const symbol * s) {
     if (z->l - z->c < s_size || memcmp(z->p + z->c, s, s_size * sizeof(symbol)) != 0) return 0;
     z->c += s_size; return 1;
 }
 
-extern int eq_s_b(struct SN_env * z, int s_size, symbol * s) {
+extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s) {
     if (z->c - z->lb < s_size || memcmp(z->p + z->c - s_size, s, s_size * sizeof(symbol)) != 0) return 0;
     z->c -= s_size; return 1;
 }
 
-extern int eq_v(struct SN_env * z, symbol * p) {
+extern int eq_v(struct SN_env * z, const symbol * p) {
     return eq_s(z, SIZE(p), p);
 }
 
-extern int eq_v_b(struct SN_env * z, symbol * p) {
+extern int eq_v_b(struct SN_env * z, const symbol * p) {
     return eq_s_b(z, SIZE(p), p);
 }
 
-extern int find_among(struct SN_env * z, struct among * v, int v_size) {
+extern int find_among(struct SN_env * z, const struct among * v, int v_size) {
 
     int i = 0;
     int j = v_size;
@@ -185,7 +217,7 @@ extern int find_among(struct SN_env * z, struct among * v, int v_size) {
     int c = z->c; int l = z->l;
     symbol * q = z->p + c;
 
-    struct among * w;
+    const struct among * w;
 
     int common_i = 0;
     int common_j = 0;
@@ -198,9 +230,9 @@ extern int find_among(struct SN_env * z, struct among * v, int v_size) {
         int common = common_i < common_j ? common_i : common_j; /* smaller */
         w = v + k;
         {
-            int i; for (i = common; i < w->s_size; i++) {
+            int i2; for (i2 = common; i2 < w->s_size; i2++) {
                 if (c + common == l) { diff = -1; break; }
-                diff = q[common] - w->s[i];
+                diff = q[common] - w->s[i2];
                 if (diff != 0) break;
                 common++;
             }
@@ -237,7 +269,7 @@ extern int find_among(struct SN_env * z, struct among * v, int v_size) {
 
 /* find_among_b is for backwards processing. Same comments apply */
 
-extern int find_among_b(struct SN_env * z, struct among * v, int v_size) {
+extern int find_among_b(struct SN_env * z, const struct among * v, int v_size) {
 
     int i = 0;
     int j = v_size;
@@ -245,7 +277,7 @@ extern int find_among_b(struct SN_env * z, struct among * v, int v_size) {
     int c = z->c; int lb = z->lb;
     symbol * q = z->p + c - 1;
 
-    struct among * w;
+    const struct among * w;
 
     int common_i = 0;
     int common_j = 0;
@@ -258,9 +290,9 @@ extern int find_among_b(struct SN_env * z, struct among * v, int v_size) {
         int common = common_i < common_j ? common_i : common_j;
         w = v + k;
         {
-            int i; for (i = w->s_size - 1 - common; i >= 0; i--) {
+            int i2; for (i2 = w->s_size - 1 - common; i2 >= 0; i2--) {
                 if (c - common == lb) { diff = -1; break; }
-                diff = q[- common] - w->s[i];
+                diff = q[- common] - w->s[i2];
                 if (diff != 0) break;
                 common++;
             }
@@ -362,12 +394,12 @@ static int slice_check(struct SN_env * z) {
     return 0;
 }
 
-extern int slice_from_s(struct SN_env * z, int s_size, symbol * s) {
+extern int slice_from_s(struct SN_env * z, int s_size, const symbol * s) {
     if (slice_check(z)) return -1;
     return replace_s(z, z->bra, z->ket, s_size, s, NULL);
 }
 
-extern int slice_from_v(struct SN_env * z, symbol * p) {
+extern int slice_from_v(struct SN_env * z, const symbol * p) {
     return slice_from_s(z, SIZE(p), p);
 }
 
@@ -375,7 +407,7 @@ extern int slice_del(struct SN_env * z) {
     return slice_from_s(z, 0, 0);
 }
 
-extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s) {
+extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s) {
     int adjustment;
     if (replace_s(z, bra, ket, s_size, s, &adjustment))
         return -1;
@@ -384,7 +416,7 @@ extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s)
     return 0;
 }
 
-extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p) {
+extern int insert_v(struct SN_env * z, int bra, int ket, const symbol * p) {
     int adjustment;
     if (replace_s(z, bra, ket, SIZE(p), p, &adjustment))
         return -1;
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_danish.c b/libstemmer_c/src_c/stem_ISO_8859_1_danish.c
index fe0fa76..a47bf8b 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_danish.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_danish.c
@@ -3,50 +3,64 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int danish_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_undouble(struct SN_env * z);
 static int r_other_suffix(struct SN_env * z);
 static int r_consonant_pair(struct SN_env * z);
 static int r_main_suffix(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * danish_ISO_8859_1_create_env(void);
 extern void danish_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_0[3] = { 'h', 'e', 'd' };
-static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' };
-static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' };
-static symbol s_0_3[1] = { 'e' };
-static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' };
-static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' };
-static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' };
-static symbol s_0_7[3] = { 'e', 'n', 'e' };
-static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' };
-static symbol s_0_9[3] = { 'e', 'r', 'e' };
-static symbol s_0_10[2] = { 'e', 'n' };
-static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' };
-static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' };
-static symbol s_0_13[2] = { 'e', 'r' };
-static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' };
-static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' };
-static symbol s_0_16[1] = { 's' };
-static symbol s_0_17[4] = { 'h', 'e', 'd', 's' };
-static symbol s_0_18[2] = { 'e', 's' };
-static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' };
-static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' };
-static symbol s_0_21[4] = { 'e', 'n', 'e', 's' };
-static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' };
-static symbol s_0_23[4] = { 'e', 'r', 'e', 's' };
-static symbol s_0_24[3] = { 'e', 'n', 's' };
-static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' };
-static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' };
-static symbol s_0_27[3] = { 'e', 'r', 's' };
-static symbol s_0_28[3] = { 'e', 't', 's' };
-static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' };
-static symbol s_0_30[2] = { 'e', 't' };
-static symbol s_0_31[4] = { 'e', 'r', 'e', 't' };
 
-static struct among a_0[32] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[3] = { 'h', 'e', 'd' };
+static const symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' };
+static const symbol s_0_2[4] = { 'e', 'r', 'e', 'd' };
+static const symbol s_0_3[1] = { 'e' };
+static const symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' };
+static const symbol s_0_5[4] = { 'e', 'n', 'd', 'e' };
+static const symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' };
+static const symbol s_0_7[3] = { 'e', 'n', 'e' };
+static const symbol s_0_8[4] = { 'e', 'r', 'n', 'e' };
+static const symbol s_0_9[3] = { 'e', 'r', 'e' };
+static const symbol s_0_10[2] = { 'e', 'n' };
+static const symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' };
+static const symbol s_0_12[4] = { 'e', 'r', 'e', 'n' };
+static const symbol s_0_13[2] = { 'e', 'r' };
+static const symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' };
+static const symbol s_0_15[4] = { 'e', 'r', 'e', 'r' };
+static const symbol s_0_16[1] = { 's' };
+static const symbol s_0_17[4] = { 'h', 'e', 'd', 's' };
+static const symbol s_0_18[2] = { 'e', 's' };
+static const symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' };
+static const symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' };
+static const symbol s_0_21[4] = { 'e', 'n', 'e', 's' };
+static const symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' };
+static const symbol s_0_23[4] = { 'e', 'r', 'e', 's' };
+static const symbol s_0_24[3] = { 'e', 'n', 's' };
+static const symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' };
+static const symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' };
+static const symbol s_0_27[3] = { 'e', 'r', 's' };
+static const symbol s_0_28[3] = { 'e', 't', 's' };
+static const symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' };
+static const symbol s_0_30[2] = { 'e', 't' };
+static const symbol s_0_31[4] = { 'e', 'r', 'e', 't' };
+
+static const struct among a_0[32] =
 {
 /*  0 */ { 3, s_0_0, -1, 1, 0},
 /*  1 */ { 5, s_0_1, 0, 1, 0},
@@ -82,12 +96,12 @@ static struct among a_0[32] =
 /* 31 */ { 4, s_0_31, 30, 1, 0}
 };
 
-static symbol s_1_0[2] = { 'g', 'd' };
-static symbol s_1_1[2] = { 'd', 't' };
-static symbol s_1_2[2] = { 'g', 't' };
-static symbol s_1_3[2] = { 'k', 't' };
+static const symbol s_1_0[2] = { 'g', 'd' };
+static const symbol s_1_1[2] = { 'd', 't' };
+static const symbol s_1_2[2] = { 'g', 't' };
+static const symbol s_1_3[2] = { 'k', 't' };
 
-static struct among a_1[4] =
+static const struct among a_1[4] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0},
@@ -95,13 +109,13 @@ static struct among a_1[4] =
 /*  3 */ { 2, s_1_3, -1, -1, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'g' };
-static symbol s_2_1[3] = { 'l', 'i', 'g' };
-static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' };
-static symbol s_2_3[3] = { 'e', 'l', 's' };
-static symbol s_2_4[4] = { 'l', 0xF8, 's', 't' };
+static const symbol s_2_0[2] = { 'i', 'g' };
+static const symbol s_2_1[3] = { 'l', 'i', 'g' };
+static const symbol s_2_2[4] = { 'e', 'l', 'i', 'g' };
+static const symbol s_2_3[3] = { 'e', 'l', 's' };
+static const symbol s_2_4[4] = { 'l', 0xF8, 's', 't' };
 
-static struct among a_2[5] =
+static const struct among a_2[5] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 3, s_2_1, 0, 1, 0},
@@ -110,75 +124,63 @@ static struct among a_2[5] =
 /*  4 */ { 4, s_2_4, -1, 2, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
 
-static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
+static const unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
 
-static symbol s_0[] = { 's', 't' };
-static symbol s_1[] = { 'i', 'g' };
-static symbol s_2[] = { 'l', 0xF8, 's' };
+static const symbol s_0[] = { 's', 't' };
+static const symbol s_1[] = { 'i', 'g' };
+static const symbol s_2[] = { 'l', 0xF8, 's' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     {   int c_test = z->c; /* test, line 33 */
-        {   int c = z->c + 3;
-            if (0 > c || c > z->l) return 0;
-            z->c = c; /* hop, line 33 */
+        {   int ret = z->c + 3;
+            if (0 > ret || ret > z->l) return 0;
+            z->c = ret; /* hop, line 33 */
         }
         z->I[1] = z->c; /* setmark x, line 33 */
         z->c = c_test;
     }
-    while(1) { /* goto, line 34 */
-        int c = z->c;
-        if (!(in_grouping(z, g_v, 97, 248))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        if (z->c >= z->l) return 0;
-        z->c++; /* goto, line 34 */
-    }
-    while(1) { /* gopast, line 34 */
-        if (!(out_grouping(z, g_v, 97, 248))) goto lab1;
-        break;
-    lab1:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 34 */
+    if (out_grouping(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 34 */
+    {    /* gopast */ /* non v, line 34 */
+        int ret = in_grouping(z, g_v, 97, 248, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 34 */
      /* try, line 35 */
-    if (!(z->I[0] < z->I[1])) goto lab2;
+    if (!(z->I[0] < z->I[1])) goto lab0;
     z->I[0] = z->I[1];
-lab2:
+lab0:
     return 1;
 }
 
 static int r_main_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 41 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 41 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 41 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 41 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851440 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_0, 32); /* substring, line 41 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 41 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 48 */
+            {   int ret = slice_del(z); /* delete, line 48 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            if (!(in_grouping_b(z, g_s_ending, 97, 229))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 50 */
+            if (in_grouping_b(z, g_s_ending, 97, 229, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 50 */
                 if (ret < 0) return ret;
             }
             break;
@@ -188,24 +190,24 @@ static int r_main_suffix(struct SN_env * z) {
 
 static int r_consonant_pair(struct SN_env * z) {
     {   int m_test = z->l - z->c; /* test, line 55 */
-        {   int m3; /* setlimit, line 56 */
-            int m = z->l - z->c; (void) m;
+        {   int mlimit; /* setlimit, line 56 */
+            int m1 = z->l - z->c; (void)m1;
             if (z->c < z->I[0]) return 0;
             z->c = z->I[0]; /* tomark, line 56 */
-            m3 = z->lb; z->lb = z->c;
-            z->c = z->l - m;
+            mlimit = z->lb; z->lb = z->c;
+            z->c = z->l - m1;
             z->ket = z->c; /* [, line 56 */
-            if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */
+            if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 116)) { z->lb = mlimit; return 0; }
+            if (!(find_among_b(z, a_1, 4))) { z->lb = mlimit; return 0; } /* substring, line 56 */
             z->bra = z->c; /* ], line 56 */
-            z->lb = m3;
+            z->lb = mlimit;
         }
         z->c = z->l - m_test;
     }
     if (z->c <= z->lb) return 0;
     z->c--; /* next, line 62 */
     z->bra = z->c; /* ], line 62 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 62 */
+    {   int ret = slice_del(z); /* delete, line 62 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -213,49 +215,47 @@ static int r_consonant_pair(struct SN_env * z) {
 
 static int r_other_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* do, line 66 */
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 66 */
         z->ket = z->c; /* [, line 66 */
         if (!(eq_s_b(z, 2, s_0))) goto lab0;
         z->bra = z->c; /* ], line 66 */
         if (!(eq_s_b(z, 2, s_1))) goto lab0;
-        {   int ret;
-            ret = slice_del(z); /* delete, line 66 */
+        {   int ret = slice_del(z); /* delete, line 66 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = z->l - m;
+        z->c = z->l - m1;
     }
-    {   int m3; /* setlimit, line 67 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 67 */
+        int m2 = z->l - z->c; (void)m2;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 67 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m2;
         z->ket = z->c; /* [, line 67 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_2, 5); /* substring, line 67 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 67 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 70 */
+            {   int ret = slice_del(z); /* delete, line 70 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 70 */
+            {   int m3 = z->l - z->c; (void)m3; /* do, line 70 */
                 {   int ret = r_consonant_pair(z);
                     if (ret == 0) goto lab1; /* call consonant_pair, line 70 */
                     if (ret < 0) return ret;
                 }
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m3;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_2); /* <-, line 72 */
+            {   int ret = slice_from_s(z, 3, s_2); /* <-, line 72 */
                 if (ret < 0) return ret;
             }
             break;
@@ -264,69 +264,68 @@ static int r_other_suffix(struct SN_env * z) {
 }
 
 static int r_undouble(struct SN_env * z) {
-    {   int m3; /* setlimit, line 76 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 76 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 76 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 76 */
-        if (!(out_grouping_b(z, g_v, 97, 248))) { z->lb = m3; return 0; }
+        if (out_grouping_b(z, g_v, 97, 248, 0)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 76 */
         z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */
         if (z->S[0] == 0) return -1; /* -> ch, line 76 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 78 */
+    {   int ret = slice_del(z); /* delete, line 78 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 extern int danish_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 84 */
+    {   int c1 = z->c; /* do, line 84 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 84 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 85 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 86 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 86 */
         {   int ret = r_main_suffix(z);
             if (ret == 0) goto lab1; /* call main_suffix, line 86 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 87 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 87 */
         {   int ret = r_consonant_pair(z);
             if (ret == 0) goto lab2; /* call consonant_pair, line 87 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 88 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 88 */
         {   int ret = r_other_suffix(z);
             if (ret == 0) goto lab3; /* call other_suffix, line 88 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 89 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 89 */
         {   int ret = r_undouble(z);
             if (ret == 0) goto lab4; /* call undouble, line 89 */
             if (ret < 0) return ret;
         }
     lab4:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
     z->c = z->lb;
     return 1;
@@ -334,5 +333,5 @@ extern int danish_ISO_8859_1_stem(struct SN_env * z) {
 
 extern struct SN_env * danish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 0); }
 
-extern void danish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void danish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 1); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c b/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c
index 36de3b5..31dad47 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int dutch_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_standard_suffix(struct SN_env * z);
 static int r_undouble(struct SN_env * z);
 static int r_R2(struct SN_env * z);
@@ -13,22 +19,30 @@ static int r_en_ending(struct SN_env * z);
 static int r_e_ending(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * dutch_ISO_8859_1_create_env(void);
 extern void dutch_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 0xE1 };
-static symbol s_0_2[1] = { 0xE4 };
-static symbol s_0_3[1] = { 0xE9 };
-static symbol s_0_4[1] = { 0xEB };
-static symbol s_0_5[1] = { 0xED };
-static symbol s_0_6[1] = { 0xEF };
-static symbol s_0_7[1] = { 0xF3 };
-static symbol s_0_8[1] = { 0xF6 };
-static symbol s_0_9[1] = { 0xFA };
-static symbol s_0_10[1] = { 0xFC };
-
-static struct among a_0[11] =
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 0xE1 };
+static const symbol s_0_2[1] = { 0xE4 };
+static const symbol s_0_3[1] = { 0xE9 };
+static const symbol s_0_4[1] = { 0xEB };
+static const symbol s_0_5[1] = { 0xED };
+static const symbol s_0_6[1] = { 0xEF };
+static const symbol s_0_7[1] = { 0xF3 };
+static const symbol s_0_8[1] = { 0xF6 };
+static const symbol s_0_9[1] = { 0xFA };
+static const symbol s_0_10[1] = { 0xFC };
+
+static const struct among a_0[11] =
 {
 /*  0 */ { 0, 0, -1, 6, 0},
 /*  1 */ { 1, s_0_1, 0, 1, 0},
@@ -43,34 +57,34 @@ static struct among a_0[11] =
 /* 10 */ { 1, s_0_10, 0, 5, 0}
 };
 
-static symbol s_1_1[1] = { 'I' };
-static symbol s_1_2[1] = { 'Y' };
+static const symbol s_1_1[1] = { 'I' };
+static const symbol s_1_2[1] = { 'Y' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 1, s_1_1, 0, 2, 0},
 /*  2 */ { 1, s_1_2, 0, 1, 0}
 };
 
-static symbol s_2_0[2] = { 'd', 'd' };
-static symbol s_2_1[2] = { 'k', 'k' };
-static symbol s_2_2[2] = { 't', 't' };
+static const symbol s_2_0[2] = { 'd', 'd' };
+static const symbol s_2_1[2] = { 'k', 'k' };
+static const symbol s_2_2[2] = { 't', 't' };
 
-static struct among a_2[3] =
+static const struct among a_2[3] =
 {
 /*  0 */ { 2, s_2_0, -1, -1, 0},
 /*  1 */ { 2, s_2_1, -1, -1, 0},
 /*  2 */ { 2, s_2_2, -1, -1, 0}
 };
 
-static symbol s_3_0[3] = { 'e', 'n', 'e' };
-static symbol s_3_1[2] = { 's', 'e' };
-static symbol s_3_2[2] = { 'e', 'n' };
-static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' };
-static symbol s_3_4[1] = { 's' };
+static const symbol s_3_0[3] = { 'e', 'n', 'e' };
+static const symbol s_3_1[2] = { 's', 'e' };
+static const symbol s_3_2[2] = { 'e', 'n' };
+static const symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' };
+static const symbol s_3_4[1] = { 's' };
 
-static struct among a_3[5] =
+static const struct among a_3[5] =
 {
 /*  0 */ { 3, s_3_0, -1, 2, 0},
 /*  1 */ { 2, s_3_1, -1, 3, 0},
@@ -79,14 +93,14 @@ static struct among a_3[5] =
 /*  4 */ { 1, s_3_4, -1, 3, 0}
 };
 
-static symbol s_4_0[3] = { 'e', 'n', 'd' };
-static symbol s_4_1[2] = { 'i', 'g' };
-static symbol s_4_2[3] = { 'i', 'n', 'g' };
-static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' };
-static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' };
-static symbol s_4_5[3] = { 'b', 'a', 'r' };
+static const symbol s_4_0[3] = { 'e', 'n', 'd' };
+static const symbol s_4_1[2] = { 'i', 'g' };
+static const symbol s_4_2[3] = { 'i', 'n', 'g' };
+static const symbol s_4_3[4] = { 'l', 'i', 'j', 'k' };
+static const symbol s_4_4[4] = { 'b', 'a', 'a', 'r' };
+static const symbol s_4_5[3] = { 'b', 'a', 'r' };
 
-static struct among a_4[6] =
+static const struct among a_4[6] =
 {
 /*  0 */ { 3, s_4_0, -1, 1, 0},
 /*  1 */ { 2, s_4_1, -1, 2, 0},
@@ -96,12 +110,12 @@ static struct among a_4[6] =
 /*  5 */ { 3, s_4_5, -1, 5, 0}
 };
 
-static symbol s_5_0[2] = { 'a', 'a' };
-static symbol s_5_1[2] = { 'e', 'e' };
-static symbol s_5_2[2] = { 'o', 'o' };
-static symbol s_5_3[2] = { 'u', 'u' };
+static const symbol s_5_0[2] = { 'a', 'a' };
+static const symbol s_5_1[2] = { 'e', 'e' };
+static const symbol s_5_2[2] = { 'o', 'o' };
+static const symbol s_5_3[2] = { 'u', 'u' };
 
-static struct among a_5[4] =
+static const struct among a_5[4] =
 {
 /*  0 */ { 2, s_5_0, -1, -1, 0},
 /*  1 */ { 2, s_5_1, -1, -1, 0},
@@ -109,73 +123,69 @@ static struct among a_5[4] =
 /*  3 */ { 2, s_5_3, -1, -1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-static symbol s_0[] = { 'a' };
-static symbol s_1[] = { 'e' };
-static symbol s_2[] = { 'i' };
-static symbol s_3[] = { 'o' };
-static symbol s_4[] = { 'u' };
-static symbol s_5[] = { 'y' };
-static symbol s_6[] = { 'Y' };
-static symbol s_7[] = { 'i' };
-static symbol s_8[] = { 'I' };
-static symbol s_9[] = { 'y' };
-static symbol s_10[] = { 'Y' };
-static symbol s_11[] = { 'y' };
-static symbol s_12[] = { 'i' };
-static symbol s_13[] = { 'e' };
-static symbol s_14[] = { 'g', 'e', 'm' };
-static symbol s_15[] = { 'h', 'e', 'i', 'd' };
-static symbol s_16[] = { 'h', 'e', 'i', 'd' };
-static symbol s_17[] = { 'c' };
-static symbol s_18[] = { 'e', 'n' };
-static symbol s_19[] = { 'i', 'g' };
-static symbol s_20[] = { 'e' };
-static symbol s_21[] = { 'e' };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'o' };
+static const symbol s_4[] = { 'u' };
+static const symbol s_5[] = { 'y' };
+static const symbol s_6[] = { 'Y' };
+static const symbol s_7[] = { 'i' };
+static const symbol s_8[] = { 'I' };
+static const symbol s_9[] = { 'y' };
+static const symbol s_10[] = { 'Y' };
+static const symbol s_11[] = { 'y' };
+static const symbol s_12[] = { 'i' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'g', 'e', 'm' };
+static const symbol s_15[] = { 'h', 'e', 'i', 'd' };
+static const symbol s_16[] = { 'h', 'e', 'i', 'd' };
+static const symbol s_17[] = { 'c' };
+static const symbol s_18[] = { 'e', 'n' };
+static const symbol s_19[] = { 'i', 'g' };
+static const symbol s_20[] = { 'e' };
+static const symbol s_21[] = { 'e' };
 
 static int r_prelude(struct SN_env * z) {
     int among_var;
     {   int c_test = z->c; /* test, line 42 */
         while(1) { /* repeat, line 42 */
-            int c = z->c;
+            int c1 = z->c;
             z->bra = z->c; /* [, line 43 */
+            if (z->c >= z->l || z->p[z->c + 0] >> 5 != 7 || !((340306450 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 6; else
             among_var = find_among(z, a_0, 11); /* substring, line 43 */
             if (!(among_var)) goto lab0;
             z->ket = z->c; /* ], line 43 */
             switch(among_var) {
                 case 0: goto lab0;
                 case 1:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_0); /* <-, line 45 */
+                    {   int ret = slice_from_s(z, 1, s_0); /* <-, line 45 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_1); /* <-, line 47 */
+                    {   int ret = slice_from_s(z, 1, s_1); /* <-, line 47 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 3:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_2); /* <-, line 49 */
+                    {   int ret = slice_from_s(z, 1, s_2); /* <-, line 49 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 4:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_3); /* <-, line 51 */
+                    {   int ret = slice_from_s(z, 1, s_3); /* <-, line 51 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 5:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_4); /* <-, line 53 */
+                    {   int ret = slice_from_s(z, 1, s_4); /* <-, line 53 */
                         if (ret < 0) return ret;
                     }
                     break;
@@ -186,57 +196,54 @@ static int r_prelude(struct SN_env * z) {
             }
             continue;
         lab0:
-            z->c = c;
+            z->c = c1;
             break;
         }
         z->c = c_test;
     }
-    {   int c = z->c; /* try, line 57 */
+    {   int c_keep = z->c; /* try, line 57 */
         z->bra = z->c; /* [, line 57 */
-        if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; }
+        if (!(eq_s(z, 1, s_5))) { z->c = c_keep; goto lab1; }
         z->ket = z->c; /* ], line 57 */
-        {   int ret;
-            ret = slice_from_s(z, 1, s_6); /* <-, line 57 */
+        {   int ret = slice_from_s(z, 1, s_6); /* <-, line 57 */
             if (ret < 0) return ret;
         }
     lab1:
         ;
     }
     while(1) { /* repeat, line 58 */
-        int c = z->c;
+        int c2 = z->c;
         while(1) { /* goto, line 58 */
-            int c = z->c;
-            if (!(in_grouping(z, g_v, 97, 232))) goto lab3;
+            int c3 = z->c;
+            if (in_grouping(z, g_v, 97, 232, 0)) goto lab3;
             z->bra = z->c; /* [, line 59 */
-            {   int c = z->c; /* or, line 59 */
+            {   int c4 = z->c; /* or, line 59 */
                 if (!(eq_s(z, 1, s_7))) goto lab5;
                 z->ket = z->c; /* ], line 59 */
-                if (!(in_grouping(z, g_v, 97, 232))) goto lab5;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_8); /* <-, line 59 */
+                if (in_grouping(z, g_v, 97, 232, 0)) goto lab5;
+                {   int ret = slice_from_s(z, 1, s_8); /* <-, line 59 */
                     if (ret < 0) return ret;
                 }
                 goto lab4;
             lab5:
-                z->c = c;
+                z->c = c4;
                 if (!(eq_s(z, 1, s_9))) goto lab3;
                 z->ket = z->c; /* ], line 60 */
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 60 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 60 */
                     if (ret < 0) return ret;
                 }
             }
         lab4:
-            z->c = c;
+            z->c = c3;
             break;
         lab3:
-            z->c = c;
+            z->c = c3;
             if (z->c >= z->l) goto lab2;
             z->c++; /* goto, line 58 */
         }
         continue;
     lab2:
-        z->c = c;
+        z->c = c2;
         break;
     }
     return 1;
@@ -245,38 +252,30 @@ static int r_prelude(struct SN_env * z) {
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    while(1) { /* gopast, line 69 */
-        if (!(in_grouping(z, g_v, 97, 232))) goto lab0;
-        break;
-    lab0:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 69 */
+    {    /* gopast */ /* grouping v, line 69 */
+        int ret = out_grouping(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 69 */
-        if (!(out_grouping(z, g_v, 97, 232))) goto lab1;
-        break;
-    lab1:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 69 */
+    {    /* gopast */ /* non v, line 69 */
+        int ret = in_grouping(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 69 */
      /* try, line 70 */
-    if (!(z->I[0] < 3)) goto lab2;
+    if (!(z->I[0] < 3)) goto lab0;
     z->I[0] = 3;
-lab2:
-    while(1) { /* gopast, line 71 */
-        if (!(in_grouping(z, g_v, 97, 232))) goto lab3;
-        break;
-    lab3:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 71 */
+lab0:
+    {    /* gopast */ /* grouping v, line 71 */
+        int ret = out_grouping(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 71 */
-        if (!(out_grouping(z, g_v, 97, 232))) goto lab4;
-        break;
-    lab4:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 71 */
+    {    /* gopast */ /* non v, line 71 */
+        int ret = in_grouping(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[1] = z->c; /* setmark p2, line 71 */
     return 1;
@@ -285,22 +284,21 @@ lab2:
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 75 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 77 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 89)) among_var = 3; else
         among_var = find_among(z, a_1, 3); /* substring, line 77 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 77 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_11); /* <-, line 78 */
+                {   int ret = slice_from_s(z, 1, s_11); /* <-, line 78 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
+                {   int ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -311,7 +309,7 @@ static int r_postlude(struct SN_env * z) {
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -329,6 +327,7 @@ static int r_R2(struct SN_env * z) {
 
 static int r_undouble(struct SN_env * z) {
     {   int m_test = z->l - z->c; /* test, line 91 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1050640 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
         if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */
         z->c = z->l - m_test;
     }
@@ -336,8 +335,7 @@ static int r_undouble(struct SN_env * z) {
     if (z->c <= z->lb) return 0;
     z->c--; /* next, line 91 */
     z->bra = z->c; /* ], line 91 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 91 */
+    {   int ret = slice_del(z); /* delete, line 91 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -353,11 +351,10 @@ static int r_e_ending(struct SN_env * z) {
         if (ret < 0) return ret;
     }
     {   int m_test = z->l - z->c; /* test, line 96 */
-        if (!(out_grouping_b(z, g_v, 97, 232))) return 0;
+        if (out_grouping_b(z, g_v, 97, 232, 0)) return 0;
         z->c = z->l - m_test;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 96 */
+    {   int ret = slice_del(z); /* delete, line 96 */
         if (ret < 0) return ret;
     }
     z->B[0] = 1; /* set e_found, line 97 */
@@ -373,18 +370,17 @@ static int r_en_ending(struct SN_env * z) {
         if (ret == 0) return 0; /* call R1, line 102 */
         if (ret < 0) return ret;
     }
-    {   int m = z->l - z->c; (void) m; /* and, line 102 */
-        if (!(out_grouping_b(z, g_v, 97, 232))) return 0;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* not, line 102 */
+    {   int m1 = z->l - z->c; (void)m1; /* and, line 102 */
+        if (out_grouping_b(z, g_v, 97, 232, 0)) return 0;
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 102 */
             if (!(eq_s_b(z, 3, s_14))) goto lab0;
             return 0;
         lab0:
-            z->c = z->l - m;
+            z->c = z->l - m2;
         }
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 102 */
+    {   int ret = slice_del(z); /* delete, line 102 */
         if (ret < 0) return ret;
     }
     {   int ret = r_undouble(z);
@@ -396,8 +392,9 @@ static int r_en_ending(struct SN_env * z) {
 
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* do, line 107 */
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 107 */
         z->ket = z->c; /* [, line 108 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((540704 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
         among_var = find_among_b(z, a_3, 5); /* substring, line 108 */
         if (!(among_var)) goto lab0;
         z->bra = z->c; /* ], line 108 */
@@ -408,8 +405,7 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab0; /* call R1, line 110 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_from_s(z, 4, s_15); /* <-, line 110 */
+                {   int ret = slice_from_s(z, 4, s_15); /* <-, line 110 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -424,25 +420,24 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab0; /* call R1, line 116 */
                     if (ret < 0) return ret;
                 }
-                if (!(out_grouping_b(z, g_v_j, 97, 232))) goto lab0;
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 116 */
+                if (out_grouping_b(z, g_v_j, 97, 232, 0)) goto lab0;
+                {   int ret = slice_del(z); /* delete, line 116 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab0:
-        z->c = z->l - m;
+        z->c = z->l - m1;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 120 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 120 */
         {   int ret = r_e_ending(z);
             if (ret == 0) goto lab1; /* call e_ending, line 120 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 122 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 122 */
         z->ket = z->c; /* [, line 122 */
         if (!(eq_s_b(z, 4, s_16))) goto lab2;
         z->bra = z->c; /* ], line 122 */
@@ -450,14 +445,13 @@ static int r_standard_suffix(struct SN_env * z) {
             if (ret == 0) goto lab2; /* call R2, line 122 */
             if (ret < 0) return ret;
         }
-        {   int m = z->l - z->c; (void) m; /* not, line 122 */
+        {   int m4 = z->l - z->c; (void)m4; /* not, line 122 */
             if (!(eq_s_b(z, 1, s_17))) goto lab3;
             goto lab2;
         lab3:
-            z->c = z->l - m;
+            z->c = z->l - m4;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 122 */
+        {   int ret = slice_del(z); /* delete, line 122 */
             if (ret < 0) return ret;
         }
         z->ket = z->c; /* [, line 123 */
@@ -468,10 +462,11 @@ static int r_standard_suffix(struct SN_env * z) {
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 126 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 126 */
         z->ket = z->c; /* [, line 127 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((264336 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab4;
         among_var = find_among_b(z, a_4, 6); /* substring, line 127 */
         if (!(among_var)) goto lab4;
         z->bra = z->c; /* ], line 127 */
@@ -482,11 +477,10 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 129 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 129 */
+                {   int ret = slice_del(z); /* delete, line 129 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* or, line 130 */
+                {   int m6 = z->l - z->c; (void)m6; /* or, line 130 */
                     z->ket = z->c; /* [, line 130 */
                     if (!(eq_s_b(z, 2, s_19))) goto lab6;
                     z->bra = z->c; /* ], line 130 */
@@ -494,19 +488,18 @@ static int r_standard_suffix(struct SN_env * z) {
                         if (ret == 0) goto lab6; /* call R2, line 130 */
                         if (ret < 0) return ret;
                     }
-                    {   int m = z->l - z->c; (void) m; /* not, line 130 */
+                    {   int m7 = z->l - z->c; (void)m7; /* not, line 130 */
                         if (!(eq_s_b(z, 1, s_20))) goto lab7;
                         goto lab6;
                     lab7:
-                        z->c = z->l - m;
+                        z->c = z->l - m7;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 130 */
+                    {   int ret = slice_del(z); /* delete, line 130 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_undouble(z);
                         if (ret == 0) goto lab4; /* call undouble, line 130 */
                         if (ret < 0) return ret;
@@ -519,14 +512,13 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 133 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* not, line 133 */
+                {   int m8 = z->l - z->c; (void)m8; /* not, line 133 */
                     if (!(eq_s_b(z, 1, s_21))) goto lab8;
                     goto lab4;
                 lab8:
-                    z->c = z->l - m;
+                    z->c = z->l - m8;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 133 */
+                {   int ret = slice_del(z); /* delete, line 133 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -535,8 +527,7 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 136 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 136 */
+                {   int ret = slice_del(z); /* delete, line 136 */
                     if (ret < 0) return ret;
                 }
                 {   int ret = r_e_ending(z);
@@ -549,8 +540,7 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 139 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 139 */
+                {   int ret = slice_del(z); /* delete, line 139 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -560,76 +550,75 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret < 0) return ret;
                 }
                 if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 142 */
+                {   int ret = slice_del(z); /* delete, line 142 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab4:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 146 */
-        if (!(out_grouping_b(z, g_v_I, 73, 232))) goto lab9;
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 146 */
+        if (out_grouping_b(z, g_v_I, 73, 232, 0)) goto lab9;
         {   int m_test = z->l - z->c; /* test, line 148 */
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((2129954 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab9;
             if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */
-            if (!(out_grouping_b(z, g_v, 97, 232))) goto lab9;
+            if (out_grouping_b(z, g_v, 97, 232, 0)) goto lab9;
             z->c = z->l - m_test;
         }
         z->ket = z->c; /* [, line 152 */
         if (z->c <= z->lb) goto lab9;
         z->c--; /* next, line 152 */
         z->bra = z->c; /* ], line 152 */
-        {   int ret;
-            ret = slice_del(z); /* delete, line 152 */
+        {   int ret = slice_del(z); /* delete, line 152 */
             if (ret < 0) return ret;
         }
     lab9:
-        z->c = z->l - m;
+        z->c = z->l - m9;
     }
     return 1;
 }
 
 extern int dutch_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 159 */
+    {   int c1 = z->c; /* do, line 159 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 159 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 160 */
+    {   int c2 = z->c; /* do, line 160 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 160 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 161 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 162 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 162 */
         {   int ret = r_standard_suffix(z);
             if (ret == 0) goto lab2; /* call standard_suffix, line 162 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 163 */
+    {   int c4 = z->c; /* do, line 163 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab3; /* call postlude, line 163 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = c;
+        z->c = c4;
     }
     return 1;
 }
 
 extern struct SN_env * dutch_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); }
 
-extern void dutch_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void dutch_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_english.c b/libstemmer_c/src_c/stem_ISO_8859_1_english.c
index 3477b38..556b6ab 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_english.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_english.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int english_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_exception2(struct SN_env * z);
 static int r_exception1(struct SN_env * z);
 static int r_Step_5(struct SN_env * z);
@@ -19,38 +25,48 @@ static int r_shortv(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * english_ISO_8859_1_create_env(void);
 extern void english_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' };
-static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' };
 
-static struct among a_0[2] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[5] = { 'a', 'r', 's', 'e', 'n' };
+static const symbol s_0_1[6] = { 'c', 'o', 'm', 'm', 'u', 'n' };
+static const symbol s_0_2[5] = { 'g', 'e', 'n', 'e', 'r' };
+
+static const struct among a_0[3] =
 {
-/*  0 */ { 6, s_0_0, -1, -1, 0},
-/*  1 */ { 5, s_0_1, -1, -1, 0}
+/*  0 */ { 5, s_0_0, -1, -1, 0},
+/*  1 */ { 6, s_0_1, -1, -1, 0},
+/*  2 */ { 5, s_0_2, -1, -1, 0}
 };
 
-static symbol s_1_0[1] = { '\'' };
-static symbol s_1_1[3] = { '\'', 's', '\'' };
-static symbol s_1_2[2] = { '\'', 's' };
+static const symbol s_1_0[1] = { '\'' };
+static const symbol s_1_1[3] = { '\'', 's', '\'' };
+static const symbol s_1_2[2] = { '\'', 's' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 1, s_1_0, -1, 1, 0},
 /*  1 */ { 3, s_1_1, 0, 1, 0},
 /*  2 */ { 2, s_1_2, -1, 1, 0}
 };
 
-static symbol s_2_0[3] = { 'i', 'e', 'd' };
-static symbol s_2_1[1] = { 's' };
-static symbol s_2_2[3] = { 'i', 'e', 's' };
-static symbol s_2_3[4] = { 's', 's', 'e', 's' };
-static symbol s_2_4[2] = { 's', 's' };
-static symbol s_2_5[2] = { 'u', 's' };
+static const symbol s_2_0[3] = { 'i', 'e', 'd' };
+static const symbol s_2_1[1] = { 's' };
+static const symbol s_2_2[3] = { 'i', 'e', 's' };
+static const symbol s_2_3[4] = { 's', 's', 'e', 's' };
+static const symbol s_2_4[2] = { 's', 's' };
+static const symbol s_2_5[2] = { 'u', 's' };
 
-static struct among a_2[6] =
+static const struct among a_2[6] =
 {
 /*  0 */ { 3, s_2_0, -1, 2, 0},
 /*  1 */ { 1, s_2_1, -1, 3, 0},
@@ -60,20 +76,20 @@ static struct among a_2[6] =
 /*  5 */ { 2, s_2_5, 1, -1, 0}
 };
 
-static symbol s_3_1[2] = { 'b', 'b' };
-static symbol s_3_2[2] = { 'd', 'd' };
-static symbol s_3_3[2] = { 'f', 'f' };
-static symbol s_3_4[2] = { 'g', 'g' };
-static symbol s_3_5[2] = { 'b', 'l' };
-static symbol s_3_6[2] = { 'm', 'm' };
-static symbol s_3_7[2] = { 'n', 'n' };
-static symbol s_3_8[2] = { 'p', 'p' };
-static symbol s_3_9[2] = { 'r', 'r' };
-static symbol s_3_10[2] = { 'a', 't' };
-static symbol s_3_11[2] = { 't', 't' };
-static symbol s_3_12[2] = { 'i', 'z' };
+static const symbol s_3_1[2] = { 'b', 'b' };
+static const symbol s_3_2[2] = { 'd', 'd' };
+static const symbol s_3_3[2] = { 'f', 'f' };
+static const symbol s_3_4[2] = { 'g', 'g' };
+static const symbol s_3_5[2] = { 'b', 'l' };
+static const symbol s_3_6[2] = { 'm', 'm' };
+static const symbol s_3_7[2] = { 'n', 'n' };
+static const symbol s_3_8[2] = { 'p', 'p' };
+static const symbol s_3_9[2] = { 'r', 'r' };
+static const symbol s_3_10[2] = { 'a', 't' };
+static const symbol s_3_11[2] = { 't', 't' };
+static const symbol s_3_12[2] = { 'i', 'z' };
 
-static struct among a_3[13] =
+static const struct among a_3[13] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_3_1, 0, 2, 0},
@@ -90,14 +106,14 @@ static struct among a_3[13] =
 /* 12 */ { 2, s_3_12, 0, 1, 0}
 };
 
-static symbol s_4_0[2] = { 'e', 'd' };
-static symbol s_4_1[3] = { 'e', 'e', 'd' };
-static symbol s_4_2[3] = { 'i', 'n', 'g' };
-static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' };
-static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' };
-static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' };
+static const symbol s_4_0[2] = { 'e', 'd' };
+static const symbol s_4_1[3] = { 'e', 'e', 'd' };
+static const symbol s_4_2[3] = { 'i', 'n', 'g' };
+static const symbol s_4_3[4] = { 'e', 'd', 'l', 'y' };
+static const symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' };
+static const symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' };
 
-static struct among a_4[6] =
+static const struct among a_4[6] =
 {
 /*  0 */ { 2, s_4_0, -1, 2, 0},
 /*  1 */ { 3, s_4_1, 0, 1, 0},
@@ -107,32 +123,32 @@ static struct among a_4[6] =
 /*  5 */ { 5, s_4_5, -1, 2, 0}
 };
 
-static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' };
-static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' };
-static symbol s_5_2[3] = { 'o', 'g', 'i' };
-static symbol s_5_3[2] = { 'l', 'i' };
-static symbol s_5_4[3] = { 'b', 'l', 'i' };
-static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' };
-static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' };
-static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' };
-static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' };
-static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' };
-static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' };
-static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' };
-static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
-static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' };
-static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' };
-static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' };
-static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
-static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' };
-static symbol s_5_20[4] = { 'a', 't', 'o', 'r' };
-static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
-static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
-static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
+static const symbol s_5_0[4] = { 'a', 'n', 'c', 'i' };
+static const symbol s_5_1[4] = { 'e', 'n', 'c', 'i' };
+static const symbol s_5_2[3] = { 'o', 'g', 'i' };
+static const symbol s_5_3[2] = { 'l', 'i' };
+static const symbol s_5_4[3] = { 'b', 'l', 'i' };
+static const symbol s_5_5[4] = { 'a', 'b', 'l', 'i' };
+static const symbol s_5_6[4] = { 'a', 'l', 'l', 'i' };
+static const symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' };
+static const symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' };
+static const symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' };
+static const symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' };
+static const symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' };
+static const symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
+static const symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' };
+static const symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' };
+static const symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' };
+static const symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
+static const symbol s_5_19[4] = { 'i', 'z', 'e', 'r' };
+static const symbol s_5_20[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
+static const symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
+static const symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
 
-static struct among a_5[24] =
+static const struct among a_5[24] =
 {
 /*  0 */ { 4, s_5_0, -1, 3, 0},
 /*  1 */ { 4, s_5_1, -1, 2, 0},
@@ -160,17 +176,17 @@ static struct among a_5[24] =
 /* 23 */ { 7, s_5_23, -1, 10, 0}
 };
 
-static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' };
-static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' };
-static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' };
-static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' };
-static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' };
-static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_6_7[3] = { 'f', 'u', 'l' };
-static symbol s_6_8[4] = { 'n', 'e', 's', 's' };
+static const symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' };
+static const symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' };
+static const symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' };
+static const symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' };
+static const symbol s_6_4[4] = { 'i', 'c', 'a', 'l' };
+static const symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_6_7[3] = { 'f', 'u', 'l' };
+static const symbol s_6_8[4] = { 'n', 'e', 's', 's' };
 
-static struct among a_6[9] =
+static const struct among a_6[9] =
 {
 /*  0 */ { 5, s_6_0, -1, 4, 0},
 /*  1 */ { 5, s_6_1, -1, 6, 0},
@@ -183,26 +199,26 @@ static struct among a_6[9] =
 /*  8 */ { 4, s_6_8, -1, 5, 0}
 };
 
-static symbol s_7_0[2] = { 'i', 'c' };
-static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' };
-static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' };
-static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_7_5[3] = { 'a', 't', 'e' };
-static symbol s_7_6[3] = { 'i', 'v', 'e' };
-static symbol s_7_7[3] = { 'i', 'z', 'e' };
-static symbol s_7_8[3] = { 'i', 't', 'i' };
-static symbol s_7_9[2] = { 'a', 'l' };
-static symbol s_7_10[3] = { 'i', 's', 'm' };
-static symbol s_7_11[3] = { 'i', 'o', 'n' };
-static symbol s_7_12[2] = { 'e', 'r' };
-static symbol s_7_13[3] = { 'o', 'u', 's' };
-static symbol s_7_14[3] = { 'a', 'n', 't' };
-static symbol s_7_15[3] = { 'e', 'n', 't' };
-static symbol s_7_16[4] = { 'm', 'e', 'n', 't' };
-static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' };
+static const symbol s_7_0[2] = { 'i', 'c' };
+static const symbol s_7_1[4] = { 'a', 'n', 'c', 'e' };
+static const symbol s_7_2[4] = { 'e', 'n', 'c', 'e' };
+static const symbol s_7_3[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_7_4[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_7_5[3] = { 'a', 't', 'e' };
+static const symbol s_7_6[3] = { 'i', 'v', 'e' };
+static const symbol s_7_7[3] = { 'i', 'z', 'e' };
+static const symbol s_7_8[3] = { 'i', 't', 'i' };
+static const symbol s_7_9[2] = { 'a', 'l' };
+static const symbol s_7_10[3] = { 'i', 's', 'm' };
+static const symbol s_7_11[3] = { 'i', 'o', 'n' };
+static const symbol s_7_12[2] = { 'e', 'r' };
+static const symbol s_7_13[3] = { 'o', 'u', 's' };
+static const symbol s_7_14[3] = { 'a', 'n', 't' };
+static const symbol s_7_15[3] = { 'e', 'n', 't' };
+static const symbol s_7_16[4] = { 'm', 'e', 'n', 't' };
+static const symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' };
 
-static struct among a_7[18] =
+static const struct among a_7[18] =
 {
 /*  0 */ { 2, s_7_0, -1, 1, 0},
 /*  1 */ { 4, s_7_1, -1, 1, 0},
@@ -224,25 +240,25 @@ static struct among a_7[18] =
 /* 17 */ { 5, s_7_17, 16, 1, 0}
 };
 
-static symbol s_8_0[1] = { 'e' };
-static symbol s_8_1[1] = { 'l' };
+static const symbol s_8_0[1] = { 'e' };
+static const symbol s_8_1[1] = { 'l' };
 
-static struct among a_8[2] =
+static const struct among a_8[2] =
 {
 /*  0 */ { 1, s_8_0, -1, 1, 0},
 /*  1 */ { 1, s_8_1, -1, 2, 0}
 };
 
-static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' };
-static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' };
-static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' };
-static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' };
-static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' };
-static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' };
-static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' };
-static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' };
+static const symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' };
+static const symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' };
+static const symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' };
+static const symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' };
+static const symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' };
+static const symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' };
+static const symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' };
+static const symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' };
 
-static struct among a_9[8] =
+static const struct among a_9[8] =
 {
 /*  0 */ { 7, s_9_0, -1, -1, 0},
 /*  1 */ { 7, s_9_1, -1, -1, 0},
@@ -254,26 +270,26 @@ static struct among a_9[8] =
 /*  7 */ { 6, s_9_7, -1, -1, 0}
 };
 
-static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' };
-static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' };
-static symbol s_10_2[4] = { 'b', 'i', 'a', 's' };
-static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' };
-static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' };
-static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' };
-static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' };
-static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' };
-static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' };
-static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' };
-static symbol s_10_10[4] = { 'n', 'e', 'w', 's' };
-static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' };
-static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' };
-static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' };
-static symbol s_10_14[4] = { 's', 'k', 'i', 's' };
-static symbol s_10_15[3] = { 's', 'k', 'y' };
-static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' };
-static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' };
+static const symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' };
+static const symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' };
+static const symbol s_10_2[4] = { 'b', 'i', 'a', 's' };
+static const symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' };
+static const symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' };
+static const symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' };
+static const symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' };
+static const symbol s_10_7[4] = { 'h', 'o', 'w', 'e' };
+static const symbol s_10_8[4] = { 'i', 'd', 'l', 'y' };
+static const symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' };
+static const symbol s_10_10[4] = { 'n', 'e', 'w', 's' };
+static const symbol s_10_11[4] = { 'o', 'n', 'l', 'y' };
+static const symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' };
+static const symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' };
+static const symbol s_10_14[4] = { 's', 'k', 'i', 's' };
+static const symbol s_10_15[3] = { 's', 'k', 'y' };
+static const symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' };
+static const symbol s_10_17[4] = { 'u', 'g', 'l', 'y' };
 
-static struct among a_10[18] =
+static const struct among a_10[18] =
 {
 /*  0 */ { 5, s_10_0, -1, -1, 0},
 /*  1 */ { 5, s_10_1, -1, -1, 0},
@@ -295,115 +311,112 @@ static struct among a_10[18] =
 /* 17 */ { 4, s_10_17, -1, 8, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1 };
+static const unsigned char g_v[] = { 17, 65, 16, 1 };
 
-static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
+static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
 
-static unsigned char g_valid_LI[] = { 55, 141, 2 };
+static const unsigned char g_valid_LI[] = { 55, 141, 2 };
 
-static symbol s_0[] = { '\'' };
-static symbol s_1[] = { 'y' };
-static symbol s_2[] = { 'Y' };
-static symbol s_3[] = { 'y' };
-static symbol s_4[] = { 'Y' };
-static symbol s_5[] = { 's', 's' };
-static symbol s_6[] = { 'i' };
-static symbol s_7[] = { 'i', 'e' };
-static symbol s_8[] = { 'e', 'e' };
-static symbol s_9[] = { 'e' };
-static symbol s_10[] = { 'e' };
-static symbol s_11[] = { 'y' };
-static symbol s_12[] = { 'Y' };
-static symbol s_13[] = { 'i' };
-static symbol s_14[] = { 't', 'i', 'o', 'n' };
-static symbol s_15[] = { 'e', 'n', 'c', 'e' };
-static symbol s_16[] = { 'a', 'n', 'c', 'e' };
-static symbol s_17[] = { 'a', 'b', 'l', 'e' };
-static symbol s_18[] = { 'e', 'n', 't' };
-static symbol s_19[] = { 'i', 'z', 'e' };
-static symbol s_20[] = { 'a', 't', 'e' };
-static symbol s_21[] = { 'a', 'l' };
-static symbol s_22[] = { 'f', 'u', 'l' };
-static symbol s_23[] = { 'o', 'u', 's' };
-static symbol s_24[] = { 'i', 'v', 'e' };
-static symbol s_25[] = { 'b', 'l', 'e' };
-static symbol s_26[] = { 'l' };
-static symbol s_27[] = { 'o', 'g' };
-static symbol s_28[] = { 'f', 'u', 'l' };
-static symbol s_29[] = { 'l', 'e', 's', 's' };
-static symbol s_30[] = { 't', 'i', 'o', 'n' };
-static symbol s_31[] = { 'a', 't', 'e' };
-static symbol s_32[] = { 'a', 'l' };
-static symbol s_33[] = { 'i', 'c' };
-static symbol s_34[] = { 's' };
-static symbol s_35[] = { 't' };
-static symbol s_36[] = { 'l' };
-static symbol s_37[] = { 's', 'k', 'i' };
-static symbol s_38[] = { 's', 'k', 'y' };
-static symbol s_39[] = { 'd', 'i', 'e' };
-static symbol s_40[] = { 'l', 'i', 'e' };
-static symbol s_41[] = { 't', 'i', 'e' };
-static symbol s_42[] = { 'i', 'd', 'l' };
-static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' };
-static symbol s_44[] = { 'u', 'g', 'l', 'i' };
-static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' };
-static symbol s_46[] = { 'o', 'n', 'l', 'i' };
-static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' };
-static symbol s_48[] = { 'Y' };
-static symbol s_49[] = { 'y' };
+static const symbol s_0[] = { '\'' };
+static const symbol s_1[] = { 'y' };
+static const symbol s_2[] = { 'Y' };
+static const symbol s_3[] = { 'y' };
+static const symbol s_4[] = { 'Y' };
+static const symbol s_5[] = { 's', 's' };
+static const symbol s_6[] = { 'i' };
+static const symbol s_7[] = { 'i', 'e' };
+static const symbol s_8[] = { 'e', 'e' };
+static const symbol s_9[] = { 'e' };
+static const symbol s_10[] = { 'e' };
+static const symbol s_11[] = { 'y' };
+static const symbol s_12[] = { 'Y' };
+static const symbol s_13[] = { 'i' };
+static const symbol s_14[] = { 't', 'i', 'o', 'n' };
+static const symbol s_15[] = { 'e', 'n', 'c', 'e' };
+static const symbol s_16[] = { 'a', 'n', 'c', 'e' };
+static const symbol s_17[] = { 'a', 'b', 'l', 'e' };
+static const symbol s_18[] = { 'e', 'n', 't' };
+static const symbol s_19[] = { 'i', 'z', 'e' };
+static const symbol s_20[] = { 'a', 't', 'e' };
+static const symbol s_21[] = { 'a', 'l' };
+static const symbol s_22[] = { 'f', 'u', 'l' };
+static const symbol s_23[] = { 'o', 'u', 's' };
+static const symbol s_24[] = { 'i', 'v', 'e' };
+static const symbol s_25[] = { 'b', 'l', 'e' };
+static const symbol s_26[] = { 'l' };
+static const symbol s_27[] = { 'o', 'g' };
+static const symbol s_28[] = { 'f', 'u', 'l' };
+static const symbol s_29[] = { 'l', 'e', 's', 's' };
+static const symbol s_30[] = { 't', 'i', 'o', 'n' };
+static const symbol s_31[] = { 'a', 't', 'e' };
+static const symbol s_32[] = { 'a', 'l' };
+static const symbol s_33[] = { 'i', 'c' };
+static const symbol s_34[] = { 's' };
+static const symbol s_35[] = { 't' };
+static const symbol s_36[] = { 'l' };
+static const symbol s_37[] = { 's', 'k', 'i' };
+static const symbol s_38[] = { 's', 'k', 'y' };
+static const symbol s_39[] = { 'd', 'i', 'e' };
+static const symbol s_40[] = { 'l', 'i', 'e' };
+static const symbol s_41[] = { 't', 'i', 'e' };
+static const symbol s_42[] = { 'i', 'd', 'l' };
+static const symbol s_43[] = { 'g', 'e', 'n', 't', 'l' };
+static const symbol s_44[] = { 'u', 'g', 'l', 'i' };
+static const symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' };
+static const symbol s_46[] = { 'o', 'n', 'l', 'i' };
+static const symbol s_47[] = { 's', 'i', 'n', 'g', 'l' };
+static const symbol s_48[] = { 'Y' };
+static const symbol s_49[] = { 'y' };
 
 static int r_prelude(struct SN_env * z) {
     z->B[0] = 0; /* unset Y_found, line 26 */
-    {   int c = z->c; /* do, line 27 */
+    {   int c1 = z->c; /* do, line 27 */
         z->bra = z->c; /* [, line 27 */
         if (!(eq_s(z, 1, s_0))) goto lab0;
         z->ket = z->c; /* ], line 27 */
-        {   int ret;
-            ret = slice_del(z); /* delete, line 27 */
+        {   int ret = slice_del(z); /* delete, line 27 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 28 */
+    {   int c2 = z->c; /* do, line 28 */
         z->bra = z->c; /* [, line 28 */
         if (!(eq_s(z, 1, s_1))) goto lab1;
         z->ket = z->c; /* ], line 28 */
-        {   int ret;
-            ret = slice_from_s(z, 1, s_2); /* <-, line 28 */
+        {   int ret = slice_from_s(z, 1, s_2); /* <-, line 28 */
             if (ret < 0) return ret;
         }
         z->B[0] = 1; /* set Y_found, line 28 */
     lab1:
-        z->c = c;
+        z->c = c2;
     }
-    {   int c = z->c; /* do, line 29 */
+    {   int c3 = z->c; /* do, line 29 */
         while(1) { /* repeat, line 29 */
-            int c = z->c;
+            int c4 = z->c;
             while(1) { /* goto, line 29 */
-                int c = z->c;
-                if (!(in_grouping(z, g_v, 97, 121))) goto lab4;
+                int c5 = z->c;
+                if (in_grouping(z, g_v, 97, 121, 0)) goto lab4;
                 z->bra = z->c; /* [, line 29 */
                 if (!(eq_s(z, 1, s_3))) goto lab4;
                 z->ket = z->c; /* ], line 29 */
-                z->c = c;
+                z->c = c5;
                 break;
             lab4:
-                z->c = c;
+                z->c = c5;
                 if (z->c >= z->l) goto lab3;
                 z->c++; /* goto, line 29 */
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_4); /* <-, line 29 */
+            {   int ret = slice_from_s(z, 1, s_4); /* <-, line 29 */
                 if (ret < 0) return ret;
             }
             z->B[0] = 1; /* set Y_found, line 29 */
             continue;
         lab3:
-            z->c = c;
+            z->c = c4;
             break;
         }
-        z->c = c;
+        z->c = c3;
     }
     return 1;
 }
@@ -411,61 +424,54 @@ static int r_prelude(struct SN_env * z) {
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    {   int c = z->c; /* do, line 35 */
-        {   int c = z->c; /* or, line 40 */
-            if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */
+    {   int c1 = z->c; /* do, line 35 */
+        {   int c2 = z->c; /* or, line 41 */
+            if (z->c + 4 >= z->l || z->p[z->c + 4] >> 5 != 3 || !((2375680 >> (z->p[z->c + 4] & 0x1f)) & 1)) goto lab2;
+            if (!(find_among(z, a_0, 3))) goto lab2; /* among, line 36 */
             goto lab1;
         lab2:
-            z->c = c;
-            while(1) { /* gopast, line 40 */
-                if (!(in_grouping(z, g_v, 97, 121))) goto lab3;
-                break;
-            lab3:
-                if (z->c >= z->l) goto lab0;
-                z->c++; /* gopast, line 40 */
+            z->c = c2;
+            {    /* gopast */ /* grouping v, line 41 */
+                int ret = out_grouping(z, g_v, 97, 121, 1);
+                if (ret < 0) goto lab0;
+                z->c += ret;
             }
-            while(1) { /* gopast, line 40 */
-                if (!(out_grouping(z, g_v, 97, 121))) goto lab4;
-                break;
-            lab4:
-                if (z->c >= z->l) goto lab0;
-                z->c++; /* gopast, line 40 */
+            {    /* gopast */ /* non v, line 41 */
+                int ret = in_grouping(z, g_v, 97, 121, 1);
+                if (ret < 0) goto lab0;
+                z->c += ret;
             }
         }
     lab1:
-        z->I[0] = z->c; /* setmark p1, line 41 */
-        while(1) { /* gopast, line 42 */
-            if (!(in_grouping(z, g_v, 97, 121))) goto lab5;
-            break;
-        lab5:
-            if (z->c >= z->l) goto lab0;
-            z->c++; /* gopast, line 42 */
+        z->I[0] = z->c; /* setmark p1, line 42 */
+        {    /* gopast */ /* grouping v, line 43 */
+            int ret = out_grouping(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 42 */
-            if (!(out_grouping(z, g_v, 97, 121))) goto lab6;
-            break;
-        lab6:
-            if (z->c >= z->l) goto lab0;
-            z->c++; /* gopast, line 42 */
+        {    /* gopast */ /* non v, line 43 */
+            int ret = in_grouping(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        z->I[1] = z->c; /* setmark p2, line 42 */
+        z->I[1] = z->c; /* setmark p2, line 43 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     return 1;
 }
 
 static int r_shortv(struct SN_env * z) {
-    {   int m = z->l - z->c; (void) m; /* or, line 50 */
-        if (!(out_grouping_b(z, g_v_WXY, 89, 121))) goto lab1;
-        if (!(in_grouping_b(z, g_v, 97, 121))) goto lab1;
-        if (!(out_grouping_b(z, g_v, 97, 121))) goto lab1;
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 51 */
+        if (out_grouping_b(z, g_v_WXY, 89, 121, 0)) goto lab1;
+        if (in_grouping_b(z, g_v, 97, 121, 0)) goto lab1;
+        if (out_grouping_b(z, g_v, 97, 121, 0)) goto lab1;
         goto lab0;
     lab1:
-        z->c = z->l - m;
-        if (!(out_grouping_b(z, g_v, 97, 121))) return 0;
-        if (!(in_grouping_b(z, g_v, 97, 121))) return 0;
-        if (z->c > z->lb) return 0; /* atlimit, line 51 */
+        z->c = z->l - m1;
+        if (out_grouping_b(z, g_v, 97, 121, 0)) return 0;
+        if (in_grouping_b(z, g_v, 97, 121, 0)) return 0;
+        if (z->c > z->lb) return 0; /* atlimit, line 52 */
     }
 lab0:
     return 1;
@@ -483,16 +489,16 @@ static int r_R2(struct SN_env * z) {
 
 static int r_Step_1a(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* try, line 58 */
-        z->ket = z->c; /* [, line 59 */
-        among_var = find_among_b(z, a_1, 3); /* substring, line 59 */
-        if (!(among_var)) { z->c = z->l - m; goto lab0; }
-        z->bra = z->c; /* ], line 59 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 59 */
+        z->ket = z->c; /* [, line 60 */
+        if (z->c <= z->lb || (z->p[z->c - 1] != 39 && z->p[z->c - 1] != 115)) { z->c = z->l - m_keep; goto lab0; }
+        among_var = find_among_b(z, a_1, 3); /* substring, line 60 */
+        if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
+        z->bra = z->c; /* ], line 60 */
         switch(among_var) {
-            case 0: { z->c = z->l - m; goto lab0; }
+            case 0: { z->c = z->l - m_keep; goto lab0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 61 */
+                {   int ret = slice_del(z); /* delete, line 62 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -500,33 +506,31 @@ static int r_Step_1a(struct SN_env * z) {
     lab0:
         ;
     }
-    z->ket = z->c; /* [, line 64 */
-    among_var = find_among_b(z, a_2, 6); /* substring, line 64 */
+    z->ket = z->c; /* [, line 65 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 115)) return 0;
+    among_var = find_among_b(z, a_2, 6); /* substring, line 65 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 64 */
+    z->bra = z->c; /* ], line 65 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_5); /* <-, line 65 */
+            {   int ret = slice_from_s(z, 2, s_5); /* <-, line 66 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 67 */
-                {   int c = z->c - 2;
-                    if (z->lb > c || c > z->l) goto lab2;
-                    z->c = c; /* hop, line 67 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 68 */
+                {   int ret = z->c - 2;
+                    if (z->lb > ret || ret > z->l) goto lab2;
+                    z->c = ret; /* hop, line 68 */
                 }
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_6); /* <-, line 67 */
+                {   int ret = slice_from_s(z, 1, s_6); /* <-, line 68 */
                     if (ret < 0) return ret;
                 }
                 goto lab1;
             lab2:
-                z->c = z->l - m;
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_7); /* <-, line 67 */
+                z->c = z->l - m1;
+                {   int ret = slice_from_s(z, 2, s_7); /* <-, line 68 */
                     if (ret < 0) return ret;
                 }
             }
@@ -534,16 +538,13 @@ static int r_Step_1a(struct SN_env * z) {
             break;
         case 3:
             if (z->c <= z->lb) return 0;
-            z->c--; /* next, line 68 */
-            while(1) { /* gopast, line 68 */
-                if (!(in_grouping_b(z, g_v, 97, 121))) goto lab3;
-                break;
-            lab3:
-                if (z->c <= z->lb) return 0;
-                z->c--; /* gopast, line 68 */
+            z->c--; /* next, line 69 */
+            {    /* gopast */ /* grouping v, line 69 */
+                int ret = out_grouping_b(z, g_v, 97, 121, 1);
+                if (ret < 0) return 0;
+                z->c -= ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 68 */
+            {   int ret = slice_del(z); /* delete, line 69 */
                 if (ret < 0) return ret;
             }
             break;
@@ -553,77 +554,70 @@ static int r_Step_1a(struct SN_env * z) {
 
 static int r_Step_1b(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 74 */
-    among_var = find_among_b(z, a_4, 6); /* substring, line 74 */
+    z->ket = z->c; /* [, line 75 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33554576 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_4, 6); /* substring, line 75 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 74 */
+    z->bra = z->c; /* ], line 75 */
     switch(among_var) {
         case 0: return 0;
         case 1:
             {   int ret = r_R1(z);
-                if (ret == 0) return 0; /* call R1, line 76 */
+                if (ret == 0) return 0; /* call R1, line 77 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
+            {   int ret = slice_from_s(z, 2, s_8); /* <-, line 77 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m_test = z->l - z->c; /* test, line 79 */
-                while(1) { /* gopast, line 79 */
-                    if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0;
-                    break;
-                lab0:
-                    if (z->c <= z->lb) return 0;
-                    z->c--; /* gopast, line 79 */
+            {   int m_test = z->l - z->c; /* test, line 80 */
+                {    /* gopast */ /* grouping v, line 80 */
+                    int ret = out_grouping_b(z, g_v, 97, 121, 1);
+                    if (ret < 0) return 0;
+                    z->c -= ret;
                 }
                 z->c = z->l - m_test;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 79 */
+            {   int ret = slice_del(z); /* delete, line 80 */
                 if (ret < 0) return ret;
             }
-            {   int m_test = z->l - z->c; /* test, line 80 */
-                among_var = find_among_b(z, a_3, 13); /* substring, line 80 */
+            {   int m_test = z->l - z->c; /* test, line 81 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else
+                among_var = find_among_b(z, a_3, 13); /* substring, line 81 */
                 if (!(among_var)) return 0;
                 z->c = z->l - m_test;
             }
             switch(among_var) {
                 case 0: return 0;
                 case 1:
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 83 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
-                    z->ket = z->c; /* [, line 85 */
+                    z->ket = z->c; /* [, line 86 */
                     if (z->c <= z->lb) return 0;
-                    z->c--; /* next, line 85 */
-                    z->bra = z->c; /* ], line 85 */
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 85 */
+                    z->c--; /* next, line 86 */
+                    z->bra = z->c; /* ], line 86 */
+                    {   int ret = slice_del(z); /* delete, line 86 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 3:
-                    if (z->c != z->I[0]) return 0; /* atmark, line 86 */
-                    {   int m_test = z->l - z->c; /* test, line 86 */
+                    if (z->c != z->I[0]) return 0; /* atmark, line 87 */
+                    {   int m_test = z->l - z->c; /* test, line 87 */
                         {   int ret = r_shortv(z);
-                            if (ret == 0) return 0; /* call shortv, line 86 */
+                            if (ret == 0) return 0; /* call shortv, line 87 */
                             if (ret < 0) return ret;
                         }
                         z->c = z->l - m_test;
                     }
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 87 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
@@ -634,25 +628,24 @@ static int r_Step_1b(struct SN_env * z) {
 }
 
 static int r_Step_1c(struct SN_env * z) {
-    z->ket = z->c; /* [, line 93 */
-    {   int m = z->l - z->c; (void) m; /* or, line 93 */
+    z->ket = z->c; /* [, line 94 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 94 */
         if (!(eq_s_b(z, 1, s_11))) goto lab1;
         goto lab0;
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         if (!(eq_s_b(z, 1, s_12))) return 0;
     }
 lab0:
-    z->bra = z->c; /* ], line 93 */
-    if (!(out_grouping_b(z, g_v, 97, 121))) return 0;
-    {   int m = z->l - z->c; (void) m; /* not, line 94 */
-        if (z->c > z->lb) goto lab2; /* atlimit, line 94 */
+    z->bra = z->c; /* ], line 94 */
+    if (out_grouping_b(z, g_v, 97, 121, 0)) return 0;
+    {   int m2 = z->l - z->c; (void)m2; /* not, line 95 */
+        if (z->c > z->lb) goto lab2; /* atlimit, line 95 */
         return 0;
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int ret;
-        ret = slice_from_s(z, 1, s_13); /* <-, line 95 */
+    {   int ret = slice_from_s(z, 1, s_13); /* <-, line 96 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -660,111 +653,96 @@ lab0:
 
 static int r_Step_2(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 99 */
-    among_var = find_among_b(z, a_5, 24); /* substring, line 99 */
+    z->ket = z->c; /* [, line 100 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_5, 24); /* substring, line 100 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 99 */
+    z->bra = z->c; /* ], line 100 */
     {   int ret = r_R1(z);
-        if (ret == 0) return 0; /* call R1, line 99 */
+        if (ret == 0) return 0; /* call R1, line 100 */
         if (ret < 0) return ret;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_14); /* <-, line 100 */
+            {   int ret = slice_from_s(z, 4, s_14); /* <-, line 101 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_15); /* <-, line 101 */
+            {   int ret = slice_from_s(z, 4, s_15); /* <-, line 102 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_16); /* <-, line 102 */
+            {   int ret = slice_from_s(z, 4, s_16); /* <-, line 103 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_17); /* <-, line 103 */
+            {   int ret = slice_from_s(z, 4, s_17); /* <-, line 104 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_18); /* <-, line 104 */
+            {   int ret = slice_from_s(z, 3, s_18); /* <-, line 105 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_19); /* <-, line 106 */
+            {   int ret = slice_from_s(z, 3, s_19); /* <-, line 107 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_20); /* <-, line 108 */
+            {   int ret = slice_from_s(z, 3, s_20); /* <-, line 109 */
                 if (ret < 0) return ret;
             }
             break;
         case 8:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_21); /* <-, line 110 */
+            {   int ret = slice_from_s(z, 2, s_21); /* <-, line 111 */
                 if (ret < 0) return ret;
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_22); /* <-, line 111 */
+            {   int ret = slice_from_s(z, 3, s_22); /* <-, line 112 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_23); /* <-, line 113 */
+            {   int ret = slice_from_s(z, 3, s_23); /* <-, line 114 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_24); /* <-, line 115 */
+            {   int ret = slice_from_s(z, 3, s_24); /* <-, line 116 */
                 if (ret < 0) return ret;
             }
             break;
         case 12:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_25); /* <-, line 117 */
+            {   int ret = slice_from_s(z, 3, s_25); /* <-, line 118 */
                 if (ret < 0) return ret;
             }
             break;
         case 13:
             if (!(eq_s_b(z, 1, s_26))) return 0;
-            {   int ret;
-                ret = slice_from_s(z, 2, s_27); /* <-, line 118 */
+            {   int ret = slice_from_s(z, 2, s_27); /* <-, line 119 */
                 if (ret < 0) return ret;
             }
             break;
         case 14:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_28); /* <-, line 119 */
+            {   int ret = slice_from_s(z, 3, s_28); /* <-, line 120 */
                 if (ret < 0) return ret;
             }
             break;
         case 15:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_29); /* <-, line 120 */
+            {   int ret = slice_from_s(z, 4, s_29); /* <-, line 121 */
                 if (ret < 0) return ret;
             }
             break;
         case 16:
-            if (!(in_grouping_b(z, g_valid_LI, 99, 116))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 121 */
+            if (in_grouping_b(z, g_valid_LI, 99, 116, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 122 */
                 if (ret < 0) return ret;
             }
             break;
@@ -774,53 +752,48 @@ static int r_Step_2(struct SN_env * z) {
 
 static int r_Step_3(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 126 */
-    among_var = find_among_b(z, a_6, 9); /* substring, line 126 */
+    z->ket = z->c; /* [, line 127 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_6, 9); /* substring, line 127 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 126 */
+    z->bra = z->c; /* ], line 127 */
     {   int ret = r_R1(z);
-        if (ret == 0) return 0; /* call R1, line 126 */
+        if (ret == 0) return 0; /* call R1, line 127 */
         if (ret < 0) return ret;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_30); /* <-, line 127 */
+            {   int ret = slice_from_s(z, 4, s_30); /* <-, line 128 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_31); /* <-, line 128 */
+            {   int ret = slice_from_s(z, 3, s_31); /* <-, line 129 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_32); /* <-, line 129 */
+            {   int ret = slice_from_s(z, 2, s_32); /* <-, line 130 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_33); /* <-, line 131 */
+            {   int ret = slice_from_s(z, 2, s_33); /* <-, line 132 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 133 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 135 */
+                if (ret == 0) return 0; /* call R2, line 136 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 135 */
+            {   int ret = slice_del(z); /* delete, line 136 */
                 if (ret < 0) return ret;
             }
             break;
@@ -830,33 +803,32 @@ static int r_Step_3(struct SN_env * z) {
 
 static int r_Step_4(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 140 */
-    among_var = find_among_b(z, a_7, 18); /* substring, line 140 */
+    z->ket = z->c; /* [, line 141 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1864232 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_7, 18); /* substring, line 141 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 140 */
+    z->bra = z->c; /* ], line 141 */
     {   int ret = r_R2(z);
-        if (ret == 0) return 0; /* call R2, line 140 */
+        if (ret == 0) return 0; /* call R2, line 141 */
         if (ret < 0) return ret;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 143 */
+            {   int ret = slice_del(z); /* delete, line 144 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 144 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 145 */
                 if (!(eq_s_b(z, 1, s_34))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_35))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 144 */
+            {   int ret = slice_del(z); /* delete, line 145 */
                 if (ret < 0) return ret;
             }
             break;
@@ -866,49 +838,48 @@ static int r_Step_4(struct SN_env * z) {
 
 static int r_Step_5(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 149 */
-    among_var = find_among_b(z, a_8, 2); /* substring, line 149 */
+    z->ket = z->c; /* [, line 150 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) return 0;
+    among_var = find_among_b(z, a_8, 2); /* substring, line 150 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 149 */
+    z->bra = z->c; /* ], line 150 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* or, line 150 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 151 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) goto lab1; /* call R2, line 150 */
+                    if (ret == 0) goto lab1; /* call R2, line 151 */
                     if (ret < 0) return ret;
                 }
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 {   int ret = r_R1(z);
-                    if (ret == 0) return 0; /* call R1, line 150 */
+                    if (ret == 0) return 0; /* call R1, line 151 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* not, line 150 */
+                {   int m2 = z->l - z->c; (void)m2; /* not, line 151 */
                     {   int ret = r_shortv(z);
-                        if (ret == 0) goto lab2; /* call shortv, line 150 */
+                        if (ret == 0) goto lab2; /* call shortv, line 151 */
                         if (ret < 0) return ret;
                     }
                     return 0;
                 lab2:
-                    z->c = z->l - m;
+                    z->c = z->l - m2;
                 }
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 150 */
+            {   int ret = slice_del(z); /* delete, line 151 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 151 */
+                if (ret == 0) return 0; /* call R2, line 152 */
                 if (ret < 0) return ret;
             }
             if (!(eq_s_b(z, 1, s_36))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 151 */
+            {   int ret = slice_del(z); /* delete, line 152 */
                 if (ret < 0) return ret;
             }
             break;
@@ -917,85 +888,76 @@ static int r_Step_5(struct SN_env * z) {
 }
 
 static int r_exception2(struct SN_env * z) {
-    z->ket = z->c; /* [, line 157 */
-    if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */
-    z->bra = z->c; /* ], line 157 */
-    if (z->c > z->lb) return 0; /* atlimit, line 157 */
+    z->ket = z->c; /* [, line 158 */
+    if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0;
+    if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 158 */
+    z->bra = z->c; /* ], line 158 */
+    if (z->c > z->lb) return 0; /* atlimit, line 158 */
     return 1;
 }
 
 static int r_exception1(struct SN_env * z) {
     int among_var;
-    z->bra = z->c; /* [, line 169 */
-    among_var = find_among(z, a_10, 18); /* substring, line 169 */
+    z->bra = z->c; /* [, line 170 */
+    if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((42750482 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0;
+    among_var = find_among(z, a_10, 18); /* substring, line 170 */
     if (!(among_var)) return 0;
-    z->ket = z->c; /* ], line 169 */
-    if (z->c < z->l) return 0; /* atlimit, line 169 */
+    z->ket = z->c; /* ], line 170 */
+    if (z->c < z->l) return 0; /* atlimit, line 170 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_37); /* <-, line 173 */
+            {   int ret = slice_from_s(z, 3, s_37); /* <-, line 174 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_38); /* <-, line 174 */
+            {   int ret = slice_from_s(z, 3, s_38); /* <-, line 175 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_39); /* <-, line 175 */
+            {   int ret = slice_from_s(z, 3, s_39); /* <-, line 176 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_40); /* <-, line 176 */
+            {   int ret = slice_from_s(z, 3, s_40); /* <-, line 177 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_41); /* <-, line 177 */
+            {   int ret = slice_from_s(z, 3, s_41); /* <-, line 178 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_42); /* <-, line 181 */
+            {   int ret = slice_from_s(z, 3, s_42); /* <-, line 182 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
-            {   int ret;
-                ret = slice_from_s(z, 5, s_43); /* <-, line 182 */
+            {   int ret = slice_from_s(z, 5, s_43); /* <-, line 183 */
                 if (ret < 0) return ret;
             }
             break;
         case 8:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_44); /* <-, line 183 */
+            {   int ret = slice_from_s(z, 4, s_44); /* <-, line 184 */
                 if (ret < 0) return ret;
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 5, s_45); /* <-, line 184 */
+            {   int ret = slice_from_s(z, 5, s_45); /* <-, line 185 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_46); /* <-, line 185 */
+            {   int ret = slice_from_s(z, 4, s_46); /* <-, line 186 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int ret;
-                ret = slice_from_s(z, 5, s_47); /* <-, line 186 */
+            {   int ret = slice_from_s(z, 5, s_47); /* <-, line 187 */
                 if (ret < 0) return ret;
             }
             break;
@@ -1004,146 +966,145 @@ static int r_exception1(struct SN_env * z) {
 }
 
 static int r_postlude(struct SN_env * z) {
-    if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */
-    while(1) { /* repeat, line 202 */
-        int c = z->c;
-        while(1) { /* goto, line 202 */
-            int c = z->c;
-            z->bra = z->c; /* [, line 202 */
+    if (!(z->B[0])) return 0; /* Boolean test Y_found, line 203 */
+    while(1) { /* repeat, line 203 */
+        int c1 = z->c;
+        while(1) { /* goto, line 203 */
+            int c2 = z->c;
+            z->bra = z->c; /* [, line 203 */
             if (!(eq_s(z, 1, s_48))) goto lab1;
-            z->ket = z->c; /* ], line 202 */
-            z->c = c;
+            z->ket = z->c; /* ], line 203 */
+            z->c = c2;
             break;
         lab1:
-            z->c = c;
+            z->c = c2;
             if (z->c >= z->l) goto lab0;
-            z->c++; /* goto, line 202 */
+            z->c++; /* goto, line 203 */
         }
-        {   int ret;
-            ret = slice_from_s(z, 1, s_49); /* <-, line 202 */
+        {   int ret = slice_from_s(z, 1, s_49); /* <-, line 203 */
             if (ret < 0) return ret;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
 }
 
 extern int english_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* or, line 206 */
+    {   int c1 = z->c; /* or, line 207 */
         {   int ret = r_exception1(z);
-            if (ret == 0) goto lab1; /* call exception1, line 206 */
+            if (ret == 0) goto lab1; /* call exception1, line 207 */
             if (ret < 0) return ret;
         }
         goto lab0;
     lab1:
-        z->c = c;
-        {   int c = z->c; /* not, line 207 */
-            {   int c = z->c + 3;
-                if (0 > c || c > z->l) goto lab3;
-                z->c = c; /* hop, line 207 */
+        z->c = c1;
+        {   int c2 = z->c; /* not, line 208 */
+            {   int ret = z->c + 3;
+                if (0 > ret || ret > z->l) goto lab3;
+                z->c = ret; /* hop, line 208 */
             }
             goto lab2;
         lab3:
-            z->c = c;
+            z->c = c2;
         }
         goto lab0;
     lab2:
-        z->c = c;
-        {   int c = z->c; /* do, line 208 */
+        z->c = c1;
+        {   int c3 = z->c; /* do, line 209 */
             {   int ret = r_prelude(z);
-                if (ret == 0) goto lab4; /* call prelude, line 208 */
+                if (ret == 0) goto lab4; /* call prelude, line 209 */
                 if (ret < 0) return ret;
             }
         lab4:
-            z->c = c;
+            z->c = c3;
         }
-        {   int c = z->c; /* do, line 209 */
+        {   int c4 = z->c; /* do, line 210 */
             {   int ret = r_mark_regions(z);
-                if (ret == 0) goto lab5; /* call mark_regions, line 209 */
+                if (ret == 0) goto lab5; /* call mark_regions, line 210 */
                 if (ret < 0) return ret;
             }
         lab5:
-            z->c = c;
+            z->c = c4;
         }
-        z->lb = z->c; z->c = z->l; /* backwards, line 210 */
+        z->lb = z->c; z->c = z->l; /* backwards, line 211 */
 
-        {   int m = z->l - z->c; (void) m; /* do, line 212 */
+        {   int m5 = z->l - z->c; (void)m5; /* do, line 213 */
             {   int ret = r_Step_1a(z);
-                if (ret == 0) goto lab6; /* call Step_1a, line 212 */
+                if (ret == 0) goto lab6; /* call Step_1a, line 213 */
                 if (ret < 0) return ret;
             }
         lab6:
-            z->c = z->l - m;
+            z->c = z->l - m5;
         }
-        {   int m = z->l - z->c; (void) m; /* or, line 214 */
+        {   int m6 = z->l - z->c; (void)m6; /* or, line 215 */
             {   int ret = r_exception2(z);
-                if (ret == 0) goto lab8; /* call exception2, line 214 */
+                if (ret == 0) goto lab8; /* call exception2, line 215 */
                 if (ret < 0) return ret;
             }
             goto lab7;
         lab8:
-            z->c = z->l - m;
-            {   int m = z->l - z->c; (void) m; /* do, line 216 */
+            z->c = z->l - m6;
+            {   int m7 = z->l - z->c; (void)m7; /* do, line 217 */
                 {   int ret = r_Step_1b(z);
-                    if (ret == 0) goto lab9; /* call Step_1b, line 216 */
+                    if (ret == 0) goto lab9; /* call Step_1b, line 217 */
                     if (ret < 0) return ret;
                 }
             lab9:
-                z->c = z->l - m;
+                z->c = z->l - m7;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 217 */
+            {   int m8 = z->l - z->c; (void)m8; /* do, line 218 */
                 {   int ret = r_Step_1c(z);
-                    if (ret == 0) goto lab10; /* call Step_1c, line 217 */
+                    if (ret == 0) goto lab10; /* call Step_1c, line 218 */
                     if (ret < 0) return ret;
                 }
             lab10:
-                z->c = z->l - m;
+                z->c = z->l - m8;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 219 */
+            {   int m9 = z->l - z->c; (void)m9; /* do, line 220 */
                 {   int ret = r_Step_2(z);
-                    if (ret == 0) goto lab11; /* call Step_2, line 219 */
+                    if (ret == 0) goto lab11; /* call Step_2, line 220 */
                     if (ret < 0) return ret;
                 }
             lab11:
-                z->c = z->l - m;
+                z->c = z->l - m9;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 220 */
+            {   int m10 = z->l - z->c; (void)m10; /* do, line 221 */
                 {   int ret = r_Step_3(z);
-                    if (ret == 0) goto lab12; /* call Step_3, line 220 */
+                    if (ret == 0) goto lab12; /* call Step_3, line 221 */
                     if (ret < 0) return ret;
                 }
             lab12:
-                z->c = z->l - m;
+                z->c = z->l - m10;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 221 */
+            {   int m11 = z->l - z->c; (void)m11; /* do, line 222 */
                 {   int ret = r_Step_4(z);
-                    if (ret == 0) goto lab13; /* call Step_4, line 221 */
+                    if (ret == 0) goto lab13; /* call Step_4, line 222 */
                     if (ret < 0) return ret;
                 }
             lab13:
-                z->c = z->l - m;
+                z->c = z->l - m11;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 223 */
+            {   int m12 = z->l - z->c; (void)m12; /* do, line 224 */
                 {   int ret = r_Step_5(z);
-                    if (ret == 0) goto lab14; /* call Step_5, line 223 */
+                    if (ret == 0) goto lab14; /* call Step_5, line 224 */
                     if (ret < 0) return ret;
                 }
             lab14:
-                z->c = z->l - m;
+                z->c = z->l - m12;
             }
         }
     lab7:
         z->c = z->lb;
-        {   int c = z->c; /* do, line 226 */
+        {   int c13 = z->c; /* do, line 227 */
             {   int ret = r_postlude(z);
-                if (ret == 0) goto lab15; /* call postlude, line 226 */
+                if (ret == 0) goto lab15; /* call postlude, line 227 */
                 if (ret < 0) return ret;
             }
         lab15:
-            z->c = c;
+            z->c = c13;
         }
     }
 lab0:
@@ -1152,5 +1113,5 @@ lab0:
 
 extern struct SN_env * english_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); }
 
-extern void english_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void english_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c b/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c
index 0d851cd..cc6feb0 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int finnish_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_tidy(struct SN_env * z);
 static int r_other_endings(struct SN_env * z);
 static int r_t_plural(struct SN_env * z);
@@ -15,22 +21,30 @@ static int r_possessive(struct SN_env * z);
 static int r_particle_etc(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * finnish_ISO_8859_1_create_env(void);
 extern void finnish_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_0[2] = { 'p', 'a' };
-static symbol s_0_1[3] = { 's', 't', 'i' };
-static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' };
-static symbol s_0_3[3] = { 'h', 'a', 'n' };
-static symbol s_0_4[3] = { 'k', 'i', 'n' };
-static symbol s_0_5[3] = { 'h', 0xE4, 'n' };
-static symbol s_0_6[4] = { 'k', 0xE4, 0xE4, 'n' };
-static symbol s_0_7[2] = { 'k', 'o' };
-static symbol s_0_8[2] = { 'p', 0xE4 };
-static symbol s_0_9[2] = { 'k', 0xF6 };
-
-static struct among a_0[10] =
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[2] = { 'p', 'a' };
+static const symbol s_0_1[3] = { 's', 't', 'i' };
+static const symbol s_0_2[4] = { 'k', 'a', 'a', 'n' };
+static const symbol s_0_3[3] = { 'h', 'a', 'n' };
+static const symbol s_0_4[3] = { 'k', 'i', 'n' };
+static const symbol s_0_5[3] = { 'h', 0xE4, 'n' };
+static const symbol s_0_6[4] = { 'k', 0xE4, 0xE4, 'n' };
+static const symbol s_0_7[2] = { 'k', 'o' };
+static const symbol s_0_8[2] = { 'p', 0xE4 };
+static const symbol s_0_9[2] = { 'k', 0xF6 };
+
+static const struct among a_0[10] =
 {
 /*  0 */ { 2, s_0_0, -1, 1, 0},
 /*  1 */ { 3, s_0_1, -1, 2, 0},
@@ -44,14 +58,14 @@ static struct among a_0[10] =
 /*  9 */ { 2, s_0_9, -1, 1, 0}
 };
 
-static symbol s_1_0[3] = { 'l', 'l', 'a' };
-static symbol s_1_1[2] = { 'n', 'a' };
-static symbol s_1_2[3] = { 's', 's', 'a' };
-static symbol s_1_3[2] = { 't', 'a' };
-static symbol s_1_4[3] = { 'l', 't', 'a' };
-static symbol s_1_5[3] = { 's', 't', 'a' };
+static const symbol s_1_0[3] = { 'l', 'l', 'a' };
+static const symbol s_1_1[2] = { 'n', 'a' };
+static const symbol s_1_2[3] = { 's', 's', 'a' };
+static const symbol s_1_3[2] = { 't', 'a' };
+static const symbol s_1_4[3] = { 'l', 't', 'a' };
+static const symbol s_1_5[3] = { 's', 't', 'a' };
 
-static struct among a_1[6] =
+static const struct among a_1[6] =
 {
 /*  0 */ { 3, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0},
@@ -61,14 +75,14 @@ static struct among a_1[6] =
 /*  5 */ { 3, s_1_5, 3, -1, 0}
 };
 
-static symbol s_2_0[3] = { 'l', 'l', 0xE4 };
-static symbol s_2_1[2] = { 'n', 0xE4 };
-static symbol s_2_2[3] = { 's', 's', 0xE4 };
-static symbol s_2_3[2] = { 't', 0xE4 };
-static symbol s_2_4[3] = { 'l', 't', 0xE4 };
-static symbol s_2_5[3] = { 's', 't', 0xE4 };
+static const symbol s_2_0[3] = { 'l', 'l', 0xE4 };
+static const symbol s_2_1[2] = { 'n', 0xE4 };
+static const symbol s_2_2[3] = { 's', 's', 0xE4 };
+static const symbol s_2_3[2] = { 't', 0xE4 };
+static const symbol s_2_4[3] = { 'l', 't', 0xE4 };
+static const symbol s_2_5[3] = { 's', 't', 0xE4 };
 
-static struct among a_2[6] =
+static const struct among a_2[6] =
 {
 /*  0 */ { 3, s_2_0, -1, -1, 0},
 /*  1 */ { 2, s_2_1, -1, -1, 0},
@@ -78,26 +92,26 @@ static struct among a_2[6] =
 /*  5 */ { 3, s_2_5, 3, -1, 0}
 };
 
-static symbol s_3_0[3] = { 'l', 'l', 'e' };
-static symbol s_3_1[3] = { 'i', 'n', 'e' };
+static const symbol s_3_0[3] = { 'l', 'l', 'e' };
+static const symbol s_3_1[3] = { 'i', 'n', 'e' };
 
-static struct among a_3[2] =
+static const struct among a_3[2] =
 {
 /*  0 */ { 3, s_3_0, -1, -1, 0},
 /*  1 */ { 3, s_3_1, -1, -1, 0}
 };
 
-static symbol s_4_0[3] = { 'n', 's', 'a' };
-static symbol s_4_1[3] = { 'm', 'm', 'e' };
-static symbol s_4_2[3] = { 'n', 'n', 'e' };
-static symbol s_4_3[2] = { 'n', 'i' };
-static symbol s_4_4[2] = { 's', 'i' };
-static symbol s_4_5[2] = { 'a', 'n' };
-static symbol s_4_6[2] = { 'e', 'n' };
-static symbol s_4_7[2] = { 0xE4, 'n' };
-static symbol s_4_8[3] = { 'n', 's', 0xE4 };
-
-static struct among a_4[9] =
+static const symbol s_4_0[3] = { 'n', 's', 'a' };
+static const symbol s_4_1[3] = { 'm', 'm', 'e' };
+static const symbol s_4_2[3] = { 'n', 'n', 'e' };
+static const symbol s_4_3[2] = { 'n', 'i' };
+static const symbol s_4_4[2] = { 's', 'i' };
+static const symbol s_4_5[2] = { 'a', 'n' };
+static const symbol s_4_6[2] = { 'e', 'n' };
+static const symbol s_4_7[2] = { 0xE4, 'n' };
+static const symbol s_4_8[3] = { 'n', 's', 0xE4 };
+
+static const struct among a_4[9] =
 {
 /*  0 */ { 3, s_4_0, -1, 3, 0},
 /*  1 */ { 3, s_4_1, -1, 3, 0},
@@ -110,15 +124,15 @@ static struct among a_4[9] =
 /*  8 */ { 3, s_4_8, -1, 3, 0}
 };
 
-static symbol s_5_0[2] = { 'a', 'a' };
-static symbol s_5_1[2] = { 'e', 'e' };
-static symbol s_5_2[2] = { 'i', 'i' };
-static symbol s_5_3[2] = { 'o', 'o' };
-static symbol s_5_4[2] = { 'u', 'u' };
-static symbol s_5_5[2] = { 0xE4, 0xE4 };
-static symbol s_5_6[2] = { 0xF6, 0xF6 };
+static const symbol s_5_0[2] = { 'a', 'a' };
+static const symbol s_5_1[2] = { 'e', 'e' };
+static const symbol s_5_2[2] = { 'i', 'i' };
+static const symbol s_5_3[2] = { 'o', 'o' };
+static const symbol s_5_4[2] = { 'u', 'u' };
+static const symbol s_5_5[2] = { 0xE4, 0xE4 };
+static const symbol s_5_6[2] = { 0xF6, 0xF6 };
 
-static struct among a_5[7] =
+static const struct among a_5[7] =
 {
 /*  0 */ { 2, s_5_0, -1, -1, 0},
 /*  1 */ { 2, s_5_1, -1, -1, 0},
@@ -129,38 +143,38 @@ static struct among a_5[7] =
 /*  6 */ { 2, s_5_6, -1, -1, 0}
 };
 
-static symbol s_6_0[1] = { 'a' };
-static symbol s_6_1[3] = { 'l', 'l', 'a' };
-static symbol s_6_2[2] = { 'n', 'a' };
-static symbol s_6_3[3] = { 's', 's', 'a' };
-static symbol s_6_4[2] = { 't', 'a' };
-static symbol s_6_5[3] = { 'l', 't', 'a' };
-static symbol s_6_6[3] = { 's', 't', 'a' };
-static symbol s_6_7[3] = { 't', 't', 'a' };
-static symbol s_6_8[3] = { 'l', 'l', 'e' };
-static symbol s_6_9[3] = { 'i', 'n', 'e' };
-static symbol s_6_10[3] = { 'k', 's', 'i' };
-static symbol s_6_11[1] = { 'n' };
-static symbol s_6_12[3] = { 'h', 'a', 'n' };
-static symbol s_6_13[3] = { 'd', 'e', 'n' };
-static symbol s_6_14[4] = { 's', 'e', 'e', 'n' };
-static symbol s_6_15[3] = { 'h', 'e', 'n' };
-static symbol s_6_16[4] = { 't', 't', 'e', 'n' };
-static symbol s_6_17[3] = { 'h', 'i', 'n' };
-static symbol s_6_18[4] = { 's', 'i', 'i', 'n' };
-static symbol s_6_19[3] = { 'h', 'o', 'n' };
-static symbol s_6_20[3] = { 'h', 0xE4, 'n' };
-static symbol s_6_21[3] = { 'h', 0xF6, 'n' };
-static symbol s_6_22[1] = { 0xE4 };
-static symbol s_6_23[3] = { 'l', 'l', 0xE4 };
-static symbol s_6_24[2] = { 'n', 0xE4 };
-static symbol s_6_25[3] = { 's', 's', 0xE4 };
-static symbol s_6_26[2] = { 't', 0xE4 };
-static symbol s_6_27[3] = { 'l', 't', 0xE4 };
-static symbol s_6_28[3] = { 's', 't', 0xE4 };
-static symbol s_6_29[3] = { 't', 't', 0xE4 };
-
-static struct among a_6[30] =
+static const symbol s_6_0[1] = { 'a' };
+static const symbol s_6_1[3] = { 'l', 'l', 'a' };
+static const symbol s_6_2[2] = { 'n', 'a' };
+static const symbol s_6_3[3] = { 's', 's', 'a' };
+static const symbol s_6_4[2] = { 't', 'a' };
+static const symbol s_6_5[3] = { 'l', 't', 'a' };
+static const symbol s_6_6[3] = { 's', 't', 'a' };
+static const symbol s_6_7[3] = { 't', 't', 'a' };
+static const symbol s_6_8[3] = { 'l', 'l', 'e' };
+static const symbol s_6_9[3] = { 'i', 'n', 'e' };
+static const symbol s_6_10[3] = { 'k', 's', 'i' };
+static const symbol s_6_11[1] = { 'n' };
+static const symbol s_6_12[3] = { 'h', 'a', 'n' };
+static const symbol s_6_13[3] = { 'd', 'e', 'n' };
+static const symbol s_6_14[4] = { 's', 'e', 'e', 'n' };
+static const symbol s_6_15[3] = { 'h', 'e', 'n' };
+static const symbol s_6_16[4] = { 't', 't', 'e', 'n' };
+static const symbol s_6_17[3] = { 'h', 'i', 'n' };
+static const symbol s_6_18[4] = { 's', 'i', 'i', 'n' };
+static const symbol s_6_19[3] = { 'h', 'o', 'n' };
+static const symbol s_6_20[3] = { 'h', 0xE4, 'n' };
+static const symbol s_6_21[3] = { 'h', 0xF6, 'n' };
+static const symbol s_6_22[1] = { 0xE4 };
+static const symbol s_6_23[3] = { 'l', 'l', 0xE4 };
+static const symbol s_6_24[2] = { 'n', 0xE4 };
+static const symbol s_6_25[3] = { 's', 's', 0xE4 };
+static const symbol s_6_26[2] = { 't', 0xE4 };
+static const symbol s_6_27[3] = { 'l', 't', 0xE4 };
+static const symbol s_6_28[3] = { 's', 't', 0xE4 };
+static const symbol s_6_29[3] = { 't', 't', 0xE4 };
+
+static const struct among a_6[30] =
 {
 /*  0 */ { 1, s_6_0, -1, 8, 0},
 /*  1 */ { 3, s_6_1, 0, -1, 0},
@@ -194,22 +208,22 @@ static struct among a_6[30] =
 /* 29 */ { 3, s_6_29, 26, 9, 0}
 };
 
-static symbol s_7_0[3] = { 'e', 'j', 'a' };
-static symbol s_7_1[3] = { 'm', 'm', 'a' };
-static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' };
-static symbol s_7_3[3] = { 'm', 'p', 'a' };
-static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' };
-static symbol s_7_5[3] = { 'm', 'm', 'i' };
-static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' };
-static symbol s_7_7[3] = { 'm', 'p', 'i' };
-static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' };
-static symbol s_7_9[3] = { 'e', 'j', 0xE4 };
-static symbol s_7_10[3] = { 'm', 'm', 0xE4 };
-static symbol s_7_11[4] = { 'i', 'm', 'm', 0xE4 };
-static symbol s_7_12[3] = { 'm', 'p', 0xE4 };
-static symbol s_7_13[4] = { 'i', 'm', 'p', 0xE4 };
-
-static struct among a_7[14] =
+static const symbol s_7_0[3] = { 'e', 'j', 'a' };
+static const symbol s_7_1[3] = { 'm', 'm', 'a' };
+static const symbol s_7_2[4] = { 'i', 'm', 'm', 'a' };
+static const symbol s_7_3[3] = { 'm', 'p', 'a' };
+static const symbol s_7_4[4] = { 'i', 'm', 'p', 'a' };
+static const symbol s_7_5[3] = { 'm', 'm', 'i' };
+static const symbol s_7_6[4] = { 'i', 'm', 'm', 'i' };
+static const symbol s_7_7[3] = { 'm', 'p', 'i' };
+static const symbol s_7_8[4] = { 'i', 'm', 'p', 'i' };
+static const symbol s_7_9[3] = { 'e', 'j', 0xE4 };
+static const symbol s_7_10[3] = { 'm', 'm', 0xE4 };
+static const symbol s_7_11[4] = { 'i', 'm', 'm', 0xE4 };
+static const symbol s_7_12[3] = { 'm', 'p', 0xE4 };
+static const symbol s_7_13[4] = { 'i', 'm', 'p', 0xE4 };
+
+static const struct among a_7[14] =
 {
 /*  0 */ { 3, s_7_0, -1, -1, 0},
 /*  1 */ { 3, s_7_1, -1, 1, 0},
@@ -227,90 +241,68 @@ static struct among a_7[14] =
 /* 13 */ { 4, s_7_13, 12, -1, 0}
 };
 
-static symbol s_8_0[1] = { 'i' };
-static symbol s_8_1[1] = { 'j' };
+static const symbol s_8_0[1] = { 'i' };
+static const symbol s_8_1[1] = { 'j' };
 
-static struct among a_8[2] =
+static const struct among a_8[2] =
 {
 /*  0 */ { 1, s_8_0, -1, -1, 0},
 /*  1 */ { 1, s_8_1, -1, -1, 0}
 };
 
-static symbol s_9_0[3] = { 'm', 'm', 'a' };
-static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' };
+static const symbol s_9_0[3] = { 'm', 'm', 'a' };
+static const symbol s_9_1[4] = { 'i', 'm', 'm', 'a' };
 
-static struct among a_9[2] =
+static const struct among a_9[2] =
 {
 /*  0 */ { 3, s_9_0, -1, 1, 0},
 /*  1 */ { 4, s_9_1, 0, -1, 0}
 };
 
-static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 };
-
-static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
-
-static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
-
-static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
-
-static symbol s_0[] = { 'k' };
-static symbol s_1[] = { 'k', 's', 'e' };
-static symbol s_2[] = { 'k', 's', 'i' };
-static symbol s_3[] = { 'i' };
-static symbol s_4[] = { 'a' };
-static symbol s_5[] = { 'e' };
-static symbol s_6[] = { 'i' };
-static symbol s_7[] = { 'o' };
-static symbol s_8[] = { 0xE4 };
-static symbol s_9[] = { 0xF6 };
-static symbol s_10[] = { 'i', 'e' };
-static symbol s_11[] = { 'e' };
-static symbol s_12[] = { 'p', 'o' };
-static symbol s_13[] = { 't' };
-static symbol s_14[] = { 'p', 'o' };
-static symbol s_15[] = { 'j' };
-static symbol s_16[] = { 'o' };
-static symbol s_17[] = { 'u' };
-static symbol s_18[] = { 'o' };
-static symbol s_19[] = { 'j' };
+static const unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 };
+
+static const unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
+
+static const unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
+
+static const unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
+
+static const symbol s_0[] = { 'k' };
+static const symbol s_1[] = { 'k', 's', 'e' };
+static const symbol s_2[] = { 'k', 's', 'i' };
+static const symbol s_3[] = { 'i' };
+static const symbol s_4[] = { 'a' };
+static const symbol s_5[] = { 'e' };
+static const symbol s_6[] = { 'i' };
+static const symbol s_7[] = { 'o' };
+static const symbol s_8[] = { 0xE4 };
+static const symbol s_9[] = { 0xF6 };
+static const symbol s_10[] = { 'i', 'e' };
+static const symbol s_11[] = { 'e' };
+static const symbol s_12[] = { 'p', 'o' };
+static const symbol s_13[] = { 't' };
+static const symbol s_14[] = { 'p', 'o' };
+static const symbol s_15[] = { 'j' };
+static const symbol s_16[] = { 'o' };
+static const symbol s_17[] = { 'u' };
+static const symbol s_18[] = { 'o' };
+static const symbol s_19[] = { 'j' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    while(1) { /* goto, line 46 */
-        int c = z->c;
-        if (!(in_grouping(z, g_V1, 97, 246))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        if (z->c >= z->l) return 0;
-        z->c++; /* goto, line 46 */
-    }
-    while(1) { /* gopast, line 46 */
-        if (!(out_grouping(z, g_V1, 97, 246))) goto lab1;
-        break;
-    lab1:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 46 */
+    if (out_grouping(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 46 */
+    {    /* gopast */ /* non V1, line 46 */
+        int ret = in_grouping(z, g_V1, 97, 246, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 46 */
-    while(1) { /* goto, line 47 */
-        int c = z->c;
-        if (!(in_grouping(z, g_V1, 97, 246))) goto lab2;
-        z->c = c;
-        break;
-    lab2:
-        z->c = c;
-        if (z->c >= z->l) return 0;
-        z->c++; /* goto, line 47 */
-    }
-    while(1) { /* gopast, line 47 */
-        if (!(out_grouping(z, g_V1, 97, 246))) goto lab3;
-        break;
-    lab3:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 47 */
+    if (out_grouping(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 47 */
+    {    /* gopast */ /* non V1, line 47 */
+        int ret = in_grouping(z, g_V1, 97, 246, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[1] = z->c; /* setmark p2, line 47 */
     return 1;
@@ -323,22 +315,22 @@ static int r_R2(struct SN_env * z) {
 
 static int r_particle_etc(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 55 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 55 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 55 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 55 */
         among_var = find_among_b(z, a_0, 10); /* substring, line 55 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 55 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            if (!(in_grouping_b(z, g_particle_end, 97, 246))) return 0;
+            if (in_grouping_b(z, g_particle_end, 97, 246, 0)) return 0;
             break;
         case 2:
             {   int ret = r_R2(z);
@@ -347,8 +339,7 @@ static int r_particle_etc(struct SN_env * z) {
             }
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 66 */
+    {   int ret = slice_del(z); /* delete, line 66 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -356,69 +347,65 @@ static int r_particle_etc(struct SN_env * z) {
 
 static int r_possessive(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 69 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 69 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 69 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 69 */
         among_var = find_among_b(z, a_4, 9); /* substring, line 69 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 69 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* not, line 72 */
+            {   int m2 = z->l - z->c; (void)m2; /* not, line 72 */
                 if (!(eq_s_b(z, 1, s_0))) goto lab0;
                 return 0;
             lab0:
-                z->c = z->l - m;
+                z->c = z->l - m2;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 72 */
+            {   int ret = slice_del(z); /* delete, line 72 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 74 */
+            {   int ret = slice_del(z); /* delete, line 74 */
                 if (ret < 0) return ret;
             }
             z->ket = z->c; /* [, line 74 */
             if (!(eq_s_b(z, 3, s_1))) return 0;
             z->bra = z->c; /* ], line 74 */
-            {   int ret;
-                ret = slice_from_s(z, 3, s_2); /* <-, line 74 */
+            {   int ret = slice_from_s(z, 3, s_2); /* <-, line 74 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 78 */
+            {   int ret = slice_del(z); /* delete, line 78 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] != 97) return 0;
             if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 81 */
+            {   int ret = slice_del(z); /* delete, line 81 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] != 228) return 0;
             if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 84 */
+            {   int ret = slice_del(z); /* delete, line 84 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
+            if (z->c - 2 <= z->lb || z->p[z->c - 1] != 101) return 0;
             if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 86 */
+            {   int ret = slice_del(z); /* delete, line 86 */
                 if (ret < 0) return ret;
             }
             break;
@@ -433,23 +420,23 @@ static int r_LONG(struct SN_env * z) {
 
 static int r_VI(struct SN_env * z) {
     if (!(eq_s_b(z, 1, s_3))) return 0;
-    if (!(in_grouping_b(z, g_V2, 97, 246))) return 0;
+    if (in_grouping_b(z, g_V2, 97, 246, 0)) return 0;
     return 1;
 }
 
 static int r_case_ending(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 96 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 96 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 96 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 96 */
         among_var = find_among_b(z, a_6, 30); /* substring, line 96 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 96 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
@@ -472,21 +459,21 @@ static int r_case_ending(struct SN_env * z) {
             if (!(eq_s_b(z, 1, s_9))) return 0;
             break;
         case 7:
-            {   int m = z->l - z->c; (void) m; /* try, line 111 */
-                {   int m = z->l - z->c; (void) m; /* and, line 113 */
-                    {   int m = z->l - z->c; (void) m; /* or, line 112 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
+                {   int m2 = z->l - z->c; (void)m2; /* and, line 113 */
+                    {   int m3 = z->l - z->c; (void)m3; /* or, line 112 */
                         {   int ret = r_LONG(z);
                             if (ret == 0) goto lab2; /* call LONG, line 111 */
                             if (ret < 0) return ret;
                         }
                         goto lab1;
                     lab2:
-                        z->c = z->l - m;
-                        if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; }
+                        z->c = z->l - m3;
+                        if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m_keep; goto lab0; }
                     }
                 lab1:
-                    z->c = z->l - m;
-                    if (z->c <= z->lb) { z->c = z->l - m; goto lab0; }
+                    z->c = z->l - m2;
+                    if (z->c <= z->lb) { z->c = z->l - m_keep; goto lab0; }
                     z->c--; /* next, line 113 */
                 }
                 z->bra = z->c; /* ], line 113 */
@@ -495,15 +482,14 @@ static int r_case_ending(struct SN_env * z) {
             }
             break;
         case 8:
-            if (!(in_grouping_b(z, g_V1, 97, 246))) return 0;
-            if (!(out_grouping_b(z, g_V1, 97, 246))) return 0;
+            if (in_grouping_b(z, g_V1, 97, 246, 0)) return 0;
+            if (out_grouping_b(z, g_V1, 97, 246, 0)) return 0;
             break;
         case 9:
             if (!(eq_s_b(z, 1, s_11))) return 0;
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 138 */
+    {   int ret = slice_del(z); /* delete, line 138 */
         if (ret < 0) return ret;
     }
     z->B[0] = 1; /* set ending_removed, line 139 */
@@ -512,50 +498,49 @@ static int r_case_ending(struct SN_env * z) {
 
 static int r_other_endings(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 142 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 142 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[1]) return 0;
         z->c = z->I[1]; /* tomark, line 142 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 142 */
         among_var = find_among_b(z, a_7, 14); /* substring, line 142 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 142 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* not, line 146 */
+            {   int m2 = z->l - z->c; (void)m2; /* not, line 146 */
                 if (!(eq_s_b(z, 2, s_12))) goto lab0;
                 return 0;
             lab0:
-                z->c = z->l - m;
+                z->c = z->l - m2;
             }
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 151 */
+    {   int ret = slice_del(z); /* delete, line 151 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 static int r_i_plural(struct SN_env * z) {
-    {   int m3; /* setlimit, line 154 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 154 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 154 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 154 */
-        if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */
+        if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 106)) { z->lb = mlimit; return 0; }
+        if (!(find_among_b(z, a_8, 2))) { z->lb = mlimit; return 0; } /* substring, line 154 */
         z->bra = z->c; /* ], line 154 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 158 */
+    {   int ret = slice_del(z); /* delete, line 158 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -563,136 +548,122 @@ static int r_i_plural(struct SN_env * z) {
 
 static int r_t_plural(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 161 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 161 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 161 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 162 */
-        if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; }
+        if (!(eq_s_b(z, 1, s_13))) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 162 */
         {   int m_test = z->l - z->c; /* test, line 162 */
-            if (!(in_grouping_b(z, g_V1, 97, 246))) { z->lb = m3; return 0; }
+            if (in_grouping_b(z, g_V1, 97, 246, 0)) { z->lb = mlimit; return 0; }
             z->c = z->l - m_test;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 163 */
+        {   int ret = slice_del(z); /* delete, line 163 */
             if (ret < 0) return ret;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
-    {   int m3; /* setlimit, line 165 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 165 */
+        int m2 = z->l - z->c; (void)m2;
         if (z->c < z->I[1]) return 0;
         z->c = z->I[1]; /* tomark, line 165 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m2;
         z->ket = z->c; /* [, line 165 */
+        if (z->c - 2 <= z->lb || z->p[z->c - 1] != 97) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_9, 2); /* substring, line 165 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 165 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* not, line 167 */
+            {   int m3 = z->l - z->c; (void)m3; /* not, line 167 */
                 if (!(eq_s_b(z, 2, s_14))) goto lab0;
                 return 0;
             lab0:
-                z->c = z->l - m;
+                z->c = z->l - m3;
             }
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 170 */
+    {   int ret = slice_del(z); /* delete, line 170 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 static int r_tidy(struct SN_env * z) {
-    {   int m3; /* setlimit, line 173 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 173 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 173 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* do, line 174 */
-            {   int m = z->l - z->c; (void) m; /* and, line 174 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* do, line 174 */
+            {   int m3 = z->l - z->c; (void)m3; /* and, line 174 */
                 {   int ret = r_LONG(z);
                     if (ret == 0) goto lab0; /* call LONG, line 174 */
                     if (ret < 0) return ret;
                 }
-                z->c = z->l - m;
+                z->c = z->l - m3;
                 z->ket = z->c; /* [, line 174 */
                 if (z->c <= z->lb) goto lab0;
                 z->c--; /* next, line 174 */
                 z->bra = z->c; /* ], line 174 */
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 174 */
+                {   int ret = slice_del(z); /* delete, line 174 */
                     if (ret < 0) return ret;
                 }
             }
         lab0:
-            z->c = z->l - m;
+            z->c = z->l - m2;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 175 */
+        {   int m4 = z->l - z->c; (void)m4; /* do, line 175 */
             z->ket = z->c; /* [, line 175 */
-            if (!(in_grouping_b(z, g_AEI, 97, 228))) goto lab1;
+            if (in_grouping_b(z, g_AEI, 97, 228, 0)) goto lab1;
             z->bra = z->c; /* ], line 175 */
-            if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab1;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 175 */
+            if (out_grouping_b(z, g_V1, 97, 246, 0)) goto lab1;
+            {   int ret = slice_del(z); /* delete, line 175 */
                 if (ret < 0) return ret;
             }
         lab1:
-            z->c = z->l - m;
+            z->c = z->l - m4;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 176 */
+        {   int m5 = z->l - z->c; (void)m5; /* do, line 176 */
             z->ket = z->c; /* [, line 176 */
             if (!(eq_s_b(z, 1, s_15))) goto lab2;
             z->bra = z->c; /* ], line 176 */
-            {   int m = z->l - z->c; (void) m; /* or, line 176 */
+            {   int m6 = z->l - z->c; (void)m6; /* or, line 176 */
                 if (!(eq_s_b(z, 1, s_16))) goto lab4;
                 goto lab3;
             lab4:
-                z->c = z->l - m;
+                z->c = z->l - m6;
                 if (!(eq_s_b(z, 1, s_17))) goto lab2;
             }
         lab3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 176 */
+            {   int ret = slice_del(z); /* delete, line 176 */
                 if (ret < 0) return ret;
             }
         lab2:
-            z->c = z->l - m;
+            z->c = z->l - m5;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 177 */
+        {   int m7 = z->l - z->c; (void)m7; /* do, line 177 */
             z->ket = z->c; /* [, line 177 */
             if (!(eq_s_b(z, 1, s_18))) goto lab5;
             z->bra = z->c; /* ], line 177 */
             if (!(eq_s_b(z, 1, s_19))) goto lab5;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 177 */
+            {   int ret = slice_del(z); /* delete, line 177 */
                 if (ret < 0) return ret;
             }
         lab5:
-            z->c = z->l - m;
+            z->c = z->l - m7;
         }
-        z->lb = m3;
-    }
-    while(1) { /* goto, line 179 */
-        int m = z->l - z->c; (void) m;
-        if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab6;
-        z->c = z->l - m;
-        break;
-    lab6:
-        z->c = z->l - m;
-        if (z->c <= z->lb) return 0;
-        z->c--; /* goto, line 179 */
+        z->lb = mlimit;
     }
+    if (in_grouping_b(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* non V1, line 179 */
     z->ket = z->c; /* [, line 179 */
     if (z->c <= z->lb) return 0;
     z->c--; /* next, line 179 */
@@ -700,87 +671,86 @@ static int r_tidy(struct SN_env * z) {
     z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */
     if (z->S[0] == 0) return -1; /* -> x, line 179 */
     if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 179 */
+    {   int ret = slice_del(z); /* delete, line 179 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 extern int finnish_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 185 */
+    {   int c1 = z->c; /* do, line 185 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 185 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->B[0] = 0; /* unset ending_removed, line 186 */
     z->lb = z->c; z->c = z->l; /* backwards, line 187 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 188 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 188 */
         {   int ret = r_particle_etc(z);
             if (ret == 0) goto lab1; /* call particle_etc, line 188 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 189 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 189 */
         {   int ret = r_possessive(z);
             if (ret == 0) goto lab2; /* call possessive, line 189 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 190 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 190 */
         {   int ret = r_case_ending(z);
             if (ret == 0) goto lab3; /* call case_ending, line 190 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 191 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 191 */
         {   int ret = r_other_endings(z);
             if (ret == 0) goto lab4; /* call other_endings, line 191 */
             if (ret < 0) return ret;
         }
     lab4:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
-    {   int m = z->l - z->c; (void) m; /* or, line 192 */
+    {   int m6 = z->l - z->c; (void)m6; /* or, line 192 */
         if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */
-        {   int m = z->l - z->c; (void) m; /* do, line 192 */
+        {   int m7 = z->l - z->c; (void)m7; /* do, line 192 */
             {   int ret = r_i_plural(z);
                 if (ret == 0) goto lab7; /* call i_plural, line 192 */
                 if (ret < 0) return ret;
             }
         lab7:
-            z->c = z->l - m;
+            z->c = z->l - m7;
         }
         goto lab5;
     lab6:
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* do, line 192 */
+        z->c = z->l - m6;
+        {   int m8 = z->l - z->c; (void)m8; /* do, line 192 */
             {   int ret = r_t_plural(z);
                 if (ret == 0) goto lab8; /* call t_plural, line 192 */
                 if (ret < 0) return ret;
             }
         lab8:
-            z->c = z->l - m;
+            z->c = z->l - m8;
         }
     }
 lab5:
-    {   int m = z->l - z->c; (void) m; /* do, line 193 */
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 193 */
         {   int ret = r_tidy(z);
             if (ret == 0) goto lab9; /* call tidy, line 193 */
             if (ret < 0) return ret;
         }
     lab9:
-        z->c = z->l - m;
+        z->c = z->l - m9;
     }
     z->c = z->lb;
     return 1;
@@ -788,5 +758,5 @@ lab5:
 
 extern struct SN_env * finnish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 1); }
 
-extern void finnish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void finnish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 1); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_french.c b/libstemmer_c/src_c/stem_ISO_8859_1_french.c
index e4eb80d..7907400 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_french.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_french.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int french_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_un_accent(struct SN_env * z);
 static int r_un_double(struct SN_env * z);
 static int r_residual_suffix(struct SN_env * z);
@@ -16,452 +22,466 @@ static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * french_ISO_8859_1_create_env(void);
 extern void french_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 'I' };
-static symbol s_0_2[1] = { 'U' };
-static symbol s_0_3[1] = { 'Y' };
 
-static struct among a_0[4] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[3] = { 'c', 'o', 'l' };
+static const symbol s_0_1[3] = { 'p', 'a', 'r' };
+static const symbol s_0_2[3] = { 't', 'a', 'p' };
+
+static const struct among a_0[3] =
 {
-/*  0 */ { 0, 0, -1, 4, 0},
-/*  1 */ { 1, s_0_1, 0, 1, 0},
-/*  2 */ { 1, s_0_2, 0, 2, 0},
-/*  3 */ { 1, s_0_3, 0, 3, 0}
+/*  0 */ { 3, s_0_0, -1, -1, 0},
+/*  1 */ { 3, s_0_1, -1, -1, 0},
+/*  2 */ { 3, s_0_2, -1, -1, 0}
 };
 
-static symbol s_1_0[3] = { 'i', 'q', 'U' };
-static symbol s_1_1[3] = { 'a', 'b', 'l' };
-static symbol s_1_2[3] = { 'I', 0xE8, 'r' };
-static symbol s_1_3[3] = { 'i', 0xE8, 'r' };
-static symbol s_1_4[3] = { 'e', 'u', 's' };
-static symbol s_1_5[2] = { 'i', 'v' };
+static const symbol s_1_1[1] = { 'I' };
+static const symbol s_1_2[1] = { 'U' };
+static const symbol s_1_3[1] = { 'Y' };
 
-static struct among a_1[6] =
+static const struct among a_1[4] =
 {
-/*  0 */ { 3, s_1_0, -1, 3, 0},
-/*  1 */ { 3, s_1_1, -1, 3, 0},
-/*  2 */ { 3, s_1_2, -1, 4, 0},
-/*  3 */ { 3, s_1_3, -1, 4, 0},
-/*  4 */ { 3, s_1_4, -1, 2, 0},
-/*  5 */ { 2, s_1_5, -1, 1, 0}
+/*  0 */ { 0, 0, -1, 4, 0},
+/*  1 */ { 1, s_1_1, 0, 1, 0},
+/*  2 */ { 1, s_1_2, 0, 2, 0},
+/*  3 */ { 1, s_1_3, 0, 3, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'c' };
-static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_2_2[2] = { 'i', 'v' };
+static const symbol s_2_0[3] = { 'i', 'q', 'U' };
+static const symbol s_2_1[3] = { 'a', 'b', 'l' };
+static const symbol s_2_2[3] = { 'I', 0xE8, 'r' };
+static const symbol s_2_3[3] = { 'i', 0xE8, 'r' };
+static const symbol s_2_4[3] = { 'e', 'u', 's' };
+static const symbol s_2_5[2] = { 'i', 'v' };
 
-static struct among a_2[3] =
+static const struct among a_2[6] =
 {
-/*  0 */ { 2, s_2_0, -1, 2, 0},
-/*  1 */ { 4, s_2_1, -1, 1, 0},
-/*  2 */ { 2, s_2_2, -1, 3, 0}
+/*  0 */ { 3, s_2_0, -1, 3, 0},
+/*  1 */ { 3, s_2_1, -1, 3, 0},
+/*  2 */ { 3, s_2_2, -1, 4, 0},
+/*  3 */ { 3, s_2_3, -1, 4, 0},
+/*  4 */ { 3, s_2_4, -1, 2, 0},
+/*  5 */ { 2, s_2_5, -1, 1, 0}
 };
 
-static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' };
-static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
-static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' };
-static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' };
-static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' };
-static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_3_6[4] = { 'i', 's', 'm', 'e' };
-static symbol s_3_7[4] = { 'e', 'u', 's', 'e' };
-static symbol s_3_8[4] = { 'i', 's', 't', 'e' };
-static symbol s_3_9[3] = { 'i', 'v', 'e' };
-static symbol s_3_10[2] = { 'i', 'f' };
-static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' };
-static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' };
-static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' };
-static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' };
-static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' };
-static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' };
-static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' };
-static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' };
-static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' };
-static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' };
-static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' };
-static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' };
-static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' };
-static symbol s_3_24[4] = { 'i', 'v', 'e', 's' };
-static symbol s_3_25[3] = { 'i', 'f', 's' };
-static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' };
-static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' };
-static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' };
-static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' };
-static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' };
-static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' };
-static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' };
-static symbol s_3_33[4] = { 'i', 't', 0xE9, 's' };
-static symbol s_3_34[4] = { 'm', 'e', 'n', 't' };
-static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' };
-static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' };
-static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' };
-static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' };
-static symbol s_3_39[3] = { 'a', 'u', 'x' };
-static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' };
-static symbol s_3_41[3] = { 'e', 'u', 'x' };
-static symbol s_3_42[3] = { 'i', 't', 0xE9 };
+static const symbol s_3_0[2] = { 'i', 'c' };
+static const symbol s_3_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_3_2[2] = { 'i', 'v' };
 
-static struct among a_3[43] =
+static const struct among a_3[3] =
 {
-/*  0 */ { 4, s_3_0, -1, 1, 0},
-/*  1 */ { 6, s_3_1, -1, 2, 0},
-/*  2 */ { 4, s_3_2, -1, 1, 0},
-/*  3 */ { 4, s_3_3, -1, 5, 0},
-/*  4 */ { 5, s_3_4, -1, 3, 0},
-/*  5 */ { 4, s_3_5, -1, 1, 0},
-/*  6 */ { 4, s_3_6, -1, 1, 0},
-/*  7 */ { 4, s_3_7, -1, 11, 0},
-/*  8 */ { 4, s_3_8, -1, 1, 0},
-/*  9 */ { 3, s_3_9, -1, 8, 0},
-/* 10 */ { 2, s_3_10, -1, 8, 0},
-/* 11 */ { 5, s_3_11, -1, 4, 0},
-/* 12 */ { 5, s_3_12, -1, 2, 0},
-/* 13 */ { 5, s_3_13, -1, 4, 0},
-/* 14 */ { 5, s_3_14, -1, 2, 0},
-/* 15 */ { 5, s_3_15, -1, 1, 0},
-/* 16 */ { 7, s_3_16, -1, 2, 0},
-/* 17 */ { 5, s_3_17, -1, 1, 0},
-/* 18 */ { 5, s_3_18, -1, 5, 0},
-/* 19 */ { 6, s_3_19, -1, 3, 0},
-/* 20 */ { 5, s_3_20, -1, 1, 0},
-/* 21 */ { 5, s_3_21, -1, 1, 0},
-/* 22 */ { 5, s_3_22, -1, 11, 0},
-/* 23 */ { 5, s_3_23, -1, 1, 0},
-/* 24 */ { 4, s_3_24, -1, 8, 0},
-/* 25 */ { 3, s_3_25, -1, 8, 0},
-/* 26 */ { 6, s_3_26, -1, 4, 0},
-/* 27 */ { 6, s_3_27, -1, 2, 0},
-/* 28 */ { 6, s_3_28, -1, 4, 0},
-/* 29 */ { 6, s_3_29, -1, 2, 0},
-/* 30 */ { 5, s_3_30, -1, 15, 0},
-/* 31 */ { 6, s_3_31, 30, 6, 0},
-/* 32 */ { 9, s_3_32, 31, 12, 0},
-/* 33 */ { 4, s_3_33, -1, 7, 0},
-/* 34 */ { 4, s_3_34, -1, 15, 0},
-/* 35 */ { 5, s_3_35, 34, 6, 0},
-/* 36 */ { 8, s_3_36, 35, 12, 0},
-/* 37 */ { 6, s_3_37, 34, 13, 0},
-/* 38 */ { 6, s_3_38, 34, 14, 0},
-/* 39 */ { 3, s_3_39, -1, 10, 0},
-/* 40 */ { 4, s_3_40, 39, 9, 0},
-/* 41 */ { 3, s_3_41, -1, 1, 0},
-/* 42 */ { 3, s_3_42, -1, 7, 0}
+/*  0 */ { 2, s_3_0, -1, 2, 0},
+/*  1 */ { 4, s_3_1, -1, 1, 0},
+/*  2 */ { 2, s_3_2, -1, 3, 0}
 };
 
-static symbol s_4_0[3] = { 'i', 'r', 'a' };
-static symbol s_4_1[2] = { 'i', 'e' };
-static symbol s_4_2[4] = { 'i', 's', 's', 'e' };
-static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' };
-static symbol s_4_4[1] = { 'i' };
-static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' };
-static symbol s_4_6[2] = { 'i', 'r' };
-static symbol s_4_7[4] = { 'i', 'r', 'a', 's' };
-static symbol s_4_8[3] = { 'i', 'e', 's' };
-static symbol s_4_9[4] = { 0xEE, 'm', 'e', 's' };
-static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' };
-static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' };
-static symbol s_4_12[4] = { 0xEE, 't', 'e', 's' };
-static symbol s_4_13[2] = { 'i', 's' };
-static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' };
-static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' };
-static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' };
-static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' };
-static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' };
-static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' };
-static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' };
-static symbol s_4_21[2] = { 'i', 't' };
-static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' };
-static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' };
-static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' };
-static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' };
-static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' };
-static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' };
-static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' };
-static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' };
-static symbol s_4_30[2] = { 0xEE, 't' };
-static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' };
-static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' };
-static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' };
-static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' };
+static const symbol s_4_0[4] = { 'i', 'q', 'U', 'e' };
+static const symbol s_4_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
+static const symbol s_4_2[4] = { 'a', 'n', 'c', 'e' };
+static const symbol s_4_3[4] = { 'e', 'n', 'c', 'e' };
+static const symbol s_4_4[5] = { 'l', 'o', 'g', 'i', 'e' };
+static const symbol s_4_5[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_4_6[4] = { 'i', 's', 'm', 'e' };
+static const symbol s_4_7[4] = { 'e', 'u', 's', 'e' };
+static const symbol s_4_8[4] = { 'i', 's', 't', 'e' };
+static const symbol s_4_9[3] = { 'i', 'v', 'e' };
+static const symbol s_4_10[2] = { 'i', 'f' };
+static const symbol s_4_11[5] = { 'u', 's', 'i', 'o', 'n' };
+static const symbol s_4_12[5] = { 'a', 't', 'i', 'o', 'n' };
+static const symbol s_4_13[5] = { 'u', 't', 'i', 'o', 'n' };
+static const symbol s_4_14[5] = { 'a', 't', 'e', 'u', 'r' };
+static const symbol s_4_15[5] = { 'i', 'q', 'U', 'e', 's' };
+static const symbol s_4_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' };
+static const symbol s_4_17[5] = { 'a', 'n', 'c', 'e', 's' };
+static const symbol s_4_18[5] = { 'e', 'n', 'c', 'e', 's' };
+static const symbol s_4_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' };
+static const symbol s_4_20[5] = { 'a', 'b', 'l', 'e', 's' };
+static const symbol s_4_21[5] = { 'i', 's', 'm', 'e', 's' };
+static const symbol s_4_22[5] = { 'e', 'u', 's', 'e', 's' };
+static const symbol s_4_23[5] = { 'i', 's', 't', 'e', 's' };
+static const symbol s_4_24[4] = { 'i', 'v', 'e', 's' };
+static const symbol s_4_25[3] = { 'i', 'f', 's' };
+static const symbol s_4_26[6] = { 'u', 's', 'i', 'o', 'n', 's' };
+static const symbol s_4_27[6] = { 'a', 't', 'i', 'o', 'n', 's' };
+static const symbol s_4_28[6] = { 'u', 't', 'i', 'o', 'n', 's' };
+static const symbol s_4_29[6] = { 'a', 't', 'e', 'u', 'r', 's' };
+static const symbol s_4_30[5] = { 'm', 'e', 'n', 't', 's' };
+static const symbol s_4_31[6] = { 'e', 'm', 'e', 'n', 't', 's' };
+static const symbol s_4_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' };
+static const symbol s_4_33[4] = { 'i', 't', 0xE9, 's' };
+static const symbol s_4_34[4] = { 'm', 'e', 'n', 't' };
+static const symbol s_4_35[5] = { 'e', 'm', 'e', 'n', 't' };
+static const symbol s_4_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' };
+static const symbol s_4_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' };
+static const symbol s_4_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' };
+static const symbol s_4_39[3] = { 'a', 'u', 'x' };
+static const symbol s_4_40[4] = { 'e', 'a', 'u', 'x' };
+static const symbol s_4_41[3] = { 'e', 'u', 'x' };
+static const symbol s_4_42[3] = { 'i', 't', 0xE9 };
 
-static struct among a_4[35] =
+static const struct among a_4[43] =
 {
-/*  0 */ { 3, s_4_0, -1, 1, 0},
-/*  1 */ { 2, s_4_1, -1, 1, 0},
+/*  0 */ { 4, s_4_0, -1, 1, 0},
+/*  1 */ { 6, s_4_1, -1, 2, 0},
 /*  2 */ { 4, s_4_2, -1, 1, 0},
-/*  3 */ { 7, s_4_3, -1, 1, 0},
-/*  4 */ { 1, s_4_4, -1, 1, 0},
-/*  5 */ { 4, s_4_5, 4, 1, 0},
-/*  6 */ { 2, s_4_6, -1, 1, 0},
-/*  7 */ { 4, s_4_7, -1, 1, 0},
-/*  8 */ { 3, s_4_8, -1, 1, 0},
-/*  9 */ { 4, s_4_9, -1, 1, 0},
-/* 10 */ { 5, s_4_10, -1, 1, 0},
-/* 11 */ { 8, s_4_11, -1, 1, 0},
-/* 12 */ { 4, s_4_12, -1, 1, 0},
-/* 13 */ { 2, s_4_13, -1, 1, 0},
-/* 14 */ { 5, s_4_14, 13, 1, 0},
-/* 15 */ { 6, s_4_15, 13, 1, 0},
-/* 16 */ { 6, s_4_16, -1, 1, 0},
-/* 17 */ { 7, s_4_17, -1, 1, 0},
-/* 18 */ { 5, s_4_18, -1, 1, 0},
-/* 19 */ { 6, s_4_19, -1, 1, 0},
-/* 20 */ { 7, s_4_20, -1, 1, 0},
-/* 21 */ { 2, s_4_21, -1, 1, 0},
-/* 22 */ { 5, s_4_22, 21, 1, 0},
-/* 23 */ { 6, s_4_23, 21, 1, 0},
-/* 24 */ { 6, s_4_24, -1, 1, 0},
-/* 25 */ { 7, s_4_25, -1, 1, 0},
-/* 26 */ { 8, s_4_26, -1, 1, 0},
-/* 27 */ { 5, s_4_27, -1, 1, 0},
-/* 28 */ { 6, s_4_28, -1, 1, 0},
-/* 29 */ { 5, s_4_29, -1, 1, 0},
-/* 30 */ { 2, s_4_30, -1, 1, 0},
-/* 31 */ { 5, s_4_31, -1, 1, 0},
-/* 32 */ { 6, s_4_32, -1, 1, 0},
-/* 33 */ { 4, s_4_33, -1, 1, 0},
-/* 34 */ { 5, s_4_34, -1, 1, 0}
+/*  3 */ { 4, s_4_3, -1, 5, 0},
+/*  4 */ { 5, s_4_4, -1, 3, 0},
+/*  5 */ { 4, s_4_5, -1, 1, 0},
+/*  6 */ { 4, s_4_6, -1, 1, 0},
+/*  7 */ { 4, s_4_7, -1, 11, 0},
+/*  8 */ { 4, s_4_8, -1, 1, 0},
+/*  9 */ { 3, s_4_9, -1, 8, 0},
+/* 10 */ { 2, s_4_10, -1, 8, 0},
+/* 11 */ { 5, s_4_11, -1, 4, 0},
+/* 12 */ { 5, s_4_12, -1, 2, 0},
+/* 13 */ { 5, s_4_13, -1, 4, 0},
+/* 14 */ { 5, s_4_14, -1, 2, 0},
+/* 15 */ { 5, s_4_15, -1, 1, 0},
+/* 16 */ { 7, s_4_16, -1, 2, 0},
+/* 17 */ { 5, s_4_17, -1, 1, 0},
+/* 18 */ { 5, s_4_18, -1, 5, 0},
+/* 19 */ { 6, s_4_19, -1, 3, 0},
+/* 20 */ { 5, s_4_20, -1, 1, 0},
+/* 21 */ { 5, s_4_21, -1, 1, 0},
+/* 22 */ { 5, s_4_22, -1, 11, 0},
+/* 23 */ { 5, s_4_23, -1, 1, 0},
+/* 24 */ { 4, s_4_24, -1, 8, 0},
+/* 25 */ { 3, s_4_25, -1, 8, 0},
+/* 26 */ { 6, s_4_26, -1, 4, 0},
+/* 27 */ { 6, s_4_27, -1, 2, 0},
+/* 28 */ { 6, s_4_28, -1, 4, 0},
+/* 29 */ { 6, s_4_29, -1, 2, 0},
+/* 30 */ { 5, s_4_30, -1, 15, 0},
+/* 31 */ { 6, s_4_31, 30, 6, 0},
+/* 32 */ { 9, s_4_32, 31, 12, 0},
+/* 33 */ { 4, s_4_33, -1, 7, 0},
+/* 34 */ { 4, s_4_34, -1, 15, 0},
+/* 35 */ { 5, s_4_35, 34, 6, 0},
+/* 36 */ { 8, s_4_36, 35, 12, 0},
+/* 37 */ { 6, s_4_37, 34, 13, 0},
+/* 38 */ { 6, s_4_38, 34, 14, 0},
+/* 39 */ { 3, s_4_39, -1, 10, 0},
+/* 40 */ { 4, s_4_40, 39, 9, 0},
+/* 41 */ { 3, s_4_41, -1, 1, 0},
+/* 42 */ { 3, s_4_42, -1, 7, 0}
 };
 
-static symbol s_5_0[1] = { 'a' };
-static symbol s_5_1[3] = { 'e', 'r', 'a' };
-static symbol s_5_2[4] = { 'a', 's', 's', 'e' };
-static symbol s_5_3[4] = { 'a', 'n', 't', 'e' };
-static symbol s_5_4[2] = { 0xE9, 'e' };
-static symbol s_5_5[2] = { 'a', 'i' };
-static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' };
-static symbol s_5_7[2] = { 'e', 'r' };
-static symbol s_5_8[2] = { 'a', 's' };
-static symbol s_5_9[4] = { 'e', 'r', 'a', 's' };
-static symbol s_5_10[4] = { 0xE2, 'm', 'e', 's' };
-static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' };
-static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' };
-static symbol s_5_13[4] = { 0xE2, 't', 'e', 's' };
-static symbol s_5_14[3] = { 0xE9, 'e', 's' };
-static symbol s_5_15[3] = { 'a', 'i', 's' };
-static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' };
-static symbol s_5_17[4] = { 'i', 'o', 'n', 's' };
-static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' };
-static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' };
-static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' };
-static symbol s_5_21[4] = { 'a', 'n', 't', 's' };
-static symbol s_5_22[2] = { 0xE9, 's' };
-static symbol s_5_23[3] = { 'a', 'i', 't' };
-static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' };
-static symbol s_5_25[3] = { 'a', 'n', 't' };
-static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' };
-static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' };
-static symbol s_5_28[5] = { 0xE8, 'r', 'e', 'n', 't' };
-static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' };
-static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' };
-static symbol s_5_31[2] = { 0xE2, 't' };
-static symbol s_5_32[2] = { 'e', 'z' };
-static symbol s_5_33[3] = { 'i', 'e', 'z' };
-static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' };
-static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' };
-static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' };
-static symbol s_5_37[1] = { 0xE9 };
+static const symbol s_5_0[3] = { 'i', 'r', 'a' };
+static const symbol s_5_1[2] = { 'i', 'e' };
+static const symbol s_5_2[4] = { 'i', 's', 's', 'e' };
+static const symbol s_5_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' };
+static const symbol s_5_4[1] = { 'i' };
+static const symbol s_5_5[4] = { 'i', 'r', 'a', 'i' };
+static const symbol s_5_6[2] = { 'i', 'r' };
+static const symbol s_5_7[4] = { 'i', 'r', 'a', 's' };
+static const symbol s_5_8[3] = { 'i', 'e', 's' };
+static const symbol s_5_9[4] = { 0xEE, 'm', 'e', 's' };
+static const symbol s_5_10[5] = { 'i', 's', 's', 'e', 's' };
+static const symbol s_5_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' };
+static const symbol s_5_12[4] = { 0xEE, 't', 'e', 's' };
+static const symbol s_5_13[2] = { 'i', 's' };
+static const symbol s_5_14[5] = { 'i', 'r', 'a', 'i', 's' };
+static const symbol s_5_15[6] = { 'i', 's', 's', 'a', 'i', 's' };
+static const symbol s_5_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' };
+static const symbol s_5_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' };
+static const symbol s_5_18[5] = { 'i', 'r', 'o', 'n', 's' };
+static const symbol s_5_19[6] = { 'i', 's', 's', 'o', 'n', 's' };
+static const symbol s_5_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' };
+static const symbol s_5_21[2] = { 'i', 't' };
+static const symbol s_5_22[5] = { 'i', 'r', 'a', 'i', 't' };
+static const symbol s_5_23[6] = { 'i', 's', 's', 'a', 'i', 't' };
+static const symbol s_5_24[6] = { 'i', 's', 's', 'a', 'n', 't' };
+static const symbol s_5_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' };
+static const symbol s_5_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' };
+static const symbol s_5_27[5] = { 'i', 'r', 'e', 'n', 't' };
+static const symbol s_5_28[6] = { 'i', 's', 's', 'e', 'n', 't' };
+static const symbol s_5_29[5] = { 'i', 'r', 'o', 'n', 't' };
+static const symbol s_5_30[2] = { 0xEE, 't' };
+static const symbol s_5_31[5] = { 'i', 'r', 'i', 'e', 'z' };
+static const symbol s_5_32[6] = { 'i', 's', 's', 'i', 'e', 'z' };
+static const symbol s_5_33[4] = { 'i', 'r', 'e', 'z' };
+static const symbol s_5_34[5] = { 'i', 's', 's', 'e', 'z' };
 
-static struct among a_5[38] =
+static const struct among a_5[35] =
 {
-/*  0 */ { 1, s_5_0, -1, 3, 0},
-/*  1 */ { 3, s_5_1, 0, 2, 0},
-/*  2 */ { 4, s_5_2, -1, 3, 0},
-/*  3 */ { 4, s_5_3, -1, 3, 0},
-/*  4 */ { 2, s_5_4, -1, 2, 0},
-/*  5 */ { 2, s_5_5, -1, 3, 0},
-/*  6 */ { 4, s_5_6, 5, 2, 0},
-/*  7 */ { 2, s_5_7, -1, 2, 0},
-/*  8 */ { 2, s_5_8, -1, 3, 0},
-/*  9 */ { 4, s_5_9, 8, 2, 0},
-/* 10 */ { 4, s_5_10, -1, 3, 0},
-/* 11 */ { 5, s_5_11, -1, 3, 0},
-/* 12 */ { 5, s_5_12, -1, 3, 0},
-/* 13 */ { 4, s_5_13, -1, 3, 0},
-/* 14 */ { 3, s_5_14, -1, 2, 0},
-/* 15 */ { 3, s_5_15, -1, 3, 0},
-/* 16 */ { 5, s_5_16, 15, 2, 0},
-/* 17 */ { 4, s_5_17, -1, 1, 0},
-/* 18 */ { 6, s_5_18, 17, 2, 0},
-/* 19 */ { 7, s_5_19, 17, 3, 0},
-/* 20 */ { 5, s_5_20, -1, 2, 0},
-/* 21 */ { 4, s_5_21, -1, 3, 0},
-/* 22 */ { 2, s_5_22, -1, 2, 0},
-/* 23 */ { 3, s_5_23, -1, 3, 0},
-/* 24 */ { 5, s_5_24, 23, 2, 0},
-/* 25 */ { 3, s_5_25, -1, 3, 0},
-/* 26 */ { 5, s_5_26, -1, 3, 0},
-/* 27 */ { 7, s_5_27, 26, 2, 0},
-/* 28 */ { 5, s_5_28, -1, 2, 0},
-/* 29 */ { 6, s_5_29, -1, 3, 0},
-/* 30 */ { 5, s_5_30, -1, 2, 0},
-/* 31 */ { 2, s_5_31, -1, 3, 0},
-/* 32 */ { 2, s_5_32, -1, 2, 0},
-/* 33 */ { 3, s_5_33, 32, 2, 0},
-/* 34 */ { 5, s_5_34, 33, 2, 0},
-/* 35 */ { 6, s_5_35, 33, 3, 0},
-/* 36 */ { 4, s_5_36, 32, 2, 0},
-/* 37 */ { 1, s_5_37, -1, 2, 0}
+/*  0 */ { 3, s_5_0, -1, 1, 0},
+/*  1 */ { 2, s_5_1, -1, 1, 0},
+/*  2 */ { 4, s_5_2, -1, 1, 0},
+/*  3 */ { 7, s_5_3, -1, 1, 0},
+/*  4 */ { 1, s_5_4, -1, 1, 0},
+/*  5 */ { 4, s_5_5, 4, 1, 0},
+/*  6 */ { 2, s_5_6, -1, 1, 0},
+/*  7 */ { 4, s_5_7, -1, 1, 0},
+/*  8 */ { 3, s_5_8, -1, 1, 0},
+/*  9 */ { 4, s_5_9, -1, 1, 0},
+/* 10 */ { 5, s_5_10, -1, 1, 0},
+/* 11 */ { 8, s_5_11, -1, 1, 0},
+/* 12 */ { 4, s_5_12, -1, 1, 0},
+/* 13 */ { 2, s_5_13, -1, 1, 0},
+/* 14 */ { 5, s_5_14, 13, 1, 0},
+/* 15 */ { 6, s_5_15, 13, 1, 0},
+/* 16 */ { 6, s_5_16, -1, 1, 0},
+/* 17 */ { 7, s_5_17, -1, 1, 0},
+/* 18 */ { 5, s_5_18, -1, 1, 0},
+/* 19 */ { 6, s_5_19, -1, 1, 0},
+/* 20 */ { 7, s_5_20, -1, 1, 0},
+/* 21 */ { 2, s_5_21, -1, 1, 0},
+/* 22 */ { 5, s_5_22, 21, 1, 0},
+/* 23 */ { 6, s_5_23, 21, 1, 0},
+/* 24 */ { 6, s_5_24, -1, 1, 0},
+/* 25 */ { 7, s_5_25, -1, 1, 0},
+/* 26 */ { 8, s_5_26, -1, 1, 0},
+/* 27 */ { 5, s_5_27, -1, 1, 0},
+/* 28 */ { 6, s_5_28, -1, 1, 0},
+/* 29 */ { 5, s_5_29, -1, 1, 0},
+/* 30 */ { 2, s_5_30, -1, 1, 0},
+/* 31 */ { 5, s_5_31, -1, 1, 0},
+/* 32 */ { 6, s_5_32, -1, 1, 0},
+/* 33 */ { 4, s_5_33, -1, 1, 0},
+/* 34 */ { 5, s_5_34, -1, 1, 0}
 };
 
-static symbol s_6_0[1] = { 'e' };
-static symbol s_6_1[4] = { 'I', 0xE8, 'r', 'e' };
-static symbol s_6_2[4] = { 'i', 0xE8, 'r', 'e' };
-static symbol s_6_3[3] = { 'i', 'o', 'n' };
-static symbol s_6_4[3] = { 'I', 'e', 'r' };
-static symbol s_6_5[3] = { 'i', 'e', 'r' };
-static symbol s_6_6[1] = { 0xEB };
+static const symbol s_6_0[1] = { 'a' };
+static const symbol s_6_1[3] = { 'e', 'r', 'a' };
+static const symbol s_6_2[4] = { 'a', 's', 's', 'e' };
+static const symbol s_6_3[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_6_4[2] = { 0xE9, 'e' };
+static const symbol s_6_5[2] = { 'a', 'i' };
+static const symbol s_6_6[4] = { 'e', 'r', 'a', 'i' };
+static const symbol s_6_7[2] = { 'e', 'r' };
+static const symbol s_6_8[2] = { 'a', 's' };
+static const symbol s_6_9[4] = { 'e', 'r', 'a', 's' };
+static const symbol s_6_10[4] = { 0xE2, 'm', 'e', 's' };
+static const symbol s_6_11[5] = { 'a', 's', 's', 'e', 's' };
+static const symbol s_6_12[5] = { 'a', 'n', 't', 'e', 's' };
+static const symbol s_6_13[4] = { 0xE2, 't', 'e', 's' };
+static const symbol s_6_14[3] = { 0xE9, 'e', 's' };
+static const symbol s_6_15[3] = { 'a', 'i', 's' };
+static const symbol s_6_16[5] = { 'e', 'r', 'a', 'i', 's' };
+static const symbol s_6_17[4] = { 'i', 'o', 'n', 's' };
+static const symbol s_6_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' };
+static const symbol s_6_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' };
+static const symbol s_6_20[5] = { 'e', 'r', 'o', 'n', 's' };
+static const symbol s_6_21[4] = { 'a', 'n', 't', 's' };
+static const symbol s_6_22[2] = { 0xE9, 's' };
+static const symbol s_6_23[3] = { 'a', 'i', 't' };
+static const symbol s_6_24[5] = { 'e', 'r', 'a', 'i', 't' };
+static const symbol s_6_25[3] = { 'a', 'n', 't' };
+static const symbol s_6_26[5] = { 'a', 'I', 'e', 'n', 't' };
+static const symbol s_6_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' };
+static const symbol s_6_28[5] = { 0xE8, 'r', 'e', 'n', 't' };
+static const symbol s_6_29[6] = { 'a', 's', 's', 'e', 'n', 't' };
+static const symbol s_6_30[5] = { 'e', 'r', 'o', 'n', 't' };
+static const symbol s_6_31[2] = { 0xE2, 't' };
+static const symbol s_6_32[2] = { 'e', 'z' };
+static const symbol s_6_33[3] = { 'i', 'e', 'z' };
+static const symbol s_6_34[5] = { 'e', 'r', 'i', 'e', 'z' };
+static const symbol s_6_35[6] = { 'a', 's', 's', 'i', 'e', 'z' };
+static const symbol s_6_36[4] = { 'e', 'r', 'e', 'z' };
+static const symbol s_6_37[1] = { 0xE9 };
 
-static struct among a_6[7] =
+static const struct among a_6[38] =
 {
 /*  0 */ { 1, s_6_0, -1, 3, 0},
-/*  1 */ { 4, s_6_1, 0, 2, 0},
-/*  2 */ { 4, s_6_2, 0, 2, 0},
-/*  3 */ { 3, s_6_3, -1, 1, 0},
-/*  4 */ { 3, s_6_4, -1, 2, 0},
-/*  5 */ { 3, s_6_5, -1, 2, 0},
-/*  6 */ { 1, s_6_6, -1, 4, 0}
+/*  1 */ { 3, s_6_1, 0, 2, 0},
+/*  2 */ { 4, s_6_2, -1, 3, 0},
+/*  3 */ { 4, s_6_3, -1, 3, 0},
+/*  4 */ { 2, s_6_4, -1, 2, 0},
+/*  5 */ { 2, s_6_5, -1, 3, 0},
+/*  6 */ { 4, s_6_6, 5, 2, 0},
+/*  7 */ { 2, s_6_7, -1, 2, 0},
+/*  8 */ { 2, s_6_8, -1, 3, 0},
+/*  9 */ { 4, s_6_9, 8, 2, 0},
+/* 10 */ { 4, s_6_10, -1, 3, 0},
+/* 11 */ { 5, s_6_11, -1, 3, 0},
+/* 12 */ { 5, s_6_12, -1, 3, 0},
+/* 13 */ { 4, s_6_13, -1, 3, 0},
+/* 14 */ { 3, s_6_14, -1, 2, 0},
+/* 15 */ { 3, s_6_15, -1, 3, 0},
+/* 16 */ { 5, s_6_16, 15, 2, 0},
+/* 17 */ { 4, s_6_17, -1, 1, 0},
+/* 18 */ { 6, s_6_18, 17, 2, 0},
+/* 19 */ { 7, s_6_19, 17, 3, 0},
+/* 20 */ { 5, s_6_20, -1, 2, 0},
+/* 21 */ { 4, s_6_21, -1, 3, 0},
+/* 22 */ { 2, s_6_22, -1, 2, 0},
+/* 23 */ { 3, s_6_23, -1, 3, 0},
+/* 24 */ { 5, s_6_24, 23, 2, 0},
+/* 25 */ { 3, s_6_25, -1, 3, 0},
+/* 26 */ { 5, s_6_26, -1, 3, 0},
+/* 27 */ { 7, s_6_27, 26, 2, 0},
+/* 28 */ { 5, s_6_28, -1, 2, 0},
+/* 29 */ { 6, s_6_29, -1, 3, 0},
+/* 30 */ { 5, s_6_30, -1, 2, 0},
+/* 31 */ { 2, s_6_31, -1, 3, 0},
+/* 32 */ { 2, s_6_32, -1, 2, 0},
+/* 33 */ { 3, s_6_33, 32, 2, 0},
+/* 34 */ { 5, s_6_34, 33, 2, 0},
+/* 35 */ { 6, s_6_35, 33, 3, 0},
+/* 36 */ { 4, s_6_36, 32, 2, 0},
+/* 37 */ { 1, s_6_37, -1, 2, 0}
+};
+
+static const symbol s_7_0[1] = { 'e' };
+static const symbol s_7_1[4] = { 'I', 0xE8, 'r', 'e' };
+static const symbol s_7_2[4] = { 'i', 0xE8, 'r', 'e' };
+static const symbol s_7_3[3] = { 'i', 'o', 'n' };
+static const symbol s_7_4[3] = { 'I', 'e', 'r' };
+static const symbol s_7_5[3] = { 'i', 'e', 'r' };
+static const symbol s_7_6[1] = { 0xEB };
+
+static const struct among a_7[7] =
+{
+/*  0 */ { 1, s_7_0, -1, 3, 0},
+/*  1 */ { 4, s_7_1, 0, 2, 0},
+/*  2 */ { 4, s_7_2, 0, 2, 0},
+/*  3 */ { 3, s_7_3, -1, 1, 0},
+/*  4 */ { 3, s_7_4, -1, 2, 0},
+/*  5 */ { 3, s_7_5, -1, 2, 0},
+/*  6 */ { 1, s_7_6, -1, 4, 0}
 };
 
-static symbol s_7_0[3] = { 'e', 'l', 'l' };
-static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' };
-static symbol s_7_2[3] = { 'e', 'n', 'n' };
-static symbol s_7_3[3] = { 'o', 'n', 'n' };
-static symbol s_7_4[3] = { 'e', 't', 't' };
+static const symbol s_8_0[3] = { 'e', 'l', 'l' };
+static const symbol s_8_1[4] = { 'e', 'i', 'l', 'l' };
+static const symbol s_8_2[3] = { 'e', 'n', 'n' };
+static const symbol s_8_3[3] = { 'o', 'n', 'n' };
+static const symbol s_8_4[3] = { 'e', 't', 't' };
 
-static struct among a_7[5] =
+static const struct among a_8[5] =
 {
-/*  0 */ { 3, s_7_0, -1, -1, 0},
-/*  1 */ { 4, s_7_1, -1, -1, 0},
-/*  2 */ { 3, s_7_2, -1, -1, 0},
-/*  3 */ { 3, s_7_3, -1, -1, 0},
-/*  4 */ { 3, s_7_4, -1, -1, 0}
+/*  0 */ { 3, s_8_0, -1, -1, 0},
+/*  1 */ { 4, s_8_1, -1, -1, 0},
+/*  2 */ { 3, s_8_2, -1, -1, 0},
+/*  3 */ { 3, s_8_3, -1, -1, 0},
+/*  4 */ { 3, s_8_4, -1, -1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 };
 
-static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+static const unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
 
-static symbol s_0[] = { 'u' };
-static symbol s_1[] = { 'U' };
-static symbol s_2[] = { 'i' };
-static symbol s_3[] = { 'I' };
-static symbol s_4[] = { 'y' };
-static symbol s_5[] = { 'Y' };
-static symbol s_6[] = { 'y' };
-static symbol s_7[] = { 'Y' };
-static symbol s_8[] = { 'q' };
-static symbol s_9[] = { 'u' };
-static symbol s_10[] = { 'U' };
-static symbol s_11[] = { 'i' };
-static symbol s_12[] = { 'u' };
-static symbol s_13[] = { 'y' };
-static symbol s_14[] = { 'i', 'c' };
-static symbol s_15[] = { 'i', 'q', 'U' };
-static symbol s_16[] = { 'l', 'o', 'g' };
-static symbol s_17[] = { 'u' };
-static symbol s_18[] = { 'e', 'n', 't' };
-static symbol s_19[] = { 'a', 't' };
-static symbol s_20[] = { 'e', 'u', 'x' };
-static symbol s_21[] = { 'i' };
-static symbol s_22[] = { 'a', 'b', 'l' };
-static symbol s_23[] = { 'i', 'q', 'U' };
-static symbol s_24[] = { 'a', 't' };
-static symbol s_25[] = { 'i', 'c' };
-static symbol s_26[] = { 'i', 'q', 'U' };
-static symbol s_27[] = { 'e', 'a', 'u' };
-static symbol s_28[] = { 'a', 'l' };
-static symbol s_29[] = { 'e', 'u', 'x' };
-static symbol s_30[] = { 'a', 'n', 't' };
-static symbol s_31[] = { 'e', 'n', 't' };
-static symbol s_32[] = { 'e' };
-static symbol s_33[] = { 's' };
-static symbol s_34[] = { 's' };
-static symbol s_35[] = { 't' };
-static symbol s_36[] = { 'i' };
-static symbol s_37[] = { 'g', 'u' };
-static symbol s_38[] = { 0xE9 };
-static symbol s_39[] = { 0xE8 };
-static symbol s_40[] = { 'e' };
-static symbol s_41[] = { 'Y' };
-static symbol s_42[] = { 'i' };
-static symbol s_43[] = { 0xE7 };
-static symbol s_44[] = { 'c' };
+static const symbol s_0[] = { 'u' };
+static const symbol s_1[] = { 'U' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'I' };
+static const symbol s_4[] = { 'y' };
+static const symbol s_5[] = { 'Y' };
+static const symbol s_6[] = { 'y' };
+static const symbol s_7[] = { 'Y' };
+static const symbol s_8[] = { 'q' };
+static const symbol s_9[] = { 'u' };
+static const symbol s_10[] = { 'U' };
+static const symbol s_11[] = { 'i' };
+static const symbol s_12[] = { 'u' };
+static const symbol s_13[] = { 'y' };
+static const symbol s_14[] = { 'i', 'c' };
+static const symbol s_15[] = { 'i', 'q', 'U' };
+static const symbol s_16[] = { 'l', 'o', 'g' };
+static const symbol s_17[] = { 'u' };
+static const symbol s_18[] = { 'e', 'n', 't' };
+static const symbol s_19[] = { 'a', 't' };
+static const symbol s_20[] = { 'e', 'u', 'x' };
+static const symbol s_21[] = { 'i' };
+static const symbol s_22[] = { 'a', 'b', 'l' };
+static const symbol s_23[] = { 'i', 'q', 'U' };
+static const symbol s_24[] = { 'a', 't' };
+static const symbol s_25[] = { 'i', 'c' };
+static const symbol s_26[] = { 'i', 'q', 'U' };
+static const symbol s_27[] = { 'e', 'a', 'u' };
+static const symbol s_28[] = { 'a', 'l' };
+static const symbol s_29[] = { 'e', 'u', 'x' };
+static const symbol s_30[] = { 'a', 'n', 't' };
+static const symbol s_31[] = { 'e', 'n', 't' };
+static const symbol s_32[] = { 'e' };
+static const symbol s_33[] = { 's' };
+static const symbol s_34[] = { 's' };
+static const symbol s_35[] = { 't' };
+static const symbol s_36[] = { 'i' };
+static const symbol s_37[] = { 'g', 'u' };
+static const symbol s_38[] = { 0xE9 };
+static const symbol s_39[] = { 0xE8 };
+static const symbol s_40[] = { 'e' };
+static const symbol s_41[] = { 'Y' };
+static const symbol s_42[] = { 'i' };
+static const symbol s_43[] = { 0xE7 };
+static const symbol s_44[] = { 'c' };
 
 static int r_prelude(struct SN_env * z) {
     while(1) { /* repeat, line 38 */
-        int c = z->c;
+        int c1 = z->c;
         while(1) { /* goto, line 38 */
-            int c = z->c;
-            {   int c = z->c; /* or, line 44 */
-                if (!(in_grouping(z, g_v, 97, 251))) goto lab3;
+            int c2 = z->c;
+            {   int c3 = z->c; /* or, line 44 */
+                if (in_grouping(z, g_v, 97, 251, 0)) goto lab3;
                 z->bra = z->c; /* [, line 40 */
-                {   int c = z->c; /* or, line 40 */
+                {   int c4 = z->c; /* or, line 40 */
                     if (!(eq_s(z, 1, s_0))) goto lab5;
                     z->ket = z->c; /* ], line 40 */
-                    if (!(in_grouping(z, g_v, 97, 251))) goto lab5;
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_1); /* <-, line 40 */
+                    if (in_grouping(z, g_v, 97, 251, 0)) goto lab5;
+                    {   int ret = slice_from_s(z, 1, s_1); /* <-, line 40 */
                         if (ret < 0) return ret;
                     }
                     goto lab4;
                 lab5:
-                    z->c = c;
+                    z->c = c4;
                     if (!(eq_s(z, 1, s_2))) goto lab6;
                     z->ket = z->c; /* ], line 41 */
-                    if (!(in_grouping(z, g_v, 97, 251))) goto lab6;
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_3); /* <-, line 41 */
+                    if (in_grouping(z, g_v, 97, 251, 0)) goto lab6;
+                    {   int ret = slice_from_s(z, 1, s_3); /* <-, line 41 */
                         if (ret < 0) return ret;
                     }
                     goto lab4;
                 lab6:
-                    z->c = c;
+                    z->c = c4;
                     if (!(eq_s(z, 1, s_4))) goto lab3;
                     z->ket = z->c; /* ], line 42 */
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_5); /* <-, line 42 */
+                    {   int ret = slice_from_s(z, 1, s_5); /* <-, line 42 */
                         if (ret < 0) return ret;
                     }
                 }
             lab4:
                 goto lab2;
             lab3:
-                z->c = c;
+                z->c = c3;
                 z->bra = z->c; /* [, line 45 */
                 if (!(eq_s(z, 1, s_6))) goto lab7;
                 z->ket = z->c; /* ], line 45 */
-                if (!(in_grouping(z, g_v, 97, 251))) goto lab7;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_7); /* <-, line 45 */
+                if (in_grouping(z, g_v, 97, 251, 0)) goto lab7;
+                {   int ret = slice_from_s(z, 1, s_7); /* <-, line 45 */
                     if (ret < 0) return ret;
                 }
                 goto lab2;
             lab7:
-                z->c = c;
+                z->c = c3;
                 if (!(eq_s(z, 1, s_8))) goto lab1;
                 z->bra = z->c; /* [, line 47 */
                 if (!(eq_s(z, 1, s_9))) goto lab1;
                 z->ket = z->c; /* ], line 47 */
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 47 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 47 */
                     if (ret < 0) return ret;
                 }
             }
         lab2:
-            z->c = c;
+            z->c = c2;
             break;
         lab1:
-            z->c = c;
+            z->c = c2;
             if (z->c >= z->l) goto lab0;
             z->c++; /* goto, line 38 */
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -471,103 +491,96 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 56 */
-        {   int c = z->c; /* or, line 57 */
-            if (!(in_grouping(z, g_v, 97, 251))) goto lab2;
-            if (!(in_grouping(z, g_v, 97, 251))) goto lab2;
+    {   int c1 = z->c; /* do, line 56 */
+        {   int c2 = z->c; /* or, line 58 */
+            if (in_grouping(z, g_v, 97, 251, 0)) goto lab2;
+            if (in_grouping(z, g_v, 97, 251, 0)) goto lab2;
             if (z->c >= z->l) goto lab2;
             z->c++; /* next, line 57 */
             goto lab1;
         lab2:
-            z->c = c;
+            z->c = c2;
+            if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((331776 >> (z->p[z->c + 2] & 0x1f)) & 1)) goto lab3;
+            if (!(find_among(z, a_0, 3))) goto lab3; /* among, line 59 */
+            goto lab1;
+        lab3:
+            z->c = c2;
             if (z->c >= z->l) goto lab0;
-            z->c++; /* next, line 57 */
-            while(1) { /* gopast, line 57 */
-                if (!(in_grouping(z, g_v, 97, 251))) goto lab3;
-                break;
-            lab3:
-                if (z->c >= z->l) goto lab0;
-                z->c++; /* gopast, line 57 */
+            z->c++; /* next, line 66 */
+            {    /* gopast */ /* grouping v, line 66 */
+                int ret = out_grouping(z, g_v, 97, 251, 1);
+                if (ret < 0) goto lab0;
+                z->c += ret;
             }
         }
     lab1:
-        z->I[0] = z->c; /* setmark pV, line 58 */
+        z->I[0] = z->c; /* setmark pV, line 67 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 60 */
-        while(1) { /* gopast, line 61 */
-            if (!(in_grouping(z, g_v, 97, 251))) goto lab5;
-            break;
-        lab5:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 61 */
+    {   int c3 = z->c; /* do, line 69 */
+        {    /* gopast */ /* grouping v, line 70 */
+            int ret = out_grouping(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 61 */
-            if (!(out_grouping(z, g_v, 97, 251))) goto lab6;
-            break;
-        lab6:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 61 */
+        {    /* gopast */ /* non v, line 70 */
+            int ret = in_grouping(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        z->I[1] = z->c; /* setmark p1, line 61 */
-        while(1) { /* gopast, line 62 */
-            if (!(in_grouping(z, g_v, 97, 251))) goto lab7;
-            break;
-        lab7:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 62 */
+        z->I[1] = z->c; /* setmark p1, line 70 */
+        {    /* gopast */ /* grouping v, line 71 */
+            int ret = out_grouping(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 62 */
-            if (!(out_grouping(z, g_v, 97, 251))) goto lab8;
-            break;
-        lab8:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 62 */
+        {    /* gopast */ /* non v, line 71 */
+            int ret = in_grouping(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        z->I[2] = z->c; /* setmark p2, line 62 */
+        z->I[2] = z->c; /* setmark p2, line 71 */
     lab4:
-        z->c = c;
+        z->c = c3;
     }
     return 1;
 }
 
 static int r_postlude(struct SN_env * z) {
     int among_var;
-    while(1) { /* repeat, line 66 */
-        int c = z->c;
-        z->bra = z->c; /* [, line 68 */
-        among_var = find_among(z, a_0, 4); /* substring, line 68 */
+    while(1) { /* repeat, line 75 */
+        int c1 = z->c;
+        z->bra = z->c; /* [, line 77 */
+        if (z->c >= z->l || z->p[z->c + 0] >> 5 != 2 || !((35652096 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 4; else
+        among_var = find_among(z, a_1, 4); /* substring, line 77 */
         if (!(among_var)) goto lab0;
-        z->ket = z->c; /* ], line 68 */
+        z->ket = z->c; /* ], line 77 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_11); /* <-, line 69 */
+                {   int ret = slice_from_s(z, 1, s_11); /* <-, line 78 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_12); /* <-, line 70 */
+                {   int ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_13); /* <-, line 71 */
+                {   int ret = slice_from_s(z, 1, s_13); /* <-, line 80 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
                 if (z->c >= z->l) goto lab0;
-                z->c++; /* next, line 72 */
+                z->c++; /* next, line 81 */
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -590,49 +603,45 @@ static int r_R2(struct SN_env * z) {
 
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 83 */
-    among_var = find_among_b(z, a_3, 43); /* substring, line 83 */
+    z->ket = z->c; /* [, line 92 */
+    among_var = find_among_b(z, a_4, 43); /* substring, line 92 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 83 */
+    z->bra = z->c; /* ], line 92 */
     switch(among_var) {
         case 0: return 0;
         case 1:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 87 */
+                if (ret == 0) return 0; /* call R2, line 96 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 87 */
+            {   int ret = slice_del(z); /* delete, line 96 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 90 */
+                if (ret == 0) return 0; /* call R2, line 99 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 90 */
+            {   int ret = slice_del(z); /* delete, line 99 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 91 */
-                z->ket = z->c; /* [, line 91 */
-                if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; }
-                z->bra = z->c; /* ], line 91 */
-                {   int m = z->l - z->c; (void) m; /* or, line 91 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 100 */
+                z->ket = z->c; /* [, line 100 */
+                if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m_keep; goto lab0; }
+                z->bra = z->c; /* ], line 100 */
+                {   int m1 = z->l - z->c; (void)m1; /* or, line 100 */
                     {   int ret = r_R2(z);
-                        if (ret == 0) goto lab2; /* call R2, line 91 */
+                        if (ret == 0) goto lab2; /* call R2, line 100 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 91 */
+                    {   int ret = slice_del(z); /* delete, line 100 */
                         if (ret < 0) return ret;
                     }
                     goto lab1;
                 lab2:
-                    z->c = z->l - m;
-                    {   int ret;
-                        ret = slice_from_s(z, 3, s_15); /* <-, line 91 */
+                    z->c = z->l - m1;
+                    {   int ret = slice_from_s(z, 3, s_15); /* <-, line 100 */
                         if (ret < 0) return ret;
                     }
                 }
@@ -643,90 +652,82 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 3:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 95 */
+                if (ret == 0) return 0; /* call R2, line 104 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_16); /* <-, line 95 */
+            {   int ret = slice_from_s(z, 3, s_16); /* <-, line 104 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 98 */
+                if (ret == 0) return 0; /* call R2, line 107 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_17); /* <-, line 98 */
+            {   int ret = slice_from_s(z, 1, s_17); /* <-, line 107 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 101 */
+                if (ret == 0) return 0; /* call R2, line 110 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_18); /* <-, line 101 */
+            {   int ret = slice_from_s(z, 3, s_18); /* <-, line 110 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
             {   int ret = r_RV(z);
-                if (ret == 0) return 0; /* call RV, line 105 */
+                if (ret == 0) return 0; /* call RV, line 114 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 105 */
+            {   int ret = slice_del(z); /* delete, line 114 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 106 */
-                z->ket = z->c; /* [, line 107 */
-                among_var = find_among_b(z, a_1, 6); /* substring, line 107 */
-                if (!(among_var)) { z->c = z->l - m; goto lab3; }
-                z->bra = z->c; /* ], line 107 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 115 */
+                z->ket = z->c; /* [, line 116 */
+                among_var = find_among_b(z, a_2, 6); /* substring, line 116 */
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab3; }
+                z->bra = z->c; /* ], line 116 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab3; }
+                    case 0: { z->c = z->l - m_keep; goto lab3; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 117 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 108 */
+                        {   int ret = slice_del(z); /* delete, line 117 */
                             if (ret < 0) return ret;
                         }
-                        z->ket = z->c; /* [, line 108 */
-                        if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; }
-                        z->bra = z->c; /* ], line 108 */
+                        z->ket = z->c; /* [, line 117 */
+                        if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m_keep; goto lab3; }
+                        z->bra = z->c; /* ], line 117 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 117 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 108 */
+                        {   int ret = slice_del(z); /* delete, line 117 */
                             if (ret < 0) return ret;
                         }
                         break;
                     case 2:
-                        {   int m = z->l - z->c; (void) m; /* or, line 109 */
+                        {   int m2 = z->l - z->c; (void)m2; /* or, line 118 */
                             {   int ret = r_R2(z);
-                                if (ret == 0) goto lab5; /* call R2, line 109 */
+                                if (ret == 0) goto lab5; /* call R2, line 118 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 109 */
+                            {   int ret = slice_del(z); /* delete, line 118 */
                                 if (ret < 0) return ret;
                             }
                             goto lab4;
                         lab5:
-                            z->c = z->l - m;
+                            z->c = z->l - m2;
                             {   int ret = r_R1(z);
-                                if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */
+                                if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R1, line 118 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_from_s(z, 3, s_20); /* <-, line 109 */
+                            {   int ret = slice_from_s(z, 3, s_20); /* <-, line 118 */
                                 if (ret < 0) return ret;
                             }
                         }
@@ -734,21 +735,19 @@ static int r_standard_suffix(struct SN_env * z) {
                         break;
                     case 3:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 120 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 111 */
+                        {   int ret = slice_del(z); /* delete, line 120 */
                             if (ret < 0) return ret;
                         }
                         break;
                     case 4:
                         {   int ret = r_RV(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call RV, line 122 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_from_s(z, 1, s_21); /* <-, line 113 */
+                        {   int ret = slice_from_s(z, 1, s_21); /* <-, line 122 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -759,55 +758,51 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 7:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 120 */
+                if (ret == 0) return 0; /* call R2, line 129 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 120 */
+            {   int ret = slice_del(z); /* delete, line 129 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 121 */
-                z->ket = z->c; /* [, line 122 */
-                among_var = find_among_b(z, a_2, 3); /* substring, line 122 */
-                if (!(among_var)) { z->c = z->l - m; goto lab6; }
-                z->bra = z->c; /* ], line 122 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 130 */
+                z->ket = z->c; /* [, line 131 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab6; }
+                among_var = find_among_b(z, a_3, 3); /* substring, line 131 */
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab6; }
+                z->bra = z->c; /* ], line 131 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab6; }
+                    case 0: { z->c = z->l - m_keep; goto lab6; }
                     case 1:
-                        {   int m = z->l - z->c; (void) m; /* or, line 123 */
+                        {   int m3 = z->l - z->c; (void)m3; /* or, line 132 */
                             {   int ret = r_R2(z);
-                                if (ret == 0) goto lab8; /* call R2, line 123 */
+                                if (ret == 0) goto lab8; /* call R2, line 132 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 123 */
+                            {   int ret = slice_del(z); /* delete, line 132 */
                                 if (ret < 0) return ret;
                             }
                             goto lab7;
                         lab8:
-                            z->c = z->l - m;
-                            {   int ret;
-                                ret = slice_from_s(z, 3, s_22); /* <-, line 123 */
+                            z->c = z->l - m3;
+                            {   int ret = slice_from_s(z, 3, s_22); /* <-, line 132 */
                                 if (ret < 0) return ret;
                             }
                         }
                     lab7:
                         break;
                     case 2:
-                        {   int m = z->l - z->c; (void) m; /* or, line 124 */
+                        {   int m4 = z->l - z->c; (void)m4; /* or, line 133 */
                             {   int ret = r_R2(z);
-                                if (ret == 0) goto lab10; /* call R2, line 124 */
+                                if (ret == 0) goto lab10; /* call R2, line 133 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 124 */
+                            {   int ret = slice_del(z); /* delete, line 133 */
                                 if (ret < 0) return ret;
                             }
                             goto lab9;
                         lab10:
-                            z->c = z->l - m;
-                            {   int ret;
-                                ret = slice_from_s(z, 3, s_23); /* <-, line 124 */
+                            z->c = z->l - m4;
+                            {   int ret = slice_from_s(z, 3, s_23); /* <-, line 133 */
                                 if (ret < 0) return ret;
                             }
                         }
@@ -815,11 +810,10 @@ static int r_standard_suffix(struct SN_env * z) {
                         break;
                     case 3:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab6; } /* call R2, line 134 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 125 */
+                        {   int ret = slice_del(z); /* delete, line 134 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -830,42 +824,38 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 8:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 132 */
+                if (ret == 0) return 0; /* call R2, line 141 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 132 */
+            {   int ret = slice_del(z); /* delete, line 141 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 133 */
-                z->ket = z->c; /* [, line 133 */
-                if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; }
-                z->bra = z->c; /* ], line 133 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 142 */
+                z->ket = z->c; /* [, line 142 */
+                if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m_keep; goto lab11; }
+                z->bra = z->c; /* ], line 142 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab11; } /* call R2, line 142 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 133 */
+                {   int ret = slice_del(z); /* delete, line 142 */
                     if (ret < 0) return ret;
                 }
-                z->ket = z->c; /* [, line 133 */
-                if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; }
-                z->bra = z->c; /* ], line 133 */
-                {   int m = z->l - z->c; (void) m; /* or, line 133 */
+                z->ket = z->c; /* [, line 142 */
+                if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m_keep; goto lab11; }
+                z->bra = z->c; /* ], line 142 */
+                {   int m5 = z->l - z->c; (void)m5; /* or, line 142 */
                     {   int ret = r_R2(z);
-                        if (ret == 0) goto lab13; /* call R2, line 133 */
+                        if (ret == 0) goto lab13; /* call R2, line 142 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 133 */
+                    {   int ret = slice_del(z); /* delete, line 142 */
                         if (ret < 0) return ret;
                     }
                     goto lab12;
                 lab13:
-                    z->c = z->l - m;
-                    {   int ret;
-                        ret = slice_from_s(z, 3, s_26); /* <-, line 133 */
+                    z->c = z->l - m5;
+                    {   int ret = slice_from_s(z, 3, s_26); /* <-, line 142 */
                         if (ret < 0) return ret;
                     }
                 }
@@ -875,40 +865,36 @@ static int r_standard_suffix(struct SN_env * z) {
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_27); /* <-, line 135 */
+            {   int ret = slice_from_s(z, 3, s_27); /* <-, line 144 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
             {   int ret = r_R1(z);
-                if (ret == 0) return 0; /* call R1, line 136 */
+                if (ret == 0) return 0; /* call R1, line 145 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 2, s_28); /* <-, line 136 */
+            {   int ret = slice_from_s(z, 2, s_28); /* <-, line 145 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int m = z->l - z->c; (void) m; /* or, line 138 */
+            {   int m6 = z->l - z->c; (void)m6; /* or, line 147 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) goto lab15; /* call R2, line 138 */
+                    if (ret == 0) goto lab15; /* call R2, line 147 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 138 */
+                {   int ret = slice_del(z); /* delete, line 147 */
                     if (ret < 0) return ret;
                 }
                 goto lab14;
             lab15:
-                z->c = z->l - m;
+                z->c = z->l - m6;
                 {   int ret = r_R1(z);
-                    if (ret == 0) return 0; /* call R1, line 138 */
+                    if (ret == 0) return 0; /* call R1, line 147 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_from_s(z, 3, s_29); /* <-, line 138 */
+                {   int ret = slice_from_s(z, 3, s_29); /* <-, line 147 */
                     if (ret < 0) return ret;
                 }
             }
@@ -916,51 +902,47 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 12:
             {   int ret = r_R1(z);
-                if (ret == 0) return 0; /* call R1, line 141 */
+                if (ret == 0) return 0; /* call R1, line 150 */
                 if (ret < 0) return ret;
             }
-            if (!(out_grouping_b(z, g_v, 97, 251))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 141 */
+            if (out_grouping_b(z, g_v, 97, 251, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 150 */
                 if (ret < 0) return ret;
             }
             break;
         case 13:
             {   int ret = r_RV(z);
-                if (ret == 0) return 0; /* call RV, line 146 */
+                if (ret == 0) return 0; /* call RV, line 155 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_30); /* <-, line 146 */
+            {   int ret = slice_from_s(z, 3, s_30); /* <-, line 155 */
                 if (ret < 0) return ret;
             }
-            return 0; /* fail, line 146 */
+            return 0; /* fail, line 155 */
             break;
         case 14:
             {   int ret = r_RV(z);
-                if (ret == 0) return 0; /* call RV, line 147 */
+                if (ret == 0) return 0; /* call RV, line 156 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_31); /* <-, line 147 */
+            {   int ret = slice_from_s(z, 3, s_31); /* <-, line 156 */
                 if (ret < 0) return ret;
             }
-            return 0; /* fail, line 147 */
+            return 0; /* fail, line 156 */
             break;
         case 15:
-            {   int m_test = z->l - z->c; /* test, line 149 */
-                if (!(in_grouping_b(z, g_v, 97, 251))) return 0;
+            {   int m_test = z->l - z->c; /* test, line 158 */
+                if (in_grouping_b(z, g_v, 97, 251, 0)) return 0;
                 {   int ret = r_RV(z);
-                    if (ret == 0) return 0; /* call RV, line 149 */
+                    if (ret == 0) return 0; /* call RV, line 158 */
                     if (ret < 0) return ret;
                 }
                 z->c = z->l - m_test;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 149 */
+            {   int ret = slice_del(z); /* delete, line 158 */
                 if (ret < 0) return ret;
             }
-            return 0; /* fail, line 149 */
+            return 0; /* fail, line 158 */
             break;
     }
     return 1;
@@ -968,72 +950,68 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_i_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 154 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 163 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
-        z->c = z->I[0]; /* tomark, line 154 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        z->ket = z->c; /* [, line 155 */
-        among_var = find_among_b(z, a_4, 35); /* substring, line 155 */
-        if (!(among_var)) { z->lb = m3; return 0; }
-        z->bra = z->c; /* ], line 155 */
+        z->c = z->I[0]; /* tomark, line 163 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 164 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68944418 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
+        among_var = find_among_b(z, a_5, 35); /* substring, line 164 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 164 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                if (!(out_grouping_b(z, g_v, 97, 251))) { z->lb = m3; return 0; }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 161 */
+                if (out_grouping_b(z, g_v, 97, 251, 0)) { z->lb = mlimit; return 0; }
+                {   int ret = slice_del(z); /* delete, line 170 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 165 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 174 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
-        z->c = z->I[0]; /* tomark, line 165 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        z->ket = z->c; /* [, line 166 */
-        among_var = find_among_b(z, a_5, 38); /* substring, line 166 */
-        if (!(among_var)) { z->lb = m3; return 0; }
-        z->bra = z->c; /* ], line 166 */
+        z->c = z->I[0]; /* tomark, line 174 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 175 */
+        among_var = find_among_b(z, a_6, 38); /* substring, line 175 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 175 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */
+                    if (ret == 0) { z->lb = mlimit; return 0; } /* call R2, line 177 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 168 */
+                {   int ret = slice_del(z); /* delete, line 177 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 176 */
+                {   int ret = slice_del(z); /* delete, line 185 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 181 */
+                {   int ret = slice_del(z); /* delete, line 190 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 182 */
-                    z->ket = z->c; /* [, line 182 */
-                    if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; }
-                    z->bra = z->c; /* ], line 182 */
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 182 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 191 */
+                    z->ket = z->c; /* [, line 191 */
+                    if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m_keep; goto lab0; }
+                    z->bra = z->c; /* ], line 191 */
+                    {   int ret = slice_del(z); /* delete, line 191 */
                         if (ret < 0) return ret;
                     }
                 lab0:
@@ -1041,94 +1019,89 @@ static int r_verb_suffix(struct SN_env * z) {
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_residual_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* try, line 190 */
-        z->ket = z->c; /* [, line 190 */
-        if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; }
-        z->bra = z->c; /* ], line 190 */
-        {   int m_test = z->l - z->c; /* test, line 190 */
-            if (!(out_grouping_b(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; }
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 199 */
+        z->ket = z->c; /* [, line 199 */
+        if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m_keep; goto lab0; }
+        z->bra = z->c; /* ], line 199 */
+        {   int m_test = z->l - z->c; /* test, line 199 */
+            if (out_grouping_b(z, g_keep_with_s, 97, 232, 0)) { z->c = z->l - m_keep; goto lab0; }
             z->c = z->l - m_test;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 190 */
+        {   int ret = slice_del(z); /* delete, line 199 */
             if (ret < 0) return ret;
         }
     lab0:
         ;
     }
-    {   int m3; /* setlimit, line 191 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 200 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
-        z->c = z->I[0]; /* tomark, line 191 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        z->ket = z->c; /* [, line 192 */
-        among_var = find_among_b(z, a_6, 7); /* substring, line 192 */
-        if (!(among_var)) { z->lb = m3; return 0; }
-        z->bra = z->c; /* ], line 192 */
+        z->c = z->I[0]; /* tomark, line 200 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 201 */
+        among_var = find_among_b(z, a_7, 7); /* substring, line 201 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 201 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */
+                    if (ret == 0) { z->lb = mlimit; return 0; } /* call R2, line 202 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* or, line 193 */
+                {   int m2 = z->l - z->c; (void)m2; /* or, line 202 */
                     if (!(eq_s_b(z, 1, s_34))) goto lab2;
                     goto lab1;
                 lab2:
-                    z->c = z->l - m;
-                    if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; }
+                    z->c = z->l - m2;
+                    if (!(eq_s_b(z, 1, s_35))) { z->lb = mlimit; return 0; }
                 }
             lab1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 193 */
+                {   int ret = slice_del(z); /* delete, line 202 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_36); /* <-, line 195 */
+                {   int ret = slice_from_s(z, 1, s_36); /* <-, line 204 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 196 */
+                {   int ret = slice_del(z); /* delete, line 205 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 197 */
+                if (!(eq_s_b(z, 2, s_37))) { z->lb = mlimit; return 0; }
+                {   int ret = slice_del(z); /* delete, line 206 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_un_double(struct SN_env * z) {
-    {   int m_test = z->l - z->c; /* test, line 203 */
-        if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */
+    {   int m_test = z->l - z->c; /* test, line 212 */
+        if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1069056 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+        if (!(find_among_b(z, a_8, 5))) return 0; /* among, line 212 */
         z->c = z->l - m_test;
     }
-    z->ket = z->c; /* [, line 203 */
+    z->ket = z->c; /* [, line 212 */
     if (z->c <= z->lb) return 0;
-    z->c--; /* next, line 203 */
-    z->bra = z->c; /* ], line 203 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 203 */
+    z->c--; /* next, line 212 */
+    z->bra = z->c; /* ], line 212 */
+    {   int ret = slice_del(z); /* delete, line 212 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -1136,8 +1109,8 @@ static int r_un_double(struct SN_env * z) {
 
 static int r_un_accent(struct SN_env * z) {
     {   int i = 1;
-        while(1) { /* atleast, line 207 */
-            if (!(out_grouping_b(z, g_v, 97, 251))) goto lab0;
+        while(1) { /* atleast, line 216 */
+            if (out_grouping_b(z, g_v, 97, 251, 0)) goto lab0;
             i--;
             continue;
         lab0:
@@ -1145,83 +1118,80 @@ static int r_un_accent(struct SN_env * z) {
         }
         if (i > 0) return 0;
     }
-    z->ket = z->c; /* [, line 208 */
-    {   int m = z->l - z->c; (void) m; /* or, line 208 */
+    z->ket = z->c; /* [, line 217 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 217 */
         if (!(eq_s_b(z, 1, s_38))) goto lab2;
         goto lab1;
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         if (!(eq_s_b(z, 1, s_39))) return 0;
     }
 lab1:
-    z->bra = z->c; /* ], line 208 */
-    {   int ret;
-        ret = slice_from_s(z, 1, s_40); /* <-, line 208 */
+    z->bra = z->c; /* ], line 217 */
+    {   int ret = slice_from_s(z, 1, s_40); /* <-, line 217 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 extern int french_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 214 */
+    {   int c1 = z->c; /* do, line 223 */
         {   int ret = r_prelude(z);
-            if (ret == 0) goto lab0; /* call prelude, line 214 */
+            if (ret == 0) goto lab0; /* call prelude, line 223 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 215 */
+    {   int c2 = z->c; /* do, line 224 */
         {   int ret = r_mark_regions(z);
-            if (ret == 0) goto lab1; /* call mark_regions, line 215 */
+            if (ret == 0) goto lab1; /* call mark_regions, line 224 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
-    z->lb = z->c; z->c = z->l; /* backwards, line 216 */
+    z->lb = z->c; z->c = z->l; /* backwards, line 225 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 218 */
-        {   int m = z->l - z->c; (void) m; /* or, line 228 */
-            {   int m = z->l - z->c; (void) m; /* and, line 224 */
-                {   int m = z->l - z->c; (void) m; /* or, line 220 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 227 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 237 */
+            {   int m5 = z->l - z->c; (void)m5; /* and, line 233 */
+                {   int m6 = z->l - z->c; (void)m6; /* or, line 229 */
                     {   int ret = r_standard_suffix(z);
-                        if (ret == 0) goto lab6; /* call standard_suffix, line 220 */
+                        if (ret == 0) goto lab6; /* call standard_suffix, line 229 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_i_verb_suffix(z);
-                        if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */
+                        if (ret == 0) goto lab7; /* call i_verb_suffix, line 230 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab7:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_verb_suffix(z);
-                        if (ret == 0) goto lab4; /* call verb_suffix, line 222 */
+                        if (ret == 0) goto lab4; /* call verb_suffix, line 231 */
                         if (ret < 0) return ret;
                     }
                 }
             lab5:
-                z->c = z->l - m;
-                {   int m = z->l - z->c; (void) m; /* try, line 225 */
-                    z->ket = z->c; /* [, line 225 */
-                    {   int m = z->l - z->c; (void) m; /* or, line 225 */
+                z->c = z->l - m5;
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 234 */
+                    z->ket = z->c; /* [, line 234 */
+                    {   int m7 = z->l - z->c; (void)m7; /* or, line 234 */
                         if (!(eq_s_b(z, 1, s_41))) goto lab10;
-                        z->bra = z->c; /* ], line 225 */
-                        {   int ret;
-                            ret = slice_from_s(z, 1, s_42); /* <-, line 225 */
+                        z->bra = z->c; /* ], line 234 */
+                        {   int ret = slice_from_s(z, 1, s_42); /* <-, line 234 */
                             if (ret < 0) return ret;
                         }
                         goto lab9;
                     lab10:
-                        z->c = z->l - m;
-                        if (!(eq_s_b(z, 1, s_43))) { z->c = z->l - m; goto lab8; }
-                        z->bra = z->c; /* ], line 226 */
-                        {   int ret;
-                            ret = slice_from_s(z, 1, s_44); /* <-, line 226 */
+                        z->c = z->l - m7;
+                        if (!(eq_s_b(z, 1, s_43))) { z->c = z->l - m_keep; goto lab8; }
+                        z->bra = z->c; /* ], line 235 */
+                        {   int ret = slice_from_s(z, 1, s_44); /* <-, line 235 */
                             if (ret < 0) return ret;
                         }
                     }
@@ -1232,45 +1202,45 @@ extern int french_ISO_8859_1_stem(struct SN_env * z) {
             }
             goto lab3;
         lab4:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_residual_suffix(z);
-                if (ret == 0) goto lab2; /* call residual_suffix, line 229 */
+                if (ret == 0) goto lab2; /* call residual_suffix, line 238 */
                 if (ret < 0) return ret;
             }
         }
     lab3:
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 234 */
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 243 */
         {   int ret = r_un_double(z);
-            if (ret == 0) goto lab11; /* call un_double, line 234 */
+            if (ret == 0) goto lab11; /* call un_double, line 243 */
             if (ret < 0) return ret;
         }
     lab11:
-        z->c = z->l - m;
+        z->c = z->l - m8;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 235 */
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 244 */
         {   int ret = r_un_accent(z);
-            if (ret == 0) goto lab12; /* call un_accent, line 235 */
+            if (ret == 0) goto lab12; /* call un_accent, line 244 */
             if (ret < 0) return ret;
         }
     lab12:
-        z->c = z->l - m;
+        z->c = z->l - m9;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 237 */
+    {   int c10 = z->c; /* do, line 246 */
         {   int ret = r_postlude(z);
-            if (ret == 0) goto lab13; /* call postlude, line 237 */
+            if (ret == 0) goto lab13; /* call postlude, line 246 */
             if (ret < 0) return ret;
         }
     lab13:
-        z->c = c;
+        z->c = c10;
     }
     return 1;
 }
 
 extern struct SN_env * french_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void french_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void french_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_german.c b/libstemmer_c/src_c/stem_ISO_8859_1_german.c
index 633bf03..d9f82fc 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_german.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_german.c
@@ -3,24 +3,38 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int german_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_standard_suffix(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_R1(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * german_ISO_8859_1_create_env(void);
 extern void german_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 'U' };
-static symbol s_0_2[1] = { 'Y' };
-static symbol s_0_3[1] = { 0xE4 };
-static symbol s_0_4[1] = { 0xF6 };
-static symbol s_0_5[1] = { 0xFC };
 
-static struct among a_0[6] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 'U' };
+static const symbol s_0_2[1] = { 'Y' };
+static const symbol s_0_3[1] = { 0xE4 };
+static const symbol s_0_4[1] = { 0xF6 };
+static const symbol s_0_5[1] = { 0xFC };
+
+static const struct among a_0[6] =
 {
 /*  0 */ { 0, 0, -1, 6, 0},
 /*  1 */ { 1, s_0_1, 0, 2, 0},
@@ -30,15 +44,15 @@ static struct among a_0[6] =
 /*  5 */ { 1, s_0_5, 0, 5, 0}
 };
 
-static symbol s_1_0[1] = { 'e' };
-static symbol s_1_1[2] = { 'e', 'm' };
-static symbol s_1_2[2] = { 'e', 'n' };
-static symbol s_1_3[3] = { 'e', 'r', 'n' };
-static symbol s_1_4[2] = { 'e', 'r' };
-static symbol s_1_5[1] = { 's' };
-static symbol s_1_6[2] = { 'e', 's' };
+static const symbol s_1_0[1] = { 'e' };
+static const symbol s_1_1[2] = { 'e', 'm' };
+static const symbol s_1_2[2] = { 'e', 'n' };
+static const symbol s_1_3[3] = { 'e', 'r', 'n' };
+static const symbol s_1_4[2] = { 'e', 'r' };
+static const symbol s_1_5[1] = { 's' };
+static const symbol s_1_6[2] = { 'e', 's' };
 
-static struct among a_1[7] =
+static const struct among a_1[7] =
 {
 /*  0 */ { 1, s_1_0, -1, 1, 0},
 /*  1 */ { 2, s_1_1, -1, 1, 0},
@@ -49,12 +63,12 @@ static struct among a_1[7] =
 /*  6 */ { 2, s_1_6, 5, 1, 0}
 };
 
-static symbol s_2_0[2] = { 'e', 'n' };
-static symbol s_2_1[2] = { 'e', 'r' };
-static symbol s_2_2[2] = { 's', 't' };
-static symbol s_2_3[3] = { 'e', 's', 't' };
+static const symbol s_2_0[2] = { 'e', 'n' };
+static const symbol s_2_1[2] = { 'e', 'r' };
+static const symbol s_2_2[2] = { 's', 't' };
+static const symbol s_2_3[3] = { 'e', 's', 't' };
 
-static struct among a_2[4] =
+static const struct among a_2[4] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 2, s_2_1, -1, 1, 0},
@@ -62,25 +76,25 @@ static struct among a_2[4] =
 /*  3 */ { 3, s_2_3, 2, 1, 0}
 };
 
-static symbol s_3_0[2] = { 'i', 'g' };
-static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' };
+static const symbol s_3_0[2] = { 'i', 'g' };
+static const symbol s_3_1[4] = { 'l', 'i', 'c', 'h' };
 
-static struct among a_3[2] =
+static const struct among a_3[2] =
 {
 /*  0 */ { 2, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0}
 };
 
-static symbol s_4_0[3] = { 'e', 'n', 'd' };
-static symbol s_4_1[2] = { 'i', 'g' };
-static symbol s_4_2[3] = { 'u', 'n', 'g' };
-static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' };
-static symbol s_4_4[4] = { 'i', 's', 'c', 'h' };
-static symbol s_4_5[2] = { 'i', 'k' };
-static symbol s_4_6[4] = { 'h', 'e', 'i', 't' };
-static symbol s_4_7[4] = { 'k', 'e', 'i', 't' };
+static const symbol s_4_0[3] = { 'e', 'n', 'd' };
+static const symbol s_4_1[2] = { 'i', 'g' };
+static const symbol s_4_2[3] = { 'u', 'n', 'g' };
+static const symbol s_4_3[4] = { 'l', 'i', 'c', 'h' };
+static const symbol s_4_4[4] = { 'i', 's', 'c', 'h' };
+static const symbol s_4_5[2] = { 'i', 'k' };
+static const symbol s_4_6[4] = { 'h', 'e', 'i', 't' };
+static const symbol s_4_7[4] = { 'k', 'e', 'i', 't' };
 
-static struct among a_4[8] =
+static const struct among a_4[8] =
 {
 /*  0 */ { 3, s_4_0, -1, 1, 0},
 /*  1 */ { 2, s_4_1, -1, 2, 0},
@@ -92,91 +106,88 @@ static struct among a_4[8] =
 /*  7 */ { 4, s_4_7, -1, 4, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 };
 
-static unsigned char g_s_ending[] = { 117, 30, 5 };
+static const unsigned char g_s_ending[] = { 117, 30, 5 };
 
-static unsigned char g_st_ending[] = { 117, 30, 4 };
+static const unsigned char g_st_ending[] = { 117, 30, 4 };
 
-static symbol s_0[] = { 0xDF };
-static symbol s_1[] = { 's', 's' };
-static symbol s_2[] = { 'u' };
-static symbol s_3[] = { 'U' };
-static symbol s_4[] = { 'y' };
-static symbol s_5[] = { 'Y' };
-static symbol s_6[] = { 'y' };
-static symbol s_7[] = { 'u' };
-static symbol s_8[] = { 'a' };
-static symbol s_9[] = { 'o' };
-static symbol s_10[] = { 'u' };
-static symbol s_11[] = { 'i', 'g' };
-static symbol s_12[] = { 'e' };
-static symbol s_13[] = { 'e' };
-static symbol s_14[] = { 'e', 'r' };
-static symbol s_15[] = { 'e', 'n' };
+static const symbol s_0[] = { 0xDF };
+static const symbol s_1[] = { 's', 's' };
+static const symbol s_2[] = { 'u' };
+static const symbol s_3[] = { 'U' };
+static const symbol s_4[] = { 'y' };
+static const symbol s_5[] = { 'Y' };
+static const symbol s_6[] = { 'y' };
+static const symbol s_7[] = { 'u' };
+static const symbol s_8[] = { 'a' };
+static const symbol s_9[] = { 'o' };
+static const symbol s_10[] = { 'u' };
+static const symbol s_11[] = { 'i', 'g' };
+static const symbol s_12[] = { 'e' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'e', 'r' };
+static const symbol s_15[] = { 'e', 'n' };
 
 static int r_prelude(struct SN_env * z) {
     {   int c_test = z->c; /* test, line 30 */
         while(1) { /* repeat, line 30 */
-            int c = z->c;
-            {   int c = z->c; /* or, line 33 */
+            int c1 = z->c;
+            {   int c2 = z->c; /* or, line 33 */
                 z->bra = z->c; /* [, line 32 */
                 if (!(eq_s(z, 1, s_0))) goto lab2;
                 z->ket = z->c; /* ], line 32 */
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_1); /* <-, line 32 */
+                {   int ret = slice_from_s(z, 2, s_1); /* <-, line 32 */
                     if (ret < 0) return ret;
                 }
                 goto lab1;
             lab2:
-                z->c = c;
+                z->c = c2;
                 if (z->c >= z->l) goto lab0;
                 z->c++; /* next, line 33 */
             }
         lab1:
             continue;
         lab0:
-            z->c = c;
+            z->c = c1;
             break;
         }
         z->c = c_test;
     }
     while(1) { /* repeat, line 36 */
-        int c = z->c;
+        int c3 = z->c;
         while(1) { /* goto, line 36 */
-            int c = z->c;
-            if (!(in_grouping(z, g_v, 97, 252))) goto lab4;
+            int c4 = z->c;
+            if (in_grouping(z, g_v, 97, 252, 0)) goto lab4;
             z->bra = z->c; /* [, line 37 */
-            {   int c = z->c; /* or, line 37 */
+            {   int c5 = z->c; /* or, line 37 */
                 if (!(eq_s(z, 1, s_2))) goto lab6;
                 z->ket = z->c; /* ], line 37 */
-                if (!(in_grouping(z, g_v, 97, 252))) goto lab6;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_3); /* <-, line 37 */
+                if (in_grouping(z, g_v, 97, 252, 0)) goto lab6;
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 37 */
                     if (ret < 0) return ret;
                 }
                 goto lab5;
             lab6:
-                z->c = c;
+                z->c = c5;
                 if (!(eq_s(z, 1, s_4))) goto lab4;
                 z->ket = z->c; /* ], line 38 */
-                if (!(in_grouping(z, g_v, 97, 252))) goto lab4;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_5); /* <-, line 38 */
+                if (in_grouping(z, g_v, 97, 252, 0)) goto lab4;
+                {   int ret = slice_from_s(z, 1, s_5); /* <-, line 38 */
                     if (ret < 0) return ret;
                 }
             }
         lab5:
-            z->c = c;
+            z->c = c4;
             break;
         lab4:
-            z->c = c;
+            z->c = c4;
             if (z->c >= z->l) goto lab3;
             z->c++; /* goto, line 36 */
         }
         continue;
     lab3:
-        z->c = c;
+        z->c = c3;
         break;
     }
     return 1;
@@ -186,45 +197,37 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     {   int c_test = z->c; /* test, line 47 */
-        {   int c = z->c + 3;
-            if (0 > c || c > z->l) return 0;
-            z->c = c; /* hop, line 47 */
+        {   int ret = z->c + 3;
+            if (0 > ret || ret > z->l) return 0;
+            z->c = ret; /* hop, line 47 */
         }
         z->I[2] = z->c; /* setmark x, line 47 */
         z->c = c_test;
     }
-    while(1) { /* gopast, line 49 */
-        if (!(in_grouping(z, g_v, 97, 252))) goto lab0;
-        break;
-    lab0:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 49 */
+    {    /* gopast */ /* grouping v, line 49 */
+        int ret = out_grouping(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 49 */
-        if (!(out_grouping(z, g_v, 97, 252))) goto lab1;
-        break;
-    lab1:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 49 */
+    {    /* gopast */ /* non v, line 49 */
+        int ret = in_grouping(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 49 */
      /* try, line 50 */
-    if (!(z->I[0] < z->I[2])) goto lab2;
+    if (!(z->I[0] < z->I[2])) goto lab0;
     z->I[0] = z->I[2];
-lab2:
-    while(1) { /* gopast, line 51 */
-        if (!(in_grouping(z, g_v, 97, 252))) goto lab3;
-        break;
-    lab3:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 51 */
+lab0:
+    {    /* gopast */ /* grouping v, line 51 */
+        int ret = out_grouping(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 51 */
-        if (!(out_grouping(z, g_v, 97, 252))) goto lab4;
-        break;
-    lab4:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 51 */
+    {    /* gopast */ /* non v, line 51 */
+        int ret = in_grouping(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[1] = z->c; /* setmark p2, line 51 */
     return 1;
@@ -233,7 +236,7 @@ lab2:
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 55 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 57 */
         among_var = find_among(z, a_0, 6); /* substring, line 57 */
         if (!(among_var)) goto lab0;
@@ -241,32 +244,27 @@ static int r_postlude(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_6); /* <-, line 58 */
+                {   int ret = slice_from_s(z, 1, s_6); /* <-, line 58 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_7); /* <-, line 59 */
+                {   int ret = slice_from_s(z, 1, s_7); /* <-, line 59 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_8); /* <-, line 60 */
+                {   int ret = slice_from_s(z, 1, s_8); /* <-, line 60 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_9); /* <-, line 61 */
+                {   int ret = slice_from_s(z, 1, s_9); /* <-, line 61 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 5:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 62 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 62 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -277,7 +275,7 @@ static int r_postlude(struct SN_env * z) {
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -295,8 +293,9 @@ static int r_R2(struct SN_env * z) {
 
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* do, line 74 */
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 74 */
         z->ket = z->c; /* [, line 75 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((811040 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
         among_var = find_among_b(z, a_1, 7); /* substring, line 75 */
         if (!(among_var)) goto lab0;
         z->bra = z->c; /* ], line 75 */
@@ -307,24 +306,23 @@ static int r_standard_suffix(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 77 */
+                {   int ret = slice_del(z); /* delete, line 77 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                if (!(in_grouping_b(z, g_s_ending, 98, 116))) goto lab0;
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 80 */
+                if (in_grouping_b(z, g_s_ending, 98, 116, 0)) goto lab0;
+                {   int ret = slice_del(z); /* delete, line 80 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab0:
-        z->c = z->l - m;
+        z->c = z->l - m1;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 84 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 84 */
         z->ket = z->c; /* [, line 85 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1327104 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab1;
         among_var = find_among_b(z, a_2, 4); /* substring, line 85 */
         if (!(among_var)) goto lab1;
         z->bra = z->c; /* ], line 85 */
@@ -335,28 +333,27 @@ static int r_standard_suffix(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab1;
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 87 */
+                {   int ret = slice_del(z); /* delete, line 87 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                if (!(in_grouping_b(z, g_st_ending, 98, 116))) goto lab1;
-                {   int c = z->c - 3;
-                    if (z->lb > c || c > z->l) goto lab1;
-                    z->c = c; /* hop, line 90 */
+                if (in_grouping_b(z, g_st_ending, 98, 116, 0)) goto lab1;
+                {   int ret = z->c - 3;
+                    if (z->lb > ret || ret > z->l) goto lab1;
+                    z->c = ret; /* hop, line 90 */
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 90 */
+                {   int ret = slice_del(z); /* delete, line 90 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 94 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 94 */
         z->ket = z->c; /* [, line 95 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1051024 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab2;
         among_var = find_among_b(z, a_4, 8); /* substring, line 95 */
         if (!(among_var)) goto lab2;
         z->bra = z->c; /* ], line 95 */
@@ -367,26 +364,24 @@ static int r_standard_suffix(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab2;
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 97 */
+                {   int ret = slice_del(z); /* delete, line 97 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 98 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 98 */
                     z->ket = z->c; /* [, line 98 */
-                    if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; }
+                    if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m_keep; goto lab3; }
                     z->bra = z->c; /* ], line 98 */
-                    {   int m = z->l - z->c; (void) m; /* not, line 98 */
+                    {   int m4 = z->l - z->c; (void)m4; /* not, line 98 */
                         if (!(eq_s_b(z, 1, s_12))) goto lab4;
-                        { z->c = z->l - m; goto lab3; }
+                        { z->c = z->l - m_keep; goto lab3; }
                     lab4:
-                        z->c = z->l - m;
+                        z->c = z->l - m4;
                     }
                     {   int ret = r_R2(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 98 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 98 */
+                    {   int ret = slice_del(z); /* delete, line 98 */
                         if (ret < 0) return ret;
                     }
                 lab3:
@@ -394,39 +389,36 @@ static int r_standard_suffix(struct SN_env * z) {
                 }
                 break;
             case 2:
-                {   int m = z->l - z->c; (void) m; /* not, line 101 */
+                {   int m5 = z->l - z->c; (void)m5; /* not, line 101 */
                     if (!(eq_s_b(z, 1, s_13))) goto lab5;
                     goto lab2;
                 lab5:
-                    z->c = z->l - m;
+                    z->c = z->l - m5;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 101 */
+                {   int ret = slice_del(z); /* delete, line 101 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 104 */
+                {   int ret = slice_del(z); /* delete, line 104 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 105 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 105 */
                     z->ket = z->c; /* [, line 106 */
-                    {   int m = z->l - z->c; (void) m; /* or, line 106 */
+                    {   int m6 = z->l - z->c; (void)m6; /* or, line 106 */
                         if (!(eq_s_b(z, 2, s_14))) goto lab8;
                         goto lab7;
                     lab8:
-                        z->c = z->l - m;
-                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; }
+                        z->c = z->l - m6;
+                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m_keep; goto lab6; }
                     }
                 lab7:
                     z->bra = z->c; /* ], line 106 */
                     {   int ret = r_R1(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab6; } /* call R1, line 106 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 106 */
+                    {   int ret = slice_del(z); /* delete, line 106 */
                         if (ret < 0) return ret;
                     }
                 lab6:
@@ -434,24 +426,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 }
                 break;
             case 4:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 110 */
+                {   int ret = slice_del(z); /* delete, line 110 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 111 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
                     z->ket = z->c; /* [, line 112 */
+                    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 103 && z->p[z->c - 1] != 104)) { z->c = z->l - m_keep; goto lab9; }
                     among_var = find_among_b(z, a_3, 2); /* substring, line 112 */
-                    if (!(among_var)) { z->c = z->l - m; goto lab9; }
+                    if (!(among_var)) { z->c = z->l - m_keep; goto lab9; }
                     z->bra = z->c; /* ], line 112 */
                     {   int ret = r_R2(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab9; } /* call R2, line 112 */
                         if (ret < 0) return ret;
                     }
                     switch(among_var) {
-                        case 0: { z->c = z->l - m; goto lab9; }
+                        case 0: { z->c = z->l - m_keep; goto lab9; }
                         case 1:
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 114 */
+                            {   int ret = slice_del(z); /* delete, line 114 */
                                 if (ret < 0) return ret;
                             }
                             break;
@@ -462,51 +453,51 @@ static int r_standard_suffix(struct SN_env * z) {
                 break;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
     return 1;
 }
 
 extern int german_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 125 */
+    {   int c1 = z->c; /* do, line 125 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 125 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 126 */
+    {   int c2 = z->c; /* do, line 126 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 126 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 127 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 128 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 128 */
         {   int ret = r_standard_suffix(z);
             if (ret == 0) goto lab2; /* call standard_suffix, line 128 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 129 */
+    {   int c4 = z->c; /* do, line 129 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab3; /* call postlude, line 129 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = c;
+        z->c = c4;
     }
     return 1;
 }
 
 extern struct SN_env * german_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void german_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void german_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_hungarian.c b/libstemmer_c/src_c/stem_ISO_8859_1_hungarian.c
new file mode 100644
index 0000000..beb31db
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_hungarian.c
@@ -0,0 +1,1230 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int hungarian_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
+static int r_double(struct SN_env * z);
+static int r_undouble(struct SN_env * z);
+static int r_factive(struct SN_env * z);
+static int r_instrum(struct SN_env * z);
+static int r_plur_owner(struct SN_env * z);
+static int r_sing_owner(struct SN_env * z);
+static int r_owned(struct SN_env * z);
+static int r_plural(struct SN_env * z);
+static int r_case_other(struct SN_env * z);
+static int r_case_special(struct SN_env * z);
+static int r_case(struct SN_env * z);
+static int r_v_ending(struct SN_env * z);
+static int r_R1(struct SN_env * z);
+static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern struct SN_env * hungarian_ISO_8859_1_create_env(void);
+extern void hungarian_ISO_8859_1_close_env(struct SN_env * z);
+
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[2] = { 'c', 's' };
+static const symbol s_0_1[3] = { 'd', 'z', 's' };
+static const symbol s_0_2[2] = { 'g', 'y' };
+static const symbol s_0_3[2] = { 'l', 'y' };
+static const symbol s_0_4[2] = { 'n', 'y' };
+static const symbol s_0_5[2] = { 's', 'z' };
+static const symbol s_0_6[2] = { 't', 'y' };
+static const symbol s_0_7[2] = { 'z', 's' };
+
+static const struct among a_0[8] =
+{
+/*  0 */ { 2, s_0_0, -1, -1, 0},
+/*  1 */ { 3, s_0_1, -1, -1, 0},
+/*  2 */ { 2, s_0_2, -1, -1, 0},
+/*  3 */ { 2, s_0_3, -1, -1, 0},
+/*  4 */ { 2, s_0_4, -1, -1, 0},
+/*  5 */ { 2, s_0_5, -1, -1, 0},
+/*  6 */ { 2, s_0_6, -1, -1, 0},
+/*  7 */ { 2, s_0_7, -1, -1, 0}
+};
+
+static const symbol s_1_0[1] = { 0xE1 };
+static const symbol s_1_1[1] = { 0xE9 };
+
+static const struct among a_1[2] =
+{
+/*  0 */ { 1, s_1_0, -1, 1, 0},
+/*  1 */ { 1, s_1_1, -1, 2, 0}
+};
+
+static const symbol s_2_0[2] = { 'b', 'b' };
+static const symbol s_2_1[2] = { 'c', 'c' };
+static const symbol s_2_2[2] = { 'd', 'd' };
+static const symbol s_2_3[2] = { 'f', 'f' };
+static const symbol s_2_4[2] = { 'g', 'g' };
+static const symbol s_2_5[2] = { 'j', 'j' };
+static const symbol s_2_6[2] = { 'k', 'k' };
+static const symbol s_2_7[2] = { 'l', 'l' };
+static const symbol s_2_8[2] = { 'm', 'm' };
+static const symbol s_2_9[2] = { 'n', 'n' };
+static const symbol s_2_10[2] = { 'p', 'p' };
+static const symbol s_2_11[2] = { 'r', 'r' };
+static const symbol s_2_12[3] = { 'c', 'c', 's' };
+static const symbol s_2_13[2] = { 's', 's' };
+static const symbol s_2_14[3] = { 'z', 'z', 's' };
+static const symbol s_2_15[2] = { 't', 't' };
+static const symbol s_2_16[2] = { 'v', 'v' };
+static const symbol s_2_17[3] = { 'g', 'g', 'y' };
+static const symbol s_2_18[3] = { 'l', 'l', 'y' };
+static const symbol s_2_19[3] = { 'n', 'n', 'y' };
+static const symbol s_2_20[3] = { 't', 't', 'y' };
+static const symbol s_2_21[3] = { 's', 's', 'z' };
+static const symbol s_2_22[2] = { 'z', 'z' };
+
+static const struct among a_2[23] =
+{
+/*  0 */ { 2, s_2_0, -1, -1, 0},
+/*  1 */ { 2, s_2_1, -1, -1, 0},
+/*  2 */ { 2, s_2_2, -1, -1, 0},
+/*  3 */ { 2, s_2_3, -1, -1, 0},
+/*  4 */ { 2, s_2_4, -1, -1, 0},
+/*  5 */ { 2, s_2_5, -1, -1, 0},
+/*  6 */ { 2, s_2_6, -1, -1, 0},
+/*  7 */ { 2, s_2_7, -1, -1, 0},
+/*  8 */ { 2, s_2_8, -1, -1, 0},
+/*  9 */ { 2, s_2_9, -1, -1, 0},
+/* 10 */ { 2, s_2_10, -1, -1, 0},
+/* 11 */ { 2, s_2_11, -1, -1, 0},
+/* 12 */ { 3, s_2_12, -1, -1, 0},
+/* 13 */ { 2, s_2_13, -1, -1, 0},
+/* 14 */ { 3, s_2_14, -1, -1, 0},
+/* 15 */ { 2, s_2_15, -1, -1, 0},
+/* 16 */ { 2, s_2_16, -1, -1, 0},
+/* 17 */ { 3, s_2_17, -1, -1, 0},
+/* 18 */ { 3, s_2_18, -1, -1, 0},
+/* 19 */ { 3, s_2_19, -1, -1, 0},
+/* 20 */ { 3, s_2_20, -1, -1, 0},
+/* 21 */ { 3, s_2_21, -1, -1, 0},
+/* 22 */ { 2, s_2_22, -1, -1, 0}
+};
+
+static const symbol s_3_0[2] = { 'a', 'l' };
+static const symbol s_3_1[2] = { 'e', 'l' };
+
+static const struct among a_3[2] =
+{
+/*  0 */ { 2, s_3_0, -1, 1, 0},
+/*  1 */ { 2, s_3_1, -1, 2, 0}
+};
+
+static const symbol s_4_0[2] = { 'b', 'a' };
+static const symbol s_4_1[2] = { 'r', 'a' };
+static const symbol s_4_2[2] = { 'b', 'e' };
+static const symbol s_4_3[2] = { 'r', 'e' };
+static const symbol s_4_4[2] = { 'i', 'g' };
+static const symbol s_4_5[3] = { 'n', 'a', 'k' };
+static const symbol s_4_6[3] = { 'n', 'e', 'k' };
+static const symbol s_4_7[3] = { 'v', 'a', 'l' };
+static const symbol s_4_8[3] = { 'v', 'e', 'l' };
+static const symbol s_4_9[2] = { 'u', 'l' };
+static const symbol s_4_10[3] = { 'n', 0xE1, 'l' };
+static const symbol s_4_11[3] = { 'n', 0xE9, 'l' };
+static const symbol s_4_12[3] = { 'b', 0xF3, 'l' };
+static const symbol s_4_13[3] = { 'r', 0xF3, 'l' };
+static const symbol s_4_14[3] = { 't', 0xF3, 'l' };
+static const symbol s_4_15[3] = { 'b', 0xF5, 'l' };
+static const symbol s_4_16[3] = { 'r', 0xF5, 'l' };
+static const symbol s_4_17[3] = { 't', 0xF5, 'l' };
+static const symbol s_4_18[2] = { 0xFC, 'l' };
+static const symbol s_4_19[1] = { 'n' };
+static const symbol s_4_20[2] = { 'a', 'n' };
+static const symbol s_4_21[3] = { 'b', 'a', 'n' };
+static const symbol s_4_22[2] = { 'e', 'n' };
+static const symbol s_4_23[3] = { 'b', 'e', 'n' };
+static const symbol s_4_24[6] = { 'k', 0xE9, 'p', 'p', 'e', 'n' };
+static const symbol s_4_25[2] = { 'o', 'n' };
+static const symbol s_4_26[2] = { 0xF6, 'n' };
+static const symbol s_4_27[4] = { 'k', 0xE9, 'p', 'p' };
+static const symbol s_4_28[3] = { 'k', 'o', 'r' };
+static const symbol s_4_29[1] = { 't' };
+static const symbol s_4_30[2] = { 'a', 't' };
+static const symbol s_4_31[2] = { 'e', 't' };
+static const symbol s_4_32[4] = { 'k', 0xE9, 'n', 't' };
+static const symbol s_4_33[6] = { 'a', 'n', 'k', 0xE9, 'n', 't' };
+static const symbol s_4_34[6] = { 'e', 'n', 'k', 0xE9, 'n', 't' };
+static const symbol s_4_35[6] = { 'o', 'n', 'k', 0xE9, 'n', 't' };
+static const symbol s_4_36[2] = { 'o', 't' };
+static const symbol s_4_37[3] = { 0xE9, 'r', 't' };
+static const symbol s_4_38[2] = { 0xF6, 't' };
+static const symbol s_4_39[3] = { 'h', 'e', 'z' };
+static const symbol s_4_40[3] = { 'h', 'o', 'z' };
+static const symbol s_4_41[3] = { 'h', 0xF6, 'z' };
+static const symbol s_4_42[2] = { 'v', 0xE1 };
+static const symbol s_4_43[2] = { 'v', 0xE9 };
+
+static const struct among a_4[44] =
+{
+/*  0 */ { 2, s_4_0, -1, -1, 0},
+/*  1 */ { 2, s_4_1, -1, -1, 0},
+/*  2 */ { 2, s_4_2, -1, -1, 0},
+/*  3 */ { 2, s_4_3, -1, -1, 0},
+/*  4 */ { 2, s_4_4, -1, -1, 0},
+/*  5 */ { 3, s_4_5, -1, -1, 0},
+/*  6 */ { 3, s_4_6, -1, -1, 0},
+/*  7 */ { 3, s_4_7, -1, -1, 0},
+/*  8 */ { 3, s_4_8, -1, -1, 0},
+/*  9 */ { 2, s_4_9, -1, -1, 0},
+/* 10 */ { 3, s_4_10, -1, -1, 0},
+/* 11 */ { 3, s_4_11, -1, -1, 0},
+/* 12 */ { 3, s_4_12, -1, -1, 0},
+/* 13 */ { 3, s_4_13, -1, -1, 0},
+/* 14 */ { 3, s_4_14, -1, -1, 0},
+/* 15 */ { 3, s_4_15, -1, -1, 0},
+/* 16 */ { 3, s_4_16, -1, -1, 0},
+/* 17 */ { 3, s_4_17, -1, -1, 0},
+/* 18 */ { 2, s_4_18, -1, -1, 0},
+/* 19 */ { 1, s_4_19, -1, -1, 0},
+/* 20 */ { 2, s_4_20, 19, -1, 0},
+/* 21 */ { 3, s_4_21, 20, -1, 0},
+/* 22 */ { 2, s_4_22, 19, -1, 0},
+/* 23 */ { 3, s_4_23, 22, -1, 0},
+/* 24 */ { 6, s_4_24, 22, -1, 0},
+/* 25 */ { 2, s_4_25, 19, -1, 0},
+/* 26 */ { 2, s_4_26, 19, -1, 0},
+/* 27 */ { 4, s_4_27, -1, -1, 0},
+/* 28 */ { 3, s_4_28, -1, -1, 0},
+/* 29 */ { 1, s_4_29, -1, -1, 0},
+/* 30 */ { 2, s_4_30, 29, -1, 0},
+/* 31 */ { 2, s_4_31, 29, -1, 0},
+/* 32 */ { 4, s_4_32, 29, -1, 0},
+/* 33 */ { 6, s_4_33, 32, -1, 0},
+/* 34 */ { 6, s_4_34, 32, -1, 0},
+/* 35 */ { 6, s_4_35, 32, -1, 0},
+/* 36 */ { 2, s_4_36, 29, -1, 0},
+/* 37 */ { 3, s_4_37, 29, -1, 0},
+/* 38 */ { 2, s_4_38, 29, -1, 0},
+/* 39 */ { 3, s_4_39, -1, -1, 0},
+/* 40 */ { 3, s_4_40, -1, -1, 0},
+/* 41 */ { 3, s_4_41, -1, -1, 0},
+/* 42 */ { 2, s_4_42, -1, -1, 0},
+/* 43 */ { 2, s_4_43, -1, -1, 0}
+};
+
+static const symbol s_5_0[2] = { 0xE1, 'n' };
+static const symbol s_5_1[2] = { 0xE9, 'n' };
+static const symbol s_5_2[6] = { 0xE1, 'n', 'k', 0xE9, 'n', 't' };
+
+static const struct among a_5[3] =
+{
+/*  0 */ { 2, s_5_0, -1, 2, 0},
+/*  1 */ { 2, s_5_1, -1, 1, 0},
+/*  2 */ { 6, s_5_2, -1, 3, 0}
+};
+
+static const symbol s_6_0[4] = { 's', 't', 'u', 'l' };
+static const symbol s_6_1[5] = { 'a', 's', 't', 'u', 'l' };
+static const symbol s_6_2[5] = { 0xE1, 's', 't', 'u', 'l' };
+static const symbol s_6_3[4] = { 's', 't', 0xFC, 'l' };
+static const symbol s_6_4[5] = { 'e', 's', 't', 0xFC, 'l' };
+static const symbol s_6_5[5] = { 0xE9, 's', 't', 0xFC, 'l' };
+
+static const struct among a_6[6] =
+{
+/*  0 */ { 4, s_6_0, -1, 2, 0},
+/*  1 */ { 5, s_6_1, 0, 1, 0},
+/*  2 */ { 5, s_6_2, 0, 3, 0},
+/*  3 */ { 4, s_6_3, -1, 2, 0},
+/*  4 */ { 5, s_6_4, 3, 1, 0},
+/*  5 */ { 5, s_6_5, 3, 4, 0}
+};
+
+static const symbol s_7_0[1] = { 0xE1 };
+static const symbol s_7_1[1] = { 0xE9 };
+
+static const struct among a_7[2] =
+{
+/*  0 */ { 1, s_7_0, -1, 1, 0},
+/*  1 */ { 1, s_7_1, -1, 2, 0}
+};
+
+static const symbol s_8_0[1] = { 'k' };
+static const symbol s_8_1[2] = { 'a', 'k' };
+static const symbol s_8_2[2] = { 'e', 'k' };
+static const symbol s_8_3[2] = { 'o', 'k' };
+static const symbol s_8_4[2] = { 0xE1, 'k' };
+static const symbol s_8_5[2] = { 0xE9, 'k' };
+static const symbol s_8_6[2] = { 0xF6, 'k' };
+
+static const struct among a_8[7] =
+{
+/*  0 */ { 1, s_8_0, -1, 7, 0},
+/*  1 */ { 2, s_8_1, 0, 4, 0},
+/*  2 */ { 2, s_8_2, 0, 6, 0},
+/*  3 */ { 2, s_8_3, 0, 5, 0},
+/*  4 */ { 2, s_8_4, 0, 1, 0},
+/*  5 */ { 2, s_8_5, 0, 2, 0},
+/*  6 */ { 2, s_8_6, 0, 3, 0}
+};
+
+static const symbol s_9_0[2] = { 0xE9, 'i' };
+static const symbol s_9_1[3] = { 0xE1, 0xE9, 'i' };
+static const symbol s_9_2[3] = { 0xE9, 0xE9, 'i' };
+static const symbol s_9_3[1] = { 0xE9 };
+static const symbol s_9_4[2] = { 'k', 0xE9 };
+static const symbol s_9_5[3] = { 'a', 'k', 0xE9 };
+static const symbol s_9_6[3] = { 'e', 'k', 0xE9 };
+static const symbol s_9_7[3] = { 'o', 'k', 0xE9 };
+static const symbol s_9_8[3] = { 0xE1, 'k', 0xE9 };
+static const symbol s_9_9[3] = { 0xE9, 'k', 0xE9 };
+static const symbol s_9_10[3] = { 0xF6, 'k', 0xE9 };
+static const symbol s_9_11[2] = { 0xE9, 0xE9 };
+
+static const struct among a_9[12] =
+{
+/*  0 */ { 2, s_9_0, -1, 7, 0},
+/*  1 */ { 3, s_9_1, 0, 6, 0},
+/*  2 */ { 3, s_9_2, 0, 5, 0},
+/*  3 */ { 1, s_9_3, -1, 9, 0},
+/*  4 */ { 2, s_9_4, 3, 4, 0},
+/*  5 */ { 3, s_9_5, 4, 1, 0},
+/*  6 */ { 3, s_9_6, 4, 1, 0},
+/*  7 */ { 3, s_9_7, 4, 1, 0},
+/*  8 */ { 3, s_9_8, 4, 3, 0},
+/*  9 */ { 3, s_9_9, 4, 2, 0},
+/* 10 */ { 3, s_9_10, 4, 1, 0},
+/* 11 */ { 2, s_9_11, 3, 8, 0}
+};
+
+static const symbol s_10_0[1] = { 'a' };
+static const symbol s_10_1[2] = { 'j', 'a' };
+static const symbol s_10_2[1] = { 'd' };
+static const symbol s_10_3[2] = { 'a', 'd' };
+static const symbol s_10_4[2] = { 'e', 'd' };
+static const symbol s_10_5[2] = { 'o', 'd' };
+static const symbol s_10_6[2] = { 0xE1, 'd' };
+static const symbol s_10_7[2] = { 0xE9, 'd' };
+static const symbol s_10_8[2] = { 0xF6, 'd' };
+static const symbol s_10_9[1] = { 'e' };
+static const symbol s_10_10[2] = { 'j', 'e' };
+static const symbol s_10_11[2] = { 'n', 'k' };
+static const symbol s_10_12[3] = { 'u', 'n', 'k' };
+static const symbol s_10_13[3] = { 0xE1, 'n', 'k' };
+static const symbol s_10_14[3] = { 0xE9, 'n', 'k' };
+static const symbol s_10_15[3] = { 0xFC, 'n', 'k' };
+static const symbol s_10_16[2] = { 'u', 'k' };
+static const symbol s_10_17[3] = { 'j', 'u', 'k' };
+static const symbol s_10_18[4] = { 0xE1, 'j', 'u', 'k' };
+static const symbol s_10_19[2] = { 0xFC, 'k' };
+static const symbol s_10_20[3] = { 'j', 0xFC, 'k' };
+static const symbol s_10_21[4] = { 0xE9, 'j', 0xFC, 'k' };
+static const symbol s_10_22[1] = { 'm' };
+static const symbol s_10_23[2] = { 'a', 'm' };
+static const symbol s_10_24[2] = { 'e', 'm' };
+static const symbol s_10_25[2] = { 'o', 'm' };
+static const symbol s_10_26[2] = { 0xE1, 'm' };
+static const symbol s_10_27[2] = { 0xE9, 'm' };
+static const symbol s_10_28[1] = { 'o' };
+static const symbol s_10_29[1] = { 0xE1 };
+static const symbol s_10_30[1] = { 0xE9 };
+
+static const struct among a_10[31] =
+{
+/*  0 */ { 1, s_10_0, -1, 18, 0},
+/*  1 */ { 2, s_10_1, 0, 17, 0},
+/*  2 */ { 1, s_10_2, -1, 16, 0},
+/*  3 */ { 2, s_10_3, 2, 13, 0},
+/*  4 */ { 2, s_10_4, 2, 13, 0},
+/*  5 */ { 2, s_10_5, 2, 13, 0},
+/*  6 */ { 2, s_10_6, 2, 14, 0},
+/*  7 */ { 2, s_10_7, 2, 15, 0},
+/*  8 */ { 2, s_10_8, 2, 13, 0},
+/*  9 */ { 1, s_10_9, -1, 18, 0},
+/* 10 */ { 2, s_10_10, 9, 17, 0},
+/* 11 */ { 2, s_10_11, -1, 4, 0},
+/* 12 */ { 3, s_10_12, 11, 1, 0},
+/* 13 */ { 3, s_10_13, 11, 2, 0},
+/* 14 */ { 3, s_10_14, 11, 3, 0},
+/* 15 */ { 3, s_10_15, 11, 1, 0},
+/* 16 */ { 2, s_10_16, -1, 8, 0},
+/* 17 */ { 3, s_10_17, 16, 7, 0},
+/* 18 */ { 4, s_10_18, 17, 5, 0},
+/* 19 */ { 2, s_10_19, -1, 8, 0},
+/* 20 */ { 3, s_10_20, 19, 7, 0},
+/* 21 */ { 4, s_10_21, 20, 6, 0},
+/* 22 */ { 1, s_10_22, -1, 12, 0},
+/* 23 */ { 2, s_10_23, 22, 9, 0},
+/* 24 */ { 2, s_10_24, 22, 9, 0},
+/* 25 */ { 2, s_10_25, 22, 9, 0},
+/* 26 */ { 2, s_10_26, 22, 10, 0},
+/* 27 */ { 2, s_10_27, 22, 11, 0},
+/* 28 */ { 1, s_10_28, -1, 18, 0},
+/* 29 */ { 1, s_10_29, -1, 19, 0},
+/* 30 */ { 1, s_10_30, -1, 20, 0}
+};
+
+static const symbol s_11_0[2] = { 'i', 'd' };
+static const symbol s_11_1[3] = { 'a', 'i', 'd' };
+static const symbol s_11_2[4] = { 'j', 'a', 'i', 'd' };
+static const symbol s_11_3[3] = { 'e', 'i', 'd' };
+static const symbol s_11_4[4] = { 'j', 'e', 'i', 'd' };
+static const symbol s_11_5[3] = { 0xE1, 'i', 'd' };
+static const symbol s_11_6[3] = { 0xE9, 'i', 'd' };
+static const symbol s_11_7[1] = { 'i' };
+static const symbol s_11_8[2] = { 'a', 'i' };
+static const symbol s_11_9[3] = { 'j', 'a', 'i' };
+static const symbol s_11_10[2] = { 'e', 'i' };
+static const symbol s_11_11[3] = { 'j', 'e', 'i' };
+static const symbol s_11_12[2] = { 0xE1, 'i' };
+static const symbol s_11_13[2] = { 0xE9, 'i' };
+static const symbol s_11_14[4] = { 'i', 't', 'e', 'k' };
+static const symbol s_11_15[5] = { 'e', 'i', 't', 'e', 'k' };
+static const symbol s_11_16[6] = { 'j', 'e', 'i', 't', 'e', 'k' };
+static const symbol s_11_17[5] = { 0xE9, 'i', 't', 'e', 'k' };
+static const symbol s_11_18[2] = { 'i', 'k' };
+static const symbol s_11_19[3] = { 'a', 'i', 'k' };
+static const symbol s_11_20[4] = { 'j', 'a', 'i', 'k' };
+static const symbol s_11_21[3] = { 'e', 'i', 'k' };
+static const symbol s_11_22[4] = { 'j', 'e', 'i', 'k' };
+static const symbol s_11_23[3] = { 0xE1, 'i', 'k' };
+static const symbol s_11_24[3] = { 0xE9, 'i', 'k' };
+static const symbol s_11_25[3] = { 'i', 'n', 'k' };
+static const symbol s_11_26[4] = { 'a', 'i', 'n', 'k' };
+static const symbol s_11_27[5] = { 'j', 'a', 'i', 'n', 'k' };
+static const symbol s_11_28[4] = { 'e', 'i', 'n', 'k' };
+static const symbol s_11_29[5] = { 'j', 'e', 'i', 'n', 'k' };
+static const symbol s_11_30[4] = { 0xE1, 'i', 'n', 'k' };
+static const symbol s_11_31[4] = { 0xE9, 'i', 'n', 'k' };
+static const symbol s_11_32[5] = { 'a', 'i', 't', 'o', 'k' };
+static const symbol s_11_33[6] = { 'j', 'a', 'i', 't', 'o', 'k' };
+static const symbol s_11_34[5] = { 0xE1, 'i', 't', 'o', 'k' };
+static const symbol s_11_35[2] = { 'i', 'm' };
+static const symbol s_11_36[3] = { 'a', 'i', 'm' };
+static const symbol s_11_37[4] = { 'j', 'a', 'i', 'm' };
+static const symbol s_11_38[3] = { 'e', 'i', 'm' };
+static const symbol s_11_39[4] = { 'j', 'e', 'i', 'm' };
+static const symbol s_11_40[3] = { 0xE1, 'i', 'm' };
+static const symbol s_11_41[3] = { 0xE9, 'i', 'm' };
+
+static const struct among a_11[42] =
+{
+/*  0 */ { 2, s_11_0, -1, 10, 0},
+/*  1 */ { 3, s_11_1, 0, 9, 0},
+/*  2 */ { 4, s_11_2, 1, 6, 0},
+/*  3 */ { 3, s_11_3, 0, 9, 0},
+/*  4 */ { 4, s_11_4, 3, 6, 0},
+/*  5 */ { 3, s_11_5, 0, 7, 0},
+/*  6 */ { 3, s_11_6, 0, 8, 0},
+/*  7 */ { 1, s_11_7, -1, 15, 0},
+/*  8 */ { 2, s_11_8, 7, 14, 0},
+/*  9 */ { 3, s_11_9, 8, 11, 0},
+/* 10 */ { 2, s_11_10, 7, 14, 0},
+/* 11 */ { 3, s_11_11, 10, 11, 0},
+/* 12 */ { 2, s_11_12, 7, 12, 0},
+/* 13 */ { 2, s_11_13, 7, 13, 0},
+/* 14 */ { 4, s_11_14, -1, 24, 0},
+/* 15 */ { 5, s_11_15, 14, 21, 0},
+/* 16 */ { 6, s_11_16, 15, 20, 0},
+/* 17 */ { 5, s_11_17, 14, 23, 0},
+/* 18 */ { 2, s_11_18, -1, 29, 0},
+/* 19 */ { 3, s_11_19, 18, 26, 0},
+/* 20 */ { 4, s_11_20, 19, 25, 0},
+/* 21 */ { 3, s_11_21, 18, 26, 0},
+/* 22 */ { 4, s_11_22, 21, 25, 0},
+/* 23 */ { 3, s_11_23, 18, 27, 0},
+/* 24 */ { 3, s_11_24, 18, 28, 0},
+/* 25 */ { 3, s_11_25, -1, 20, 0},
+/* 26 */ { 4, s_11_26, 25, 17, 0},
+/* 27 */ { 5, s_11_27, 26, 16, 0},
+/* 28 */ { 4, s_11_28, 25, 17, 0},
+/* 29 */ { 5, s_11_29, 28, 16, 0},
+/* 30 */ { 4, s_11_30, 25, 18, 0},
+/* 31 */ { 4, s_11_31, 25, 19, 0},
+/* 32 */ { 5, s_11_32, -1, 21, 0},
+/* 33 */ { 6, s_11_33, 32, 20, 0},
+/* 34 */ { 5, s_11_34, -1, 22, 0},
+/* 35 */ { 2, s_11_35, -1, 5, 0},
+/* 36 */ { 3, s_11_36, 35, 4, 0},
+/* 37 */ { 4, s_11_37, 36, 1, 0},
+/* 38 */ { 3, s_11_38, 35, 4, 0},
+/* 39 */ { 4, s_11_39, 38, 1, 0},
+/* 40 */ { 3, s_11_40, 35, 2, 0},
+/* 41 */ { 3, s_11_41, 35, 3, 0}
+};
+
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 52, 14 };
+
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 'e' };
+static const symbol s_3[] = { 'a' };
+static const symbol s_4[] = { 'a' };
+static const symbol s_5[] = { 'a' };
+static const symbol s_6[] = { 'e' };
+static const symbol s_7[] = { 'a' };
+static const symbol s_8[] = { 'e' };
+static const symbol s_9[] = { 'e' };
+static const symbol s_10[] = { 'a' };
+static const symbol s_11[] = { 'e' };
+static const symbol s_12[] = { 'a' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'a' };
+static const symbol s_15[] = { 'e' };
+static const symbol s_16[] = { 'a' };
+static const symbol s_17[] = { 'e' };
+static const symbol s_18[] = { 'a' };
+static const symbol s_19[] = { 'e' };
+static const symbol s_20[] = { 'a' };
+static const symbol s_21[] = { 'e' };
+static const symbol s_22[] = { 'a' };
+static const symbol s_23[] = { 'e' };
+static const symbol s_24[] = { 'a' };
+static const symbol s_25[] = { 'e' };
+static const symbol s_26[] = { 'a' };
+static const symbol s_27[] = { 'e' };
+static const symbol s_28[] = { 'a' };
+static const symbol s_29[] = { 'e' };
+static const symbol s_30[] = { 'a' };
+static const symbol s_31[] = { 'e' };
+static const symbol s_32[] = { 'a' };
+static const symbol s_33[] = { 'e' };
+static const symbol s_34[] = { 'a' };
+static const symbol s_35[] = { 'e' };
+
+static int r_mark_regions(struct SN_env * z) {
+    z->I[0] = z->l;
+    {   int c1 = z->c; /* or, line 51 */
+        if (in_grouping(z, g_v, 97, 252, 0)) goto lab1;
+        if (in_grouping(z, g_v, 97, 252, 1) < 0) goto lab1; /* goto */ /* non v, line 48 */
+        {   int c2 = z->c; /* or, line 49 */
+            if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 3 || !((101187584 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab3;
+            if (!(find_among(z, a_0, 8))) goto lab3; /* among, line 49 */
+            goto lab2;
+        lab3:
+            z->c = c2;
+            if (z->c >= z->l) goto lab1;
+            z->c++; /* next, line 49 */
+        }
+    lab2:
+        z->I[0] = z->c; /* setmark p1, line 50 */
+        goto lab0;
+    lab1:
+        z->c = c1;
+        if (out_grouping(z, g_v, 97, 252, 0)) return 0;
+        {    /* gopast */ /* grouping v, line 53 */
+            int ret = out_grouping(z, g_v, 97, 252, 1);
+            if (ret < 0) return 0;
+            z->c += ret;
+        }
+        z->I[0] = z->c; /* setmark p1, line 53 */
+    }
+lab0:
+    return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+    if (!(z->I[0] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_v_ending(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 61 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 225 && z->p[z->c - 1] != 233)) return 0;
+    among_var = find_among_b(z, a_1, 2); /* substring, line 61 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 61 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 61 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_0); /* <-, line 62 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_1); /* <-, line 63 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_double(struct SN_env * z) {
+    {   int m_test = z->l - z->c; /* test, line 68 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((106790108 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+        if (!(find_among_b(z, a_2, 23))) return 0; /* among, line 68 */
+        z->c = z->l - m_test;
+    }
+    return 1;
+}
+
+static int r_undouble(struct SN_env * z) {
+    if (z->c <= z->lb) return 0;
+    z->c--; /* next, line 73 */
+    z->ket = z->c; /* [, line 73 */
+    {   int ret = z->c - 1;
+        if (z->lb > ret || ret > z->l) return 0;
+        z->c = ret; /* hop, line 73 */
+    }
+    z->bra = z->c; /* ], line 73 */
+    {   int ret = slice_del(z); /* delete, line 73 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_instrum(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 77 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] != 108) return 0;
+    among_var = find_among_b(z, a_3, 2); /* substring, line 77 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 77 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 77 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 78 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 79 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    {   int ret = slice_del(z); /* delete, line 81 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = r_undouble(z);
+        if (ret == 0) return 0; /* call undouble, line 82 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_case(struct SN_env * z) {
+    z->ket = z->c; /* [, line 87 */
+    if (!(find_among_b(z, a_4, 44))) return 0; /* substring, line 87 */
+    z->bra = z->c; /* ], line 87 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 87 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = slice_del(z); /* delete, line 111 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = r_v_ending(z);
+        if (ret == 0) return 0; /* call v_ending, line 112 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_case_special(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 116 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 110 && z->p[z->c - 1] != 116)) return 0;
+    among_var = find_among_b(z, a_5, 3); /* substring, line 116 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 116 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 116 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_2); /* <-, line 117 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_3); /* <-, line 118 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_4); /* <-, line 119 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_case_other(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 124 */
+    if (z->c - 3 <= z->lb || z->p[z->c - 1] != 108) return 0;
+    among_var = find_among_b(z, a_6, 6); /* substring, line 124 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 124 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 124 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 125 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_del(z); /* delete, line 126 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_5); /* <-, line 127 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_from_s(z, 1, s_6); /* <-, line 128 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_factive(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 133 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 225 && z->p[z->c - 1] != 233)) return 0;
+    among_var = find_among_b(z, a_7, 2); /* substring, line 133 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 133 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 133 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 134 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 135 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    {   int ret = slice_del(z); /* delete, line 137 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = r_undouble(z);
+        if (ret == 0) return 0; /* call undouble, line 138 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_plural(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 142 */
+    if (z->c <= z->lb || z->p[z->c - 1] != 107) return 0;
+    among_var = find_among_b(z, a_8, 7); /* substring, line 142 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 142 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 142 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_7); /* <-, line 143 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_8); /* <-, line 144 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_del(z); /* delete, line 145 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 146 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_del(z); /* delete, line 147 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_del(z); /* delete, line 148 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_del(z); /* delete, line 149 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_owned(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 154 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 233)) return 0;
+    among_var = find_among_b(z, a_9, 12); /* substring, line 154 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 154 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 154 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 155 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_9); /* <-, line 156 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_10); /* <-, line 157 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 158 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_from_s(z, 1, s_11); /* <-, line 159 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_from_s(z, 1, s_12); /* <-, line 160 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_del(z); /* delete, line 161 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 8:
+            {   int ret = slice_from_s(z, 1, s_13); /* <-, line 162 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 9:
+            {   int ret = slice_del(z); /* delete, line 163 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_sing_owner(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 168 */
+    among_var = find_among_b(z, a_10, 31); /* substring, line 168 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 168 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 168 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 169 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_14); /* <-, line 170 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_15); /* <-, line 171 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 172 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_from_s(z, 1, s_16); /* <-, line 173 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_from_s(z, 1, s_17); /* <-, line 174 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_del(z); /* delete, line 175 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 8:
+            {   int ret = slice_del(z); /* delete, line 176 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 9:
+            {   int ret = slice_del(z); /* delete, line 177 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 10:
+            {   int ret = slice_from_s(z, 1, s_18); /* <-, line 178 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 11:
+            {   int ret = slice_from_s(z, 1, s_19); /* <-, line 179 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 12:
+            {   int ret = slice_del(z); /* delete, line 180 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 13:
+            {   int ret = slice_del(z); /* delete, line 181 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 14:
+            {   int ret = slice_from_s(z, 1, s_20); /* <-, line 182 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 15:
+            {   int ret = slice_from_s(z, 1, s_21); /* <-, line 183 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 16:
+            {   int ret = slice_del(z); /* delete, line 184 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 17:
+            {   int ret = slice_del(z); /* delete, line 185 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 18:
+            {   int ret = slice_del(z); /* delete, line 186 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 19:
+            {   int ret = slice_from_s(z, 1, s_22); /* <-, line 187 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 20:
+            {   int ret = slice_from_s(z, 1, s_23); /* <-, line 188 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_plur_owner(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 193 */
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((10768 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_11, 42); /* substring, line 193 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 193 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 193 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 194 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_24); /* <-, line 195 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_25); /* <-, line 196 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 197 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_del(z); /* delete, line 198 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_del(z); /* delete, line 199 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_from_s(z, 1, s_26); /* <-, line 200 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 8:
+            {   int ret = slice_from_s(z, 1, s_27); /* <-, line 201 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 9:
+            {   int ret = slice_del(z); /* delete, line 202 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 10:
+            {   int ret = slice_del(z); /* delete, line 203 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 11:
+            {   int ret = slice_del(z); /* delete, line 204 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 12:
+            {   int ret = slice_from_s(z, 1, s_28); /* <-, line 205 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 13:
+            {   int ret = slice_from_s(z, 1, s_29); /* <-, line 206 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 14:
+            {   int ret = slice_del(z); /* delete, line 207 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 15:
+            {   int ret = slice_del(z); /* delete, line 208 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 16:
+            {   int ret = slice_del(z); /* delete, line 209 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 17:
+            {   int ret = slice_del(z); /* delete, line 210 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 18:
+            {   int ret = slice_from_s(z, 1, s_30); /* <-, line 211 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 19:
+            {   int ret = slice_from_s(z, 1, s_31); /* <-, line 212 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 20:
+            {   int ret = slice_del(z); /* delete, line 214 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 21:
+            {   int ret = slice_del(z); /* delete, line 215 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 22:
+            {   int ret = slice_from_s(z, 1, s_32); /* <-, line 216 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 23:
+            {   int ret = slice_from_s(z, 1, s_33); /* <-, line 217 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 24:
+            {   int ret = slice_del(z); /* delete, line 218 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 25:
+            {   int ret = slice_del(z); /* delete, line 219 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 26:
+            {   int ret = slice_del(z); /* delete, line 220 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 27:
+            {   int ret = slice_from_s(z, 1, s_34); /* <-, line 221 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 28:
+            {   int ret = slice_from_s(z, 1, s_35); /* <-, line 222 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 29:
+            {   int ret = slice_del(z); /* delete, line 223 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+extern int hungarian_ISO_8859_1_stem(struct SN_env * z) {
+    {   int c1 = z->c; /* do, line 229 */
+        {   int ret = r_mark_regions(z);
+            if (ret == 0) goto lab0; /* call mark_regions, line 229 */
+            if (ret < 0) return ret;
+        }
+    lab0:
+        z->c = c1;
+    }
+    z->lb = z->c; z->c = z->l; /* backwards, line 230 */
+
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 231 */
+        {   int ret = r_instrum(z);
+            if (ret == 0) goto lab1; /* call instrum, line 231 */
+            if (ret < 0) return ret;
+        }
+    lab1:
+        z->c = z->l - m2;
+    }
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 232 */
+        {   int ret = r_case(z);
+            if (ret == 0) goto lab2; /* call case, line 232 */
+            if (ret < 0) return ret;
+        }
+    lab2:
+        z->c = z->l - m3;
+    }
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 233 */
+        {   int ret = r_case_special(z);
+            if (ret == 0) goto lab3; /* call case_special, line 233 */
+            if (ret < 0) return ret;
+        }
+    lab3:
+        z->c = z->l - m4;
+    }
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 234 */
+        {   int ret = r_case_other(z);
+            if (ret == 0) goto lab4; /* call case_other, line 234 */
+            if (ret < 0) return ret;
+        }
+    lab4:
+        z->c = z->l - m5;
+    }
+    {   int m6 = z->l - z->c; (void)m6; /* do, line 235 */
+        {   int ret = r_factive(z);
+            if (ret == 0) goto lab5; /* call factive, line 235 */
+            if (ret < 0) return ret;
+        }
+    lab5:
+        z->c = z->l - m6;
+    }
+    {   int m7 = z->l - z->c; (void)m7; /* do, line 236 */
+        {   int ret = r_owned(z);
+            if (ret == 0) goto lab6; /* call owned, line 236 */
+            if (ret < 0) return ret;
+        }
+    lab6:
+        z->c = z->l - m7;
+    }
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 237 */
+        {   int ret = r_sing_owner(z);
+            if (ret == 0) goto lab7; /* call sing_owner, line 237 */
+            if (ret < 0) return ret;
+        }
+    lab7:
+        z->c = z->l - m8;
+    }
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 238 */
+        {   int ret = r_plur_owner(z);
+            if (ret == 0) goto lab8; /* call plur_owner, line 238 */
+            if (ret < 0) return ret;
+        }
+    lab8:
+        z->c = z->l - m9;
+    }
+    {   int m10 = z->l - z->c; (void)m10; /* do, line 239 */
+        {   int ret = r_plural(z);
+            if (ret == 0) goto lab9; /* call plural, line 239 */
+            if (ret < 0) return ret;
+        }
+    lab9:
+        z->c = z->l - m10;
+    }
+    z->c = z->lb;
+    return 1;
+}
+
+extern struct SN_env * hungarian_ISO_8859_1_create_env(void) { return SN_create_env(0, 1, 0); }
+
+extern void hungarian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_hungarian.h b/libstemmer_c/src_c/stem_ISO_8859_1_hungarian.h
new file mode 100644
index 0000000..c3177e5
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_hungarian.h
@@ -0,0 +1,16 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct SN_env * hungarian_ISO_8859_1_create_env(void);
+extern void hungarian_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int hungarian_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_italian.c b/libstemmer_c/src_c/stem_ISO_8859_1_italian.c
index 9fe9776..3151ef5 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_italian.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_italian.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int italian_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_vowel_suffix(struct SN_env * z);
 static int r_verb_suffix(struct SN_env * z);
 static int r_standard_suffix(struct SN_env * z);
@@ -14,18 +20,26 @@ static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * italian_ISO_8859_1_create_env(void);
 extern void italian_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_1[2] = { 'q', 'u' };
-static symbol s_0_2[1] = { 0xE1 };
-static symbol s_0_3[1] = { 0xE9 };
-static symbol s_0_4[1] = { 0xED };
-static symbol s_0_5[1] = { 0xF3 };
-static symbol s_0_6[1] = { 0xFA };
 
-static struct among a_0[7] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[2] = { 'q', 'u' };
+static const symbol s_0_2[1] = { 0xE1 };
+static const symbol s_0_3[1] = { 0xE9 };
+static const symbol s_0_4[1] = { 0xED };
+static const symbol s_0_5[1] = { 0xF3 };
+static const symbol s_0_6[1] = { 0xFA };
+
+static const struct among a_0[7] =
 {
 /*  0 */ { 0, 0, -1, 7, 0},
 /*  1 */ { 2, s_0_1, 0, 6, 0},
@@ -36,55 +50,55 @@ static struct among a_0[7] =
 /*  6 */ { 1, s_0_6, 0, 5, 0}
 };
 
-static symbol s_1_1[1] = { 'I' };
-static symbol s_1_2[1] = { 'U' };
+static const symbol s_1_1[1] = { 'I' };
+static const symbol s_1_2[1] = { 'U' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 1, s_1_1, 0, 1, 0},
 /*  2 */ { 1, s_1_2, 0, 2, 0}
 };
 
-static symbol s_2_0[2] = { 'l', 'a' };
-static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' };
-static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' };
-static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' };
-static symbol s_2_4[4] = { 't', 'e', 'l', 'a' };
-static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' };
-static symbol s_2_6[2] = { 'l', 'e' };
-static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' };
-static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' };
-static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' };
-static symbol s_2_10[4] = { 't', 'e', 'l', 'e' };
-static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' };
-static symbol s_2_12[2] = { 'n', 'e' };
-static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' };
-static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' };
-static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' };
-static symbol s_2_16[4] = { 's', 'e', 'n', 'e' };
-static symbol s_2_17[4] = { 't', 'e', 'n', 'e' };
-static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' };
-static symbol s_2_19[2] = { 'c', 'i' };
-static symbol s_2_20[2] = { 'l', 'i' };
-static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' };
-static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' };
-static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' };
-static symbol s_2_24[4] = { 't', 'e', 'l', 'i' };
-static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' };
-static symbol s_2_26[3] = { 'g', 'l', 'i' };
-static symbol s_2_27[2] = { 'm', 'i' };
-static symbol s_2_28[2] = { 's', 'i' };
-static symbol s_2_29[2] = { 't', 'i' };
-static symbol s_2_30[2] = { 'v', 'i' };
-static symbol s_2_31[2] = { 'l', 'o' };
-static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' };
-static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' };
-static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' };
-static symbol s_2_35[4] = { 't', 'e', 'l', 'o' };
-static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' };
+static const symbol s_2_0[2] = { 'l', 'a' };
+static const symbol s_2_1[4] = { 'c', 'e', 'l', 'a' };
+static const symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' };
+static const symbol s_2_3[4] = { 'm', 'e', 'l', 'a' };
+static const symbol s_2_4[4] = { 't', 'e', 'l', 'a' };
+static const symbol s_2_5[4] = { 'v', 'e', 'l', 'a' };
+static const symbol s_2_6[2] = { 'l', 'e' };
+static const symbol s_2_7[4] = { 'c', 'e', 'l', 'e' };
+static const symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' };
+static const symbol s_2_9[4] = { 'm', 'e', 'l', 'e' };
+static const symbol s_2_10[4] = { 't', 'e', 'l', 'e' };
+static const symbol s_2_11[4] = { 'v', 'e', 'l', 'e' };
+static const symbol s_2_12[2] = { 'n', 'e' };
+static const symbol s_2_13[4] = { 'c', 'e', 'n', 'e' };
+static const symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' };
+static const symbol s_2_15[4] = { 'm', 'e', 'n', 'e' };
+static const symbol s_2_16[4] = { 's', 'e', 'n', 'e' };
+static const symbol s_2_17[4] = { 't', 'e', 'n', 'e' };
+static const symbol s_2_18[4] = { 'v', 'e', 'n', 'e' };
+static const symbol s_2_19[2] = { 'c', 'i' };
+static const symbol s_2_20[2] = { 'l', 'i' };
+static const symbol s_2_21[4] = { 'c', 'e', 'l', 'i' };
+static const symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' };
+static const symbol s_2_23[4] = { 'm', 'e', 'l', 'i' };
+static const symbol s_2_24[4] = { 't', 'e', 'l', 'i' };
+static const symbol s_2_25[4] = { 'v', 'e', 'l', 'i' };
+static const symbol s_2_26[3] = { 'g', 'l', 'i' };
+static const symbol s_2_27[2] = { 'm', 'i' };
+static const symbol s_2_28[2] = { 's', 'i' };
+static const symbol s_2_29[2] = { 't', 'i' };
+static const symbol s_2_30[2] = { 'v', 'i' };
+static const symbol s_2_31[2] = { 'l', 'o' };
+static const symbol s_2_32[4] = { 'c', 'e', 'l', 'o' };
+static const symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' };
+static const symbol s_2_34[4] = { 'm', 'e', 'l', 'o' };
+static const symbol s_2_35[4] = { 't', 'e', 'l', 'o' };
+static const symbol s_2_36[4] = { 'v', 'e', 'l', 'o' };
 
-static struct among a_2[37] =
+static const struct among a_2[37] =
 {
 /*  0 */ { 2, s_2_0, -1, -1, 0},
 /*  1 */ { 4, s_2_1, 0, -1, 0},
@@ -125,13 +139,13 @@ static struct among a_2[37] =
 /* 36 */ { 4, s_2_36, 31, -1, 0}
 };
 
-static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' };
-static symbol s_3_2[2] = { 'a', 'r' };
-static symbol s_3_3[2] = { 'e', 'r' };
-static symbol s_3_4[2] = { 'i', 'r' };
+static const symbol s_3_0[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_3_1[4] = { 'e', 'n', 'd', 'o' };
+static const symbol s_3_2[2] = { 'a', 'r' };
+static const symbol s_3_3[2] = { 'e', 'r' };
+static const symbol s_3_4[2] = { 'i', 'r' };
 
-static struct among a_3[5] =
+static const struct among a_3[5] =
 {
 /*  0 */ { 4, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0},
@@ -140,12 +154,12 @@ static struct among a_3[5] =
 /*  4 */ { 2, s_3_4, -1, 2, 0}
 };
 
-static symbol s_4_0[2] = { 'i', 'c' };
-static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_4_2[2] = { 'o', 's' };
-static symbol s_4_3[2] = { 'i', 'v' };
+static const symbol s_4_0[2] = { 'i', 'c' };
+static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_4_2[2] = { 'o', 's' };
+static const symbol s_4_3[2] = { 'i', 'v' };
 
-static struct among a_4[4] =
+static const struct among a_4[4] =
 {
 /*  0 */ { 2, s_4_0, -1, -1, 0},
 /*  1 */ { 4, s_4_1, -1, -1, 0},
@@ -153,70 +167,70 @@ static struct among a_4[4] =
 /*  3 */ { 2, s_4_3, -1, 1, 0}
 };
 
-static symbol s_5_0[2] = { 'i', 'c' };
-static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_5_2[2] = { 'i', 'v' };
+static const symbol s_5_0[2] = { 'i', 'c' };
+static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_5_2[2] = { 'i', 'v' };
 
-static struct among a_5[3] =
+static const struct among a_5[3] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
 /*  2 */ { 2, s_5_2, -1, 1, 0}
 };
 
-static symbol s_6_0[3] = { 'i', 'c', 'a' };
-static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' };
-static symbol s_6_2[3] = { 'o', 's', 'a' };
-static symbol s_6_3[4] = { 'i', 's', 't', 'a' };
-static symbol s_6_4[3] = { 'i', 'v', 'a' };
-static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' };
-static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' };
-static symbol s_6_7[3] = { 'i', 'c', 'e' };
-static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
-static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' };
-static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' };
-static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' };
-static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' };
-static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' };
-static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' };
-static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' };
-static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' };
-static symbol s_6_17[3] = { 'o', 's', 'e' };
-static symbol s_6_18[4] = { 'a', 'n', 't', 'e' };
-static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_21[4] = { 'i', 's', 't', 'e' };
-static symbol s_6_22[3] = { 'i', 'v', 'e' };
-static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' };
-static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' };
-static symbol s_6_25[3] = { 'i', 'c', 'i' };
-static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' };
-static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' };
-static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' };
-static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' };
-static symbol s_6_30[4] = { 'i', 's', 'm', 'i' };
-static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' };
-static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' };
-static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' };
-static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' };
-static symbol s_6_35[3] = { 'o', 's', 'i' };
-static symbol s_6_36[4] = { 'a', 'n', 't', 'i' };
-static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' };
-static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' };
-static symbol s_6_39[4] = { 'i', 's', 't', 'i' };
-static symbol s_6_40[3] = { 'i', 'v', 'i' };
-static symbol s_6_41[3] = { 'i', 'c', 'o' };
-static symbol s_6_42[4] = { 'i', 's', 'm', 'o' };
-static symbol s_6_43[3] = { 'o', 's', 'o' };
-static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
-static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
-static symbol s_6_46[3] = { 'i', 'v', 'o' };
-static symbol s_6_47[3] = { 'i', 't', 0xE0 };
-static symbol s_6_48[4] = { 'i', 's', 't', 0xE0 };
-static symbol s_6_49[4] = { 'i', 's', 't', 0xE8 };
-static symbol s_6_50[4] = { 'i', 's', 't', 0xEC };
+static const symbol s_6_0[3] = { 'i', 'c', 'a' };
+static const symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' };
+static const symbol s_6_2[3] = { 'o', 's', 'a' };
+static const symbol s_6_3[4] = { 'i', 's', 't', 'a' };
+static const symbol s_6_4[3] = { 'i', 'v', 'a' };
+static const symbol s_6_5[4] = { 'a', 'n', 'z', 'a' };
+static const symbol s_6_6[4] = { 'e', 'n', 'z', 'a' };
+static const symbol s_6_7[3] = { 'i', 'c', 'e' };
+static const symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
+static const symbol s_6_9[4] = { 'i', 'c', 'h', 'e' };
+static const symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' };
+static const symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' };
+static const symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' };
+static const symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' };
+static const symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' };
+static const symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' };
+static const symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' };
+static const symbol s_6_17[3] = { 'o', 's', 'e' };
+static const symbol s_6_18[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_21[4] = { 'i', 's', 't', 'e' };
+static const symbol s_6_22[3] = { 'i', 'v', 'e' };
+static const symbol s_6_23[4] = { 'a', 'n', 'z', 'e' };
+static const symbol s_6_24[4] = { 'e', 'n', 'z', 'e' };
+static const symbol s_6_25[3] = { 'i', 'c', 'i' };
+static const symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' };
+static const symbol s_6_27[4] = { 'i', 'c', 'h', 'i' };
+static const symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' };
+static const symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' };
+static const symbol s_6_30[4] = { 'i', 's', 'm', 'i' };
+static const symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' };
+static const symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' };
+static const symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' };
+static const symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' };
+static const symbol s_6_35[3] = { 'o', 's', 'i' };
+static const symbol s_6_36[4] = { 'a', 'n', 't', 'i' };
+static const symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' };
+static const symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' };
+static const symbol s_6_39[4] = { 'i', 's', 't', 'i' };
+static const symbol s_6_40[3] = { 'i', 'v', 'i' };
+static const symbol s_6_41[3] = { 'i', 'c', 'o' };
+static const symbol s_6_42[4] = { 'i', 's', 'm', 'o' };
+static const symbol s_6_43[3] = { 'o', 's', 'o' };
+static const symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_6_46[3] = { 'i', 'v', 'o' };
+static const symbol s_6_47[3] = { 'i', 't', 0xE0 };
+static const symbol s_6_48[4] = { 'i', 's', 't', 0xE0 };
+static const symbol s_6_49[4] = { 'i', 's', 't', 0xE8 };
+static const symbol s_6_50[4] = { 'i', 's', 't', 0xEC };
 
-static struct among a_6[51] =
+static const struct among a_6[51] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 5, s_6_1, -1, 3, 0},
@@ -271,95 +285,95 @@ static struct among a_6[51] =
 /* 50 */ { 4, s_6_50, -1, 1, 0}
 };
 
-static symbol s_7_0[4] = { 'i', 's', 'c', 'a' };
-static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' };
-static symbol s_7_2[3] = { 'a', 't', 'a' };
-static symbol s_7_3[3] = { 'i', 't', 'a' };
-static symbol s_7_4[3] = { 'u', 't', 'a' };
-static symbol s_7_5[3] = { 'a', 'v', 'a' };
-static symbol s_7_6[3] = { 'e', 'v', 'a' };
-static symbol s_7_7[3] = { 'i', 'v', 'a' };
-static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' };
-static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' };
-static symbol s_7_10[4] = { 'i', 's', 'c', 'e' };
-static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' };
-static symbol s_7_12[3] = { 'a', 'r', 'e' };
-static symbol s_7_13[3] = { 'e', 'r', 'e' };
-static symbol s_7_14[3] = { 'i', 'r', 'e' };
-static symbol s_7_15[4] = { 'a', 's', 's', 'e' };
-static symbol s_7_16[3] = { 'a', 't', 'e' };
-static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' };
-static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' };
-static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' };
-static symbol s_7_20[3] = { 'e', 't', 'e' };
-static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' };
-static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' };
-static symbol s_7_23[3] = { 'i', 't', 'e' };
-static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' };
-static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' };
-static symbol s_7_26[3] = { 'u', 't', 'e' };
-static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' };
-static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' };
-static symbol s_7_29[4] = { 'i', 's', 'c', 'i' };
-static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' };
-static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' };
-static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' };
-static symbol s_7_33[4] = { 'a', 's', 's', 'i' };
-static symbol s_7_34[3] = { 'a', 't', 'i' };
-static symbol s_7_35[3] = { 'i', 't', 'i' };
-static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' };
-static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' };
-static symbol s_7_38[3] = { 'u', 't', 'i' };
-static symbol s_7_39[3] = { 'a', 'v', 'i' };
-static symbol s_7_40[3] = { 'e', 'v', 'i' };
-static symbol s_7_41[3] = { 'i', 'v', 'i' };
-static symbol s_7_42[4] = { 'i', 's', 'c', 'o' };
-static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' };
-static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' };
-static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' };
-static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' };
-static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' };
-static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' };
-static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' };
-static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' };
-static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' };
-static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' };
-static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' };
-static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' };
-static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' };
-static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' };
-static symbol s_7_58[3] = { 'a', 'n', 'o' };
-static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' };
-static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' };
-static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' };
-static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' };
-static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' };
-static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' };
-static symbol s_7_65[3] = { 'o', 'n', 'o' };
-static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' };
-static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' };
-static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' };
-static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' };
-static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
-static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
-static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' };
-static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' };
-static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' };
-static symbol s_7_75[3] = { 'a', 't', 'o' };
-static symbol s_7_76[3] = { 'i', 't', 'o' };
-static symbol s_7_77[3] = { 'u', 't', 'o' };
-static symbol s_7_78[3] = { 'a', 'v', 'o' };
-static symbol s_7_79[3] = { 'e', 'v', 'o' };
-static symbol s_7_80[3] = { 'i', 'v', 'o' };
-static symbol s_7_81[2] = { 'a', 'r' };
-static symbol s_7_82[2] = { 'i', 'r' };
-static symbol s_7_83[3] = { 'e', 'r', 0xE0 };
-static symbol s_7_84[3] = { 'i', 'r', 0xE0 };
-static symbol s_7_85[3] = { 'e', 'r', 0xF2 };
-static symbol s_7_86[3] = { 'i', 'r', 0xF2 };
+static const symbol s_7_0[4] = { 'i', 's', 'c', 'a' };
+static const symbol s_7_1[4] = { 'e', 'n', 'd', 'a' };
+static const symbol s_7_2[3] = { 'a', 't', 'a' };
+static const symbol s_7_3[3] = { 'i', 't', 'a' };
+static const symbol s_7_4[3] = { 'u', 't', 'a' };
+static const symbol s_7_5[3] = { 'a', 'v', 'a' };
+static const symbol s_7_6[3] = { 'e', 'v', 'a' };
+static const symbol s_7_7[3] = { 'i', 'v', 'a' };
+static const symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' };
+static const symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' };
+static const symbol s_7_10[4] = { 'i', 's', 'c', 'e' };
+static const symbol s_7_11[4] = { 'e', 'n', 'd', 'e' };
+static const symbol s_7_12[3] = { 'a', 'r', 'e' };
+static const symbol s_7_13[3] = { 'e', 'r', 'e' };
+static const symbol s_7_14[3] = { 'i', 'r', 'e' };
+static const symbol s_7_15[4] = { 'a', 's', 's', 'e' };
+static const symbol s_7_16[3] = { 'a', 't', 'e' };
+static const symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' };
+static const symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' };
+static const symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' };
+static const symbol s_7_20[3] = { 'e', 't', 'e' };
+static const symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' };
+static const symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' };
+static const symbol s_7_23[3] = { 'i', 't', 'e' };
+static const symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' };
+static const symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' };
+static const symbol s_7_26[3] = { 'u', 't', 'e' };
+static const symbol s_7_27[4] = { 'e', 'r', 'a', 'i' };
+static const symbol s_7_28[4] = { 'i', 'r', 'a', 'i' };
+static const symbol s_7_29[4] = { 'i', 's', 'c', 'i' };
+static const symbol s_7_30[4] = { 'e', 'n', 'd', 'i' };
+static const symbol s_7_31[4] = { 'e', 'r', 'e', 'i' };
+static const symbol s_7_32[4] = { 'i', 'r', 'e', 'i' };
+static const symbol s_7_33[4] = { 'a', 's', 's', 'i' };
+static const symbol s_7_34[3] = { 'a', 't', 'i' };
+static const symbol s_7_35[3] = { 'i', 't', 'i' };
+static const symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' };
+static const symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' };
+static const symbol s_7_38[3] = { 'u', 't', 'i' };
+static const symbol s_7_39[3] = { 'a', 'v', 'i' };
+static const symbol s_7_40[3] = { 'e', 'v', 'i' };
+static const symbol s_7_41[3] = { 'i', 'v', 'i' };
+static const symbol s_7_42[4] = { 'i', 's', 'c', 'o' };
+static const symbol s_7_43[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_7_44[4] = { 'e', 'n', 'd', 'o' };
+static const symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' };
+static const symbol s_7_46[4] = { 'i', 'a', 'm', 'o' };
+static const symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' };
+static const symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' };
+static const symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' };
+static const symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' };
+static const symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' };
+static const symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' };
+static const symbol s_7_53[4] = { 'a', 'm', 'm', 'o' };
+static const symbol s_7_54[4] = { 'e', 'm', 'm', 'o' };
+static const symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' };
+static const symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' };
+static const symbol s_7_57[4] = { 'i', 'm', 'm', 'o' };
+static const symbol s_7_58[3] = { 'a', 'n', 'o' };
+static const symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' };
+static const symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' };
+static const symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' };
+static const symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' };
+static const symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' };
+static const symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' };
+static const symbol s_7_65[3] = { 'o', 'n', 'o' };
+static const symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' };
+static const symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' };
+static const symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' };
+static const symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' };
+static const symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
+static const symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
+static const symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' };
+static const symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' };
+static const symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' };
+static const symbol s_7_75[3] = { 'a', 't', 'o' };
+static const symbol s_7_76[3] = { 'i', 't', 'o' };
+static const symbol s_7_77[3] = { 'u', 't', 'o' };
+static const symbol s_7_78[3] = { 'a', 'v', 'o' };
+static const symbol s_7_79[3] = { 'e', 'v', 'o' };
+static const symbol s_7_80[3] = { 'i', 'v', 'o' };
+static const symbol s_7_81[2] = { 'a', 'r' };
+static const symbol s_7_82[2] = { 'i', 'r' };
+static const symbol s_7_83[3] = { 'e', 'r', 0xE0 };
+static const symbol s_7_84[3] = { 'i', 'r', 0xE0 };
+static const symbol s_7_85[3] = { 'e', 'r', 0xF2 };
+static const symbol s_7_86[3] = { 'i', 'r', 0xF2 };
 
-static struct among a_7[87] =
+static const struct among a_7[87] =
 {
 /*  0 */ { 4, s_7_0, -1, 1, 0},
 /*  1 */ { 4, s_7_1, -1, 1, 0},
@@ -450,40 +464,40 @@ static struct among a_7[87] =
 /* 86 */ { 3, s_7_86, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 };
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 };
 
-static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 };
+static const unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 };
 
-static unsigned char g_CG[] = { 17 };
+static const unsigned char g_CG[] = { 17 };
 
-static symbol s_0[] = { 0xE0 };
-static symbol s_1[] = { 0xE8 };
-static symbol s_2[] = { 0xEC };
-static symbol s_3[] = { 0xF2 };
-static symbol s_4[] = { 0xF9 };
-static symbol s_5[] = { 'q', 'U' };
-static symbol s_6[] = { 'u' };
-static symbol s_7[] = { 'U' };
-static symbol s_8[] = { 'i' };
-static symbol s_9[] = { 'I' };
-static symbol s_10[] = { 'i' };
-static symbol s_11[] = { 'u' };
-static symbol s_12[] = { 'e' };
-static symbol s_13[] = { 'i', 'c' };
-static symbol s_14[] = { 'l', 'o', 'g' };
-static symbol s_15[] = { 'u' };
-static symbol s_16[] = { 'e', 'n', 't', 'e' };
-static symbol s_17[] = { 'a', 't' };
-static symbol s_18[] = { 'a', 't' };
-static symbol s_19[] = { 'i', 'c' };
-static symbol s_20[] = { 'i' };
-static symbol s_21[] = { 'h' };
+static const symbol s_0[] = { 0xE0 };
+static const symbol s_1[] = { 0xE8 };
+static const symbol s_2[] = { 0xEC };
+static const symbol s_3[] = { 0xF2 };
+static const symbol s_4[] = { 0xF9 };
+static const symbol s_5[] = { 'q', 'U' };
+static const symbol s_6[] = { 'u' };
+static const symbol s_7[] = { 'U' };
+static const symbol s_8[] = { 'i' };
+static const symbol s_9[] = { 'I' };
+static const symbol s_10[] = { 'i' };
+static const symbol s_11[] = { 'u' };
+static const symbol s_12[] = { 'e' };
+static const symbol s_13[] = { 'i', 'c' };
+static const symbol s_14[] = { 'l', 'o', 'g' };
+static const symbol s_15[] = { 'u' };
+static const symbol s_16[] = { 'e', 'n', 't', 'e' };
+static const symbol s_17[] = { 'a', 't' };
+static const symbol s_18[] = { 'a', 't' };
+static const symbol s_19[] = { 'i', 'c' };
+static const symbol s_20[] = { 'i' };
+static const symbol s_21[] = { 'h' };
 
 static int r_prelude(struct SN_env * z) {
     int among_var;
     {   int c_test = z->c; /* test, line 35 */
         while(1) { /* repeat, line 35 */
-            int c = z->c;
+            int c1 = z->c;
             z->bra = z->c; /* [, line 36 */
             among_var = find_among(z, a_0, 7); /* substring, line 36 */
             if (!(among_var)) goto lab0;
@@ -491,38 +505,32 @@ static int r_prelude(struct SN_env * z) {
             switch(among_var) {
                 case 0: goto lab0;
                 case 1:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_0); /* <-, line 37 */
+                    {   int ret = slice_from_s(z, 1, s_0); /* <-, line 37 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_1); /* <-, line 38 */
+                    {   int ret = slice_from_s(z, 1, s_1); /* <-, line 38 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 3:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_2); /* <-, line 39 */
+                    {   int ret = slice_from_s(z, 1, s_2); /* <-, line 39 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 4:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_3); /* <-, line 40 */
+                    {   int ret = slice_from_s(z, 1, s_3); /* <-, line 40 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 5:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_4); /* <-, line 41 */
+                    {   int ret = slice_from_s(z, 1, s_4); /* <-, line 41 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 6:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_5); /* <-, line 42 */
+                    {   int ret = slice_from_s(z, 2, s_5); /* <-, line 42 */
                         if (ret < 0) return ret;
                     }
                     break;
@@ -533,47 +541,45 @@ static int r_prelude(struct SN_env * z) {
             }
             continue;
         lab0:
-            z->c = c;
+            z->c = c1;
             break;
         }
         z->c = c_test;
     }
     while(1) { /* repeat, line 46 */
-        int c = z->c;
+        int c2 = z->c;
         while(1) { /* goto, line 46 */
-            int c = z->c;
-            if (!(in_grouping(z, g_v, 97, 249))) goto lab2;
+            int c3 = z->c;
+            if (in_grouping(z, g_v, 97, 249, 0)) goto lab2;
             z->bra = z->c; /* [, line 47 */
-            {   int c = z->c; /* or, line 47 */
+            {   int c4 = z->c; /* or, line 47 */
                 if (!(eq_s(z, 1, s_6))) goto lab4;
                 z->ket = z->c; /* ], line 47 */
-                if (!(in_grouping(z, g_v, 97, 249))) goto lab4;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_7); /* <-, line 47 */
+                if (in_grouping(z, g_v, 97, 249, 0)) goto lab4;
+                {   int ret = slice_from_s(z, 1, s_7); /* <-, line 47 */
                     if (ret < 0) return ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
+                z->c = c4;
                 if (!(eq_s(z, 1, s_8))) goto lab2;
                 z->ket = z->c; /* ], line 48 */
-                if (!(in_grouping(z, g_v, 97, 249))) goto lab2;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_9); /* <-, line 48 */
+                if (in_grouping(z, g_v, 97, 249, 0)) goto lab2;
+                {   int ret = slice_from_s(z, 1, s_9); /* <-, line 48 */
                     if (ret < 0) return ret;
                 }
             }
         lab3:
-            z->c = c;
+            z->c = c3;
             break;
         lab2:
-            z->c = c;
+            z->c = c3;
             if (z->c >= z->l) goto lab1;
             z->c++; /* goto, line 46 */
         }
         continue;
     lab1:
-        z->c = c;
+        z->c = c2;
         break;
     }
     return 1;
@@ -583,92 +589,78 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 58 */
-        {   int c = z->c; /* or, line 60 */
-            if (!(in_grouping(z, g_v, 97, 249))) goto lab2;
-            {   int c = z->c; /* or, line 59 */
-                if (!(out_grouping(z, g_v, 97, 249))) goto lab4;
-                while(1) { /* gopast, line 59 */
-                    if (!(in_grouping(z, g_v, 97, 249))) goto lab5;
-                    break;
-                lab5:
-                    if (z->c >= z->l) goto lab4;
-                    z->c++; /* gopast, line 59 */
+    {   int c1 = z->c; /* do, line 58 */
+        {   int c2 = z->c; /* or, line 60 */
+            if (in_grouping(z, g_v, 97, 249, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 59 */
+                if (out_grouping(z, g_v, 97, 249, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 59 */
+                    int ret = out_grouping(z, g_v, 97, 249, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
-                if (!(in_grouping(z, g_v, 97, 249))) goto lab2;
-                while(1) { /* gopast, line 59 */
-                    if (!(out_grouping(z, g_v, 97, 249))) goto lab6;
-                    break;
-                lab6:
-                    if (z->c >= z->l) goto lab2;
-                    z->c++; /* gopast, line 59 */
+                z->c = c3;
+                if (in_grouping(z, g_v, 97, 249, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 59 */
+                    int ret = in_grouping(z, g_v, 97, 249, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
                 }
             }
         lab3:
             goto lab1;
         lab2:
-            z->c = c;
-            if (!(out_grouping(z, g_v, 97, 249))) goto lab0;
-            {   int c = z->c; /* or, line 61 */
-                if (!(out_grouping(z, g_v, 97, 249))) goto lab8;
-                while(1) { /* gopast, line 61 */
-                    if (!(in_grouping(z, g_v, 97, 249))) goto lab9;
-                    break;
-                lab9:
-                    if (z->c >= z->l) goto lab8;
-                    z->c++; /* gopast, line 61 */
+            z->c = c2;
+            if (out_grouping(z, g_v, 97, 249, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 61 */
+                if (out_grouping(z, g_v, 97, 249, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 61 */
+                    int ret = out_grouping(z, g_v, 97, 249, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
                 }
-                goto lab7;
-            lab8:
-                z->c = c;
-                if (!(in_grouping(z, g_v, 97, 249))) goto lab0;
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping(z, g_v, 97, 249, 0)) goto lab0;
                 if (z->c >= z->l) goto lab0;
                 z->c++; /* next, line 61 */
             }
-        lab7:
+        lab5:
             ;
         }
     lab1:
         z->I[0] = z->c; /* setmark pV, line 62 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 64 */
-        while(1) { /* gopast, line 65 */
-            if (!(in_grouping(z, g_v, 97, 249))) goto lab11;
-            break;
-        lab11:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 65 */
+    {   int c5 = z->c; /* do, line 64 */
+        {    /* gopast */ /* grouping v, line 65 */
+            int ret = out_grouping(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 65 */
-            if (!(out_grouping(z, g_v, 97, 249))) goto lab12;
-            break;
-        lab12:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 65 */
+        {    /* gopast */ /* non v, line 65 */
+            int ret = in_grouping(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p1, line 65 */
-        while(1) { /* gopast, line 66 */
-            if (!(in_grouping(z, g_v, 97, 249))) goto lab13;
-            break;
-        lab13:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 66 */
+        {    /* gopast */ /* grouping v, line 66 */
+            int ret = out_grouping(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 66 */
-            if (!(out_grouping(z, g_v, 97, 249))) goto lab14;
-            break;
-        lab14:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 66 */
+        {    /* gopast */ /* non v, line 66 */
+            int ret = in_grouping(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[2] = z->c; /* setmark p2, line 66 */
-    lab10:
-        z->c = c;
+    lab7:
+        z->c = c5;
     }
     return 1;
 }
@@ -676,22 +668,21 @@ static int r_mark_regions(struct SN_env * z) {
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 70 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 72 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else
         among_var = find_among(z, a_1, 3); /* substring, line 72 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 72 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 73 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 73 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_11); /* <-, line 74 */
+                {   int ret = slice_from_s(z, 1, s_11); /* <-, line 74 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -702,7 +693,7 @@ static int r_postlude(struct SN_env * z) {
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -726,8 +717,10 @@ static int r_R2(struct SN_env * z) {
 static int r_attached_pronoun(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 87 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33314 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */
     z->bra = z->c; /* ], line 87 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0;
     among_var = find_among_b(z, a_3, 5); /* among, line 97 */
     if (!(among_var)) return 0;
     {   int ret = r_RV(z);
@@ -737,14 +730,12 @@ static int r_attached_pronoun(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 98 */
+            {   int ret = slice_del(z); /* delete, line 98 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_12); /* <-, line 99 */
+            {   int ret = slice_from_s(z, 1, s_12); /* <-, line 99 */
                 if (ret < 0) return ret;
             }
             break;
@@ -765,8 +756,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 111 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 111 */
+            {   int ret = slice_del(z); /* delete, line 111 */
                 if (ret < 0) return ret;
             }
             break;
@@ -775,20 +765,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 113 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 113 */
+            {   int ret = slice_del(z); /* delete, line 113 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 114 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 114 */
                 z->ket = z->c; /* [, line 114 */
-                if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; }
+                if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 114 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 114 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 114 */
+                {   int ret = slice_del(z); /* delete, line 114 */
                     if (ret < 0) return ret;
                 }
             lab0:
@@ -800,8 +788,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 117 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_14); /* <-, line 117 */
+            {   int ret = slice_from_s(z, 3, s_14); /* <-, line 117 */
                 if (ret < 0) return ret;
             }
             break;
@@ -810,8 +797,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 119 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_15); /* <-, line 119 */
+            {   int ret = slice_from_s(z, 1, s_15); /* <-, line 119 */
                 if (ret < 0) return ret;
             }
             break;
@@ -820,8 +806,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 121 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 4, s_16); /* <-, line 121 */
+            {   int ret = slice_from_s(z, 4, s_16); /* <-, line 121 */
                 if (ret < 0) return ret;
             }
             break;
@@ -830,8 +815,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 123 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 123 */
+            {   int ret = slice_del(z); /* delete, line 123 */
                 if (ret < 0) return ret;
             }
             break;
@@ -840,35 +824,33 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 125 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 125 */
+            {   int ret = slice_del(z); /* delete, line 125 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 126 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 126 */
                 z->ket = z->c; /* [, line 127 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4722696 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab1; }
                 among_var = find_among_b(z, a_4, 4); /* substring, line 127 */
-                if (!(among_var)) { z->c = z->l - m; goto lab1; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab1; }
                 z->bra = z->c; /* ], line 127 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 127 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 127 */
+                {   int ret = slice_del(z); /* delete, line 127 */
                     if (ret < 0) return ret;
                 }
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab1; }
+                    case 0: { z->c = z->l - m_keep; goto lab1; }
                     case 1:
                         z->ket = z->c; /* [, line 128 */
-                        if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; }
+                        if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m_keep; goto lab1; }
                         z->bra = z->c; /* ], line 128 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 128 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 128 */
+                        {   int ret = slice_del(z); /* delete, line 128 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -882,24 +864,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 134 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 135 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 135 */
                 z->ket = z->c; /* [, line 136 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab2; }
                 among_var = find_among_b(z, a_5, 3); /* substring, line 136 */
-                if (!(among_var)) { z->c = z->l - m; goto lab2; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab2; }
                 z->bra = z->c; /* ], line 136 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab2; }
+                    case 0: { z->c = z->l - m_keep; goto lab2; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call R2, line 137 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 137 */
+                        {   int ret = slice_del(z); /* delete, line 137 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -913,31 +894,28 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 142 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 142 */
+            {   int ret = slice_del(z); /* delete, line 142 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 143 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 143 */
                 z->ket = z->c; /* [, line 143 */
-                if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; }
+                if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 143 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 143 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 143 */
+                {   int ret = slice_del(z); /* delete, line 143 */
                     if (ret < 0) return ret;
                 }
                 z->ket = z->c; /* [, line 143 */
-                if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; }
+                if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 143 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 143 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 143 */
+                {   int ret = slice_del(z); /* delete, line 143 */
                     if (ret < 0) return ret;
                 }
             lab3:
@@ -950,68 +928,64 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 148 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 148 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 148 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 149 */
         among_var = find_among_b(z, a_7, 87); /* substring, line 149 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 149 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 163 */
+                {   int ret = slice_del(z); /* delete, line 163 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_vowel_suffix(struct SN_env * z) {
-    {   int m = z->l - z->c; (void) m; /* try, line 171 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 171 */
         z->ket = z->c; /* [, line 172 */
-        if (!(in_grouping_b(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; }
+        if (in_grouping_b(z, g_AEIO, 97, 242, 0)) { z->c = z->l - m_keep; goto lab0; }
         z->bra = z->c; /* ], line 172 */
         {   int ret = r_RV(z);
-            if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */
+            if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call RV, line 172 */
             if (ret < 0) return ret;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 172 */
+        {   int ret = slice_del(z); /* delete, line 172 */
             if (ret < 0) return ret;
         }
         z->ket = z->c; /* [, line 173 */
-        if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; }
+        if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m_keep; goto lab0; }
         z->bra = z->c; /* ], line 173 */
         {   int ret = r_RV(z);
-            if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */
+            if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call RV, line 173 */
             if (ret < 0) return ret;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 173 */
+        {   int ret = slice_del(z); /* delete, line 173 */
             if (ret < 0) return ret;
         }
     lab0:
         ;
     }
-    {   int m = z->l - z->c; (void) m; /* try, line 175 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 175 */
         z->ket = z->c; /* [, line 176 */
-        if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; }
+        if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m_keep; goto lab1; }
         z->bra = z->c; /* ], line 176 */
-        if (!(in_grouping_b(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; }
+        if (in_grouping_b(z, g_CG, 99, 103, 0)) { z->c = z->l - m_keep; goto lab1; }
         {   int ret = r_RV(z);
-            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */
+            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call RV, line 176 */
             if (ret < 0) return ret;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 176 */
+        {   int ret = slice_del(z); /* delete, line 176 */
             if (ret < 0) return ret;
         }
     lab1:
@@ -1021,41 +995,41 @@ static int r_vowel_suffix(struct SN_env * z) {
 }
 
 extern int italian_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 182 */
+    {   int c1 = z->c; /* do, line 182 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 182 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 183 */
+    {   int c2 = z->c; /* do, line 183 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 183 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 184 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 185 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 185 */
         {   int ret = r_attached_pronoun(z);
             if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 186 */
-        {   int m = z->l - z->c; (void) m; /* or, line 186 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 186 */
+        {   int m5 = z->l - z->c; (void)m5; /* or, line 186 */
             {   int ret = r_standard_suffix(z);
                 if (ret == 0) goto lab5; /* call standard_suffix, line 186 */
                 if (ret < 0) return ret;
             }
             goto lab4;
         lab5:
-            z->c = z->l - m;
+            z->c = z->l - m5;
             {   int ret = r_verb_suffix(z);
                 if (ret == 0) goto lab3; /* call verb_suffix, line 186 */
                 if (ret < 0) return ret;
@@ -1063,29 +1037,29 @@ extern int italian_ISO_8859_1_stem(struct SN_env * z) {
         }
     lab4:
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 187 */
+    {   int m6 = z->l - z->c; (void)m6; /* do, line 187 */
         {   int ret = r_vowel_suffix(z);
             if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */
             if (ret < 0) return ret;
         }
     lab6:
-        z->c = z->l - m;
+        z->c = z->l - m6;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 189 */
+    {   int c7 = z->c; /* do, line 189 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab7; /* call postlude, line 189 */
             if (ret < 0) return ret;
         }
     lab7:
-        z->c = c;
+        z->c = c7;
     }
     return 1;
 }
 
 extern struct SN_env * italian_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void italian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void italian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c b/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
index c28e2f0..61f15fa 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
@@ -3,46 +3,60 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int norwegian_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_other_suffix(struct SN_env * z);
 static int r_consonant_pair(struct SN_env * z);
 static int r_main_suffix(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * norwegian_ISO_8859_1_create_env(void);
 extern void norwegian_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_0[1] = { 'a' };
-static symbol s_0_1[1] = { 'e' };
-static symbol s_0_2[3] = { 'e', 'd', 'e' };
-static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' };
-static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' };
-static symbol s_0_5[3] = { 'a', 'n', 'e' };
-static symbol s_0_6[3] = { 'e', 'n', 'e' };
-static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' };
-static symbol s_0_8[4] = { 'e', 'r', 't', 'e' };
-static symbol s_0_9[2] = { 'e', 'n' };
-static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' };
-static symbol s_0_11[2] = { 'a', 'r' };
-static symbol s_0_12[2] = { 'e', 'r' };
-static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' };
-static symbol s_0_14[1] = { 's' };
-static symbol s_0_15[2] = { 'a', 's' };
-static symbol s_0_16[2] = { 'e', 's' };
-static symbol s_0_17[4] = { 'e', 'd', 'e', 's' };
-static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' };
-static symbol s_0_19[4] = { 'e', 'n', 'e', 's' };
-static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' };
-static symbol s_0_21[3] = { 'e', 'n', 's' };
-static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' };
-static symbol s_0_23[3] = { 'e', 'r', 's' };
-static symbol s_0_24[3] = { 'e', 't', 's' };
-static symbol s_0_25[2] = { 'e', 't' };
-static symbol s_0_26[3] = { 'h', 'e', 't' };
-static symbol s_0_27[3] = { 'e', 'r', 't' };
-static symbol s_0_28[3] = { 'a', 's', 't' };
 
-static struct among a_0[29] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 'a' };
+static const symbol s_0_1[1] = { 'e' };
+static const symbol s_0_2[3] = { 'e', 'd', 'e' };
+static const symbol s_0_3[4] = { 'a', 'n', 'd', 'e' };
+static const symbol s_0_4[4] = { 'e', 'n', 'd', 'e' };
+static const symbol s_0_5[3] = { 'a', 'n', 'e' };
+static const symbol s_0_6[3] = { 'e', 'n', 'e' };
+static const symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' };
+static const symbol s_0_8[4] = { 'e', 'r', 't', 'e' };
+static const symbol s_0_9[2] = { 'e', 'n' };
+static const symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' };
+static const symbol s_0_11[2] = { 'a', 'r' };
+static const symbol s_0_12[2] = { 'e', 'r' };
+static const symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' };
+static const symbol s_0_14[1] = { 's' };
+static const symbol s_0_15[2] = { 'a', 's' };
+static const symbol s_0_16[2] = { 'e', 's' };
+static const symbol s_0_17[4] = { 'e', 'd', 'e', 's' };
+static const symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' };
+static const symbol s_0_19[4] = { 'e', 'n', 'e', 's' };
+static const symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' };
+static const symbol s_0_21[3] = { 'e', 'n', 's' };
+static const symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' };
+static const symbol s_0_23[3] = { 'e', 'r', 's' };
+static const symbol s_0_24[3] = { 'e', 't', 's' };
+static const symbol s_0_25[2] = { 'e', 't' };
+static const symbol s_0_26[3] = { 'h', 'e', 't' };
+static const symbol s_0_27[3] = { 'e', 'r', 't' };
+static const symbol s_0_28[3] = { 'a', 's', 't' };
+
+static const struct among a_0[29] =
 {
 /*  0 */ { 1, s_0_0, -1, 1, 0},
 /*  1 */ { 1, s_0_1, -1, 1, 0},
@@ -75,28 +89,28 @@ static struct among a_0[29] =
 /* 28 */ { 3, s_0_28, -1, 1, 0}
 };
 
-static symbol s_1_0[2] = { 'd', 't' };
-static symbol s_1_1[2] = { 'v', 't' };
+static const symbol s_1_0[2] = { 'd', 't' };
+static const symbol s_1_1[2] = { 'v', 't' };
 
-static struct among a_1[2] =
+static const struct among a_1[2] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0}
 };
 
-static symbol s_2_0[3] = { 'l', 'e', 'g' };
-static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' };
-static symbol s_2_2[2] = { 'i', 'g' };
-static symbol s_2_3[3] = { 'e', 'i', 'g' };
-static symbol s_2_4[3] = { 'l', 'i', 'g' };
-static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' };
-static symbol s_2_6[3] = { 'e', 'l', 's' };
-static symbol s_2_7[3] = { 'l', 'o', 'v' };
-static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' };
-static symbol s_2_9[4] = { 's', 'l', 'o', 'v' };
-static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' };
+static const symbol s_2_0[3] = { 'l', 'e', 'g' };
+static const symbol s_2_1[4] = { 'e', 'l', 'e', 'g' };
+static const symbol s_2_2[2] = { 'i', 'g' };
+static const symbol s_2_3[3] = { 'e', 'i', 'g' };
+static const symbol s_2_4[3] = { 'l', 'i', 'g' };
+static const symbol s_2_5[4] = { 'e', 'l', 'i', 'g' };
+static const symbol s_2_6[3] = { 'e', 'l', 's' };
+static const symbol s_2_7[3] = { 'l', 'o', 'v' };
+static const symbol s_2_8[4] = { 'e', 'l', 'o', 'v' };
+static const symbol s_2_9[4] = { 's', 'l', 'o', 'v' };
+static const symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' };
 
-static struct among a_2[11] =
+static const struct among a_2[11] =
 {
 /*  0 */ { 3, s_2_0, -1, 1, 0},
 /*  1 */ { 4, s_2_1, 0, 1, 0},
@@ -111,88 +125,75 @@ static struct among a_2[11] =
 /* 10 */ { 7, s_2_10, 9, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
 
-static unsigned char g_s_ending[] = { 119, 125, 149, 1 };
+static const unsigned char g_s_ending[] = { 119, 125, 149, 1 };
 
-static symbol s_0[] = { 'k' };
-static symbol s_1[] = { 'e', 'r' };
+static const symbol s_0[] = { 'k' };
+static const symbol s_1[] = { 'e', 'r' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     {   int c_test = z->c; /* test, line 30 */
-        {   int c = z->c + 3;
-            if (0 > c || c > z->l) return 0;
-            z->c = c; /* hop, line 30 */
+        {   int ret = z->c + 3;
+            if (0 > ret || ret > z->l) return 0;
+            z->c = ret; /* hop, line 30 */
         }
         z->I[1] = z->c; /* setmark x, line 30 */
         z->c = c_test;
     }
-    while(1) { /* goto, line 31 */
-        int c = z->c;
-        if (!(in_grouping(z, g_v, 97, 248))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        if (z->c >= z->l) return 0;
-        z->c++; /* goto, line 31 */
-    }
-    while(1) { /* gopast, line 31 */
-        if (!(out_grouping(z, g_v, 97, 248))) goto lab1;
-        break;
-    lab1:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 31 */
+    if (out_grouping(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 31 */
+    {    /* gopast */ /* non v, line 31 */
+        int ret = in_grouping(z, g_v, 97, 248, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 31 */
      /* try, line 32 */
-    if (!(z->I[0] < z->I[1])) goto lab2;
+    if (!(z->I[0] < z->I[1])) goto lab0;
     z->I[0] = z->I[1];
-lab2:
+lab0:
     return 1;
 }
 
 static int r_main_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 38 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 38 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 38 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 38 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851426 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_0, 29); /* substring, line 38 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 38 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 44 */
+            {   int ret = slice_del(z); /* delete, line 44 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 46 */
-                if (!(in_grouping_b(z, g_s_ending, 98, 122))) goto lab1;
+            {   int m2 = z->l - z->c; (void)m2; /* or, line 46 */
+                if (in_grouping_b(z, g_s_ending, 98, 122, 0)) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m2;
                 if (!(eq_s_b(z, 1, s_0))) return 0;
-                if (!(out_grouping_b(z, g_v, 97, 248))) return 0;
+                if (out_grouping_b(z, g_v, 97, 248, 0)) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 46 */
+            {   int ret = slice_del(z); /* delete, line 46 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_1); /* <-, line 48 */
+            {   int ret = slice_from_s(z, 2, s_1); /* <-, line 48 */
                 if (ret < 0) return ret;
             }
             break;
@@ -202,24 +203,24 @@ static int r_main_suffix(struct SN_env * z) {
 
 static int r_consonant_pair(struct SN_env * z) {
     {   int m_test = z->l - z->c; /* test, line 53 */
-        {   int m3; /* setlimit, line 54 */
-            int m = z->l - z->c; (void) m;
+        {   int mlimit; /* setlimit, line 54 */
+            int m1 = z->l - z->c; (void)m1;
             if (z->c < z->I[0]) return 0;
             z->c = z->I[0]; /* tomark, line 54 */
-            m3 = z->lb; z->lb = z->c;
-            z->c = z->l - m;
+            mlimit = z->lb; z->lb = z->c;
+            z->c = z->l - m1;
             z->ket = z->c; /* [, line 54 */
-            if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] != 116) { z->lb = mlimit; return 0; }
+            if (!(find_among_b(z, a_1, 2))) { z->lb = mlimit; return 0; } /* substring, line 54 */
             z->bra = z->c; /* ], line 54 */
-            z->lb = m3;
+            z->lb = mlimit;
         }
         z->c = z->l - m_test;
     }
     if (z->c <= z->lb) return 0;
     z->c--; /* next, line 59 */
     z->bra = z->c; /* ], line 59 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 59 */
+    {   int ret = slice_del(z); /* delete, line 59 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -227,23 +228,23 @@ static int r_consonant_pair(struct SN_env * z) {
 
 static int r_other_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 63 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 63 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 63 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 63 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718720 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_2, 11); /* substring, line 63 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 63 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 67 */
+            {   int ret = slice_del(z); /* delete, line 67 */
                 if (ret < 0) return ret;
             }
             break;
@@ -252,39 +253,39 @@ static int r_other_suffix(struct SN_env * z) {
 }
 
 extern int norwegian_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 74 */
+    {   int c1 = z->c; /* do, line 74 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 74 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 75 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 76 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 76 */
         {   int ret = r_main_suffix(z);
             if (ret == 0) goto lab1; /* call main_suffix, line 76 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 77 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 77 */
         {   int ret = r_consonant_pair(z);
             if (ret == 0) goto lab2; /* call consonant_pair, line 77 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 78 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 78 */
         {   int ret = r_other_suffix(z);
             if (ret == 0) goto lab3; /* call other_suffix, line 78 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
     z->c = z->lb;
     return 1;
@@ -292,5 +293,5 @@ extern int norwegian_ISO_8859_1_stem(struct SN_env * z) {
 
 extern struct SN_env * norwegian_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); }
 
-extern void norwegian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void norwegian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_porter.c b/libstemmer_c/src_c/stem_ISO_8859_1_porter.c
index b2c6ad0..ce7df61 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_porter.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_porter.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int porter_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_Step_5b(struct SN_env * z);
 static int r_Step_5a(struct SN_env * z);
 static int r_Step_4(struct SN_env * z);
@@ -15,16 +21,24 @@ static int r_Step_1a(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_R1(struct SN_env * z);
 static int r_shortv(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * porter_ISO_8859_1_create_env(void);
 extern void porter_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_0[1] = { 's' };
-static symbol s_0_1[3] = { 'i', 'e', 's' };
-static symbol s_0_2[4] = { 's', 's', 'e', 's' };
-static symbol s_0_3[2] = { 's', 's' };
 
-static struct among a_0[4] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 's' };
+static const symbol s_0_1[3] = { 'i', 'e', 's' };
+static const symbol s_0_2[4] = { 's', 's', 'e', 's' };
+static const symbol s_0_3[2] = { 's', 's' };
+
+static const struct among a_0[4] =
 {
 /*  0 */ { 1, s_0_0, -1, 3, 0},
 /*  1 */ { 3, s_0_1, 0, 2, 0},
@@ -32,20 +46,20 @@ static struct among a_0[4] =
 /*  3 */ { 2, s_0_3, 0, -1, 0}
 };
 
-static symbol s_1_1[2] = { 'b', 'b' };
-static symbol s_1_2[2] = { 'd', 'd' };
-static symbol s_1_3[2] = { 'f', 'f' };
-static symbol s_1_4[2] = { 'g', 'g' };
-static symbol s_1_5[2] = { 'b', 'l' };
-static symbol s_1_6[2] = { 'm', 'm' };
-static symbol s_1_7[2] = { 'n', 'n' };
-static symbol s_1_8[2] = { 'p', 'p' };
-static symbol s_1_9[2] = { 'r', 'r' };
-static symbol s_1_10[2] = { 'a', 't' };
-static symbol s_1_11[2] = { 't', 't' };
-static symbol s_1_12[2] = { 'i', 'z' };
-
-static struct among a_1[13] =
+static const symbol s_1_1[2] = { 'b', 'b' };
+static const symbol s_1_2[2] = { 'd', 'd' };
+static const symbol s_1_3[2] = { 'f', 'f' };
+static const symbol s_1_4[2] = { 'g', 'g' };
+static const symbol s_1_5[2] = { 'b', 'l' };
+static const symbol s_1_6[2] = { 'm', 'm' };
+static const symbol s_1_7[2] = { 'n', 'n' };
+static const symbol s_1_8[2] = { 'p', 'p' };
+static const symbol s_1_9[2] = { 'r', 'r' };
+static const symbol s_1_10[2] = { 'a', 't' };
+static const symbol s_1_11[2] = { 't', 't' };
+static const symbol s_1_12[2] = { 'i', 'z' };
+
+static const struct among a_1[13] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_1_1, 0, 2, 0},
@@ -62,39 +76,39 @@ static struct among a_1[13] =
 /* 12 */ { 2, s_1_12, 0, 1, 0}
 };
 
-static symbol s_2_0[2] = { 'e', 'd' };
-static symbol s_2_1[3] = { 'e', 'e', 'd' };
-static symbol s_2_2[3] = { 'i', 'n', 'g' };
+static const symbol s_2_0[2] = { 'e', 'd' };
+static const symbol s_2_1[3] = { 'e', 'e', 'd' };
+static const symbol s_2_2[3] = { 'i', 'n', 'g' };
 
-static struct among a_2[3] =
+static const struct among a_2[3] =
 {
 /*  0 */ { 2, s_2_0, -1, 2, 0},
 /*  1 */ { 3, s_2_1, 0, 1, 0},
 /*  2 */ { 3, s_2_2, -1, 2, 0}
 };
 
-static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' };
-static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' };
-static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' };
-static symbol s_3_3[3] = { 'e', 'l', 'i' };
-static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' };
-static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' };
-static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' };
-static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' };
-static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
-static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' };
-static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' };
-static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' };
-static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
-static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' };
-static symbol s_3_16[4] = { 'a', 't', 'o', 'r' };
-static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
-static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
-static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
-
-static struct among a_3[20] =
+static const symbol s_3_0[4] = { 'a', 'n', 'c', 'i' };
+static const symbol s_3_1[4] = { 'e', 'n', 'c', 'i' };
+static const symbol s_3_2[4] = { 'a', 'b', 'l', 'i' };
+static const symbol s_3_3[3] = { 'e', 'l', 'i' };
+static const symbol s_3_4[4] = { 'a', 'l', 'l', 'i' };
+static const symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' };
+static const symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' };
+static const symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' };
+static const symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
+static const symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' };
+static const symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' };
+static const symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' };
+static const symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
+static const symbol s_3_15[4] = { 'i', 'z', 'e', 'r' };
+static const symbol s_3_16[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
+static const symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
+static const symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
+
+static const struct among a_3[20] =
 {
 /*  0 */ { 4, s_3_0, -1, 3, 0},
 /*  1 */ { 4, s_3_1, -1, 2, 0},
@@ -118,15 +132,15 @@ static struct among a_3[20] =
 /* 19 */ { 7, s_3_19, -1, 12, 0}
 };
 
-static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' };
-static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' };
-static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' };
-static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' };
-static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' };
-static symbol s_4_5[3] = { 'f', 'u', 'l' };
-static symbol s_4_6[4] = { 'n', 'e', 's', 's' };
+static const symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' };
+static const symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' };
+static const symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' };
+static const symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' };
+static const symbol s_4_4[4] = { 'i', 'c', 'a', 'l' };
+static const symbol s_4_5[3] = { 'f', 'u', 'l' };
+static const symbol s_4_6[4] = { 'n', 'e', 's', 's' };
 
-static struct among a_4[7] =
+static const struct among a_4[7] =
 {
 /*  0 */ { 5, s_4_0, -1, 2, 0},
 /*  1 */ { 5, s_4_1, -1, 3, 0},
@@ -137,27 +151,27 @@ static struct among a_4[7] =
 /*  6 */ { 4, s_4_6, -1, 3, 0}
 };
 
-static symbol s_5_0[2] = { 'i', 'c' };
-static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' };
-static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' };
-static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_5_5[3] = { 'a', 't', 'e' };
-static symbol s_5_6[3] = { 'i', 'v', 'e' };
-static symbol s_5_7[3] = { 'i', 'z', 'e' };
-static symbol s_5_8[3] = { 'i', 't', 'i' };
-static symbol s_5_9[2] = { 'a', 'l' };
-static symbol s_5_10[3] = { 'i', 's', 'm' };
-static symbol s_5_11[3] = { 'i', 'o', 'n' };
-static symbol s_5_12[2] = { 'e', 'r' };
-static symbol s_5_13[3] = { 'o', 'u', 's' };
-static symbol s_5_14[3] = { 'a', 'n', 't' };
-static symbol s_5_15[3] = { 'e', 'n', 't' };
-static symbol s_5_16[4] = { 'm', 'e', 'n', 't' };
-static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' };
-static symbol s_5_18[2] = { 'o', 'u' };
-
-static struct among a_5[19] =
+static const symbol s_5_0[2] = { 'i', 'c' };
+static const symbol s_5_1[4] = { 'a', 'n', 'c', 'e' };
+static const symbol s_5_2[4] = { 'e', 'n', 'c', 'e' };
+static const symbol s_5_3[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_5_4[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_5_5[3] = { 'a', 't', 'e' };
+static const symbol s_5_6[3] = { 'i', 'v', 'e' };
+static const symbol s_5_7[3] = { 'i', 'z', 'e' };
+static const symbol s_5_8[3] = { 'i', 't', 'i' };
+static const symbol s_5_9[2] = { 'a', 'l' };
+static const symbol s_5_10[3] = { 'i', 's', 'm' };
+static const symbol s_5_11[3] = { 'i', 'o', 'n' };
+static const symbol s_5_12[2] = { 'e', 'r' };
+static const symbol s_5_13[3] = { 'o', 'u', 's' };
+static const symbol s_5_14[3] = { 'a', 'n', 't' };
+static const symbol s_5_15[3] = { 'e', 'n', 't' };
+static const symbol s_5_16[4] = { 'm', 'e', 'n', 't' };
+static const symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' };
+static const symbol s_5_18[2] = { 'o', 'u' };
+
+static const struct among a_5[19] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
@@ -180,50 +194,50 @@ static struct among a_5[19] =
 /* 18 */ { 2, s_5_18, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1 };
-
-static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
-
-static symbol s_0[] = { 's', 's' };
-static symbol s_1[] = { 'i' };
-static symbol s_2[] = { 'e', 'e' };
-static symbol s_3[] = { 'e' };
-static symbol s_4[] = { 'e' };
-static symbol s_5[] = { 'y' };
-static symbol s_6[] = { 'Y' };
-static symbol s_7[] = { 'i' };
-static symbol s_8[] = { 't', 'i', 'o', 'n' };
-static symbol s_9[] = { 'e', 'n', 'c', 'e' };
-static symbol s_10[] = { 'a', 'n', 'c', 'e' };
-static symbol s_11[] = { 'a', 'b', 'l', 'e' };
-static symbol s_12[] = { 'e', 'n', 't' };
-static symbol s_13[] = { 'e' };
-static symbol s_14[] = { 'i', 'z', 'e' };
-static symbol s_15[] = { 'a', 't', 'e' };
-static symbol s_16[] = { 'a', 'l' };
-static symbol s_17[] = { 'a', 'l' };
-static symbol s_18[] = { 'f', 'u', 'l' };
-static symbol s_19[] = { 'o', 'u', 's' };
-static symbol s_20[] = { 'i', 'v', 'e' };
-static symbol s_21[] = { 'b', 'l', 'e' };
-static symbol s_22[] = { 'a', 'l' };
-static symbol s_23[] = { 'i', 'c' };
-static symbol s_24[] = { 's' };
-static symbol s_25[] = { 't' };
-static symbol s_26[] = { 'e' };
-static symbol s_27[] = { 'l' };
-static symbol s_28[] = { 'l' };
-static symbol s_29[] = { 'y' };
-static symbol s_30[] = { 'Y' };
-static symbol s_31[] = { 'y' };
-static symbol s_32[] = { 'Y' };
-static symbol s_33[] = { 'Y' };
-static symbol s_34[] = { 'y' };
+static const unsigned char g_v[] = { 17, 65, 16, 1 };
+
+static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
+
+static const symbol s_0[] = { 's', 's' };
+static const symbol s_1[] = { 'i' };
+static const symbol s_2[] = { 'e', 'e' };
+static const symbol s_3[] = { 'e' };
+static const symbol s_4[] = { 'e' };
+static const symbol s_5[] = { 'y' };
+static const symbol s_6[] = { 'Y' };
+static const symbol s_7[] = { 'i' };
+static const symbol s_8[] = { 't', 'i', 'o', 'n' };
+static const symbol s_9[] = { 'e', 'n', 'c', 'e' };
+static const symbol s_10[] = { 'a', 'n', 'c', 'e' };
+static const symbol s_11[] = { 'a', 'b', 'l', 'e' };
+static const symbol s_12[] = { 'e', 'n', 't' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'i', 'z', 'e' };
+static const symbol s_15[] = { 'a', 't', 'e' };
+static const symbol s_16[] = { 'a', 'l' };
+static const symbol s_17[] = { 'a', 'l' };
+static const symbol s_18[] = { 'f', 'u', 'l' };
+static const symbol s_19[] = { 'o', 'u', 's' };
+static const symbol s_20[] = { 'i', 'v', 'e' };
+static const symbol s_21[] = { 'b', 'l', 'e' };
+static const symbol s_22[] = { 'a', 'l' };
+static const symbol s_23[] = { 'i', 'c' };
+static const symbol s_24[] = { 's' };
+static const symbol s_25[] = { 't' };
+static const symbol s_26[] = { 'e' };
+static const symbol s_27[] = { 'l' };
+static const symbol s_28[] = { 'l' };
+static const symbol s_29[] = { 'y' };
+static const symbol s_30[] = { 'Y' };
+static const symbol s_31[] = { 'y' };
+static const symbol s_32[] = { 'Y' };
+static const symbol s_33[] = { 'Y' };
+static const symbol s_34[] = { 'y' };
 
 static int r_shortv(struct SN_env * z) {
-    if (!(out_grouping_b(z, g_v_WXY, 89, 121))) return 0;
-    if (!(in_grouping_b(z, g_v, 97, 121))) return 0;
-    if (!(out_grouping_b(z, g_v, 97, 121))) return 0;
+    if (out_grouping_b(z, g_v_WXY, 89, 121, 0)) return 0;
+    if (in_grouping_b(z, g_v, 97, 121, 0)) return 0;
+    if (out_grouping_b(z, g_v, 97, 121, 0)) return 0;
     return 1;
 }
 
@@ -240,26 +254,24 @@ static int r_R2(struct SN_env * z) {
 static int r_Step_1a(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 25 */
+    if (z->c <= z->lb || z->p[z->c - 1] != 115) return 0;
     among_var = find_among_b(z, a_0, 4); /* substring, line 25 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 25 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_0); /* <-, line 26 */
+            {   int ret = slice_from_s(z, 2, s_0); /* <-, line 26 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_1); /* <-, line 27 */
+            {   int ret = slice_from_s(z, 1, s_1); /* <-, line 27 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 29 */
+            {   int ret = slice_del(z); /* delete, line 29 */
                 if (ret < 0) return ret;
             }
             break;
@@ -270,6 +282,7 @@ static int r_Step_1a(struct SN_env * z) {
 static int r_Step_1b(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 34 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0;
     among_var = find_among_b(z, a_2, 3); /* substring, line 34 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 34 */
@@ -280,27 +293,24 @@ static int r_Step_1b(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 35 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 2, s_2); /* <-, line 35 */
+            {   int ret = slice_from_s(z, 2, s_2); /* <-, line 35 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             {   int m_test = z->l - z->c; /* test, line 38 */
-                while(1) { /* gopast, line 38 */
-                    if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0;
-                    break;
-                lab0:
-                    if (z->c <= z->lb) return 0;
-                    z->c--; /* gopast, line 38 */
+                {    /* gopast */ /* grouping v, line 38 */
+                    int ret = out_grouping_b(z, g_v, 97, 121, 1);
+                    if (ret < 0) return 0;
+                    z->c -= ret;
                 }
                 z->c = z->l - m_test;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 38 */
+            {   int ret = slice_del(z); /* delete, line 38 */
                 if (ret < 0) return ret;
             }
             {   int m_test = z->l - z->c; /* test, line 39 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else
                 among_var = find_among_b(z, a_1, 13); /* substring, line 39 */
                 if (!(among_var)) return 0;
                 z->c = z->l - m_test;
@@ -308,11 +318,9 @@ static int r_Step_1b(struct SN_env * z) {
             switch(among_var) {
                 case 0: return 0;
                 case 1:
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
@@ -321,8 +329,7 @@ static int r_Step_1b(struct SN_env * z) {
                     if (z->c <= z->lb) return 0;
                     z->c--; /* next, line 44 */
                     z->bra = z->c; /* ], line 44 */
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 44 */
+                    {   int ret = slice_del(z); /* delete, line 44 */
                         if (ret < 0) return ret;
                     }
                     break;
@@ -335,11 +342,9 @@ static int r_Step_1b(struct SN_env * z) {
                         }
                         z->c = z->l - m_test;
                     }
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
@@ -351,24 +356,21 @@ static int r_Step_1b(struct SN_env * z) {
 
 static int r_Step_1c(struct SN_env * z) {
     z->ket = z->c; /* [, line 52 */
-    {   int m = z->l - z->c; (void) m; /* or, line 52 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 52 */
         if (!(eq_s_b(z, 1, s_5))) goto lab1;
         goto lab0;
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         if (!(eq_s_b(z, 1, s_6))) return 0;
     }
 lab0:
     z->bra = z->c; /* ], line 52 */
-    while(1) { /* gopast, line 53 */
-        if (!(in_grouping_b(z, g_v, 97, 121))) goto lab2;
-        break;
-    lab2:
-        if (z->c <= z->lb) return 0;
-        z->c--; /* gopast, line 53 */
+    {    /* gopast */ /* grouping v, line 53 */
+        int ret = out_grouping_b(z, g_v, 97, 121, 1);
+        if (ret < 0) return 0;
+        z->c -= ret;
     }
-    {   int ret;
-        ret = slice_from_s(z, 1, s_7); /* <-, line 54 */
+    {   int ret = slice_from_s(z, 1, s_7); /* <-, line 54 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -377,6 +379,7 @@ lab0:
 static int r_Step_2(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 58 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_3, 20); /* substring, line 58 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 58 */
@@ -387,86 +390,72 @@ static int r_Step_2(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_8); /* <-, line 59 */
+            {   int ret = slice_from_s(z, 4, s_8); /* <-, line 59 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_9); /* <-, line 60 */
+            {   int ret = slice_from_s(z, 4, s_9); /* <-, line 60 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_10); /* <-, line 61 */
+            {   int ret = slice_from_s(z, 4, s_10); /* <-, line 61 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_11); /* <-, line 62 */
+            {   int ret = slice_from_s(z, 4, s_11); /* <-, line 62 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_12); /* <-, line 63 */
+            {   int ret = slice_from_s(z, 3, s_12); /* <-, line 63 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_13); /* <-, line 64 */
+            {   int ret = slice_from_s(z, 1, s_13); /* <-, line 64 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_14); /* <-, line 66 */
+            {   int ret = slice_from_s(z, 3, s_14); /* <-, line 66 */
                 if (ret < 0) return ret;
             }
             break;
         case 8:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_15); /* <-, line 68 */
+            {   int ret = slice_from_s(z, 3, s_15); /* <-, line 68 */
                 if (ret < 0) return ret;
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_16); /* <-, line 69 */
+            {   int ret = slice_from_s(z, 2, s_16); /* <-, line 69 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_17); /* <-, line 71 */
+            {   int ret = slice_from_s(z, 2, s_17); /* <-, line 71 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_18); /* <-, line 72 */
+            {   int ret = slice_from_s(z, 3, s_18); /* <-, line 72 */
                 if (ret < 0) return ret;
             }
             break;
         case 12:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_19); /* <-, line 74 */
+            {   int ret = slice_from_s(z, 3, s_19); /* <-, line 74 */
                 if (ret < 0) return ret;
             }
             break;
         case 13:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_20); /* <-, line 76 */
+            {   int ret = slice_from_s(z, 3, s_20); /* <-, line 76 */
                 if (ret < 0) return ret;
             }
             break;
         case 14:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_21); /* <-, line 77 */
+            {   int ret = slice_from_s(z, 3, s_21); /* <-, line 77 */
                 if (ret < 0) return ret;
             }
             break;
@@ -477,6 +466,7 @@ static int r_Step_2(struct SN_env * z) {
 static int r_Step_3(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 82 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_4, 7); /* substring, line 82 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 82 */
@@ -487,20 +477,17 @@ static int r_Step_3(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_22); /* <-, line 83 */
+            {   int ret = slice_from_s(z, 2, s_22); /* <-, line 83 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_23); /* <-, line 85 */
+            {   int ret = slice_from_s(z, 2, s_23); /* <-, line 85 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 87 */
+            {   int ret = slice_del(z); /* delete, line 87 */
                 if (ret < 0) return ret;
             }
             break;
@@ -511,6 +498,7 @@ static int r_Step_3(struct SN_env * z) {
 static int r_Step_4(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 92 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((3961384 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_5, 19); /* substring, line 92 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 92 */
@@ -521,22 +509,20 @@ static int r_Step_4(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 95 */
+            {   int ret = slice_del(z); /* delete, line 95 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 96 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 96 */
                 if (!(eq_s_b(z, 1, s_24))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_25))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 96 */
+            {   int ret = slice_del(z); /* delete, line 96 */
                 if (ret < 0) return ret;
             }
             break;
@@ -548,31 +534,30 @@ static int r_Step_5a(struct SN_env * z) {
     z->ket = z->c; /* [, line 101 */
     if (!(eq_s_b(z, 1, s_26))) return 0;
     z->bra = z->c; /* ], line 101 */
-    {   int m = z->l - z->c; (void) m; /* or, line 102 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 102 */
         {   int ret = r_R2(z);
             if (ret == 0) goto lab1; /* call R2, line 102 */
             if (ret < 0) return ret;
         }
         goto lab0;
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         {   int ret = r_R1(z);
             if (ret == 0) return 0; /* call R1, line 102 */
             if (ret < 0) return ret;
         }
-        {   int m = z->l - z->c; (void) m; /* not, line 102 */
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 102 */
             {   int ret = r_shortv(z);
                 if (ret == 0) goto lab2; /* call shortv, line 102 */
                 if (ret < 0) return ret;
             }
             return 0;
         lab2:
-            z->c = z->l - m;
+            z->c = z->l - m2;
         }
     }
 lab0:
-    {   int ret;
-        ret = slice_del(z); /* delete, line 103 */
+    {   int ret = slice_del(z); /* delete, line 103 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -587,8 +572,7 @@ static int r_Step_5b(struct SN_env * z) {
         if (ret < 0) return ret;
     }
     if (!(eq_s_b(z, 1, s_28))) return 0;
-    {   int ret;
-        ret = slice_del(z); /* delete, line 109 */
+    {   int ret = slice_del(z); /* delete, line 109 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -596,181 +580,170 @@ static int r_Step_5b(struct SN_env * z) {
 
 extern int porter_ISO_8859_1_stem(struct SN_env * z) {
     z->B[0] = 0; /* unset Y_found, line 115 */
-    {   int c = z->c; /* do, line 116 */
+    {   int c1 = z->c; /* do, line 116 */
         z->bra = z->c; /* [, line 116 */
         if (!(eq_s(z, 1, s_29))) goto lab0;
         z->ket = z->c; /* ], line 116 */
-        {   int ret;
-            ret = slice_from_s(z, 1, s_30); /* <-, line 116 */
+        {   int ret = slice_from_s(z, 1, s_30); /* <-, line 116 */
             if (ret < 0) return ret;
         }
         z->B[0] = 1; /* set Y_found, line 116 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 117 */
+    {   int c2 = z->c; /* do, line 117 */
         while(1) { /* repeat, line 117 */
-            int c = z->c;
+            int c3 = z->c;
             while(1) { /* goto, line 117 */
-                int c = z->c;
-                if (!(in_grouping(z, g_v, 97, 121))) goto lab3;
+                int c4 = z->c;
+                if (in_grouping(z, g_v, 97, 121, 0)) goto lab3;
                 z->bra = z->c; /* [, line 117 */
                 if (!(eq_s(z, 1, s_31))) goto lab3;
                 z->ket = z->c; /* ], line 117 */
-                z->c = c;
+                z->c = c4;
                 break;
             lab3:
-                z->c = c;
+                z->c = c4;
                 if (z->c >= z->l) goto lab2;
                 z->c++; /* goto, line 117 */
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_32); /* <-, line 117 */
+            {   int ret = slice_from_s(z, 1, s_32); /* <-, line 117 */
                 if (ret < 0) return ret;
             }
             z->B[0] = 1; /* set Y_found, line 117 */
             continue;
         lab2:
-            z->c = c;
+            z->c = c3;
             break;
         }
-        z->c = c;
+        z->c = c2;
     }
     z->I[0] = z->l;
     z->I[1] = z->l;
-    {   int c = z->c; /* do, line 121 */
-        while(1) { /* gopast, line 122 */
-            if (!(in_grouping(z, g_v, 97, 121))) goto lab5;
-            break;
-        lab5:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 122 */
+    {   int c5 = z->c; /* do, line 121 */
+        {    /* gopast */ /* grouping v, line 122 */
+            int ret = out_grouping(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 122 */
-            if (!(out_grouping(z, g_v, 97, 121))) goto lab6;
-            break;
-        lab6:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 122 */
+        {    /* gopast */ /* non v, line 122 */
+            int ret = in_grouping(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
         z->I[0] = z->c; /* setmark p1, line 122 */
-        while(1) { /* gopast, line 123 */
-            if (!(in_grouping(z, g_v, 97, 121))) goto lab7;
-            break;
-        lab7:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 123 */
+        {    /* gopast */ /* grouping v, line 123 */
+            int ret = out_grouping(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 123 */
-            if (!(out_grouping(z, g_v, 97, 121))) goto lab8;
-            break;
-        lab8:
-            if (z->c >= z->l) goto lab4;
-            z->c++; /* gopast, line 123 */
+        {    /* gopast */ /* non v, line 123 */
+            int ret = in_grouping(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p2, line 123 */
     lab4:
-        z->c = c;
+        z->c = c5;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 126 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 127 */
+    {   int m6 = z->l - z->c; (void)m6; /* do, line 127 */
         {   int ret = r_Step_1a(z);
-            if (ret == 0) goto lab9; /* call Step_1a, line 127 */
+            if (ret == 0) goto lab5; /* call Step_1a, line 127 */
             if (ret < 0) return ret;
         }
-    lab9:
-        z->c = z->l - m;
+    lab5:
+        z->c = z->l - m6;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 128 */
+    {   int m7 = z->l - z->c; (void)m7; /* do, line 128 */
         {   int ret = r_Step_1b(z);
-            if (ret == 0) goto lab10; /* call Step_1b, line 128 */
+            if (ret == 0) goto lab6; /* call Step_1b, line 128 */
             if (ret < 0) return ret;
         }
-    lab10:
-        z->c = z->l - m;
+    lab6:
+        z->c = z->l - m7;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 129 */
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 129 */
         {   int ret = r_Step_1c(z);
-            if (ret == 0) goto lab11; /* call Step_1c, line 129 */
+            if (ret == 0) goto lab7; /* call Step_1c, line 129 */
             if (ret < 0) return ret;
         }
-    lab11:
-        z->c = z->l - m;
+    lab7:
+        z->c = z->l - m8;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 130 */
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 130 */
         {   int ret = r_Step_2(z);
-            if (ret == 0) goto lab12; /* call Step_2, line 130 */
+            if (ret == 0) goto lab8; /* call Step_2, line 130 */
             if (ret < 0) return ret;
         }
-    lab12:
-        z->c = z->l - m;
+    lab8:
+        z->c = z->l - m9;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 131 */
+    {   int m10 = z->l - z->c; (void)m10; /* do, line 131 */
         {   int ret = r_Step_3(z);
-            if (ret == 0) goto lab13; /* call Step_3, line 131 */
+            if (ret == 0) goto lab9; /* call Step_3, line 131 */
             if (ret < 0) return ret;
         }
-    lab13:
-        z->c = z->l - m;
+    lab9:
+        z->c = z->l - m10;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 132 */
+    {   int m11 = z->l - z->c; (void)m11; /* do, line 132 */
         {   int ret = r_Step_4(z);
-            if (ret == 0) goto lab14; /* call Step_4, line 132 */
+            if (ret == 0) goto lab10; /* call Step_4, line 132 */
             if (ret < 0) return ret;
         }
-    lab14:
-        z->c = z->l - m;
+    lab10:
+        z->c = z->l - m11;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 133 */
+    {   int m12 = z->l - z->c; (void)m12; /* do, line 133 */
         {   int ret = r_Step_5a(z);
-            if (ret == 0) goto lab15; /* call Step_5a, line 133 */
+            if (ret == 0) goto lab11; /* call Step_5a, line 133 */
             if (ret < 0) return ret;
         }
-    lab15:
-        z->c = z->l - m;
+    lab11:
+        z->c = z->l - m12;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 134 */
+    {   int m13 = z->l - z->c; (void)m13; /* do, line 134 */
         {   int ret = r_Step_5b(z);
-            if (ret == 0) goto lab16; /* call Step_5b, line 134 */
+            if (ret == 0) goto lab12; /* call Step_5b, line 134 */
             if (ret < 0) return ret;
         }
-    lab16:
-        z->c = z->l - m;
+    lab12:
+        z->c = z->l - m13;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 137 */
-        if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */
+    {   int c14 = z->c; /* do, line 137 */
+        if (!(z->B[0])) goto lab13; /* Boolean test Y_found, line 137 */
         while(1) { /* repeat, line 137 */
-            int c = z->c;
+            int c15 = z->c;
             while(1) { /* goto, line 137 */
-                int c = z->c;
+                int c16 = z->c;
                 z->bra = z->c; /* [, line 137 */
-                if (!(eq_s(z, 1, s_33))) goto lab19;
+                if (!(eq_s(z, 1, s_33))) goto lab15;
                 z->ket = z->c; /* ], line 137 */
-                z->c = c;
+                z->c = c16;
                 break;
-            lab19:
-                z->c = c;
-                if (z->c >= z->l) goto lab18;
+            lab15:
+                z->c = c16;
+                if (z->c >= z->l) goto lab14;
                 z->c++; /* goto, line 137 */
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_34); /* <-, line 137 */
+            {   int ret = slice_from_s(z, 1, s_34); /* <-, line 137 */
                 if (ret < 0) return ret;
             }
             continue;
-        lab18:
-            z->c = c;
+        lab14:
+            z->c = c15;
             break;
         }
-    lab17:
-        z->c = c;
+    lab13:
+        z->c = c14;
     }
     return 1;
 }
 
 extern struct SN_env * porter_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); }
 
-extern void porter_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void porter_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c b/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c
index d586909..1ae77a8 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int portuguese_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_residual_form(struct SN_env * z);
 static int r_residual_suffix(struct SN_env * z);
 static int r_verb_suffix(struct SN_env * z);
@@ -14,36 +20,44 @@ static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * portuguese_ISO_8859_1_create_env(void);
 extern void portuguese_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 0xE3 };
-static symbol s_0_2[1] = { 0xF5 };
 
-static struct among a_0[3] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 0xE3 };
+static const symbol s_0_2[1] = { 0xF5 };
+
+static const struct among a_0[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 1, s_0_1, 0, 1, 0},
 /*  2 */ { 1, s_0_2, 0, 2, 0}
 };
 
-static symbol s_1_1[2] = { 'a', '~' };
-static symbol s_1_2[2] = { 'o', '~' };
+static const symbol s_1_1[2] = { 'a', '~' };
+static const symbol s_1_2[2] = { 'o', '~' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_1_1, 0, 1, 0},
 /*  2 */ { 2, s_1_2, 0, 2, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'c' };
-static symbol s_2_1[2] = { 'a', 'd' };
-static symbol s_2_2[2] = { 'o', 's' };
-static symbol s_2_3[2] = { 'i', 'v' };
+static const symbol s_2_0[2] = { 'i', 'c' };
+static const symbol s_2_1[2] = { 'a', 'd' };
+static const symbol s_2_2[2] = { 'o', 's' };
+static const symbol s_2_3[2] = { 'i', 'v' };
 
-static struct among a_2[4] =
+static const struct among a_2[4] =
 {
 /*  0 */ { 2, s_2_0, -1, -1, 0},
 /*  1 */ { 2, s_2_1, -1, -1, 0},
@@ -51,75 +65,75 @@ static struct among a_2[4] =
 /*  3 */ { 2, s_2_3, -1, 1, 0}
 };
 
-static symbol s_3_0[4] = { 'a', 'n', 't', 'e' };
-static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' };
-static symbol s_3_2[4] = { 0xED, 'v', 'e', 'l' };
+static const symbol s_3_0[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_3_1[4] = { 'a', 'v', 'e', 'l' };
+static const symbol s_3_2[4] = { 0xED, 'v', 'e', 'l' };
 
-static struct among a_3[3] =
+static const struct among a_3[3] =
 {
 /*  0 */ { 4, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0},
 /*  2 */ { 4, s_3_2, -1, 1, 0}
 };
 
-static symbol s_4_0[2] = { 'i', 'c' };
-static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_4_2[2] = { 'i', 'v' };
+static const symbol s_4_0[2] = { 'i', 'c' };
+static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_4_2[2] = { 'i', 'v' };
 
-static struct among a_4[3] =
+static const struct among a_4[3] =
 {
 /*  0 */ { 2, s_4_0, -1, 1, 0},
 /*  1 */ { 4, s_4_1, -1, 1, 0},
 /*  2 */ { 2, s_4_2, -1, 1, 0}
 };
 
-static symbol s_5_0[3] = { 'i', 'c', 'a' };
-static symbol s_5_1[5] = { 0xE2, 'n', 'c', 'i', 'a' };
-static symbol s_5_2[5] = { 0xEA, 'n', 'c', 'i', 'a' };
-static symbol s_5_3[3] = { 'i', 'r', 'a' };
-static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' };
-static symbol s_5_5[3] = { 'o', 's', 'a' };
-static symbol s_5_6[4] = { 'i', 's', 't', 'a' };
-static symbol s_5_7[3] = { 'i', 'v', 'a' };
-static symbol s_5_8[3] = { 'e', 'z', 'a' };
-static symbol s_5_9[5] = { 'l', 'o', 'g', 0xED, 'a' };
-static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' };
-static symbol s_5_11[4] = { 'a', 'n', 't', 'e' };
-static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' };
-static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
-static symbol s_5_14[4] = { 0xE1, 'v', 'e', 'l' };
-static symbol s_5_15[4] = { 0xED, 'v', 'e', 'l' };
-static symbol s_5_16[5] = { 'u', 'c', 'i', 0xF3, 'n' };
-static symbol s_5_17[3] = { 'i', 'c', 'o' };
-static symbol s_5_18[4] = { 'i', 's', 'm', 'o' };
-static symbol s_5_19[3] = { 'o', 's', 'o' };
-static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
-static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
-static symbol s_5_22[3] = { 'i', 'v', 'o' };
-static symbol s_5_23[5] = { 'a', 0xE7, 'a', '~', 'o' };
-static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' };
-static symbol s_5_25[4] = { 'i', 'c', 'a', 's' };
-static symbol s_5_26[6] = { 0xEA, 'n', 'c', 'i', 'a', 's' };
-static symbol s_5_27[4] = { 'i', 'r', 'a', 's' };
-static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
-static symbol s_5_29[4] = { 'o', 's', 'a', 's' };
-static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' };
-static symbol s_5_31[4] = { 'i', 'v', 'a', 's' };
-static symbol s_5_32[4] = { 'e', 'z', 'a', 's' };
-static symbol s_5_33[6] = { 'l', 'o', 'g', 0xED, 'a', 's' };
-static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
-static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
-static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
-static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' };
-static symbol s_5_38[6] = { 'a', 0xE7, 'o', '~', 'e', 's' };
-static symbol s_5_39[4] = { 'i', 'c', 'o', 's' };
-static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' };
-static symbol s_5_41[4] = { 'o', 's', 'o', 's' };
-static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' };
-static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' };
-static symbol s_5_44[4] = { 'i', 'v', 'o', 's' };
-
-static struct among a_5[45] =
+static const symbol s_5_0[3] = { 'i', 'c', 'a' };
+static const symbol s_5_1[5] = { 0xE2, 'n', 'c', 'i', 'a' };
+static const symbol s_5_2[5] = { 0xEA, 'n', 'c', 'i', 'a' };
+static const symbol s_5_3[3] = { 'i', 'r', 'a' };
+static const symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' };
+static const symbol s_5_5[3] = { 'o', 's', 'a' };
+static const symbol s_5_6[4] = { 'i', 's', 't', 'a' };
+static const symbol s_5_7[3] = { 'i', 'v', 'a' };
+static const symbol s_5_8[3] = { 'e', 'z', 'a' };
+static const symbol s_5_9[5] = { 'l', 'o', 'g', 0xED, 'a' };
+static const symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' };
+static const symbol s_5_11[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' };
+static const symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
+static const symbol s_5_14[4] = { 0xE1, 'v', 'e', 'l' };
+static const symbol s_5_15[4] = { 0xED, 'v', 'e', 'l' };
+static const symbol s_5_16[5] = { 'u', 'c', 'i', 0xF3, 'n' };
+static const symbol s_5_17[3] = { 'i', 'c', 'o' };
+static const symbol s_5_18[4] = { 'i', 's', 'm', 'o' };
+static const symbol s_5_19[3] = { 'o', 's', 'o' };
+static const symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_5_22[3] = { 'i', 'v', 'o' };
+static const symbol s_5_23[5] = { 'a', 0xE7, 'a', '~', 'o' };
+static const symbol s_5_24[4] = { 'a', 'd', 'o', 'r' };
+static const symbol s_5_25[4] = { 'i', 'c', 'a', 's' };
+static const symbol s_5_26[6] = { 0xEA, 'n', 'c', 'i', 'a', 's' };
+static const symbol s_5_27[4] = { 'i', 'r', 'a', 's' };
+static const symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
+static const symbol s_5_29[4] = { 'o', 's', 'a', 's' };
+static const symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' };
+static const symbol s_5_31[4] = { 'i', 'v', 'a', 's' };
+static const symbol s_5_32[4] = { 'e', 'z', 'a', 's' };
+static const symbol s_5_33[6] = { 'l', 'o', 'g', 0xED, 'a', 's' };
+static const symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
+static const symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
+static const symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
+static const symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' };
+static const symbol s_5_38[6] = { 'a', 0xE7, 'o', '~', 'e', 's' };
+static const symbol s_5_39[4] = { 'i', 'c', 'o', 's' };
+static const symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' };
+static const symbol s_5_41[4] = { 'o', 's', 'o', 's' };
+static const symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' };
+static const symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' };
+static const symbol s_5_44[4] = { 'i', 'v', 'o', 's' };
+
+static const struct among a_5[45] =
 {
 /*  0 */ { 3, s_5_0, -1, 1, 0},
 /*  1 */ { 5, s_5_1, -1, 1, 0},
@@ -168,128 +182,128 @@ static struct among a_5[45] =
 /* 44 */ { 4, s_5_44, -1, 8, 0}
 };
 
-static symbol s_6_0[3] = { 'a', 'd', 'a' };
-static symbol s_6_1[3] = { 'i', 'd', 'a' };
-static symbol s_6_2[2] = { 'i', 'a' };
-static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' };
-static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' };
-static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' };
-static symbol s_6_6[3] = { 'a', 'r', 'a' };
-static symbol s_6_7[3] = { 'e', 'r', 'a' };
-static symbol s_6_8[3] = { 'i', 'r', 'a' };
-static symbol s_6_9[3] = { 'a', 'v', 'a' };
-static symbol s_6_10[4] = { 'a', 's', 's', 'e' };
-static symbol s_6_11[4] = { 'e', 's', 's', 'e' };
-static symbol s_6_12[4] = { 'i', 's', 's', 'e' };
-static symbol s_6_13[4] = { 'a', 's', 't', 'e' };
-static symbol s_6_14[4] = { 'e', 's', 't', 'e' };
-static symbol s_6_15[4] = { 'i', 's', 't', 'e' };
-static symbol s_6_16[2] = { 'e', 'i' };
-static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' };
-static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' };
-static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' };
-static symbol s_6_20[2] = { 'a', 'm' };
-static symbol s_6_21[3] = { 'i', 'a', 'm' };
-static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' };
-static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' };
-static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' };
-static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' };
-static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' };
-static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' };
-static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' };
-static symbol s_6_29[2] = { 'e', 'm' };
-static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' };
-static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' };
-static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' };
-static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' };
-static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' };
-static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' };
-static symbol s_6_36[3] = { 'a', 'd', 'o' };
-static symbol s_6_37[3] = { 'i', 'd', 'o' };
-static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' };
-static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' };
-static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' };
-static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' };
-static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' };
-static symbol s_6_44[2] = { 'a', 'r' };
-static symbol s_6_45[2] = { 'e', 'r' };
-static symbol s_6_46[2] = { 'i', 'r' };
-static symbol s_6_47[2] = { 'a', 's' };
-static symbol s_6_48[4] = { 'a', 'd', 'a', 's' };
-static symbol s_6_49[4] = { 'i', 'd', 'a', 's' };
-static symbol s_6_50[3] = { 'i', 'a', 's' };
-static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' };
-static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' };
-static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' };
-static symbol s_6_54[4] = { 'a', 'r', 'a', 's' };
-static symbol s_6_55[4] = { 'e', 'r', 'a', 's' };
-static symbol s_6_56[4] = { 'i', 'r', 'a', 's' };
-static symbol s_6_57[4] = { 'a', 'v', 'a', 's' };
-static symbol s_6_58[2] = { 'e', 's' };
-static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' };
-static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' };
-static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' };
-static symbol s_6_62[4] = { 'a', 'r', 'e', 's' };
-static symbol s_6_63[4] = { 'e', 'r', 'e', 's' };
-static symbol s_6_64[4] = { 'i', 'r', 'e', 's' };
-static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' };
-static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' };
-static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' };
-static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' };
-static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' };
-static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' };
-static symbol s_6_71[2] = { 'i', 's' };
-static symbol s_6_72[3] = { 'a', 'i', 's' };
-static symbol s_6_73[3] = { 'e', 'i', 's' };
-static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' };
-static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' };
-static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' };
-static symbol s_6_77[5] = { 0xE1, 'r', 'e', 'i', 's' };
-static symbol s_6_78[5] = { 0xE9, 'r', 'e', 'i', 's' };
-static symbol s_6_79[5] = { 0xED, 'r', 'e', 'i', 's' };
-static symbol s_6_80[6] = { 0xE1, 's', 's', 'e', 'i', 's' };
-static symbol s_6_81[6] = { 0xE9, 's', 's', 'e', 'i', 's' };
-static symbol s_6_82[6] = { 0xED, 's', 's', 'e', 'i', 's' };
-static symbol s_6_83[5] = { 0xE1, 'v', 'e', 'i', 's' };
-static symbol s_6_84[4] = { 0xED, 'e', 'i', 's' };
-static symbol s_6_85[6] = { 'a', 'r', 0xED, 'e', 'i', 's' };
-static symbol s_6_86[6] = { 'e', 'r', 0xED, 'e', 'i', 's' };
-static symbol s_6_87[6] = { 'i', 'r', 0xED, 'e', 'i', 's' };
-static symbol s_6_88[4] = { 'a', 'd', 'o', 's' };
-static symbol s_6_89[4] = { 'i', 'd', 'o', 's' };
-static symbol s_6_90[4] = { 'a', 'm', 'o', 's' };
-static symbol s_6_91[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' };
-static symbol s_6_92[6] = { 0xE9, 'r', 'a', 'm', 'o', 's' };
-static symbol s_6_93[6] = { 0xED, 'r', 'a', 'm', 'o', 's' };
-static symbol s_6_94[6] = { 0xE1, 'v', 'a', 'm', 'o', 's' };
-static symbol s_6_95[5] = { 0xED, 'a', 'm', 'o', 's' };
-static symbol s_6_96[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' };
-static symbol s_6_97[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' };
-static symbol s_6_98[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' };
-static symbol s_6_99[4] = { 'e', 'm', 'o', 's' };
-static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
-static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
-static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
-static symbol s_6_103[7] = { 0xE1, 's', 's', 'e', 'm', 'o', 's' };
-static symbol s_6_104[7] = { 0xEA, 's', 's', 'e', 'm', 'o', 's' };
-static symbol s_6_105[7] = { 0xED, 's', 's', 'e', 'm', 'o', 's' };
-static symbol s_6_106[4] = { 'i', 'm', 'o', 's' };
-static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' };
-static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' };
-static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' };
-static symbol s_6_110[4] = { 0xE1, 'm', 'o', 's' };
-static symbol s_6_111[4] = { 'a', 'r', 0xE1, 's' };
-static symbol s_6_112[4] = { 'e', 'r', 0xE1, 's' };
-static symbol s_6_113[4] = { 'i', 'r', 0xE1, 's' };
-static symbol s_6_114[2] = { 'e', 'u' };
-static symbol s_6_115[2] = { 'i', 'u' };
-static symbol s_6_116[2] = { 'o', 'u' };
-static symbol s_6_117[3] = { 'a', 'r', 0xE1 };
-static symbol s_6_118[3] = { 'e', 'r', 0xE1 };
-static symbol s_6_119[3] = { 'i', 'r', 0xE1 };
-
-static struct among a_6[120] =
+static const symbol s_6_0[3] = { 'a', 'd', 'a' };
+static const symbol s_6_1[3] = { 'i', 'd', 'a' };
+static const symbol s_6_2[2] = { 'i', 'a' };
+static const symbol s_6_3[4] = { 'a', 'r', 'i', 'a' };
+static const symbol s_6_4[4] = { 'e', 'r', 'i', 'a' };
+static const symbol s_6_5[4] = { 'i', 'r', 'i', 'a' };
+static const symbol s_6_6[3] = { 'a', 'r', 'a' };
+static const symbol s_6_7[3] = { 'e', 'r', 'a' };
+static const symbol s_6_8[3] = { 'i', 'r', 'a' };
+static const symbol s_6_9[3] = { 'a', 'v', 'a' };
+static const symbol s_6_10[4] = { 'a', 's', 's', 'e' };
+static const symbol s_6_11[4] = { 'e', 's', 's', 'e' };
+static const symbol s_6_12[4] = { 'i', 's', 's', 'e' };
+static const symbol s_6_13[4] = { 'a', 's', 't', 'e' };
+static const symbol s_6_14[4] = { 'e', 's', 't', 'e' };
+static const symbol s_6_15[4] = { 'i', 's', 't', 'e' };
+static const symbol s_6_16[2] = { 'e', 'i' };
+static const symbol s_6_17[4] = { 'a', 'r', 'e', 'i' };
+static const symbol s_6_18[4] = { 'e', 'r', 'e', 'i' };
+static const symbol s_6_19[4] = { 'i', 'r', 'e', 'i' };
+static const symbol s_6_20[2] = { 'a', 'm' };
+static const symbol s_6_21[3] = { 'i', 'a', 'm' };
+static const symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' };
+static const symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' };
+static const symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' };
+static const symbol s_6_25[4] = { 'a', 'r', 'a', 'm' };
+static const symbol s_6_26[4] = { 'e', 'r', 'a', 'm' };
+static const symbol s_6_27[4] = { 'i', 'r', 'a', 'm' };
+static const symbol s_6_28[4] = { 'a', 'v', 'a', 'm' };
+static const symbol s_6_29[2] = { 'e', 'm' };
+static const symbol s_6_30[4] = { 'a', 'r', 'e', 'm' };
+static const symbol s_6_31[4] = { 'e', 'r', 'e', 'm' };
+static const symbol s_6_32[4] = { 'i', 'r', 'e', 'm' };
+static const symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' };
+static const symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' };
+static const symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' };
+static const symbol s_6_36[3] = { 'a', 'd', 'o' };
+static const symbol s_6_37[3] = { 'i', 'd', 'o' };
+static const symbol s_6_38[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_6_39[4] = { 'e', 'n', 'd', 'o' };
+static const symbol s_6_40[4] = { 'i', 'n', 'd', 'o' };
+static const symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' };
+static const symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' };
+static const symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' };
+static const symbol s_6_44[2] = { 'a', 'r' };
+static const symbol s_6_45[2] = { 'e', 'r' };
+static const symbol s_6_46[2] = { 'i', 'r' };
+static const symbol s_6_47[2] = { 'a', 's' };
+static const symbol s_6_48[4] = { 'a', 'd', 'a', 's' };
+static const symbol s_6_49[4] = { 'i', 'd', 'a', 's' };
+static const symbol s_6_50[3] = { 'i', 'a', 's' };
+static const symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' };
+static const symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' };
+static const symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' };
+static const symbol s_6_54[4] = { 'a', 'r', 'a', 's' };
+static const symbol s_6_55[4] = { 'e', 'r', 'a', 's' };
+static const symbol s_6_56[4] = { 'i', 'r', 'a', 's' };
+static const symbol s_6_57[4] = { 'a', 'v', 'a', 's' };
+static const symbol s_6_58[2] = { 'e', 's' };
+static const symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' };
+static const symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' };
+static const symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' };
+static const symbol s_6_62[4] = { 'a', 'r', 'e', 's' };
+static const symbol s_6_63[4] = { 'e', 'r', 'e', 's' };
+static const symbol s_6_64[4] = { 'i', 'r', 'e', 's' };
+static const symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' };
+static const symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' };
+static const symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' };
+static const symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' };
+static const symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' };
+static const symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' };
+static const symbol s_6_71[2] = { 'i', 's' };
+static const symbol s_6_72[3] = { 'a', 'i', 's' };
+static const symbol s_6_73[3] = { 'e', 'i', 's' };
+static const symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' };
+static const symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' };
+static const symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' };
+static const symbol s_6_77[5] = { 0xE1, 'r', 'e', 'i', 's' };
+static const symbol s_6_78[5] = { 0xE9, 'r', 'e', 'i', 's' };
+static const symbol s_6_79[5] = { 0xED, 'r', 'e', 'i', 's' };
+static const symbol s_6_80[6] = { 0xE1, 's', 's', 'e', 'i', 's' };
+static const symbol s_6_81[6] = { 0xE9, 's', 's', 'e', 'i', 's' };
+static const symbol s_6_82[6] = { 0xED, 's', 's', 'e', 'i', 's' };
+static const symbol s_6_83[5] = { 0xE1, 'v', 'e', 'i', 's' };
+static const symbol s_6_84[4] = { 0xED, 'e', 'i', 's' };
+static const symbol s_6_85[6] = { 'a', 'r', 0xED, 'e', 'i', 's' };
+static const symbol s_6_86[6] = { 'e', 'r', 0xED, 'e', 'i', 's' };
+static const symbol s_6_87[6] = { 'i', 'r', 0xED, 'e', 'i', 's' };
+static const symbol s_6_88[4] = { 'a', 'd', 'o', 's' };
+static const symbol s_6_89[4] = { 'i', 'd', 'o', 's' };
+static const symbol s_6_90[4] = { 'a', 'm', 'o', 's' };
+static const symbol s_6_91[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_6_92[6] = { 0xE9, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_6_93[6] = { 0xED, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_6_94[6] = { 0xE1, 'v', 'a', 'm', 'o', 's' };
+static const symbol s_6_95[5] = { 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_6_96[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_6_97[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_6_98[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_6_99[4] = { 'e', 'm', 'o', 's' };
+static const symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_6_103[7] = { 0xE1, 's', 's', 'e', 'm', 'o', 's' };
+static const symbol s_6_104[7] = { 0xEA, 's', 's', 'e', 'm', 'o', 's' };
+static const symbol s_6_105[7] = { 0xED, 's', 's', 'e', 'm', 'o', 's' };
+static const symbol s_6_106[4] = { 'i', 'm', 'o', 's' };
+static const symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' };
+static const symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' };
+static const symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' };
+static const symbol s_6_110[4] = { 0xE1, 'm', 'o', 's' };
+static const symbol s_6_111[4] = { 'a', 'r', 0xE1, 's' };
+static const symbol s_6_112[4] = { 'e', 'r', 0xE1, 's' };
+static const symbol s_6_113[4] = { 'i', 'r', 0xE1, 's' };
+static const symbol s_6_114[2] = { 'e', 'u' };
+static const symbol s_6_115[2] = { 'i', 'u' };
+static const symbol s_6_116[2] = { 'o', 'u' };
+static const symbol s_6_117[3] = { 'a', 'r', 0xE1 };
+static const symbol s_6_118[3] = { 'e', 'r', 0xE1 };
+static const symbol s_6_119[3] = { 'i', 'r', 0xE1 };
+
+static const struct among a_6[120] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 3, s_6_1, -1, 1, 0},
@@ -413,15 +427,15 @@ static struct among a_6[120] =
 /*119 */ { 3, s_6_119, -1, 1, 0}
 };
 
-static symbol s_7_0[1] = { 'a' };
-static symbol s_7_1[1] = { 'i' };
-static symbol s_7_2[1] = { 'o' };
-static symbol s_7_3[2] = { 'o', 's' };
-static symbol s_7_4[1] = { 0xE1 };
-static symbol s_7_5[1] = { 0xED };
-static symbol s_7_6[1] = { 0xF3 };
+static const symbol s_7_0[1] = { 'a' };
+static const symbol s_7_1[1] = { 'i' };
+static const symbol s_7_2[1] = { 'o' };
+static const symbol s_7_3[2] = { 'o', 's' };
+static const symbol s_7_4[1] = { 0xE1 };
+static const symbol s_7_5[1] = { 0xED };
+static const symbol s_7_6[1] = { 0xF3 };
 
-static struct among a_7[7] =
+static const struct among a_7[7] =
 {
 /*  0 */ { 1, s_7_0, -1, 1, 0},
 /*  1 */ { 1, s_7_1, -1, 1, 0},
@@ -432,12 +446,12 @@ static struct among a_7[7] =
 /*  6 */ { 1, s_7_6, -1, 1, 0}
 };
 
-static symbol s_8_0[1] = { 'e' };
-static symbol s_8_1[1] = { 0xE7 };
-static symbol s_8_2[1] = { 0xE9 };
-static symbol s_8_3[1] = { 0xEA };
+static const symbol s_8_0[1] = { 'e' };
+static const symbol s_8_1[1] = { 0xE7 };
+static const symbol s_8_2[1] = { 0xE9 };
+static const symbol s_8_3[1] = { 0xEA };
 
-static struct among a_8[4] =
+static const struct among a_8[4] =
 {
 /*  0 */ { 1, s_8_0, -1, 1, 0},
 /*  1 */ { 1, s_8_1, -1, 2, 0},
@@ -445,46 +459,45 @@ static struct among a_8[4] =
 /*  3 */ { 1, s_8_3, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 };
-
-static symbol s_0[] = { 'a', '~' };
-static symbol s_1[] = { 'o', '~' };
-static symbol s_2[] = { 0xE3 };
-static symbol s_3[] = { 0xF5 };
-static symbol s_4[] = { 'l', 'o', 'g' };
-static symbol s_5[] = { 'u' };
-static symbol s_6[] = { 'e', 'n', 't', 'e' };
-static symbol s_7[] = { 'a', 't' };
-static symbol s_8[] = { 'a', 't' };
-static symbol s_9[] = { 'e' };
-static symbol s_10[] = { 'i', 'r' };
-static symbol s_11[] = { 'u' };
-static symbol s_12[] = { 'g' };
-static symbol s_13[] = { 'i' };
-static symbol s_14[] = { 'c' };
-static symbol s_15[] = { 'c' };
-static symbol s_16[] = { 'i' };
-static symbol s_17[] = { 'c' };
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 };
+
+static const symbol s_0[] = { 'a', '~' };
+static const symbol s_1[] = { 'o', '~' };
+static const symbol s_2[] = { 0xE3 };
+static const symbol s_3[] = { 0xF5 };
+static const symbol s_4[] = { 'l', 'o', 'g' };
+static const symbol s_5[] = { 'u' };
+static const symbol s_6[] = { 'e', 'n', 't', 'e' };
+static const symbol s_7[] = { 'a', 't' };
+static const symbol s_8[] = { 'a', 't' };
+static const symbol s_9[] = { 'e' };
+static const symbol s_10[] = { 'i', 'r' };
+static const symbol s_11[] = { 'u' };
+static const symbol s_12[] = { 'g' };
+static const symbol s_13[] = { 'i' };
+static const symbol s_14[] = { 'c' };
+static const symbol s_15[] = { 'c' };
+static const symbol s_16[] = { 'i' };
+static const symbol s_17[] = { 'c' };
 
 static int r_prelude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 36 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 37 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 227 && z->p[z->c + 0] != 245)) among_var = 3; else
         among_var = find_among(z, a_0, 3); /* substring, line 37 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 37 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_0); /* <-, line 38 */
+                {   int ret = slice_from_s(z, 2, s_0); /* <-, line 38 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_1); /* <-, line 39 */
+                {   int ret = slice_from_s(z, 2, s_1); /* <-, line 39 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -495,7 +508,7 @@ static int r_prelude(struct SN_env * z) {
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -505,92 +518,78 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 50 */
-        {   int c = z->c; /* or, line 52 */
-            if (!(in_grouping(z, g_v, 97, 250))) goto lab2;
-            {   int c = z->c; /* or, line 51 */
-                if (!(out_grouping(z, g_v, 97, 250))) goto lab4;
-                while(1) { /* gopast, line 51 */
-                    if (!(in_grouping(z, g_v, 97, 250))) goto lab5;
-                    break;
-                lab5:
-                    if (z->c >= z->l) goto lab4;
-                    z->c++; /* gopast, line 51 */
+    {   int c1 = z->c; /* do, line 50 */
+        {   int c2 = z->c; /* or, line 52 */
+            if (in_grouping(z, g_v, 97, 250, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 51 */
+                if (out_grouping(z, g_v, 97, 250, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 51 */
+                    int ret = out_grouping(z, g_v, 97, 250, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
-                if (!(in_grouping(z, g_v, 97, 250))) goto lab2;
-                while(1) { /* gopast, line 51 */
-                    if (!(out_grouping(z, g_v, 97, 250))) goto lab6;
-                    break;
-                lab6:
-                    if (z->c >= z->l) goto lab2;
-                    z->c++; /* gopast, line 51 */
+                z->c = c3;
+                if (in_grouping(z, g_v, 97, 250, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 51 */
+                    int ret = in_grouping(z, g_v, 97, 250, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
                 }
             }
         lab3:
             goto lab1;
         lab2:
-            z->c = c;
-            if (!(out_grouping(z, g_v, 97, 250))) goto lab0;
-            {   int c = z->c; /* or, line 53 */
-                if (!(out_grouping(z, g_v, 97, 250))) goto lab8;
-                while(1) { /* gopast, line 53 */
-                    if (!(in_grouping(z, g_v, 97, 250))) goto lab9;
-                    break;
-                lab9:
-                    if (z->c >= z->l) goto lab8;
-                    z->c++; /* gopast, line 53 */
+            z->c = c2;
+            if (out_grouping(z, g_v, 97, 250, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 53 */
+                if (out_grouping(z, g_v, 97, 250, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 53 */
+                    int ret = out_grouping(z, g_v, 97, 250, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
                 }
-                goto lab7;
-            lab8:
-                z->c = c;
-                if (!(in_grouping(z, g_v, 97, 250))) goto lab0;
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping(z, g_v, 97, 250, 0)) goto lab0;
                 if (z->c >= z->l) goto lab0;
                 z->c++; /* next, line 53 */
             }
-        lab7:
+        lab5:
             ;
         }
     lab1:
         z->I[0] = z->c; /* setmark pV, line 54 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 56 */
-        while(1) { /* gopast, line 57 */
-            if (!(in_grouping(z, g_v, 97, 250))) goto lab11;
-            break;
-        lab11:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 57 */
+    {   int c5 = z->c; /* do, line 56 */
+        {    /* gopast */ /* grouping v, line 57 */
+            int ret = out_grouping(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 57 */
-            if (!(out_grouping(z, g_v, 97, 250))) goto lab12;
-            break;
-        lab12:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 57 */
+        {    /* gopast */ /* non v, line 57 */
+            int ret = in_grouping(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p1, line 57 */
-        while(1) { /* gopast, line 58 */
-            if (!(in_grouping(z, g_v, 97, 250))) goto lab13;
-            break;
-        lab13:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 58 */
+        {    /* gopast */ /* grouping v, line 58 */
+            int ret = out_grouping(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 58 */
-            if (!(out_grouping(z, g_v, 97, 250))) goto lab14;
-            break;
-        lab14:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 58 */
+        {    /* gopast */ /* non v, line 58 */
+            int ret = in_grouping(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[2] = z->c; /* setmark p2, line 58 */
-    lab10:
-        z->c = c;
+    lab7:
+        z->c = c5;
     }
     return 1;
 }
@@ -598,22 +597,21 @@ static int r_mark_regions(struct SN_env * z) {
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 62 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 63 */
+        if (z->c + 1 >= z->l || z->p[z->c + 1] != 126) among_var = 3; else
         among_var = find_among(z, a_1, 3); /* substring, line 63 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 63 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_2); /* <-, line 64 */
+                {   int ret = slice_from_s(z, 1, s_2); /* <-, line 64 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_3); /* <-, line 65 */
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 65 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -624,7 +622,7 @@ static int r_postlude(struct SN_env * z) {
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -648,6 +646,7 @@ static int r_R2(struct SN_env * z) {
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 77 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((839714 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_5, 45); /* substring, line 77 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 77 */
@@ -658,8 +657,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 93 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 93 */
+            {   int ret = slice_del(z); /* delete, line 93 */
                 if (ret < 0) return ret;
             }
             break;
@@ -668,8 +666,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 98 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_4); /* <-, line 98 */
+            {   int ret = slice_from_s(z, 3, s_4); /* <-, line 98 */
                 if (ret < 0) return ret;
             }
             break;
@@ -678,8 +675,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 102 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_5); /* <-, line 102 */
+            {   int ret = slice_from_s(z, 1, s_5); /* <-, line 102 */
                 if (ret < 0) return ret;
             }
             break;
@@ -688,8 +684,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 106 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 4, s_6); /* <-, line 106 */
+            {   int ret = slice_from_s(z, 4, s_6); /* <-, line 106 */
                 if (ret < 0) return ret;
             }
             break;
@@ -698,35 +693,33 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 110 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 110 */
+            {   int ret = slice_del(z); /* delete, line 110 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 111 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
                 z->ket = z->c; /* [, line 112 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab0; }
                 among_var = find_among_b(z, a_2, 4); /* substring, line 112 */
-                if (!(among_var)) { z->c = z->l - m; goto lab0; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 112 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 112 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 112 */
+                {   int ret = slice_del(z); /* delete, line 112 */
                     if (ret < 0) return ret;
                 }
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab0; }
+                    case 0: { z->c = z->l - m_keep; goto lab0; }
                     case 1:
                         z->ket = z->c; /* [, line 113 */
-                        if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; }
+                        if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m_keep; goto lab0; }
                         z->bra = z->c; /* ], line 113 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 113 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 113 */
+                        {   int ret = slice_del(z); /* delete, line 113 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -740,24 +733,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 122 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 122 */
+            {   int ret = slice_del(z); /* delete, line 122 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 123 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 123 */
                 z->ket = z->c; /* [, line 124 */
+                if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) { z->c = z->l - m_keep; goto lab1; }
                 among_var = find_among_b(z, a_3, 3); /* substring, line 124 */
-                if (!(among_var)) { z->c = z->l - m; goto lab1; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab1; }
                 z->bra = z->c; /* ], line 124 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab1; }
+                    case 0: { z->c = z->l - m_keep; goto lab1; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 127 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 127 */
+                        {   int ret = slice_del(z); /* delete, line 127 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -771,24 +763,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 134 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 135 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 135 */
                 z->ket = z->c; /* [, line 136 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab2; }
                 among_var = find_among_b(z, a_4, 3); /* substring, line 136 */
-                if (!(among_var)) { z->c = z->l - m; goto lab2; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab2; }
                 z->bra = z->c; /* ], line 136 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab2; }
+                    case 0: { z->c = z->l - m_keep; goto lab2; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call R2, line 139 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 139 */
+                        {   int ret = slice_del(z); /* delete, line 139 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -802,20 +793,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 146 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 146 */
+            {   int ret = slice_del(z); /* delete, line 146 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 147 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 147 */
                 z->ket = z->c; /* [, line 148 */
-                if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; }
+                if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 148 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 148 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 148 */
+                {   int ret = slice_del(z); /* delete, line 148 */
                     if (ret < 0) return ret;
                 }
             lab3:
@@ -828,8 +817,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret < 0) return ret;
             }
             if (!(eq_s_b(z, 1, s_9))) return 0;
-            {   int ret;
-                ret = slice_from_s(z, 2, s_10); /* <-, line 154 */
+            {   int ret = slice_from_s(z, 2, s_10); /* <-, line 154 */
                 if (ret < 0) return ret;
             }
             break;
@@ -839,26 +827,25 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 159 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 159 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 159 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 160 */
         among_var = find_among_b(z, a_6, 120); /* substring, line 160 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 160 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 179 */
+                {   int ret = slice_del(z); /* delete, line 179 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
@@ -876,8 +863,7 @@ static int r_residual_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 187 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 187 */
+            {   int ret = slice_del(z); /* delete, line 187 */
                 if (ret < 0) return ret;
             }
             break;
@@ -898,12 +884,11 @@ static int r_residual_form(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 194 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 194 */
+            {   int ret = slice_del(z); /* delete, line 194 */
                 if (ret < 0) return ret;
             }
             z->ket = z->c; /* [, line 194 */
-            {   int m = z->l - z->c; (void) m; /* or, line 194 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 194 */
                 if (!(eq_s_b(z, 1, s_11))) goto lab1;
                 z->bra = z->c; /* ], line 194 */
                 {   int m_test = z->l - z->c; /* test, line 194 */
@@ -912,7 +897,7 @@ static int r_residual_form(struct SN_env * z) {
                 }
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_13))) return 0;
                 z->bra = z->c; /* ], line 195 */
                 {   int m_test = z->l - z->c; /* test, line 195 */
@@ -925,14 +910,12 @@ static int r_residual_form(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 195 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 195 */
+            {   int ret = slice_del(z); /* delete, line 195 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_15); /* <-, line 196 */
+            {   int ret = slice_from_s(z, 1, s_15); /* <-, line 196 */
                 if (ret < 0) return ret;
             }
             break;
@@ -941,43 +924,43 @@ static int r_residual_form(struct SN_env * z) {
 }
 
 extern int portuguese_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 202 */
+    {   int c1 = z->c; /* do, line 202 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 202 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 203 */
+    {   int c2 = z->c; /* do, line 203 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 203 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 204 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 205 */
-        {   int m = z->l - z->c; (void) m; /* or, line 209 */
-            {   int m = z->l - z->c; (void) m; /* and, line 207 */
-                {   int m = z->l - z->c; (void) m; /* or, line 206 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 205 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 209 */
+            {   int m5 = z->l - z->c; (void)m5; /* and, line 207 */
+                {   int m6 = z->l - z->c; (void)m6; /* or, line 206 */
                     {   int ret = r_standard_suffix(z);
                         if (ret == 0) goto lab6; /* call standard_suffix, line 206 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_verb_suffix(z);
                         if (ret == 0) goto lab4; /* call verb_suffix, line 206 */
                         if (ret < 0) return ret;
                     }
                 }
             lab5:
-                z->c = z->l - m;
-                {   int m = z->l - z->c; (void) m; /* do, line 207 */
+                z->c = z->l - m5;
+                {   int m7 = z->l - z->c; (void)m7; /* do, line 207 */
                     z->ket = z->c; /* [, line 207 */
                     if (!(eq_s_b(z, 1, s_16))) goto lab7;
                     z->bra = z->c; /* ], line 207 */
@@ -989,17 +972,16 @@ extern int portuguese_ISO_8859_1_stem(struct SN_env * z) {
                         if (ret == 0) goto lab7; /* call RV, line 207 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 207 */
+                    {   int ret = slice_del(z); /* delete, line 207 */
                         if (ret < 0) return ret;
                     }
                 lab7:
-                    z->c = z->l - m;
+                    z->c = z->l - m7;
                 }
             }
             goto lab3;
         lab4:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_residual_suffix(z);
                 if (ret == 0) goto lab2; /* call residual_suffix, line 209 */
                 if (ret < 0) return ret;
@@ -1007,29 +989,29 @@ extern int portuguese_ISO_8859_1_stem(struct SN_env * z) {
         }
     lab3:
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 211 */
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 211 */
         {   int ret = r_residual_form(z);
             if (ret == 0) goto lab8; /* call residual_form, line 211 */
             if (ret < 0) return ret;
         }
     lab8:
-        z->c = z->l - m;
+        z->c = z->l - m8;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 213 */
+    {   int c9 = z->c; /* do, line 213 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab9; /* call postlude, line 213 */
             if (ret < 0) return ret;
         }
     lab9:
-        z->c = c;
+        z->c = c9;
     }
     return 1;
 }
 
 extern struct SN_env * portuguese_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void portuguese_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void portuguese_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c b/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c
index acc4fa9..8aa7673 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int spanish_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_residual_suffix(struct SN_env * z);
 static int r_verb_suffix(struct SN_env * z);
 static int r_y_verb_suffix(struct SN_env * z);
@@ -14,17 +20,25 @@ static int r_R1(struct SN_env * z);
 static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * spanish_ISO_8859_1_create_env(void);
 extern void spanish_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 0xE1 };
-static symbol s_0_2[1] = { 0xE9 };
-static symbol s_0_3[1] = { 0xED };
-static symbol s_0_4[1] = { 0xF3 };
-static symbol s_0_5[1] = { 0xFA };
 
-static struct among a_0[6] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 0xE1 };
+static const symbol s_0_2[1] = { 0xE9 };
+static const symbol s_0_3[1] = { 0xED };
+static const symbol s_0_4[1] = { 0xF3 };
+static const symbol s_0_5[1] = { 0xFA };
+
+static const struct among a_0[6] =
 {
 /*  0 */ { 0, 0, -1, 6, 0},
 /*  1 */ { 1, s_0_1, 0, 1, 0},
@@ -34,21 +48,21 @@ static struct among a_0[6] =
 /*  5 */ { 1, s_0_5, 0, 5, 0}
 };
 
-static symbol s_1_0[2] = { 'l', 'a' };
-static symbol s_1_1[4] = { 's', 'e', 'l', 'a' };
-static symbol s_1_2[2] = { 'l', 'e' };
-static symbol s_1_3[2] = { 'm', 'e' };
-static symbol s_1_4[2] = { 's', 'e' };
-static symbol s_1_5[2] = { 'l', 'o' };
-static symbol s_1_6[4] = { 's', 'e', 'l', 'o' };
-static symbol s_1_7[3] = { 'l', 'a', 's' };
-static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' };
-static symbol s_1_9[3] = { 'l', 'e', 's' };
-static symbol s_1_10[3] = { 'l', 'o', 's' };
-static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' };
-static symbol s_1_12[3] = { 'n', 'o', 's' };
+static const symbol s_1_0[2] = { 'l', 'a' };
+static const symbol s_1_1[4] = { 's', 'e', 'l', 'a' };
+static const symbol s_1_2[2] = { 'l', 'e' };
+static const symbol s_1_3[2] = { 'm', 'e' };
+static const symbol s_1_4[2] = { 's', 'e' };
+static const symbol s_1_5[2] = { 'l', 'o' };
+static const symbol s_1_6[4] = { 's', 'e', 'l', 'o' };
+static const symbol s_1_7[3] = { 'l', 'a', 's' };
+static const symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' };
+static const symbol s_1_9[3] = { 'l', 'e', 's' };
+static const symbol s_1_10[3] = { 'l', 'o', 's' };
+static const symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' };
+static const symbol s_1_12[3] = { 'n', 'o', 's' };
 
-static struct among a_1[13] =
+static const struct among a_1[13] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 4, s_1_1, 0, -1, 0},
@@ -65,19 +79,19 @@ static struct among a_1[13] =
 /* 12 */ { 3, s_1_12, -1, -1, 0}
 };
 
-static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' };
-static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' };
-static symbol s_2_3[4] = { 0xE1, 'n', 'd', 'o' };
-static symbol s_2_4[5] = { 'i', 0xE9, 'n', 'd', 'o' };
-static symbol s_2_5[2] = { 'a', 'r' };
-static symbol s_2_6[2] = { 'e', 'r' };
-static symbol s_2_7[2] = { 'i', 'r' };
-static symbol s_2_8[2] = { 0xE1, 'r' };
-static symbol s_2_9[2] = { 0xE9, 'r' };
-static symbol s_2_10[2] = { 0xED, 'r' };
+static const symbol s_2_0[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' };
+static const symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' };
+static const symbol s_2_3[4] = { 0xE1, 'n', 'd', 'o' };
+static const symbol s_2_4[5] = { 'i', 0xE9, 'n', 'd', 'o' };
+static const symbol s_2_5[2] = { 'a', 'r' };
+static const symbol s_2_6[2] = { 'e', 'r' };
+static const symbol s_2_7[2] = { 'i', 'r' };
+static const symbol s_2_8[2] = { 0xE1, 'r' };
+static const symbol s_2_9[2] = { 0xE9, 'r' };
+static const symbol s_2_10[2] = { 0xED, 'r' };
 
-static struct among a_2[11] =
+static const struct among a_2[11] =
 {
 /*  0 */ { 4, s_2_0, -1, 6, 0},
 /*  1 */ { 5, s_2_1, -1, 6, 0},
@@ -92,12 +106,12 @@ static struct among a_2[11] =
 /* 10 */ { 2, s_2_10, -1, 5, 0}
 };
 
-static symbol s_3_0[2] = { 'i', 'c' };
-static symbol s_3_1[2] = { 'a', 'd' };
-static symbol s_3_2[2] = { 'o', 's' };
-static symbol s_3_3[2] = { 'i', 'v' };
+static const symbol s_3_0[2] = { 'i', 'c' };
+static const symbol s_3_1[2] = { 'a', 'd' };
+static const symbol s_3_2[2] = { 'o', 's' };
+static const symbol s_3_3[2] = { 'i', 'v' };
 
-static struct among a_3[4] =
+static const struct among a_3[4] =
 {
 /*  0 */ { 2, s_3_0, -1, -1, 0},
 /*  1 */ { 2, s_3_1, -1, -1, 0},
@@ -105,76 +119,76 @@ static struct among a_3[4] =
 /*  3 */ { 2, s_3_3, -1, 1, 0}
 };
 
-static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_4_2[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_4_0[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_4_1[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_4_2[4] = { 'a', 'n', 't', 'e' };
 
-static struct among a_4[3] =
+static const struct among a_4[3] =
 {
 /*  0 */ { 4, s_4_0, -1, 1, 0},
 /*  1 */ { 4, s_4_1, -1, 1, 0},
 /*  2 */ { 4, s_4_2, -1, 1, 0}
 };
 
-static symbol s_5_0[2] = { 'i', 'c' };
-static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_5_2[2] = { 'i', 'v' };
+static const symbol s_5_0[2] = { 'i', 'c' };
+static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_5_2[2] = { 'i', 'v' };
 
-static struct among a_5[3] =
+static const struct among a_5[3] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
 /*  2 */ { 2, s_5_2, -1, 1, 0}
 };
 
-static symbol s_6_0[3] = { 'i', 'c', 'a' };
-static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' };
-static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' };
-static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' };
-static symbol s_6_4[3] = { 'o', 's', 'a' };
-static symbol s_6_5[4] = { 'i', 's', 't', 'a' };
-static symbol s_6_6[3] = { 'i', 'v', 'a' };
-static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' };
-static symbol s_6_8[5] = { 'l', 'o', 'g', 0xED, 'a' };
-static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' };
-static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_6_12[4] = { 'a', 'n', 't', 'e' };
-static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_15[5] = { 'a', 'c', 'i', 0xF3, 'n' };
-static symbol s_6_16[5] = { 'u', 'c', 'i', 0xF3, 'n' };
-static symbol s_6_17[3] = { 'i', 'c', 'o' };
-static symbol s_6_18[4] = { 'i', 's', 'm', 'o' };
-static symbol s_6_19[3] = { 'o', 's', 'o' };
-static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' };
-static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' };
-static symbol s_6_22[3] = { 'i', 'v', 'o' };
-static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' };
-static symbol s_6_24[4] = { 'i', 'c', 'a', 's' };
-static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' };
-static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' };
-static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
-static symbol s_6_28[4] = { 'o', 's', 'a', 's' };
-static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' };
-static symbol s_6_30[4] = { 'i', 'v', 'a', 's' };
-static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' };
-static symbol s_6_32[6] = { 'l', 'o', 'g', 0xED, 'a', 's' };
-static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
-static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' };
-static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' };
-static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' };
-static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
-static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
-static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' };
-static symbol s_6_40[4] = { 'i', 'c', 'o', 's' };
-static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' };
-static symbol s_6_42[4] = { 'o', 's', 'o', 's' };
-static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' };
-static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' };
-static symbol s_6_45[4] = { 'i', 'v', 'o', 's' };
+static const symbol s_6_0[3] = { 'i', 'c', 'a' };
+static const symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' };
+static const symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' };
+static const symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' };
+static const symbol s_6_4[3] = { 'o', 's', 'a' };
+static const symbol s_6_5[4] = { 'i', 's', 't', 'a' };
+static const symbol s_6_6[3] = { 'i', 'v', 'a' };
+static const symbol s_6_7[4] = { 'a', 'n', 'z', 'a' };
+static const symbol s_6_8[5] = { 'l', 'o', 'g', 0xED, 'a' };
+static const symbol s_6_9[4] = { 'i', 'd', 'a', 'd' };
+static const symbol s_6_10[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_6_11[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_6_12[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_15[5] = { 'a', 'c', 'i', 0xF3, 'n' };
+static const symbol s_6_16[5] = { 'u', 'c', 'i', 0xF3, 'n' };
+static const symbol s_6_17[3] = { 'i', 'c', 'o' };
+static const symbol s_6_18[4] = { 'i', 's', 'm', 'o' };
+static const symbol s_6_19[3] = { 'o', 's', 'o' };
+static const symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' };
+static const symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' };
+static const symbol s_6_22[3] = { 'i', 'v', 'o' };
+static const symbol s_6_23[4] = { 'a', 'd', 'o', 'r' };
+static const symbol s_6_24[4] = { 'i', 'c', 'a', 's' };
+static const symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' };
+static const symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' };
+static const symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
+static const symbol s_6_28[4] = { 'o', 's', 'a', 's' };
+static const symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' };
+static const symbol s_6_30[4] = { 'i', 'v', 'a', 's' };
+static const symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' };
+static const symbol s_6_32[6] = { 'l', 'o', 'g', 0xED, 'a', 's' };
+static const symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
+static const symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' };
+static const symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' };
+static const symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' };
+static const symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
+static const symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
+static const symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' };
+static const symbol s_6_40[4] = { 'i', 'c', 'o', 's' };
+static const symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' };
+static const symbol s_6_42[4] = { 'o', 's', 'o', 's' };
+static const symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' };
+static const symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' };
+static const symbol s_6_45[4] = { 'i', 'v', 'o', 's' };
 
-static struct among a_6[46] =
+static const struct among a_6[46] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 5, s_6_1, -1, 2, 0},
@@ -224,20 +238,20 @@ static struct among a_6[46] =
 /* 45 */ { 4, s_6_45, -1, 9, 0}
 };
 
-static symbol s_7_0[2] = { 'y', 'a' };
-static symbol s_7_1[2] = { 'y', 'e' };
-static symbol s_7_2[3] = { 'y', 'a', 'n' };
-static symbol s_7_3[3] = { 'y', 'e', 'n' };
-static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' };
-static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' };
-static symbol s_7_6[2] = { 'y', 'o' };
-static symbol s_7_7[3] = { 'y', 'a', 's' };
-static symbol s_7_8[3] = { 'y', 'e', 's' };
-static symbol s_7_9[4] = { 'y', 'a', 'i', 's' };
-static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' };
-static symbol s_7_11[2] = { 'y', 0xF3 };
+static const symbol s_7_0[2] = { 'y', 'a' };
+static const symbol s_7_1[2] = { 'y', 'e' };
+static const symbol s_7_2[3] = { 'y', 'a', 'n' };
+static const symbol s_7_3[3] = { 'y', 'e', 'n' };
+static const symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' };
+static const symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' };
+static const symbol s_7_6[2] = { 'y', 'o' };
+static const symbol s_7_7[3] = { 'y', 'a', 's' };
+static const symbol s_7_8[3] = { 'y', 'e', 's' };
+static const symbol s_7_9[4] = { 'y', 'a', 'i', 's' };
+static const symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' };
+static const symbol s_7_11[2] = { 'y', 0xF3 };
 
-static struct among a_7[12] =
+static const struct among a_7[12] =
 {
 /*  0 */ { 2, s_7_0, -1, 1, 0},
 /*  1 */ { 2, s_7_1, -1, 1, 0},
@@ -253,104 +267,104 @@ static struct among a_7[12] =
 /* 11 */ { 2, s_7_11, -1, 1, 0}
 };
 
-static symbol s_8_0[3] = { 'a', 'b', 'a' };
-static symbol s_8_1[3] = { 'a', 'd', 'a' };
-static symbol s_8_2[3] = { 'i', 'd', 'a' };
-static symbol s_8_3[3] = { 'a', 'r', 'a' };
-static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' };
-static symbol s_8_5[2] = { 0xED, 'a' };
-static symbol s_8_6[4] = { 'a', 'r', 0xED, 'a' };
-static symbol s_8_7[4] = { 'e', 'r', 0xED, 'a' };
-static symbol s_8_8[4] = { 'i', 'r', 0xED, 'a' };
-static symbol s_8_9[2] = { 'a', 'd' };
-static symbol s_8_10[2] = { 'e', 'd' };
-static symbol s_8_11[2] = { 'i', 'd' };
-static symbol s_8_12[3] = { 'a', 's', 'e' };
-static symbol s_8_13[4] = { 'i', 'e', 's', 'e' };
-static symbol s_8_14[4] = { 'a', 's', 't', 'e' };
-static symbol s_8_15[4] = { 'i', 's', 't', 'e' };
-static symbol s_8_16[2] = { 'a', 'n' };
-static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' };
-static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' };
-static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' };
-static symbol s_8_20[3] = { 0xED, 'a', 'n' };
-static symbol s_8_21[5] = { 'a', 'r', 0xED, 'a', 'n' };
-static symbol s_8_22[5] = { 'e', 'r', 0xED, 'a', 'n' };
-static symbol s_8_23[5] = { 'i', 'r', 0xED, 'a', 'n' };
-static symbol s_8_24[2] = { 'e', 'n' };
-static symbol s_8_25[4] = { 'a', 's', 'e', 'n' };
-static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' };
-static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' };
-static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' };
-static symbol s_8_29[4] = { 'a', 'r', 0xE1, 'n' };
-static symbol s_8_30[4] = { 'e', 'r', 0xE1, 'n' };
-static symbol s_8_31[4] = { 'i', 'r', 0xE1, 'n' };
-static symbol s_8_32[3] = { 'a', 'd', 'o' };
-static symbol s_8_33[3] = { 'i', 'd', 'o' };
-static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' };
-static symbol s_8_36[2] = { 'a', 'r' };
-static symbol s_8_37[2] = { 'e', 'r' };
-static symbol s_8_38[2] = { 'i', 'r' };
-static symbol s_8_39[2] = { 'a', 's' };
-static symbol s_8_40[4] = { 'a', 'b', 'a', 's' };
-static symbol s_8_41[4] = { 'a', 'd', 'a', 's' };
-static symbol s_8_42[4] = { 'i', 'd', 'a', 's' };
-static symbol s_8_43[4] = { 'a', 'r', 'a', 's' };
-static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' };
-static symbol s_8_45[3] = { 0xED, 'a', 's' };
-static symbol s_8_46[5] = { 'a', 'r', 0xED, 'a', 's' };
-static symbol s_8_47[5] = { 'e', 'r', 0xED, 'a', 's' };
-static symbol s_8_48[5] = { 'i', 'r', 0xED, 'a', 's' };
-static symbol s_8_49[2] = { 'e', 's' };
-static symbol s_8_50[4] = { 'a', 's', 'e', 's' };
-static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' };
-static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' };
-static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' };
-static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' };
-static symbol s_8_55[4] = { 0xED, 'a', 'i', 's' };
-static symbol s_8_56[6] = { 'a', 'r', 0xED, 'a', 'i', 's' };
-static symbol s_8_57[6] = { 'e', 'r', 0xED, 'a', 'i', 's' };
-static symbol s_8_58[6] = { 'i', 'r', 0xED, 'a', 'i', 's' };
-static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' };
-static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' };
-static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' };
-static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' };
-static symbol s_8_63[3] = { 0xE1, 'i', 's' };
-static symbol s_8_64[3] = { 0xE9, 'i', 's' };
-static symbol s_8_65[5] = { 'a', 'r', 0xE9, 'i', 's' };
-static symbol s_8_66[5] = { 'e', 'r', 0xE9, 'i', 's' };
-static symbol s_8_67[5] = { 'i', 'r', 0xE9, 'i', 's' };
-static symbol s_8_68[4] = { 'a', 'd', 'o', 's' };
-static symbol s_8_69[4] = { 'i', 'd', 'o', 's' };
-static symbol s_8_70[4] = { 'a', 'm', 'o', 's' };
-static symbol s_8_71[6] = { 0xE1, 'b', 'a', 'm', 'o', 's' };
-static symbol s_8_72[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' };
-static symbol s_8_73[7] = { 'i', 0xE9, 'r', 'a', 'm', 'o', 's' };
-static symbol s_8_74[5] = { 0xED, 'a', 'm', 'o', 's' };
-static symbol s_8_75[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' };
-static symbol s_8_76[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' };
-static symbol s_8_77[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' };
-static symbol s_8_78[4] = { 'e', 'm', 'o', 's' };
-static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
-static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
-static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
-static symbol s_8_82[6] = { 0xE1, 's', 'e', 'm', 'o', 's' };
-static symbol s_8_83[7] = { 'i', 0xE9, 's', 'e', 'm', 'o', 's' };
-static symbol s_8_84[4] = { 'i', 'm', 'o', 's' };
-static symbol s_8_85[4] = { 'a', 'r', 0xE1, 's' };
-static symbol s_8_86[4] = { 'e', 'r', 0xE1, 's' };
-static symbol s_8_87[4] = { 'i', 'r', 0xE1, 's' };
-static symbol s_8_88[2] = { 0xED, 's' };
-static symbol s_8_89[3] = { 'a', 'r', 0xE1 };
-static symbol s_8_90[3] = { 'e', 'r', 0xE1 };
-static symbol s_8_91[3] = { 'i', 'r', 0xE1 };
-static symbol s_8_92[3] = { 'a', 'r', 0xE9 };
-static symbol s_8_93[3] = { 'e', 'r', 0xE9 };
-static symbol s_8_94[3] = { 'i', 'r', 0xE9 };
-static symbol s_8_95[2] = { 'i', 0xF3 };
+static const symbol s_8_0[3] = { 'a', 'b', 'a' };
+static const symbol s_8_1[3] = { 'a', 'd', 'a' };
+static const symbol s_8_2[3] = { 'i', 'd', 'a' };
+static const symbol s_8_3[3] = { 'a', 'r', 'a' };
+static const symbol s_8_4[4] = { 'i', 'e', 'r', 'a' };
+static const symbol s_8_5[2] = { 0xED, 'a' };
+static const symbol s_8_6[4] = { 'a', 'r', 0xED, 'a' };
+static const symbol s_8_7[4] = { 'e', 'r', 0xED, 'a' };
+static const symbol s_8_8[4] = { 'i', 'r', 0xED, 'a' };
+static const symbol s_8_9[2] = { 'a', 'd' };
+static const symbol s_8_10[2] = { 'e', 'd' };
+static const symbol s_8_11[2] = { 'i', 'd' };
+static const symbol s_8_12[3] = { 'a', 's', 'e' };
+static const symbol s_8_13[4] = { 'i', 'e', 's', 'e' };
+static const symbol s_8_14[4] = { 'a', 's', 't', 'e' };
+static const symbol s_8_15[4] = { 'i', 's', 't', 'e' };
+static const symbol s_8_16[2] = { 'a', 'n' };
+static const symbol s_8_17[4] = { 'a', 'b', 'a', 'n' };
+static const symbol s_8_18[4] = { 'a', 'r', 'a', 'n' };
+static const symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' };
+static const symbol s_8_20[3] = { 0xED, 'a', 'n' };
+static const symbol s_8_21[5] = { 'a', 'r', 0xED, 'a', 'n' };
+static const symbol s_8_22[5] = { 'e', 'r', 0xED, 'a', 'n' };
+static const symbol s_8_23[5] = { 'i', 'r', 0xED, 'a', 'n' };
+static const symbol s_8_24[2] = { 'e', 'n' };
+static const symbol s_8_25[4] = { 'a', 's', 'e', 'n' };
+static const symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' };
+static const symbol s_8_27[4] = { 'a', 'r', 'o', 'n' };
+static const symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' };
+static const symbol s_8_29[4] = { 'a', 'r', 0xE1, 'n' };
+static const symbol s_8_30[4] = { 'e', 'r', 0xE1, 'n' };
+static const symbol s_8_31[4] = { 'i', 'r', 0xE1, 'n' };
+static const symbol s_8_32[3] = { 'a', 'd', 'o' };
+static const symbol s_8_33[3] = { 'i', 'd', 'o' };
+static const symbol s_8_34[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' };
+static const symbol s_8_36[2] = { 'a', 'r' };
+static const symbol s_8_37[2] = { 'e', 'r' };
+static const symbol s_8_38[2] = { 'i', 'r' };
+static const symbol s_8_39[2] = { 'a', 's' };
+static const symbol s_8_40[4] = { 'a', 'b', 'a', 's' };
+static const symbol s_8_41[4] = { 'a', 'd', 'a', 's' };
+static const symbol s_8_42[4] = { 'i', 'd', 'a', 's' };
+static const symbol s_8_43[4] = { 'a', 'r', 'a', 's' };
+static const symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' };
+static const symbol s_8_45[3] = { 0xED, 'a', 's' };
+static const symbol s_8_46[5] = { 'a', 'r', 0xED, 'a', 's' };
+static const symbol s_8_47[5] = { 'e', 'r', 0xED, 'a', 's' };
+static const symbol s_8_48[5] = { 'i', 'r', 0xED, 'a', 's' };
+static const symbol s_8_49[2] = { 'e', 's' };
+static const symbol s_8_50[4] = { 'a', 's', 'e', 's' };
+static const symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' };
+static const symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' };
+static const symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' };
+static const symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' };
+static const symbol s_8_55[4] = { 0xED, 'a', 'i', 's' };
+static const symbol s_8_56[6] = { 'a', 'r', 0xED, 'a', 'i', 's' };
+static const symbol s_8_57[6] = { 'e', 'r', 0xED, 'a', 'i', 's' };
+static const symbol s_8_58[6] = { 'i', 'r', 0xED, 'a', 'i', 's' };
+static const symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' };
+static const symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' };
+static const symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' };
+static const symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' };
+static const symbol s_8_63[3] = { 0xE1, 'i', 's' };
+static const symbol s_8_64[3] = { 0xE9, 'i', 's' };
+static const symbol s_8_65[5] = { 'a', 'r', 0xE9, 'i', 's' };
+static const symbol s_8_66[5] = { 'e', 'r', 0xE9, 'i', 's' };
+static const symbol s_8_67[5] = { 'i', 'r', 0xE9, 'i', 's' };
+static const symbol s_8_68[4] = { 'a', 'd', 'o', 's' };
+static const symbol s_8_69[4] = { 'i', 'd', 'o', 's' };
+static const symbol s_8_70[4] = { 'a', 'm', 'o', 's' };
+static const symbol s_8_71[6] = { 0xE1, 'b', 'a', 'm', 'o', 's' };
+static const symbol s_8_72[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_8_73[7] = { 'i', 0xE9, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_8_74[5] = { 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_8_75[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_8_76[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_8_77[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' };
+static const symbol s_8_78[4] = { 'e', 'm', 'o', 's' };
+static const symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_8_82[6] = { 0xE1, 's', 'e', 'm', 'o', 's' };
+static const symbol s_8_83[7] = { 'i', 0xE9, 's', 'e', 'm', 'o', 's' };
+static const symbol s_8_84[4] = { 'i', 'm', 'o', 's' };
+static const symbol s_8_85[4] = { 'a', 'r', 0xE1, 's' };
+static const symbol s_8_86[4] = { 'e', 'r', 0xE1, 's' };
+static const symbol s_8_87[4] = { 'i', 'r', 0xE1, 's' };
+static const symbol s_8_88[2] = { 0xED, 's' };
+static const symbol s_8_89[3] = { 'a', 'r', 0xE1 };
+static const symbol s_8_90[3] = { 'e', 'r', 0xE1 };
+static const symbol s_8_91[3] = { 'i', 'r', 0xE1 };
+static const symbol s_8_92[3] = { 'a', 'r', 0xE9 };
+static const symbol s_8_93[3] = { 'e', 'r', 0xE9 };
+static const symbol s_8_94[3] = { 'i', 'r', 0xE9 };
+static const symbol s_8_95[2] = { 'i', 0xF3 };
 
-static struct among a_8[96] =
+static const struct among a_8[96] =
 {
 /*  0 */ { 3, s_8_0, -1, 2, 0},
 /*  1 */ { 3, s_8_1, -1, 2, 0},
@@ -450,16 +464,16 @@ static struct among a_8[96] =
 /* 95 */ { 2, s_8_95, -1, 2, 0}
 };
 
-static symbol s_9_0[1] = { 'a' };
-static symbol s_9_1[1] = { 'e' };
-static symbol s_9_2[1] = { 'o' };
-static symbol s_9_3[2] = { 'o', 's' };
-static symbol s_9_4[1] = { 0xE1 };
-static symbol s_9_5[1] = { 0xE9 };
-static symbol s_9_6[1] = { 0xED };
-static symbol s_9_7[1] = { 0xF3 };
+static const symbol s_9_0[1] = { 'a' };
+static const symbol s_9_1[1] = { 'e' };
+static const symbol s_9_2[1] = { 'o' };
+static const symbol s_9_3[2] = { 'o', 's' };
+static const symbol s_9_4[1] = { 0xE1 };
+static const symbol s_9_5[1] = { 0xE9 };
+static const symbol s_9_6[1] = { 0xED };
+static const symbol s_9_7[1] = { 0xF3 };
 
-static struct among a_9[8] =
+static const struct among a_9[8] =
 {
 /*  0 */ { 1, s_9_0, -1, 1, 0},
 /*  1 */ { 1, s_9_1, -1, 2, 0},
@@ -471,121 +485,107 @@ static struct among a_9[8] =
 /*  7 */ { 1, s_9_7, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 };
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 };
 
-static symbol s_0[] = { 'a' };
-static symbol s_1[] = { 'e' };
-static symbol s_2[] = { 'i' };
-static symbol s_3[] = { 'o' };
-static symbol s_4[] = { 'u' };
-static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' };
-static symbol s_6[] = { 'a', 'n', 'd', 'o' };
-static symbol s_7[] = { 'a', 'r' };
-static symbol s_8[] = { 'e', 'r' };
-static symbol s_9[] = { 'i', 'r' };
-static symbol s_10[] = { 'u' };
-static symbol s_11[] = { 'i', 'c' };
-static symbol s_12[] = { 'l', 'o', 'g' };
-static symbol s_13[] = { 'u' };
-static symbol s_14[] = { 'e', 'n', 't', 'e' };
-static symbol s_15[] = { 'a', 't' };
-static symbol s_16[] = { 'a', 't' };
-static symbol s_17[] = { 'u' };
-static symbol s_18[] = { 'u' };
-static symbol s_19[] = { 'g' };
-static symbol s_20[] = { 'u' };
-static symbol s_21[] = { 'g' };
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'o' };
+static const symbol s_4[] = { 'u' };
+static const symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' };
+static const symbol s_6[] = { 'a', 'n', 'd', 'o' };
+static const symbol s_7[] = { 'a', 'r' };
+static const symbol s_8[] = { 'e', 'r' };
+static const symbol s_9[] = { 'i', 'r' };
+static const symbol s_10[] = { 'u' };
+static const symbol s_11[] = { 'i', 'c' };
+static const symbol s_12[] = { 'l', 'o', 'g' };
+static const symbol s_13[] = { 'u' };
+static const symbol s_14[] = { 'e', 'n', 't', 'e' };
+static const symbol s_15[] = { 'a', 't' };
+static const symbol s_16[] = { 'a', 't' };
+static const symbol s_17[] = { 'u' };
+static const symbol s_18[] = { 'u' };
+static const symbol s_19[] = { 'g' };
+static const symbol s_20[] = { 'u' };
+static const symbol s_21[] = { 'g' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 37 */
-        {   int c = z->c; /* or, line 39 */
-            if (!(in_grouping(z, g_v, 97, 252))) goto lab2;
-            {   int c = z->c; /* or, line 38 */
-                if (!(out_grouping(z, g_v, 97, 252))) goto lab4;
-                while(1) { /* gopast, line 38 */
-                    if (!(in_grouping(z, g_v, 97, 252))) goto lab5;
-                    break;
-                lab5:
-                    if (z->c >= z->l) goto lab4;
-                    z->c++; /* gopast, line 38 */
+    {   int c1 = z->c; /* do, line 37 */
+        {   int c2 = z->c; /* or, line 39 */
+            if (in_grouping(z, g_v, 97, 252, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 38 */
+                if (out_grouping(z, g_v, 97, 252, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 38 */
+                    int ret = out_grouping(z, g_v, 97, 252, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
-                if (!(in_grouping(z, g_v, 97, 252))) goto lab2;
-                while(1) { /* gopast, line 38 */
-                    if (!(out_grouping(z, g_v, 97, 252))) goto lab6;
-                    break;
-                lab6:
-                    if (z->c >= z->l) goto lab2;
-                    z->c++; /* gopast, line 38 */
+                z->c = c3;
+                if (in_grouping(z, g_v, 97, 252, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 38 */
+                    int ret = in_grouping(z, g_v, 97, 252, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
                 }
             }
         lab3:
             goto lab1;
         lab2:
-            z->c = c;
-            if (!(out_grouping(z, g_v, 97, 252))) goto lab0;
-            {   int c = z->c; /* or, line 40 */
-                if (!(out_grouping(z, g_v, 97, 252))) goto lab8;
-                while(1) { /* gopast, line 40 */
-                    if (!(in_grouping(z, g_v, 97, 252))) goto lab9;
-                    break;
-                lab9:
-                    if (z->c >= z->l) goto lab8;
-                    z->c++; /* gopast, line 40 */
+            z->c = c2;
+            if (out_grouping(z, g_v, 97, 252, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 40 */
+                if (out_grouping(z, g_v, 97, 252, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 40 */
+                    int ret = out_grouping(z, g_v, 97, 252, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
                 }
-                goto lab7;
-            lab8:
-                z->c = c;
-                if (!(in_grouping(z, g_v, 97, 252))) goto lab0;
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping(z, g_v, 97, 252, 0)) goto lab0;
                 if (z->c >= z->l) goto lab0;
                 z->c++; /* next, line 40 */
             }
-        lab7:
+        lab5:
             ;
         }
     lab1:
         z->I[0] = z->c; /* setmark pV, line 41 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 43 */
-        while(1) { /* gopast, line 44 */
-            if (!(in_grouping(z, g_v, 97, 252))) goto lab11;
-            break;
-        lab11:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 44 */
+    {   int c5 = z->c; /* do, line 43 */
+        {    /* gopast */ /* grouping v, line 44 */
+            int ret = out_grouping(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 44 */
-            if (!(out_grouping(z, g_v, 97, 252))) goto lab12;
-            break;
-        lab12:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 44 */
+        {    /* gopast */ /* non v, line 44 */
+            int ret = in_grouping(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p1, line 44 */
-        while(1) { /* gopast, line 45 */
-            if (!(in_grouping(z, g_v, 97, 252))) goto lab13;
-            break;
-        lab13:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 45 */
+        {    /* gopast */ /* grouping v, line 45 */
+            int ret = out_grouping(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 45 */
-            if (!(out_grouping(z, g_v, 97, 252))) goto lab14;
-            break;
-        lab14:
-            if (z->c >= z->l) goto lab10;
-            z->c++; /* gopast, line 45 */
+        {    /* gopast */ /* non v, line 45 */
+            int ret = in_grouping(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[2] = z->c; /* setmark p2, line 45 */
-    lab10:
-        z->c = c;
+    lab7:
+        z->c = c5;
     }
     return 1;
 }
@@ -593,40 +593,36 @@ static int r_mark_regions(struct SN_env * z) {
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 49 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 50 */
+        if (z->c >= z->l || z->p[z->c + 0] >> 5 != 7 || !((67641858 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 6; else
         among_var = find_among(z, a_0, 6); /* substring, line 50 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 50 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_0); /* <-, line 51 */
+                {   int ret = slice_from_s(z, 1, s_0); /* <-, line 51 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_1); /* <-, line 52 */
+                {   int ret = slice_from_s(z, 1, s_1); /* <-, line 52 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_2); /* <-, line 53 */
+                {   int ret = slice_from_s(z, 1, s_2); /* <-, line 53 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_3); /* <-, line 54 */
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 54 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 5:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_4); /* <-, line 55 */
+                {   int ret = slice_from_s(z, 1, s_4); /* <-, line 55 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -637,7 +633,7 @@ static int r_postlude(struct SN_env * z) {
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -661,8 +657,10 @@ static int r_R2(struct SN_env * z) {
 static int r_attached_pronoun(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 68 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((557090 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */
     z->bra = z->c; /* ], line 68 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0;
     among_var = find_among_b(z, a_2, 11); /* substring, line 72 */
     if (!(among_var)) return 0;
     {   int ret = r_RV(z);
@@ -673,49 +671,42 @@ static int r_attached_pronoun(struct SN_env * z) {
         case 0: return 0;
         case 1:
             z->bra = z->c; /* ], line 73 */
-            {   int ret;
-                ret = slice_from_s(z, 5, s_5); /* <-, line 73 */
+            {   int ret = slice_from_s(z, 5, s_5); /* <-, line 73 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             z->bra = z->c; /* ], line 74 */
-            {   int ret;
-                ret = slice_from_s(z, 4, s_6); /* <-, line 74 */
+            {   int ret = slice_from_s(z, 4, s_6); /* <-, line 74 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
             z->bra = z->c; /* ], line 75 */
-            {   int ret;
-                ret = slice_from_s(z, 2, s_7); /* <-, line 75 */
+            {   int ret = slice_from_s(z, 2, s_7); /* <-, line 75 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
             z->bra = z->c; /* ], line 76 */
-            {   int ret;
-                ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
+            {   int ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
             z->bra = z->c; /* ], line 77 */
-            {   int ret;
-                ret = slice_from_s(z, 2, s_9); /* <-, line 77 */
+            {   int ret = slice_from_s(z, 2, s_9); /* <-, line 77 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 81 */
+            {   int ret = slice_del(z); /* delete, line 81 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
             if (!(eq_s_b(z, 1, s_10))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 82 */
+            {   int ret = slice_del(z); /* delete, line 82 */
                 if (ret < 0) return ret;
             }
             break;
@@ -726,6 +717,7 @@ static int r_attached_pronoun(struct SN_env * z) {
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 87 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((835634 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_6, 46); /* substring, line 87 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 87 */
@@ -736,8 +728,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 99 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 99 */
+            {   int ret = slice_del(z); /* delete, line 99 */
                 if (ret < 0) return ret;
             }
             break;
@@ -746,20 +737,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 105 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 105 */
+            {   int ret = slice_del(z); /* delete, line 105 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 106 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 106 */
                 z->ket = z->c; /* [, line 106 */
-                if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; }
+                if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 106 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 106 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 106 */
+                {   int ret = slice_del(z); /* delete, line 106 */
                     if (ret < 0) return ret;
                 }
             lab0:
@@ -771,8 +760,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 111 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_12); /* <-, line 111 */
+            {   int ret = slice_from_s(z, 3, s_12); /* <-, line 111 */
                 if (ret < 0) return ret;
             }
             break;
@@ -781,8 +769,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 115 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_13); /* <-, line 115 */
+            {   int ret = slice_from_s(z, 1, s_13); /* <-, line 115 */
                 if (ret < 0) return ret;
             }
             break;
@@ -791,8 +778,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 119 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 4, s_14); /* <-, line 119 */
+            {   int ret = slice_from_s(z, 4, s_14); /* <-, line 119 */
                 if (ret < 0) return ret;
             }
             break;
@@ -801,35 +787,33 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 123 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 123 */
+            {   int ret = slice_del(z); /* delete, line 123 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 124 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 124 */
                 z->ket = z->c; /* [, line 125 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab1; }
                 among_var = find_among_b(z, a_3, 4); /* substring, line 125 */
-                if (!(among_var)) { z->c = z->l - m; goto lab1; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab1; }
                 z->bra = z->c; /* ], line 125 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 125 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 125 */
+                {   int ret = slice_del(z); /* delete, line 125 */
                     if (ret < 0) return ret;
                 }
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab1; }
+                    case 0: { z->c = z->l - m_keep; goto lab1; }
                     case 1:
                         z->ket = z->c; /* [, line 126 */
-                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; }
+                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m_keep; goto lab1; }
                         z->bra = z->c; /* ], line 126 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 126 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 126 */
+                        {   int ret = slice_del(z); /* delete, line 126 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -843,24 +827,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 135 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 135 */
+            {   int ret = slice_del(z); /* delete, line 135 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 136 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 136 */
                 z->ket = z->c; /* [, line 137 */
+                if (z->c - 3 <= z->lb || z->p[z->c - 1] != 101) { z->c = z->l - m_keep; goto lab2; }
                 among_var = find_among_b(z, a_4, 3); /* substring, line 137 */
-                if (!(among_var)) { z->c = z->l - m; goto lab2; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab2; }
                 z->bra = z->c; /* ], line 137 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab2; }
+                    case 0: { z->c = z->l - m_keep; goto lab2; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call R2, line 140 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 140 */
+                        {   int ret = slice_del(z); /* delete, line 140 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -874,24 +857,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 147 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 147 */
+            {   int ret = slice_del(z); /* delete, line 147 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 148 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 148 */
                 z->ket = z->c; /* [, line 149 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab3; }
                 among_var = find_among_b(z, a_5, 3); /* substring, line 149 */
-                if (!(among_var)) { z->c = z->l - m; goto lab3; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 149 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab3; }
+                    case 0: { z->c = z->l - m_keep; goto lab3; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 152 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 152 */
+                        {   int ret = slice_del(z); /* delete, line 152 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -905,20 +887,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 159 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 159 */
+            {   int ret = slice_del(z); /* delete, line 159 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 160 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 160 */
                 z->ket = z->c; /* [, line 161 */
-                if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; }
+                if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m_keep; goto lab4; }
                 z->bra = z->c; /* ], line 161 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab4; } /* call R2, line 161 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 161 */
+                {   int ret = slice_del(z); /* delete, line 161 */
                     if (ret < 0) return ret;
                 }
             lab4:
@@ -931,24 +911,23 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_y_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 168 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 168 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 168 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 168 */
         among_var = find_among_b(z, a_7, 12); /* substring, line 168 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 168 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
             if (!(eq_s_b(z, 1, s_17))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 171 */
+            {   int ret = slice_del(z); /* delete, line 171 */
                 if (ret < 0) return ret;
             }
             break;
@@ -958,39 +937,37 @@ static int r_y_verb_suffix(struct SN_env * z) {
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 176 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 176 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 176 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 176 */
         among_var = find_among_b(z, a_8, 96); /* substring, line 176 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 176 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* try, line 179 */
-                if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; }
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 179 */
+                if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m_keep; goto lab0; }
                 {   int m_test = z->l - z->c; /* test, line 179 */
-                    if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; }
+                    if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m_keep; goto lab0; }
                     z->c = z->l - m_test;
                 }
             lab0:
                 ;
             }
             z->bra = z->c; /* ], line 179 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 179 */
+            {   int ret = slice_del(z); /* delete, line 179 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 200 */
+            {   int ret = slice_del(z); /* delete, line 200 */
                 if (ret < 0) return ret;
             }
             break;
@@ -1011,8 +988,7 @@ static int r_residual_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 208 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 208 */
+            {   int ret = slice_del(z); /* delete, line 208 */
                 if (ret < 0) return ret;
             }
             break;
@@ -1021,24 +997,22 @@ static int r_residual_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 210 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 210 */
+            {   int ret = slice_del(z); /* delete, line 210 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 210 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 210 */
                 z->ket = z->c; /* [, line 210 */
-                if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; }
+                if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 210 */
                 {   int m_test = z->l - z->c; /* test, line 210 */
-                    if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; }
+                    if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m_keep; goto lab0; }
                     z->c = z->l - m_test;
                 }
                 {   int ret = r_RV(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call RV, line 210 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 210 */
+                {   int ret = slice_del(z); /* delete, line 210 */
                     if (ret < 0) return ret;
                 }
             lab0:
@@ -1050,40 +1024,40 @@ static int r_residual_suffix(struct SN_env * z) {
 }
 
 extern int spanish_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 216 */
+    {   int c1 = z->c; /* do, line 216 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 216 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 217 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 218 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 218 */
         {   int ret = r_attached_pronoun(z);
             if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 219 */
-        {   int m = z->l - z->c; (void) m; /* or, line 219 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 219 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 219 */
             {   int ret = r_standard_suffix(z);
                 if (ret == 0) goto lab4; /* call standard_suffix, line 219 */
                 if (ret < 0) return ret;
             }
             goto lab3;
         lab4:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_y_verb_suffix(z);
                 if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */
                 if (ret < 0) return ret;
             }
             goto lab3;
         lab5:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_verb_suffix(z);
                 if (ret == 0) goto lab2; /* call verb_suffix, line 221 */
                 if (ret < 0) return ret;
@@ -1091,29 +1065,29 @@ extern int spanish_ISO_8859_1_stem(struct SN_env * z) {
         }
     lab3:
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 223 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 223 */
         {   int ret = r_residual_suffix(z);
             if (ret == 0) goto lab6; /* call residual_suffix, line 223 */
             if (ret < 0) return ret;
         }
     lab6:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 225 */
+    {   int c6 = z->c; /* do, line 225 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab7; /* call postlude, line 225 */
             if (ret < 0) return ret;
         }
     lab7:
-        z->c = c;
+        z->c = c6;
     }
     return 1;
 }
 
 extern struct SN_env * spanish_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void spanish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void spanish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c b/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c
index c571fd9..f930834 100644
--- a/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c
@@ -3,54 +3,68 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int swedish_ISO_8859_1_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_other_suffix(struct SN_env * z);
 static int r_consonant_pair(struct SN_env * z);
 static int r_main_suffix(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * swedish_ISO_8859_1_create_env(void);
 extern void swedish_ISO_8859_1_close_env(struct SN_env * z);
 
-static symbol s_0_0[1] = { 'a' };
-static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' };
-static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' };
-static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' };
-static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' };
-static symbol s_0_5[2] = { 'a', 'd' };
-static symbol s_0_6[1] = { 'e' };
-static symbol s_0_7[3] = { 'a', 'd', 'e' };
-static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' };
-static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' };
-static symbol s_0_10[3] = { 'a', 'r', 'e' };
-static symbol s_0_11[4] = { 'a', 's', 't', 'e' };
-static symbol s_0_12[2] = { 'e', 'n' };
-static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' };
-static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' };
-static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' };
-static symbol s_0_16[3] = { 'e', 'r', 'n' };
-static symbol s_0_17[2] = { 'a', 'r' };
-static symbol s_0_18[2] = { 'e', 'r' };
-static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' };
-static symbol s_0_20[2] = { 'o', 'r' };
-static symbol s_0_21[1] = { 's' };
-static symbol s_0_22[2] = { 'a', 's' };
-static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' };
-static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' };
-static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' };
-static symbol s_0_26[2] = { 'e', 's' };
-static symbol s_0_27[4] = { 'a', 'd', 'e', 's' };
-static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' };
-static symbol s_0_29[3] = { 'e', 'n', 's' };
-static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' };
-static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' };
-static symbol s_0_32[4] = { 'e', 'r', 'n', 's' };
-static symbol s_0_33[2] = { 'a', 't' };
-static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' };
-static symbol s_0_35[3] = { 'h', 'e', 't' };
-static symbol s_0_36[3] = { 'a', 's', 't' };
 
-static struct among a_0[37] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 'a' };
+static const symbol s_0_1[4] = { 'a', 'r', 'n', 'a' };
+static const symbol s_0_2[4] = { 'e', 'r', 'n', 'a' };
+static const symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' };
+static const symbol s_0_4[4] = { 'o', 'r', 'n', 'a' };
+static const symbol s_0_5[2] = { 'a', 'd' };
+static const symbol s_0_6[1] = { 'e' };
+static const symbol s_0_7[3] = { 'a', 'd', 'e' };
+static const symbol s_0_8[4] = { 'a', 'n', 'd', 'e' };
+static const symbol s_0_9[4] = { 'a', 'r', 'n', 'e' };
+static const symbol s_0_10[3] = { 'a', 'r', 'e' };
+static const symbol s_0_11[4] = { 'a', 's', 't', 'e' };
+static const symbol s_0_12[2] = { 'e', 'n' };
+static const symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' };
+static const symbol s_0_14[4] = { 'a', 'r', 'e', 'n' };
+static const symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' };
+static const symbol s_0_16[3] = { 'e', 'r', 'n' };
+static const symbol s_0_17[2] = { 'a', 'r' };
+static const symbol s_0_18[2] = { 'e', 'r' };
+static const symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' };
+static const symbol s_0_20[2] = { 'o', 'r' };
+static const symbol s_0_21[1] = { 's' };
+static const symbol s_0_22[2] = { 'a', 's' };
+static const symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' };
+static const symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' };
+static const symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' };
+static const symbol s_0_26[2] = { 'e', 's' };
+static const symbol s_0_27[4] = { 'a', 'd', 'e', 's' };
+static const symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' };
+static const symbol s_0_29[3] = { 'e', 'n', 's' };
+static const symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' };
+static const symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' };
+static const symbol s_0_32[4] = { 'e', 'r', 'n', 's' };
+static const symbol s_0_33[2] = { 'a', 't' };
+static const symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' };
+static const symbol s_0_35[3] = { 'h', 'e', 't' };
+static const symbol s_0_36[3] = { 'a', 's', 't' };
+
+static const struct among a_0[37] =
 {
 /*  0 */ { 1, s_0_0, -1, 1, 0},
 /*  1 */ { 4, s_0_1, 0, 1, 0},
@@ -91,15 +105,15 @@ static struct among a_0[37] =
 /* 36 */ { 3, s_0_36, -1, 1, 0}
 };
 
-static symbol s_1_0[2] = { 'd', 'd' };
-static symbol s_1_1[2] = { 'g', 'd' };
-static symbol s_1_2[2] = { 'n', 'n' };
-static symbol s_1_3[2] = { 'd', 't' };
-static symbol s_1_4[2] = { 'g', 't' };
-static symbol s_1_5[2] = { 'k', 't' };
-static symbol s_1_6[2] = { 't', 't' };
+static const symbol s_1_0[2] = { 'd', 'd' };
+static const symbol s_1_1[2] = { 'g', 'd' };
+static const symbol s_1_2[2] = { 'n', 'n' };
+static const symbol s_1_3[2] = { 'd', 't' };
+static const symbol s_1_4[2] = { 'g', 't' };
+static const symbol s_1_5[2] = { 'k', 't' };
+static const symbol s_1_6[2] = { 't', 't' };
 
-static struct among a_1[7] =
+static const struct among a_1[7] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0},
@@ -110,13 +124,13 @@ static struct among a_1[7] =
 /*  6 */ { 2, s_1_6, -1, -1, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'g' };
-static symbol s_2_1[3] = { 'l', 'i', 'g' };
-static symbol s_2_2[3] = { 'e', 'l', 's' };
-static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' };
-static symbol s_2_4[4] = { 'l', 0xF6, 's', 't' };
+static const symbol s_2_0[2] = { 'i', 'g' };
+static const symbol s_2_1[3] = { 'l', 'i', 'g' };
+static const symbol s_2_2[3] = { 'e', 'l', 's' };
+static const symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' };
+static const symbol s_2_4[4] = { 'l', 0xF6, 's', 't' };
 
-static struct among a_2[5] =
+static const struct among a_2[5] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 3, s_2_1, 0, 1, 0},
@@ -125,74 +139,62 @@ static struct among a_2[5] =
 /*  4 */ { 4, s_2_4, -1, 2, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 };
 
-static unsigned char g_s_ending[] = { 119, 127, 149 };
+static const unsigned char g_s_ending[] = { 119, 127, 149 };
 
-static symbol s_0[] = { 'l', 0xF6, 's' };
-static symbol s_1[] = { 'f', 'u', 'l', 'l' };
+static const symbol s_0[] = { 'l', 0xF6, 's' };
+static const symbol s_1[] = { 'f', 'u', 'l', 'l' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     {   int c_test = z->c; /* test, line 29 */
-        {   int c = z->c + 3;
-            if (0 > c || c > z->l) return 0;
-            z->c = c; /* hop, line 29 */
+        {   int ret = z->c + 3;
+            if (0 > ret || ret > z->l) return 0;
+            z->c = ret; /* hop, line 29 */
         }
         z->I[1] = z->c; /* setmark x, line 29 */
         z->c = c_test;
     }
-    while(1) { /* goto, line 30 */
-        int c = z->c;
-        if (!(in_grouping(z, g_v, 97, 246))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        if (z->c >= z->l) return 0;
-        z->c++; /* goto, line 30 */
-    }
-    while(1) { /* gopast, line 30 */
-        if (!(out_grouping(z, g_v, 97, 246))) goto lab1;
-        break;
-    lab1:
-        if (z->c >= z->l) return 0;
-        z->c++; /* gopast, line 30 */
+    if (out_grouping(z, g_v, 97, 246, 1) < 0) return 0; /* goto */ /* grouping v, line 30 */
+    {    /* gopast */ /* non v, line 30 */
+        int ret = in_grouping(z, g_v, 97, 246, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 30 */
      /* try, line 31 */
-    if (!(z->I[0] < z->I[1])) goto lab2;
+    if (!(z->I[0] < z->I[1])) goto lab0;
     z->I[0] = z->I[1];
-lab2:
+lab0:
     return 1;
 }
 
 static int r_main_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 37 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 37 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 37 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 37 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851442 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_0, 37); /* substring, line 37 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 37 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 44 */
+            {   int ret = slice_del(z); /* delete, line 44 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            if (!(in_grouping_b(z, g_s_ending, 98, 121))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 46 */
+            if (in_grouping_b(z, g_s_ending, 98, 121, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 46 */
                 if (ret < 0) return ret;
             }
             break;
@@ -201,101 +203,99 @@ static int r_main_suffix(struct SN_env * z) {
 }
 
 static int r_consonant_pair(struct SN_env * z) {
-    {   int m3; /* setlimit, line 50 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 50 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 50 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* and, line 52 */
-            if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */
-            z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* and, line 52 */
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1064976 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
+            if (!(find_among_b(z, a_1, 7))) { z->lb = mlimit; return 0; } /* among, line 51 */
+            z->c = z->l - m2;
             z->ket = z->c; /* [, line 52 */
-            if (z->c <= z->lb) { z->lb = m3; return 0; }
+            if (z->c <= z->lb) { z->lb = mlimit; return 0; }
             z->c--; /* next, line 52 */
             z->bra = z->c; /* ], line 52 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 52 */
+            {   int ret = slice_del(z); /* delete, line 52 */
                 if (ret < 0) return ret;
             }
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_other_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 55 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 55 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 55 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 56 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_2, 5); /* substring, line 56 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 56 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 57 */
+                {   int ret = slice_del(z); /* delete, line 57 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 3, s_0); /* <-, line 58 */
+                {   int ret = slice_from_s(z, 3, s_0); /* <-, line 58 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 4, s_1); /* <-, line 59 */
+                {   int ret = slice_from_s(z, 4, s_1); /* <-, line 59 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 extern int swedish_ISO_8859_1_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 66 */
+    {   int c1 = z->c; /* do, line 66 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 66 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 67 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 68 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 68 */
         {   int ret = r_main_suffix(z);
             if (ret == 0) goto lab1; /* call main_suffix, line 68 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 69 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 69 */
         {   int ret = r_consonant_pair(z);
             if (ret == 0) goto lab2; /* call consonant_pair, line 69 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 70 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 70 */
         {   int ret = r_other_suffix(z);
             if (ret == 0) goto lab3; /* call other_suffix, line 70 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
     z->c = z->lb;
     return 1;
@@ -303,5 +303,5 @@ extern int swedish_ISO_8859_1_stem(struct SN_env * z) {
 
 extern struct SN_env * swedish_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); }
 
-extern void swedish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void swedish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_ISO_8859_2_romanian.c b/libstemmer_c/src_c/stem_ISO_8859_2_romanian.c
new file mode 100644
index 0000000..cc72700
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_2_romanian.c
@@ -0,0 +1,998 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int romanian_ISO_8859_2_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
+static int r_vowel_suffix(struct SN_env * z);
+static int r_verb_suffix(struct SN_env * z);
+static int r_combo_suffix(struct SN_env * z);
+static int r_standard_suffix(struct SN_env * z);
+static int r_step_0(struct SN_env * z);
+static int r_R2(struct SN_env * z);
+static int r_R1(struct SN_env * z);
+static int r_RV(struct SN_env * z);
+static int r_mark_regions(struct SN_env * z);
+static int r_postlude(struct SN_env * z);
+static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern struct SN_env * romanian_ISO_8859_2_create_env(void);
+extern void romanian_ISO_8859_2_close_env(struct SN_env * z);
+
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 'I' };
+static const symbol s_0_2[1] = { 'U' };
+
+static const struct among a_0[3] =
+{
+/*  0 */ { 0, 0, -1, 3, 0},
+/*  1 */ { 1, s_0_1, 0, 1, 0},
+/*  2 */ { 1, s_0_2, 0, 2, 0}
+};
+
+static const symbol s_1_0[2] = { 'e', 'a' };
+static const symbol s_1_1[4] = { 'a', 0xFE, 'i', 'a' };
+static const symbol s_1_2[3] = { 'a', 'u', 'a' };
+static const symbol s_1_3[3] = { 'i', 'u', 'a' };
+static const symbol s_1_4[4] = { 'a', 0xFE, 'i', 'e' };
+static const symbol s_1_5[3] = { 'e', 'l', 'e' };
+static const symbol s_1_6[3] = { 'i', 'l', 'e' };
+static const symbol s_1_7[4] = { 'i', 'i', 'l', 'e' };
+static const symbol s_1_8[3] = { 'i', 'e', 'i' };
+static const symbol s_1_9[4] = { 'a', 't', 'e', 'i' };
+static const symbol s_1_10[2] = { 'i', 'i' };
+static const symbol s_1_11[4] = { 'u', 'l', 'u', 'i' };
+static const symbol s_1_12[2] = { 'u', 'l' };
+static const symbol s_1_13[4] = { 'e', 'l', 'o', 'r' };
+static const symbol s_1_14[4] = { 'i', 'l', 'o', 'r' };
+static const symbol s_1_15[5] = { 'i', 'i', 'l', 'o', 'r' };
+
+static const struct among a_1[16] =
+{
+/*  0 */ { 2, s_1_0, -1, 3, 0},
+/*  1 */ { 4, s_1_1, -1, 7, 0},
+/*  2 */ { 3, s_1_2, -1, 2, 0},
+/*  3 */ { 3, s_1_3, -1, 4, 0},
+/*  4 */ { 4, s_1_4, -1, 7, 0},
+/*  5 */ { 3, s_1_5, -1, 3, 0},
+/*  6 */ { 3, s_1_6, -1, 5, 0},
+/*  7 */ { 4, s_1_7, 6, 4, 0},
+/*  8 */ { 3, s_1_8, -1, 4, 0},
+/*  9 */ { 4, s_1_9, -1, 6, 0},
+/* 10 */ { 2, s_1_10, -1, 4, 0},
+/* 11 */ { 4, s_1_11, -1, 1, 0},
+/* 12 */ { 2, s_1_12, -1, 1, 0},
+/* 13 */ { 4, s_1_13, -1, 3, 0},
+/* 14 */ { 4, s_1_14, -1, 4, 0},
+/* 15 */ { 5, s_1_15, 14, 4, 0}
+};
+
+static const symbol s_2_0[5] = { 'i', 'c', 'a', 'l', 'a' };
+static const symbol s_2_1[5] = { 'i', 'c', 'i', 'v', 'a' };
+static const symbol s_2_2[5] = { 'a', 't', 'i', 'v', 'a' };
+static const symbol s_2_3[5] = { 'i', 't', 'i', 'v', 'a' };
+static const symbol s_2_4[5] = { 'i', 'c', 'a', 'l', 'e' };
+static const symbol s_2_5[6] = { 'a', 0xFE, 'i', 'u', 'n', 'e' };
+static const symbol s_2_6[6] = { 'i', 0xFE, 'i', 'u', 'n', 'e' };
+static const symbol s_2_7[6] = { 'a', 't', 'o', 'a', 'r', 'e' };
+static const symbol s_2_8[6] = { 'i', 't', 'o', 'a', 'r', 'e' };
+static const symbol s_2_9[6] = { 0xE3, 't', 'o', 'a', 'r', 'e' };
+static const symbol s_2_10[7] = { 'i', 'c', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_11[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_12[9] = { 'i', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_13[7] = { 'i', 'v', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_14[5] = { 'i', 'c', 'i', 'v', 'e' };
+static const symbol s_2_15[5] = { 'a', 't', 'i', 'v', 'e' };
+static const symbol s_2_16[5] = { 'i', 't', 'i', 'v', 'e' };
+static const symbol s_2_17[5] = { 'i', 'c', 'a', 'l', 'i' };
+static const symbol s_2_18[5] = { 'a', 't', 'o', 'r', 'i' };
+static const symbol s_2_19[7] = { 'i', 'c', 'a', 't', 'o', 'r', 'i' };
+static const symbol s_2_20[5] = { 'i', 't', 'o', 'r', 'i' };
+static const symbol s_2_21[5] = { 0xE3, 't', 'o', 'r', 'i' };
+static const symbol s_2_22[7] = { 'i', 'c', 'i', 't', 'a', 't', 'i' };
+static const symbol s_2_23[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'i' };
+static const symbol s_2_24[7] = { 'i', 'v', 'i', 't', 'a', 't', 'i' };
+static const symbol s_2_25[5] = { 'i', 'c', 'i', 'v', 'i' };
+static const symbol s_2_26[5] = { 'a', 't', 'i', 'v', 'i' };
+static const symbol s_2_27[5] = { 'i', 't', 'i', 'v', 'i' };
+static const symbol s_2_28[6] = { 'i', 'c', 'i', 't', 0xE3, 'i' };
+static const symbol s_2_29[8] = { 'a', 'b', 'i', 'l', 'i', 't', 0xE3, 'i' };
+static const symbol s_2_30[6] = { 'i', 'v', 'i', 't', 0xE3, 'i' };
+static const symbol s_2_31[7] = { 'i', 'c', 'i', 't', 0xE3, 0xFE, 'i' };
+static const symbol s_2_32[9] = { 'a', 'b', 'i', 'l', 'i', 't', 0xE3, 0xFE, 'i' };
+static const symbol s_2_33[7] = { 'i', 'v', 'i', 't', 0xE3, 0xFE, 'i' };
+static const symbol s_2_34[4] = { 'i', 'c', 'a', 'l' };
+static const symbol s_2_35[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_2_36[6] = { 'i', 'c', 'a', 't', 'o', 'r' };
+static const symbol s_2_37[4] = { 'i', 't', 'o', 'r' };
+static const symbol s_2_38[4] = { 0xE3, 't', 'o', 'r' };
+static const symbol s_2_39[4] = { 'i', 'c', 'i', 'v' };
+static const symbol s_2_40[4] = { 'a', 't', 'i', 'v' };
+static const symbol s_2_41[4] = { 'i', 't', 'i', 'v' };
+static const symbol s_2_42[5] = { 'i', 'c', 'a', 'l', 0xE3 };
+static const symbol s_2_43[5] = { 'i', 'c', 'i', 'v', 0xE3 };
+static const symbol s_2_44[5] = { 'a', 't', 'i', 'v', 0xE3 };
+static const symbol s_2_45[5] = { 'i', 't', 'i', 'v', 0xE3 };
+
+static const struct among a_2[46] =
+{
+/*  0 */ { 5, s_2_0, -1, 4, 0},
+/*  1 */ { 5, s_2_1, -1, 4, 0},
+/*  2 */ { 5, s_2_2, -1, 5, 0},
+/*  3 */ { 5, s_2_3, -1, 6, 0},
+/*  4 */ { 5, s_2_4, -1, 4, 0},
+/*  5 */ { 6, s_2_5, -1, 5, 0},
+/*  6 */ { 6, s_2_6, -1, 6, 0},
+/*  7 */ { 6, s_2_7, -1, 5, 0},
+/*  8 */ { 6, s_2_8, -1, 6, 0},
+/*  9 */ { 6, s_2_9, -1, 5, 0},
+/* 10 */ { 7, s_2_10, -1, 4, 0},
+/* 11 */ { 9, s_2_11, -1, 1, 0},
+/* 12 */ { 9, s_2_12, -1, 2, 0},
+/* 13 */ { 7, s_2_13, -1, 3, 0},
+/* 14 */ { 5, s_2_14, -1, 4, 0},
+/* 15 */ { 5, s_2_15, -1, 5, 0},
+/* 16 */ { 5, s_2_16, -1, 6, 0},
+/* 17 */ { 5, s_2_17, -1, 4, 0},
+/* 18 */ { 5, s_2_18, -1, 5, 0},
+/* 19 */ { 7, s_2_19, 18, 4, 0},
+/* 20 */ { 5, s_2_20, -1, 6, 0},
+/* 21 */ { 5, s_2_21, -1, 5, 0},
+/* 22 */ { 7, s_2_22, -1, 4, 0},
+/* 23 */ { 9, s_2_23, -1, 1, 0},
+/* 24 */ { 7, s_2_24, -1, 3, 0},
+/* 25 */ { 5, s_2_25, -1, 4, 0},
+/* 26 */ { 5, s_2_26, -1, 5, 0},
+/* 27 */ { 5, s_2_27, -1, 6, 0},
+/* 28 */ { 6, s_2_28, -1, 4, 0},
+/* 29 */ { 8, s_2_29, -1, 1, 0},
+/* 30 */ { 6, s_2_30, -1, 3, 0},
+/* 31 */ { 7, s_2_31, -1, 4, 0},
+/* 32 */ { 9, s_2_32, -1, 1, 0},
+/* 33 */ { 7, s_2_33, -1, 3, 0},
+/* 34 */ { 4, s_2_34, -1, 4, 0},
+/* 35 */ { 4, s_2_35, -1, 5, 0},
+/* 36 */ { 6, s_2_36, 35, 4, 0},
+/* 37 */ { 4, s_2_37, -1, 6, 0},
+/* 38 */ { 4, s_2_38, -1, 5, 0},
+/* 39 */ { 4, s_2_39, -1, 4, 0},
+/* 40 */ { 4, s_2_40, -1, 5, 0},
+/* 41 */ { 4, s_2_41, -1, 6, 0},
+/* 42 */ { 5, s_2_42, -1, 4, 0},
+/* 43 */ { 5, s_2_43, -1, 4, 0},
+/* 44 */ { 5, s_2_44, -1, 5, 0},
+/* 45 */ { 5, s_2_45, -1, 6, 0}
+};
+
+static const symbol s_3_0[3] = { 'i', 'c', 'a' };
+static const symbol s_3_1[5] = { 'a', 'b', 'i', 'l', 'a' };
+static const symbol s_3_2[5] = { 'i', 'b', 'i', 'l', 'a' };
+static const symbol s_3_3[4] = { 'o', 'a', 's', 'a' };
+static const symbol s_3_4[3] = { 'a', 't', 'a' };
+static const symbol s_3_5[3] = { 'i', 't', 'a' };
+static const symbol s_3_6[4] = { 'a', 'n', 't', 'a' };
+static const symbol s_3_7[4] = { 'i', 's', 't', 'a' };
+static const symbol s_3_8[3] = { 'u', 't', 'a' };
+static const symbol s_3_9[3] = { 'i', 'v', 'a' };
+static const symbol s_3_10[2] = { 'i', 'c' };
+static const symbol s_3_11[3] = { 'i', 'c', 'e' };
+static const symbol s_3_12[5] = { 'a', 'b', 'i', 'l', 'e' };
+static const symbol s_3_13[5] = { 'i', 'b', 'i', 'l', 'e' };
+static const symbol s_3_14[4] = { 'i', 's', 'm', 'e' };
+static const symbol s_3_15[4] = { 'i', 'u', 'n', 'e' };
+static const symbol s_3_16[4] = { 'o', 'a', 's', 'e' };
+static const symbol s_3_17[3] = { 'a', 't', 'e' };
+static const symbol s_3_18[5] = { 'i', 't', 'a', 't', 'e' };
+static const symbol s_3_19[3] = { 'i', 't', 'e' };
+static const symbol s_3_20[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_3_21[4] = { 'i', 's', 't', 'e' };
+static const symbol s_3_22[3] = { 'u', 't', 'e' };
+static const symbol s_3_23[3] = { 'i', 'v', 'e' };
+static const symbol s_3_24[3] = { 'i', 'c', 'i' };
+static const symbol s_3_25[5] = { 'a', 'b', 'i', 'l', 'i' };
+static const symbol s_3_26[5] = { 'i', 'b', 'i', 'l', 'i' };
+static const symbol s_3_27[4] = { 'i', 'u', 'n', 'i' };
+static const symbol s_3_28[5] = { 'a', 't', 'o', 'r', 'i' };
+static const symbol s_3_29[3] = { 'o', 's', 'i' };
+static const symbol s_3_30[3] = { 'a', 't', 'i' };
+static const symbol s_3_31[5] = { 'i', 't', 'a', 't', 'i' };
+static const symbol s_3_32[3] = { 'i', 't', 'i' };
+static const symbol s_3_33[4] = { 'a', 'n', 't', 'i' };
+static const symbol s_3_34[4] = { 'i', 's', 't', 'i' };
+static const symbol s_3_35[3] = { 'u', 't', 'i' };
+static const symbol s_3_36[4] = { 'i', 0xBA, 't', 'i' };
+static const symbol s_3_37[3] = { 'i', 'v', 'i' };
+static const symbol s_3_38[3] = { 'o', 0xBA, 'i' };
+static const symbol s_3_39[4] = { 'i', 't', 0xE3, 'i' };
+static const symbol s_3_40[5] = { 'i', 't', 0xE3, 0xFE, 'i' };
+static const symbol s_3_41[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_3_42[4] = { 'i', 'b', 'i', 'l' };
+static const symbol s_3_43[3] = { 'i', 's', 'm' };
+static const symbol s_3_44[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_3_45[2] = { 'o', 's' };
+static const symbol s_3_46[2] = { 'a', 't' };
+static const symbol s_3_47[2] = { 'i', 't' };
+static const symbol s_3_48[3] = { 'a', 'n', 't' };
+static const symbol s_3_49[3] = { 'i', 's', 't' };
+static const symbol s_3_50[2] = { 'u', 't' };
+static const symbol s_3_51[2] = { 'i', 'v' };
+static const symbol s_3_52[3] = { 'i', 'c', 0xE3 };
+static const symbol s_3_53[5] = { 'a', 'b', 'i', 'l', 0xE3 };
+static const symbol s_3_54[5] = { 'i', 'b', 'i', 'l', 0xE3 };
+static const symbol s_3_55[4] = { 'o', 'a', 's', 0xE3 };
+static const symbol s_3_56[3] = { 'a', 't', 0xE3 };
+static const symbol s_3_57[3] = { 'i', 't', 0xE3 };
+static const symbol s_3_58[4] = { 'a', 'n', 't', 0xE3 };
+static const symbol s_3_59[4] = { 'i', 's', 't', 0xE3 };
+static const symbol s_3_60[3] = { 'u', 't', 0xE3 };
+static const symbol s_3_61[3] = { 'i', 'v', 0xE3 };
+
+static const struct among a_3[62] =
+{
+/*  0 */ { 3, s_3_0, -1, 1, 0},
+/*  1 */ { 5, s_3_1, -1, 1, 0},
+/*  2 */ { 5, s_3_2, -1, 1, 0},
+/*  3 */ { 4, s_3_3, -1, 1, 0},
+/*  4 */ { 3, s_3_4, -1, 1, 0},
+/*  5 */ { 3, s_3_5, -1, 1, 0},
+/*  6 */ { 4, s_3_6, -1, 1, 0},
+/*  7 */ { 4, s_3_7, -1, 3, 0},
+/*  8 */ { 3, s_3_8, -1, 1, 0},
+/*  9 */ { 3, s_3_9, -1, 1, 0},
+/* 10 */ { 2, s_3_10, -1, 1, 0},
+/* 11 */ { 3, s_3_11, -1, 1, 0},
+/* 12 */ { 5, s_3_12, -1, 1, 0},
+/* 13 */ { 5, s_3_13, -1, 1, 0},
+/* 14 */ { 4, s_3_14, -1, 3, 0},
+/* 15 */ { 4, s_3_15, -1, 2, 0},
+/* 16 */ { 4, s_3_16, -1, 1, 0},
+/* 17 */ { 3, s_3_17, -1, 1, 0},
+/* 18 */ { 5, s_3_18, 17, 1, 0},
+/* 19 */ { 3, s_3_19, -1, 1, 0},
+/* 20 */ { 4, s_3_20, -1, 1, 0},
+/* 21 */ { 4, s_3_21, -1, 3, 0},
+/* 22 */ { 3, s_3_22, -1, 1, 0},
+/* 23 */ { 3, s_3_23, -1, 1, 0},
+/* 24 */ { 3, s_3_24, -1, 1, 0},
+/* 25 */ { 5, s_3_25, -1, 1, 0},
+/* 26 */ { 5, s_3_26, -1, 1, 0},
+/* 27 */ { 4, s_3_27, -1, 2, 0},
+/* 28 */ { 5, s_3_28, -1, 1, 0},
+/* 29 */ { 3, s_3_29, -1, 1, 0},
+/* 30 */ { 3, s_3_30, -1, 1, 0},
+/* 31 */ { 5, s_3_31, 30, 1, 0},
+/* 32 */ { 3, s_3_32, -1, 1, 0},
+/* 33 */ { 4, s_3_33, -1, 1, 0},
+/* 34 */ { 4, s_3_34, -1, 3, 0},
+/* 35 */ { 3, s_3_35, -1, 1, 0},
+/* 36 */ { 4, s_3_36, -1, 3, 0},
+/* 37 */ { 3, s_3_37, -1, 1, 0},
+/* 38 */ { 3, s_3_38, -1, 1, 0},
+/* 39 */ { 4, s_3_39, -1, 1, 0},
+/* 40 */ { 5, s_3_40, -1, 1, 0},
+/* 41 */ { 4, s_3_41, -1, 1, 0},
+/* 42 */ { 4, s_3_42, -1, 1, 0},
+/* 43 */ { 3, s_3_43, -1, 3, 0},
+/* 44 */ { 4, s_3_44, -1, 1, 0},
+/* 45 */ { 2, s_3_45, -1, 1, 0},
+/* 46 */ { 2, s_3_46, -1, 1, 0},
+/* 47 */ { 2, s_3_47, -1, 1, 0},
+/* 48 */ { 3, s_3_48, -1, 1, 0},
+/* 49 */ { 3, s_3_49, -1, 3, 0},
+/* 50 */ { 2, s_3_50, -1, 1, 0},
+/* 51 */ { 2, s_3_51, -1, 1, 0},
+/* 52 */ { 3, s_3_52, -1, 1, 0},
+/* 53 */ { 5, s_3_53, -1, 1, 0},
+/* 54 */ { 5, s_3_54, -1, 1, 0},
+/* 55 */ { 4, s_3_55, -1, 1, 0},
+/* 56 */ { 3, s_3_56, -1, 1, 0},
+/* 57 */ { 3, s_3_57, -1, 1, 0},
+/* 58 */ { 4, s_3_58, -1, 1, 0},
+/* 59 */ { 4, s_3_59, -1, 3, 0},
+/* 60 */ { 3, s_3_60, -1, 1, 0},
+/* 61 */ { 3, s_3_61, -1, 1, 0}
+};
+
+static const symbol s_4_0[2] = { 'e', 'a' };
+static const symbol s_4_1[2] = { 'i', 'a' };
+static const symbol s_4_2[3] = { 'e', 's', 'c' };
+static const symbol s_4_3[3] = { 0xE3, 's', 'c' };
+static const symbol s_4_4[3] = { 'i', 'n', 'd' };
+static const symbol s_4_5[3] = { 0xE2, 'n', 'd' };
+static const symbol s_4_6[3] = { 'a', 'r', 'e' };
+static const symbol s_4_7[3] = { 'e', 'r', 'e' };
+static const symbol s_4_8[3] = { 'i', 'r', 'e' };
+static const symbol s_4_9[3] = { 0xE2, 'r', 'e' };
+static const symbol s_4_10[2] = { 's', 'e' };
+static const symbol s_4_11[3] = { 'a', 's', 'e' };
+static const symbol s_4_12[4] = { 's', 'e', 's', 'e' };
+static const symbol s_4_13[3] = { 'i', 's', 'e' };
+static const symbol s_4_14[3] = { 'u', 's', 'e' };
+static const symbol s_4_15[3] = { 0xE2, 's', 'e' };
+static const symbol s_4_16[4] = { 'e', 0xBA, 't', 'e' };
+static const symbol s_4_17[4] = { 0xE3, 0xBA, 't', 'e' };
+static const symbol s_4_18[3] = { 'e', 'z', 'e' };
+static const symbol s_4_19[2] = { 'a', 'i' };
+static const symbol s_4_20[3] = { 'e', 'a', 'i' };
+static const symbol s_4_21[3] = { 'i', 'a', 'i' };
+static const symbol s_4_22[3] = { 's', 'e', 'i' };
+static const symbol s_4_23[4] = { 'e', 0xBA, 't', 'i' };
+static const symbol s_4_24[4] = { 0xE3, 0xBA, 't', 'i' };
+static const symbol s_4_25[2] = { 'u', 'i' };
+static const symbol s_4_26[3] = { 'e', 'z', 'i' };
+static const symbol s_4_27[3] = { 'a', 0xBA, 'i' };
+static const symbol s_4_28[4] = { 's', 'e', 0xBA, 'i' };
+static const symbol s_4_29[5] = { 'a', 's', 'e', 0xBA, 'i' };
+static const symbol s_4_30[6] = { 's', 'e', 's', 'e', 0xBA, 'i' };
+static const symbol s_4_31[5] = { 'i', 's', 'e', 0xBA, 'i' };
+static const symbol s_4_32[5] = { 'u', 's', 'e', 0xBA, 'i' };
+static const symbol s_4_33[5] = { 0xE2, 's', 'e', 0xBA, 'i' };
+static const symbol s_4_34[3] = { 'i', 0xBA, 'i' };
+static const symbol s_4_35[3] = { 'u', 0xBA, 'i' };
+static const symbol s_4_36[3] = { 0xE2, 0xBA, 'i' };
+static const symbol s_4_37[2] = { 0xE2, 'i' };
+static const symbol s_4_38[3] = { 'a', 0xFE, 'i' };
+static const symbol s_4_39[4] = { 'e', 'a', 0xFE, 'i' };
+static const symbol s_4_40[4] = { 'i', 'a', 0xFE, 'i' };
+static const symbol s_4_41[3] = { 'e', 0xFE, 'i' };
+static const symbol s_4_42[3] = { 'i', 0xFE, 'i' };
+static const symbol s_4_43[3] = { 0xE2, 0xFE, 'i' };
+static const symbol s_4_44[5] = { 'a', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_45[6] = { 's', 'e', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_46[7] = { 'a', 's', 'e', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_47[8] = { 's', 'e', 's', 'e', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_48[7] = { 'i', 's', 'e', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_49[7] = { 'u', 's', 'e', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_50[7] = { 0xE2, 's', 'e', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_51[5] = { 'i', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_52[5] = { 'u', 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_53[5] = { 0xE2, 'r', 0xE3, 0xFE, 'i' };
+static const symbol s_4_54[2] = { 'a', 'm' };
+static const symbol s_4_55[3] = { 'e', 'a', 'm' };
+static const symbol s_4_56[3] = { 'i', 'a', 'm' };
+static const symbol s_4_57[2] = { 'e', 'm' };
+static const symbol s_4_58[4] = { 'a', 's', 'e', 'm' };
+static const symbol s_4_59[5] = { 's', 'e', 's', 'e', 'm' };
+static const symbol s_4_60[4] = { 'i', 's', 'e', 'm' };
+static const symbol s_4_61[4] = { 'u', 's', 'e', 'm' };
+static const symbol s_4_62[4] = { 0xE2, 's', 'e', 'm' };
+static const symbol s_4_63[2] = { 'i', 'm' };
+static const symbol s_4_64[2] = { 0xE2, 'm' };
+static const symbol s_4_65[2] = { 0xE3, 'm' };
+static const symbol s_4_66[4] = { 'a', 'r', 0xE3, 'm' };
+static const symbol s_4_67[5] = { 's', 'e', 'r', 0xE3, 'm' };
+static const symbol s_4_68[6] = { 'a', 's', 'e', 'r', 0xE3, 'm' };
+static const symbol s_4_69[7] = { 's', 'e', 's', 'e', 'r', 0xE3, 'm' };
+static const symbol s_4_70[6] = { 'i', 's', 'e', 'r', 0xE3, 'm' };
+static const symbol s_4_71[6] = { 'u', 's', 'e', 'r', 0xE3, 'm' };
+static const symbol s_4_72[6] = { 0xE2, 's', 'e', 'r', 0xE3, 'm' };
+static const symbol s_4_73[4] = { 'i', 'r', 0xE3, 'm' };
+static const symbol s_4_74[4] = { 'u', 'r', 0xE3, 'm' };
+static const symbol s_4_75[4] = { 0xE2, 'r', 0xE3, 'm' };
+static const symbol s_4_76[2] = { 'a', 'u' };
+static const symbol s_4_77[3] = { 'e', 'a', 'u' };
+static const symbol s_4_78[3] = { 'i', 'a', 'u' };
+static const symbol s_4_79[4] = { 'i', 'n', 'd', 'u' };
+static const symbol s_4_80[4] = { 0xE2, 'n', 'd', 'u' };
+static const symbol s_4_81[2] = { 'e', 'z' };
+static const symbol s_4_82[5] = { 'e', 'a', 's', 'c', 0xE3 };
+static const symbol s_4_83[3] = { 'a', 'r', 0xE3 };
+static const symbol s_4_84[4] = { 's', 'e', 'r', 0xE3 };
+static const symbol s_4_85[5] = { 'a', 's', 'e', 'r', 0xE3 };
+static const symbol s_4_86[6] = { 's', 'e', 's', 'e', 'r', 0xE3 };
+static const symbol s_4_87[5] = { 'i', 's', 'e', 'r', 0xE3 };
+static const symbol s_4_88[5] = { 'u', 's', 'e', 'r', 0xE3 };
+static const symbol s_4_89[5] = { 0xE2, 's', 'e', 'r', 0xE3 };
+static const symbol s_4_90[3] = { 'i', 'r', 0xE3 };
+static const symbol s_4_91[3] = { 'u', 'r', 0xE3 };
+static const symbol s_4_92[3] = { 0xE2, 'r', 0xE3 };
+static const symbol s_4_93[4] = { 'e', 'a', 'z', 0xE3 };
+
+static const struct among a_4[94] =
+{
+/*  0 */ { 2, s_4_0, -1, 1, 0},
+/*  1 */ { 2, s_4_1, -1, 1, 0},
+/*  2 */ { 3, s_4_2, -1, 1, 0},
+/*  3 */ { 3, s_4_3, -1, 1, 0},
+/*  4 */ { 3, s_4_4, -1, 1, 0},
+/*  5 */ { 3, s_4_5, -1, 1, 0},
+/*  6 */ { 3, s_4_6, -1, 1, 0},
+/*  7 */ { 3, s_4_7, -1, 1, 0},
+/*  8 */ { 3, s_4_8, -1, 1, 0},
+/*  9 */ { 3, s_4_9, -1, 1, 0},
+/* 10 */ { 2, s_4_10, -1, 2, 0},
+/* 11 */ { 3, s_4_11, 10, 1, 0},
+/* 12 */ { 4, s_4_12, 10, 2, 0},
+/* 13 */ { 3, s_4_13, 10, 1, 0},
+/* 14 */ { 3, s_4_14, 10, 1, 0},
+/* 15 */ { 3, s_4_15, 10, 1, 0},
+/* 16 */ { 4, s_4_16, -1, 1, 0},
+/* 17 */ { 4, s_4_17, -1, 1, 0},
+/* 18 */ { 3, s_4_18, -1, 1, 0},
+/* 19 */ { 2, s_4_19, -1, 1, 0},
+/* 20 */ { 3, s_4_20, 19, 1, 0},
+/* 21 */ { 3, s_4_21, 19, 1, 0},
+/* 22 */ { 3, s_4_22, -1, 2, 0},
+/* 23 */ { 4, s_4_23, -1, 1, 0},
+/* 24 */ { 4, s_4_24, -1, 1, 0},
+/* 25 */ { 2, s_4_25, -1, 1, 0},
+/* 26 */ { 3, s_4_26, -1, 1, 0},
+/* 27 */ { 3, s_4_27, -1, 1, 0},
+/* 28 */ { 4, s_4_28, -1, 2, 0},
+/* 29 */ { 5, s_4_29, 28, 1, 0},
+/* 30 */ { 6, s_4_30, 28, 2, 0},
+/* 31 */ { 5, s_4_31, 28, 1, 0},
+/* 32 */ { 5, s_4_32, 28, 1, 0},
+/* 33 */ { 5, s_4_33, 28, 1, 0},
+/* 34 */ { 3, s_4_34, -1, 1, 0},
+/* 35 */ { 3, s_4_35, -1, 1, 0},
+/* 36 */ { 3, s_4_36, -1, 1, 0},
+/* 37 */ { 2, s_4_37, -1, 1, 0},
+/* 38 */ { 3, s_4_38, -1, 2, 0},
+/* 39 */ { 4, s_4_39, 38, 1, 0},
+/* 40 */ { 4, s_4_40, 38, 1, 0},
+/* 41 */ { 3, s_4_41, -1, 2, 0},
+/* 42 */ { 3, s_4_42, -1, 2, 0},
+/* 43 */ { 3, s_4_43, -1, 2, 0},
+/* 44 */ { 5, s_4_44, -1, 1, 0},
+/* 45 */ { 6, s_4_45, -1, 2, 0},
+/* 46 */ { 7, s_4_46, 45, 1, 0},
+/* 47 */ { 8, s_4_47, 45, 2, 0},
+/* 48 */ { 7, s_4_48, 45, 1, 0},
+/* 49 */ { 7, s_4_49, 45, 1, 0},
+/* 50 */ { 7, s_4_50, 45, 1, 0},
+/* 51 */ { 5, s_4_51, -1, 1, 0},
+/* 52 */ { 5, s_4_52, -1, 1, 0},
+/* 53 */ { 5, s_4_53, -1, 1, 0},
+/* 54 */ { 2, s_4_54, -1, 1, 0},
+/* 55 */ { 3, s_4_55, 54, 1, 0},
+/* 56 */ { 3, s_4_56, 54, 1, 0},
+/* 57 */ { 2, s_4_57, -1, 2, 0},
+/* 58 */ { 4, s_4_58, 57, 1, 0},
+/* 59 */ { 5, s_4_59, 57, 2, 0},
+/* 60 */ { 4, s_4_60, 57, 1, 0},
+/* 61 */ { 4, s_4_61, 57, 1, 0},
+/* 62 */ { 4, s_4_62, 57, 1, 0},
+/* 63 */ { 2, s_4_63, -1, 2, 0},
+/* 64 */ { 2, s_4_64, -1, 2, 0},
+/* 65 */ { 2, s_4_65, -1, 2, 0},
+/* 66 */ { 4, s_4_66, 65, 1, 0},
+/* 67 */ { 5, s_4_67, 65, 2, 0},
+/* 68 */ { 6, s_4_68, 67, 1, 0},
+/* 69 */ { 7, s_4_69, 67, 2, 0},
+/* 70 */ { 6, s_4_70, 67, 1, 0},
+/* 71 */ { 6, s_4_71, 67, 1, 0},
+/* 72 */ { 6, s_4_72, 67, 1, 0},
+/* 73 */ { 4, s_4_73, 65, 1, 0},
+/* 74 */ { 4, s_4_74, 65, 1, 0},
+/* 75 */ { 4, s_4_75, 65, 1, 0},
+/* 76 */ { 2, s_4_76, -1, 1, 0},
+/* 77 */ { 3, s_4_77, 76, 1, 0},
+/* 78 */ { 3, s_4_78, 76, 1, 0},
+/* 79 */ { 4, s_4_79, -1, 1, 0},
+/* 80 */ { 4, s_4_80, -1, 1, 0},
+/* 81 */ { 2, s_4_81, -1, 1, 0},
+/* 82 */ { 5, s_4_82, -1, 1, 0},
+/* 83 */ { 3, s_4_83, -1, 1, 0},
+/* 84 */ { 4, s_4_84, -1, 2, 0},
+/* 85 */ { 5, s_4_85, 84, 1, 0},
+/* 86 */ { 6, s_4_86, 84, 2, 0},
+/* 87 */ { 5, s_4_87, 84, 1, 0},
+/* 88 */ { 5, s_4_88, 84, 1, 0},
+/* 89 */ { 5, s_4_89, 84, 1, 0},
+/* 90 */ { 3, s_4_90, -1, 1, 0},
+/* 91 */ { 3, s_4_91, -1, 1, 0},
+/* 92 */ { 3, s_4_92, -1, 1, 0},
+/* 93 */ { 4, s_4_93, -1, 1, 0}
+};
+
+static const symbol s_5_0[1] = { 'a' };
+static const symbol s_5_1[1] = { 'e' };
+static const symbol s_5_2[2] = { 'i', 'e' };
+static const symbol s_5_3[1] = { 'i' };
+static const symbol s_5_4[1] = { 0xE3 };
+
+static const struct among a_5[5] =
+{
+/*  0 */ { 1, s_5_0, -1, 1, 0},
+/*  1 */ { 1, s_5_1, -1, 1, 0},
+/*  2 */ { 2, s_5_2, 1, 1, 0},
+/*  3 */ { 1, s_5_3, -1, 1, 0},
+/*  4 */ { 1, s_5_4, -1, 1, 0}
+};
+
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 32 };
+
+static const symbol s_0[] = { 'u' };
+static const symbol s_1[] = { 'U' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'I' };
+static const symbol s_4[] = { 'i' };
+static const symbol s_5[] = { 'u' };
+static const symbol s_6[] = { 'a' };
+static const symbol s_7[] = { 'e' };
+static const symbol s_8[] = { 'i' };
+static const symbol s_9[] = { 'a', 'b' };
+static const symbol s_10[] = { 'i' };
+static const symbol s_11[] = { 'a', 't' };
+static const symbol s_12[] = { 'a', 0xFE, 'i' };
+static const symbol s_13[] = { 'a', 'b', 'i', 'l' };
+static const symbol s_14[] = { 'i', 'b', 'i', 'l' };
+static const symbol s_15[] = { 'i', 'v' };
+static const symbol s_16[] = { 'i', 'c' };
+static const symbol s_17[] = { 'a', 't' };
+static const symbol s_18[] = { 'i', 't' };
+static const symbol s_19[] = { 0xFE };
+static const symbol s_20[] = { 't' };
+static const symbol s_21[] = { 'i', 's', 't' };
+static const symbol s_22[] = { 'u' };
+
+static int r_prelude(struct SN_env * z) {
+    while(1) { /* repeat, line 32 */
+        int c1 = z->c;
+        while(1) { /* goto, line 32 */
+            int c2 = z->c;
+            if (in_grouping(z, g_v, 97, 238, 0)) goto lab1;
+            z->bra = z->c; /* [, line 33 */
+            {   int c3 = z->c; /* or, line 33 */
+                if (!(eq_s(z, 1, s_0))) goto lab3;
+                z->ket = z->c; /* ], line 33 */
+                if (in_grouping(z, g_v, 97, 238, 0)) goto lab3;
+                {   int ret = slice_from_s(z, 1, s_1); /* <-, line 33 */
+                    if (ret < 0) return ret;
+                }
+                goto lab2;
+            lab3:
+                z->c = c3;
+                if (!(eq_s(z, 1, s_2))) goto lab1;
+                z->ket = z->c; /* ], line 34 */
+                if (in_grouping(z, g_v, 97, 238, 0)) goto lab1;
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 34 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab2:
+            z->c = c2;
+            break;
+        lab1:
+            z->c = c2;
+            if (z->c >= z->l) goto lab0;
+            z->c++; /* goto, line 32 */
+        }
+        continue;
+    lab0:
+        z->c = c1;
+        break;
+    }
+    return 1;
+}
+
+static int r_mark_regions(struct SN_env * z) {
+    z->I[0] = z->l;
+    z->I[1] = z->l;
+    z->I[2] = z->l;
+    {   int c1 = z->c; /* do, line 44 */
+        {   int c2 = z->c; /* or, line 46 */
+            if (in_grouping(z, g_v, 97, 238, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 45 */
+                if (out_grouping(z, g_v, 97, 238, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 45 */
+                    int ret = out_grouping(z, g_v, 97, 238, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
+                }
+                goto lab3;
+            lab4:
+                z->c = c3;
+                if (in_grouping(z, g_v, 97, 238, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 45 */
+                    int ret = in_grouping(z, g_v, 97, 238, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
+                }
+            }
+        lab3:
+            goto lab1;
+        lab2:
+            z->c = c2;
+            if (out_grouping(z, g_v, 97, 238, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 47 */
+                if (out_grouping(z, g_v, 97, 238, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 47 */
+                    int ret = out_grouping(z, g_v, 97, 238, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
+                }
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping(z, g_v, 97, 238, 0)) goto lab0;
+                if (z->c >= z->l) goto lab0;
+                z->c++; /* next, line 47 */
+            }
+        lab5:
+            ;
+        }
+    lab1:
+        z->I[0] = z->c; /* setmark pV, line 48 */
+    lab0:
+        z->c = c1;
+    }
+    {   int c5 = z->c; /* do, line 50 */
+        {    /* gopast */ /* grouping v, line 51 */
+            int ret = out_grouping(z, g_v, 97, 238, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        {    /* gopast */ /* non v, line 51 */
+            int ret = in_grouping(z, g_v, 97, 238, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        z->I[1] = z->c; /* setmark p1, line 51 */
+        {    /* gopast */ /* grouping v, line 52 */
+            int ret = out_grouping(z, g_v, 97, 238, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        {    /* gopast */ /* non v, line 52 */
+            int ret = in_grouping(z, g_v, 97, 238, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        z->I[2] = z->c; /* setmark p2, line 52 */
+    lab7:
+        z->c = c5;
+    }
+    return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+    int among_var;
+    while(1) { /* repeat, line 56 */
+        int c1 = z->c;
+        z->bra = z->c; /* [, line 58 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else
+        among_var = find_among(z, a_0, 3); /* substring, line 58 */
+        if (!(among_var)) goto lab0;
+        z->ket = z->c; /* ], line 58 */
+        switch(among_var) {
+            case 0: goto lab0;
+            case 1:
+                {   int ret = slice_from_s(z, 1, s_4); /* <-, line 59 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 2:
+                {   int ret = slice_from_s(z, 1, s_5); /* <-, line 60 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 3:
+                if (z->c >= z->l) goto lab0;
+                z->c++; /* next, line 61 */
+                break;
+        }
+        continue;
+    lab0:
+        z->c = c1;
+        break;
+    }
+    return 1;
+}
+
+static int r_RV(struct SN_env * z) {
+    if (!(z->I[0] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+    if (!(z->I[1] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+    if (!(z->I[2] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_step_0(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 73 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((266786 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_1, 16); /* substring, line 73 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 73 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 73 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 75 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_6); /* <-, line 77 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_7); /* <-, line 79 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_from_s(z, 1, s_8); /* <-, line 81 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int m1 = z->l - z->c; (void)m1; /* not, line 83 */
+                if (!(eq_s_b(z, 2, s_9))) goto lab0;
+                return 0;
+            lab0:
+                z->c = z->l - m1;
+            }
+            {   int ret = slice_from_s(z, 1, s_10); /* <-, line 83 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_from_s(z, 2, s_11); /* <-, line 85 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_from_s(z, 3, s_12); /* <-, line 87 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_combo_suffix(struct SN_env * z) {
+    int among_var;
+    {   int m_test = z->l - z->c; /* test, line 91 */
+        z->ket = z->c; /* [, line 92 */
+        among_var = find_among_b(z, a_2, 46); /* substring, line 92 */
+        if (!(among_var)) return 0;
+        z->bra = z->c; /* ], line 92 */
+        {   int ret = r_R1(z);
+            if (ret == 0) return 0; /* call R1, line 92 */
+            if (ret < 0) return ret;
+        }
+        switch(among_var) {
+            case 0: return 0;
+            case 1:
+                {   int ret = slice_from_s(z, 4, s_13); /* <-, line 101 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 2:
+                {   int ret = slice_from_s(z, 4, s_14); /* <-, line 104 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 3:
+                {   int ret = slice_from_s(z, 2, s_15); /* <-, line 107 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 4:
+                {   int ret = slice_from_s(z, 2, s_16); /* <-, line 113 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 5:
+                {   int ret = slice_from_s(z, 2, s_17); /* <-, line 118 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 6:
+                {   int ret = slice_from_s(z, 2, s_18); /* <-, line 122 */
+                    if (ret < 0) return ret;
+                }
+                break;
+        }
+        z->B[0] = 1; /* set standard_suffix_removed, line 125 */
+        z->c = z->l - m_test;
+    }
+    return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+    int among_var;
+    z->B[0] = 0; /* unset standard_suffix_removed, line 130 */
+    while(1) { /* repeat, line 131 */
+        int m1 = z->l - z->c; (void)m1;
+        {   int ret = r_combo_suffix(z);
+            if (ret == 0) goto lab0; /* call combo_suffix, line 131 */
+            if (ret < 0) return ret;
+        }
+        continue;
+    lab0:
+        z->c = z->l - m1;
+        break;
+    }
+    z->ket = z->c; /* [, line 132 */
+    among_var = find_among_b(z, a_3, 62); /* substring, line 132 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 132 */
+    {   int ret = r_R2(z);
+        if (ret == 0) return 0; /* call R2, line 132 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 149 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            if (!(eq_s_b(z, 1, s_19))) return 0;
+            z->bra = z->c; /* ], line 152 */
+            {   int ret = slice_from_s(z, 1, s_20); /* <-, line 152 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 3, s_21); /* <-, line 156 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    z->B[0] = 1; /* set standard_suffix_removed, line 160 */
+    return 1;
+}
+
+static int r_verb_suffix(struct SN_env * z) {
+    int among_var;
+    {   int mlimit; /* setlimit, line 164 */
+        int m1 = z->l - z->c; (void)m1;
+        if (z->c < z->I[0]) return 0;
+        z->c = z->I[0]; /* tomark, line 164 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 165 */
+        among_var = find_among_b(z, a_4, 94); /* substring, line 165 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 165 */
+        switch(among_var) {
+            case 0: { z->lb = mlimit; return 0; }
+            case 1:
+                {   int m2 = z->l - z->c; (void)m2; /* or, line 200 */
+                    if (out_grouping_b(z, g_v, 97, 238, 0)) goto lab1;
+                    goto lab0;
+                lab1:
+                    z->c = z->l - m2;
+                    if (!(eq_s_b(z, 1, s_22))) { z->lb = mlimit; return 0; }
+                }
+            lab0:
+                {   int ret = slice_del(z); /* delete, line 200 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 2:
+                {   int ret = slice_del(z); /* delete, line 214 */
+                    if (ret < 0) return ret;
+                }
+                break;
+        }
+        z->lb = mlimit;
+    }
+    return 1;
+}
+
+static int r_vowel_suffix(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 219 */
+    among_var = find_among_b(z, a_5, 5); /* substring, line 219 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 219 */
+    {   int ret = r_RV(z);
+        if (ret == 0) return 0; /* call RV, line 219 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 220 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+extern int romanian_ISO_8859_2_stem(struct SN_env * z) {
+    {   int c1 = z->c; /* do, line 226 */
+        {   int ret = r_prelude(z);
+            if (ret == 0) goto lab0; /* call prelude, line 226 */
+            if (ret < 0) return ret;
+        }
+    lab0:
+        z->c = c1;
+    }
+    {   int c2 = z->c; /* do, line 227 */
+        {   int ret = r_mark_regions(z);
+            if (ret == 0) goto lab1; /* call mark_regions, line 227 */
+            if (ret < 0) return ret;
+        }
+    lab1:
+        z->c = c2;
+    }
+    z->lb = z->c; z->c = z->l; /* backwards, line 228 */
+
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 229 */
+        {   int ret = r_step_0(z);
+            if (ret == 0) goto lab2; /* call step_0, line 229 */
+            if (ret < 0) return ret;
+        }
+    lab2:
+        z->c = z->l - m3;
+    }
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 230 */
+        {   int ret = r_standard_suffix(z);
+            if (ret == 0) goto lab3; /* call standard_suffix, line 230 */
+            if (ret < 0) return ret;
+        }
+    lab3:
+        z->c = z->l - m4;
+    }
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 231 */
+        {   int m6 = z->l - z->c; (void)m6; /* or, line 231 */
+            if (!(z->B[0])) goto lab6; /* Boolean test standard_suffix_removed, line 231 */
+            goto lab5;
+        lab6:
+            z->c = z->l - m6;
+            {   int ret = r_verb_suffix(z);
+                if (ret == 0) goto lab4; /* call verb_suffix, line 231 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab5:
+    lab4:
+        z->c = z->l - m5;
+    }
+    {   int m7 = z->l - z->c; (void)m7; /* do, line 232 */
+        {   int ret = r_vowel_suffix(z);
+            if (ret == 0) goto lab7; /* call vowel_suffix, line 232 */
+            if (ret < 0) return ret;
+        }
+    lab7:
+        z->c = z->l - m7;
+    }
+    z->c = z->lb;
+    {   int c8 = z->c; /* do, line 234 */
+        {   int ret = r_postlude(z);
+            if (ret == 0) goto lab8; /* call postlude, line 234 */
+            if (ret < 0) return ret;
+        }
+    lab8:
+        z->c = c8;
+    }
+    return 1;
+}
+
+extern struct SN_env * romanian_ISO_8859_2_create_env(void) { return SN_create_env(0, 3, 1); }
+
+extern void romanian_ISO_8859_2_close_env(struct SN_env * z) { SN_close_env(z, 0); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_2_romanian.h b/libstemmer_c/src_c/stem_ISO_8859_2_romanian.h
new file mode 100644
index 0000000..931f269
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_2_romanian.h
@@ -0,0 +1,16 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct SN_env * romanian_ISO_8859_2_create_env(void);
+extern void romanian_ISO_8859_2_close_env(struct SN_env * z);
+
+extern int romanian_ISO_8859_2_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_KOI8_R_russian.c b/libstemmer_c/src_c/stem_KOI8_R_russian.c
index 0a68a3b..3d93a9c 100644
--- a/libstemmer_c/src_c/stem_KOI8_R_russian.c
+++ b/libstemmer_c/src_c/stem_KOI8_R_russian.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int russian_KOI8_R_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_tidy_up(struct SN_env * z);
 static int r_derivational(struct SN_env * z);
 static int r_noun(struct SN_env * z);
@@ -14,21 +20,29 @@ static int r_adjective(struct SN_env * z);
 static int r_perfective_gerund(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * russian_KOI8_R_create_env(void);
 extern void russian_KOI8_R_close_env(struct SN_env * z);
 
-static symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 };
-static symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 };
-static symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 };
-static symbol s_0_3[1] = { 0xD7 };
-static symbol s_0_4[2] = { 0xC9, 0xD7 };
-static symbol s_0_5[2] = { 0xD9, 0xD7 };
-static symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
-static symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
-static symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
-
-static struct among a_0[9] =
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 };
+static const symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 };
+static const symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 };
+static const symbol s_0_3[1] = { 0xD7 };
+static const symbol s_0_4[2] = { 0xC9, 0xD7 };
+static const symbol s_0_5[2] = { 0xD9, 0xD7 };
+static const symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
+static const symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
+static const symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 };
+
+static const struct among a_0[9] =
 {
 /*  0 */ { 3, s_0_0, -1, 1, 0},
 /*  1 */ { 4, s_0_1, 0, 2, 0},
@@ -41,34 +55,34 @@ static struct among a_0[9] =
 /*  8 */ { 6, s_0_8, 6, 2, 0}
 };
 
-static symbol s_1_0[2] = { 0xC0, 0xC0 };
-static symbol s_1_1[2] = { 0xC5, 0xC0 };
-static symbol s_1_2[2] = { 0xCF, 0xC0 };
-static symbol s_1_3[2] = { 0xD5, 0xC0 };
-static symbol s_1_4[2] = { 0xC5, 0xC5 };
-static symbol s_1_5[2] = { 0xC9, 0xC5 };
-static symbol s_1_6[2] = { 0xCF, 0xC5 };
-static symbol s_1_7[2] = { 0xD9, 0xC5 };
-static symbol s_1_8[2] = { 0xC9, 0xC8 };
-static symbol s_1_9[2] = { 0xD9, 0xC8 };
-static symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 };
-static symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 };
-static symbol s_1_12[2] = { 0xC5, 0xCA };
-static symbol s_1_13[2] = { 0xC9, 0xCA };
-static symbol s_1_14[2] = { 0xCF, 0xCA };
-static symbol s_1_15[2] = { 0xD9, 0xCA };
-static symbol s_1_16[2] = { 0xC5, 0xCD };
-static symbol s_1_17[2] = { 0xC9, 0xCD };
-static symbol s_1_18[2] = { 0xCF, 0xCD };
-static symbol s_1_19[2] = { 0xD9, 0xCD };
-static symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF };
-static symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF };
-static symbol s_1_22[2] = { 0xC1, 0xD1 };
-static symbol s_1_23[2] = { 0xD1, 0xD1 };
-static symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 };
-static symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 };
-
-static struct among a_1[26] =
+static const symbol s_1_0[2] = { 0xC0, 0xC0 };
+static const symbol s_1_1[2] = { 0xC5, 0xC0 };
+static const symbol s_1_2[2] = { 0xCF, 0xC0 };
+static const symbol s_1_3[2] = { 0xD5, 0xC0 };
+static const symbol s_1_4[2] = { 0xC5, 0xC5 };
+static const symbol s_1_5[2] = { 0xC9, 0xC5 };
+static const symbol s_1_6[2] = { 0xCF, 0xC5 };
+static const symbol s_1_7[2] = { 0xD9, 0xC5 };
+static const symbol s_1_8[2] = { 0xC9, 0xC8 };
+static const symbol s_1_9[2] = { 0xD9, 0xC8 };
+static const symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 };
+static const symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 };
+static const symbol s_1_12[2] = { 0xC5, 0xCA };
+static const symbol s_1_13[2] = { 0xC9, 0xCA };
+static const symbol s_1_14[2] = { 0xCF, 0xCA };
+static const symbol s_1_15[2] = { 0xD9, 0xCA };
+static const symbol s_1_16[2] = { 0xC5, 0xCD };
+static const symbol s_1_17[2] = { 0xC9, 0xCD };
+static const symbol s_1_18[2] = { 0xCF, 0xCD };
+static const symbol s_1_19[2] = { 0xD9, 0xCD };
+static const symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF };
+static const symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF };
+static const symbol s_1_22[2] = { 0xC1, 0xD1 };
+static const symbol s_1_23[2] = { 0xD1, 0xD1 };
+static const symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 };
+static const symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 };
+
+static const struct among a_1[26] =
 {
 /*  0 */ { 2, s_1_0, -1, 1, 0},
 /*  1 */ { 2, s_1_1, -1, 1, 0},
@@ -98,16 +112,16 @@ static struct among a_1[26] =
 /* 25 */ { 3, s_1_25, -1, 1, 0}
 };
 
-static symbol s_2_0[2] = { 0xC5, 0xCD };
-static symbol s_2_1[2] = { 0xCE, 0xCE };
-static symbol s_2_2[2] = { 0xD7, 0xDB };
-static symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB };
-static symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB };
-static symbol s_2_5[1] = { 0xDD };
-static symbol s_2_6[2] = { 0xC0, 0xDD };
-static symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD };
+static const symbol s_2_0[2] = { 0xC5, 0xCD };
+static const symbol s_2_1[2] = { 0xCE, 0xCE };
+static const symbol s_2_2[2] = { 0xD7, 0xDB };
+static const symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB };
+static const symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB };
+static const symbol s_2_5[1] = { 0xDD };
+static const symbol s_2_6[2] = { 0xC0, 0xDD };
+static const symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD };
 
-static struct among a_2[8] =
+static const struct among a_2[8] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 2, s_2_1, -1, 1, 0},
@@ -119,63 +133,63 @@ static struct among a_2[8] =
 /*  7 */ { 3, s_2_7, 6, 2, 0}
 };
 
-static symbol s_3_0[2] = { 0xD3, 0xD1 };
-static symbol s_3_1[2] = { 0xD3, 0xD8 };
+static const symbol s_3_0[2] = { 0xD3, 0xD1 };
+static const symbol s_3_1[2] = { 0xD3, 0xD8 };
 
-static struct among a_3[2] =
+static const struct among a_3[2] =
 {
 /*  0 */ { 2, s_3_0, -1, 1, 0},
 /*  1 */ { 2, s_3_1, -1, 1, 0}
 };
 
-static symbol s_4_0[1] = { 0xC0 };
-static symbol s_4_1[2] = { 0xD5, 0xC0 };
-static symbol s_4_2[2] = { 0xCC, 0xC1 };
-static symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 };
-static symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 };
-static symbol s_4_5[2] = { 0xCE, 0xC1 };
-static symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 };
-static symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 };
-static symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 };
-static symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 };
-static symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 };
-static symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 };
-static symbol s_4_12[2] = { 0xCC, 0xC9 };
-static symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 };
-static symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 };
-static symbol s_4_15[1] = { 0xCA };
-static symbol s_4_16[2] = { 0xC5, 0xCA };
-static symbol s_4_17[2] = { 0xD5, 0xCA };
-static symbol s_4_18[1] = { 0xCC };
-static symbol s_4_19[2] = { 0xC9, 0xCC };
-static symbol s_4_20[2] = { 0xD9, 0xCC };
-static symbol s_4_21[2] = { 0xC5, 0xCD };
-static symbol s_4_22[2] = { 0xC9, 0xCD };
-static symbol s_4_23[2] = { 0xD9, 0xCD };
-static symbol s_4_24[1] = { 0xCE };
-static symbol s_4_25[2] = { 0xC5, 0xCE };
-static symbol s_4_26[2] = { 0xCC, 0xCF };
-static symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF };
-static symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF };
-static symbol s_4_29[2] = { 0xCE, 0xCF };
-static symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF };
-static symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF };
-static symbol s_4_32[2] = { 0xC0, 0xD4 };
-static symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 };
-static symbol s_4_34[2] = { 0xC5, 0xD4 };
-static symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 };
-static symbol s_4_36[2] = { 0xC9, 0xD4 };
-static symbol s_4_37[2] = { 0xD1, 0xD4 };
-static symbol s_4_38[2] = { 0xD9, 0xD4 };
-static symbol s_4_39[2] = { 0xD4, 0xD8 };
-static symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 };
-static symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 };
-static symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 };
-static symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 };
-static symbol s_4_44[2] = { 0xCE, 0xD9 };
-static symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 };
-
-static struct among a_4[46] =
+static const symbol s_4_0[1] = { 0xC0 };
+static const symbol s_4_1[2] = { 0xD5, 0xC0 };
+static const symbol s_4_2[2] = { 0xCC, 0xC1 };
+static const symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 };
+static const symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 };
+static const symbol s_4_5[2] = { 0xCE, 0xC1 };
+static const symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 };
+static const symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 };
+static const symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 };
+static const symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 };
+static const symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 };
+static const symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 };
+static const symbol s_4_12[2] = { 0xCC, 0xC9 };
+static const symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 };
+static const symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 };
+static const symbol s_4_15[1] = { 0xCA };
+static const symbol s_4_16[2] = { 0xC5, 0xCA };
+static const symbol s_4_17[2] = { 0xD5, 0xCA };
+static const symbol s_4_18[1] = { 0xCC };
+static const symbol s_4_19[2] = { 0xC9, 0xCC };
+static const symbol s_4_20[2] = { 0xD9, 0xCC };
+static const symbol s_4_21[2] = { 0xC5, 0xCD };
+static const symbol s_4_22[2] = { 0xC9, 0xCD };
+static const symbol s_4_23[2] = { 0xD9, 0xCD };
+static const symbol s_4_24[1] = { 0xCE };
+static const symbol s_4_25[2] = { 0xC5, 0xCE };
+static const symbol s_4_26[2] = { 0xCC, 0xCF };
+static const symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF };
+static const symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF };
+static const symbol s_4_29[2] = { 0xCE, 0xCF };
+static const symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF };
+static const symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF };
+static const symbol s_4_32[2] = { 0xC0, 0xD4 };
+static const symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 };
+static const symbol s_4_34[2] = { 0xC5, 0xD4 };
+static const symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 };
+static const symbol s_4_36[2] = { 0xC9, 0xD4 };
+static const symbol s_4_37[2] = { 0xD1, 0xD4 };
+static const symbol s_4_38[2] = { 0xD9, 0xD4 };
+static const symbol s_4_39[2] = { 0xD4, 0xD8 };
+static const symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 };
+static const symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 };
+static const symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 };
+static const symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 };
+static const symbol s_4_44[2] = { 0xCE, 0xD9 };
+static const symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 };
+
+static const struct among a_4[46] =
 {
 /*  0 */ { 1, s_4_0, -1, 2, 0},
 /*  1 */ { 2, s_4_1, 0, 2, 0},
@@ -225,44 +239,44 @@ static struct among a_4[46] =
 /* 45 */ { 3, s_4_45, 44, 2, 0}
 };
 
-static symbol s_5_0[1] = { 0xC0 };
-static symbol s_5_1[2] = { 0xC9, 0xC0 };
-static symbol s_5_2[2] = { 0xD8, 0xC0 };
-static symbol s_5_3[1] = { 0xC1 };
-static symbol s_5_4[1] = { 0xC5 };
-static symbol s_5_5[2] = { 0xC9, 0xC5 };
-static symbol s_5_6[2] = { 0xD8, 0xC5 };
-static symbol s_5_7[2] = { 0xC1, 0xC8 };
-static symbol s_5_8[2] = { 0xD1, 0xC8 };
-static symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 };
-static symbol s_5_10[1] = { 0xC9 };
-static symbol s_5_11[2] = { 0xC5, 0xC9 };
-static symbol s_5_12[2] = { 0xC9, 0xC9 };
-static symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 };
-static symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 };
-static symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 };
-static symbol s_5_16[1] = { 0xCA };
-static symbol s_5_17[2] = { 0xC5, 0xCA };
-static symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA };
-static symbol s_5_19[2] = { 0xC9, 0xCA };
-static symbol s_5_20[2] = { 0xCF, 0xCA };
-static symbol s_5_21[2] = { 0xC1, 0xCD };
-static symbol s_5_22[2] = { 0xC5, 0xCD };
-static symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD };
-static symbol s_5_24[2] = { 0xCF, 0xCD };
-static symbol s_5_25[2] = { 0xD1, 0xCD };
-static symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD };
-static symbol s_5_27[1] = { 0xCF };
-static symbol s_5_28[1] = { 0xD1 };
-static symbol s_5_29[2] = { 0xC9, 0xD1 };
-static symbol s_5_30[2] = { 0xD8, 0xD1 };
-static symbol s_5_31[1] = { 0xD5 };
-static symbol s_5_32[2] = { 0xC5, 0xD7 };
-static symbol s_5_33[2] = { 0xCF, 0xD7 };
-static symbol s_5_34[1] = { 0xD8 };
-static symbol s_5_35[1] = { 0xD9 };
-
-static struct among a_5[36] =
+static const symbol s_5_0[1] = { 0xC0 };
+static const symbol s_5_1[2] = { 0xC9, 0xC0 };
+static const symbol s_5_2[2] = { 0xD8, 0xC0 };
+static const symbol s_5_3[1] = { 0xC1 };
+static const symbol s_5_4[1] = { 0xC5 };
+static const symbol s_5_5[2] = { 0xC9, 0xC5 };
+static const symbol s_5_6[2] = { 0xD8, 0xC5 };
+static const symbol s_5_7[2] = { 0xC1, 0xC8 };
+static const symbol s_5_8[2] = { 0xD1, 0xC8 };
+static const symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 };
+static const symbol s_5_10[1] = { 0xC9 };
+static const symbol s_5_11[2] = { 0xC5, 0xC9 };
+static const symbol s_5_12[2] = { 0xC9, 0xC9 };
+static const symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 };
+static const symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 };
+static const symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 };
+static const symbol s_5_16[1] = { 0xCA };
+static const symbol s_5_17[2] = { 0xC5, 0xCA };
+static const symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA };
+static const symbol s_5_19[2] = { 0xC9, 0xCA };
+static const symbol s_5_20[2] = { 0xCF, 0xCA };
+static const symbol s_5_21[2] = { 0xC1, 0xCD };
+static const symbol s_5_22[2] = { 0xC5, 0xCD };
+static const symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD };
+static const symbol s_5_24[2] = { 0xCF, 0xCD };
+static const symbol s_5_25[2] = { 0xD1, 0xCD };
+static const symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD };
+static const symbol s_5_27[1] = { 0xCF };
+static const symbol s_5_28[1] = { 0xD1 };
+static const symbol s_5_29[2] = { 0xC9, 0xD1 };
+static const symbol s_5_30[2] = { 0xD8, 0xD1 };
+static const symbol s_5_31[1] = { 0xD5 };
+static const symbol s_5_32[2] = { 0xC5, 0xD7 };
+static const symbol s_5_33[2] = { 0xCF, 0xD7 };
+static const symbol s_5_34[1] = { 0xD8 };
+static const symbol s_5_35[1] = { 0xD9 };
+
+static const struct among a_5[36] =
 {
 /*  0 */ { 1, s_5_0, -1, 1, 0},
 /*  1 */ { 2, s_5_1, 0, 1, 0},
@@ -302,21 +316,21 @@ static struct among a_5[36] =
 /* 35 */ { 1, s_5_35, -1, 1, 0}
 };
 
-static symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 };
-static symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 };
+static const symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 };
+static const symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 };
 
-static struct among a_6[2] =
+static const struct among a_6[2] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 4, s_6_1, -1, 1, 0}
 };
 
-static symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 };
-static symbol s_7_1[1] = { 0xCE };
-static symbol s_7_2[1] = { 0xD8 };
-static symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB };
+static const symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 };
+static const symbol s_7_1[1] = { 0xCE };
+static const symbol s_7_2[1] = { 0xD8 };
+static const symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB };
 
-static struct among a_7[4] =
+static const struct among a_7[4] =
 {
 /*  0 */ { 4, s_7_0, -1, 1, 0},
 /*  1 */ { 1, s_7_1, -1, 2, 0},
@@ -324,55 +338,47 @@ static struct among a_7[4] =
 /*  3 */ { 3, s_7_3, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 35, 130, 34, 18 };
+static const unsigned char g_v[] = { 35, 130, 34, 18 };
 
-static symbol s_0[] = { 0xC1 };
-static symbol s_1[] = { 0xD1 };
-static symbol s_2[] = { 0xC1 };
-static symbol s_3[] = { 0xD1 };
-static symbol s_4[] = { 0xC1 };
-static symbol s_5[] = { 0xD1 };
-static symbol s_6[] = { 0xCE };
-static symbol s_7[] = { 0xCE };
-static symbol s_8[] = { 0xCE };
-static symbol s_9[] = { 0xC9 };
+static const symbol s_0[] = { 0xC1 };
+static const symbol s_1[] = { 0xD1 };
+static const symbol s_2[] = { 0xC1 };
+static const symbol s_3[] = { 0xD1 };
+static const symbol s_4[] = { 0xC1 };
+static const symbol s_5[] = { 0xD1 };
+static const symbol s_6[] = { 0xCE };
+static const symbol s_7[] = { 0xCE };
+static const symbol s_8[] = { 0xCE };
+static const symbol s_9[] = { 0xC9 };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    {   int c = z->c; /* do, line 63 */
-        while(1) { /* gopast, line 64 */
-            if (!(in_grouping(z, g_v, 192, 220))) goto lab1;
-            break;
-        lab1:
-            if (z->c >= z->l) goto lab0;
-            z->c++; /* gopast, line 64 */
+    {   int c1 = z->c; /* do, line 63 */
+        {    /* gopast */ /* grouping v, line 64 */
+            int ret = out_grouping(z, g_v, 192, 220, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
         z->I[0] = z->c; /* setmark pV, line 64 */
-        while(1) { /* gopast, line 64 */
-            if (!(out_grouping(z, g_v, 192, 220))) goto lab2;
-            break;
-        lab2:
-            if (z->c >= z->l) goto lab0;
-            z->c++; /* gopast, line 64 */
+        {    /* gopast */ /* non v, line 64 */
+            int ret = in_grouping(z, g_v, 192, 220, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 65 */
-            if (!(in_grouping(z, g_v, 192, 220))) goto lab3;
-            break;
-        lab3:
-            if (z->c >= z->l) goto lab0;
-            z->c++; /* gopast, line 65 */
+        {    /* gopast */ /* grouping v, line 65 */
+            int ret = out_grouping(z, g_v, 192, 220, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 65 */
-            if (!(out_grouping(z, g_v, 192, 220))) goto lab4;
-            break;
-        lab4:
-            if (z->c >= z->l) goto lab0;
-            z->c++; /* gopast, line 65 */
+        {    /* gopast */ /* non v, line 65 */
+            int ret = in_grouping(z, g_v, 192, 220, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p2, line 65 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     return 1;
 }
@@ -385,28 +391,27 @@ static int r_R2(struct SN_env * z) {
 static int r_perfective_gerund(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 74 */
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((25166336 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_0, 9); /* substring, line 74 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 74 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* or, line 78 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 78 */
                 if (!(eq_s_b(z, 1, s_0))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_1))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 78 */
+            {   int ret = slice_del(z); /* delete, line 78 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 85 */
+            {   int ret = slice_del(z); /* delete, line 85 */
                 if (ret < 0) return ret;
             }
             break;
@@ -417,14 +422,14 @@ static int r_perfective_gerund(struct SN_env * z) {
 static int r_adjective(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 90 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((2271009 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_1, 26); /* substring, line 90 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 90 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 99 */
+            {   int ret = slice_del(z); /* delete, line 99 */
                 if (ret < 0) return ret;
             }
             break;
@@ -438,30 +443,29 @@ static int r_adjectival(struct SN_env * z) {
         if (ret == 0) return 0; /* call adjective, line 104 */
         if (ret < 0) return ret;
     }
-    {   int m = z->l - z->c; (void) m; /* try, line 111 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
         z->ket = z->c; /* [, line 112 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((671113216 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab0; }
         among_var = find_among_b(z, a_2, 8); /* substring, line 112 */
-        if (!(among_var)) { z->c = z->l - m; goto lab0; }
+        if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
         z->bra = z->c; /* ], line 112 */
         switch(among_var) {
-            case 0: { z->c = z->l - m; goto lab0; }
+            case 0: { z->c = z->l - m_keep; goto lab0; }
             case 1:
-                {   int m = z->l - z->c; (void) m; /* or, line 117 */
+                {   int m1 = z->l - z->c; (void)m1; /* or, line 117 */
                     if (!(eq_s_b(z, 1, s_2))) goto lab2;
                     goto lab1;
                 lab2:
-                    z->c = z->l - m;
-                    if (!(eq_s_b(z, 1, s_3))) { z->c = z->l - m; goto lab0; }
+                    z->c = z->l - m1;
+                    if (!(eq_s_b(z, 1, s_3))) { z->c = z->l - m_keep; goto lab0; }
                 }
             lab1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 117 */
+                {   int ret = slice_del(z); /* delete, line 117 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 124 */
+                {   int ret = slice_del(z); /* delete, line 124 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -475,14 +479,14 @@ static int r_adjectival(struct SN_env * z) {
 static int r_reflexive(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 131 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 209 && z->p[z->c - 1] != 216)) return 0;
     among_var = find_among_b(z, a_3, 2); /* substring, line 131 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 131 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 134 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
             break;
@@ -493,28 +497,27 @@ static int r_reflexive(struct SN_env * z) {
 static int r_verb(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 139 */
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((51443235 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_4, 46); /* substring, line 139 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 139 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* or, line 145 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 145 */
                 if (!(eq_s_b(z, 1, s_4))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_5))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 145 */
+            {   int ret = slice_del(z); /* delete, line 145 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 153 */
+            {   int ret = slice_del(z); /* delete, line 153 */
                 if (ret < 0) return ret;
             }
             break;
@@ -525,14 +528,14 @@ static int r_verb(struct SN_env * z) {
 static int r_noun(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 162 */
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((60991267 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_5, 36); /* substring, line 162 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 162 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 169 */
+            {   int ret = slice_del(z); /* delete, line 169 */
                 if (ret < 0) return ret;
             }
             break;
@@ -543,6 +546,7 @@ static int r_noun(struct SN_env * z) {
 static int r_derivational(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 178 */
+    if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 212 && z->p[z->c - 1] != 216)) return 0;
     among_var = find_among_b(z, a_6, 2); /* substring, line 178 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 178 */
@@ -553,8 +557,7 @@ static int r_derivational(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 181 */
+            {   int ret = slice_del(z); /* delete, line 181 */
                 if (ret < 0) return ret;
             }
             break;
@@ -565,35 +568,32 @@ static int r_derivational(struct SN_env * z) {
 static int r_tidy_up(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 186 */
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((151011360 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_7, 4); /* substring, line 186 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 186 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 190 */
+            {   int ret = slice_del(z); /* delete, line 190 */
                 if (ret < 0) return ret;
             }
             z->ket = z->c; /* [, line 191 */
             if (!(eq_s_b(z, 1, s_6))) return 0;
             z->bra = z->c; /* ], line 191 */
             if (!(eq_s_b(z, 1, s_7))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 191 */
+            {   int ret = slice_del(z); /* delete, line 191 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             if (!(eq_s_b(z, 1, s_8))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 194 */
+            {   int ret = slice_del(z); /* delete, line 194 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 196 */
+            {   int ret = slice_del(z); /* delete, line 196 */
                 if (ret < 0) return ret;
             }
             break;
@@ -602,54 +602,54 @@ static int r_tidy_up(struct SN_env * z) {
 }
 
 extern int russian_KOI8_R_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 203 */
+    {   int c1 = z->c; /* do, line 203 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 203 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 204 */
 
-    {   int m3; /* setlimit, line 204 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 204 */
+        int m2 = z->l - z->c; (void)m2;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 204 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* do, line 205 */
-            {   int m = z->l - z->c; (void) m; /* or, line 206 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m2;
+        {   int m3 = z->l - z->c; (void)m3; /* do, line 205 */
+            {   int m4 = z->l - z->c; (void)m4; /* or, line 206 */
                 {   int ret = r_perfective_gerund(z);
                     if (ret == 0) goto lab3; /* call perfective_gerund, line 206 */
                     if (ret < 0) return ret;
                 }
                 goto lab2;
             lab3:
-                z->c = z->l - m;
-                {   int m = z->l - z->c; (void) m; /* try, line 207 */
+                z->c = z->l - m4;
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 207 */
                     {   int ret = r_reflexive(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 207 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab4; } /* call reflexive, line 207 */
                         if (ret < 0) return ret;
                     }
                 lab4:
                     ;
                 }
-                {   int m = z->l - z->c; (void) m; /* or, line 208 */
+                {   int m5 = z->l - z->c; (void)m5; /* or, line 208 */
                     {   int ret = r_adjectival(z);
                         if (ret == 0) goto lab6; /* call adjectival, line 208 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m5;
                     {   int ret = r_verb(z);
                         if (ret == 0) goto lab7; /* call verb, line 208 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab7:
-                    z->c = z->l - m;
+                    z->c = z->l - m5;
                     {   int ret = r_noun(z);
                         if (ret == 0) goto lab1; /* call noun, line 208 */
                         if (ret < 0) return ret;
@@ -660,36 +660,35 @@ extern int russian_KOI8_R_stem(struct SN_env * z) {
             }
         lab2:
         lab1:
-            z->c = z->l - m;
+            z->c = z->l - m3;
         }
-        {   int m = z->l - z->c; (void) m; /* try, line 211 */
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 211 */
             z->ket = z->c; /* [, line 211 */
-            if (!(eq_s_b(z, 1, s_9))) { z->c = z->l - m; goto lab8; }
+            if (!(eq_s_b(z, 1, s_9))) { z->c = z->l - m_keep; goto lab8; }
             z->bra = z->c; /* ], line 211 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 211 */
+            {   int ret = slice_del(z); /* delete, line 211 */
                 if (ret < 0) return ret;
             }
         lab8:
             ;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 214 */
+        {   int m6 = z->l - z->c; (void)m6; /* do, line 214 */
             {   int ret = r_derivational(z);
                 if (ret == 0) goto lab9; /* call derivational, line 214 */
                 if (ret < 0) return ret;
             }
         lab9:
-            z->c = z->l - m;
+            z->c = z->l - m6;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 215 */
+        {   int m7 = z->l - z->c; (void)m7; /* do, line 215 */
             {   int ret = r_tidy_up(z);
                 if (ret == 0) goto lab10; /* call tidy_up, line 215 */
                 if (ret < 0) return ret;
             }
         lab10:
-            z->c = z->l - m;
+            z->c = z->l - m7;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     z->c = z->lb;
     return 1;
@@ -697,5 +696,5 @@ extern int russian_KOI8_R_stem(struct SN_env * z) {
 
 extern struct SN_env * russian_KOI8_R_create_env(void) { return SN_create_env(0, 2, 0); }
 
-extern void russian_KOI8_R_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void russian_KOI8_R_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_danish.c b/libstemmer_c/src_c/stem_UTF_8_danish.c
index bb98298..e470542 100644
--- a/libstemmer_c/src_c/stem_UTF_8_danish.c
+++ b/libstemmer_c/src_c/stem_UTF_8_danish.c
@@ -3,50 +3,64 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int danish_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_undouble(struct SN_env * z);
 static int r_other_suffix(struct SN_env * z);
 static int r_consonant_pair(struct SN_env * z);
 static int r_main_suffix(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * danish_UTF_8_create_env(void);
 extern void danish_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[3] = { 'h', 'e', 'd' };
-static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' };
-static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' };
-static symbol s_0_3[1] = { 'e' };
-static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' };
-static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' };
-static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' };
-static symbol s_0_7[3] = { 'e', 'n', 'e' };
-static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' };
-static symbol s_0_9[3] = { 'e', 'r', 'e' };
-static symbol s_0_10[2] = { 'e', 'n' };
-static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' };
-static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' };
-static symbol s_0_13[2] = { 'e', 'r' };
-static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' };
-static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' };
-static symbol s_0_16[1] = { 's' };
-static symbol s_0_17[4] = { 'h', 'e', 'd', 's' };
-static symbol s_0_18[2] = { 'e', 's' };
-static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' };
-static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' };
-static symbol s_0_21[4] = { 'e', 'n', 'e', 's' };
-static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' };
-static symbol s_0_23[4] = { 'e', 'r', 'e', 's' };
-static symbol s_0_24[3] = { 'e', 'n', 's' };
-static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' };
-static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' };
-static symbol s_0_27[3] = { 'e', 'r', 's' };
-static symbol s_0_28[3] = { 'e', 't', 's' };
-static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' };
-static symbol s_0_30[2] = { 'e', 't' };
-static symbol s_0_31[4] = { 'e', 'r', 'e', 't' };
 
-static struct among a_0[32] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[3] = { 'h', 'e', 'd' };
+static const symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' };
+static const symbol s_0_2[4] = { 'e', 'r', 'e', 'd' };
+static const symbol s_0_3[1] = { 'e' };
+static const symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' };
+static const symbol s_0_5[4] = { 'e', 'n', 'd', 'e' };
+static const symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' };
+static const symbol s_0_7[3] = { 'e', 'n', 'e' };
+static const symbol s_0_8[4] = { 'e', 'r', 'n', 'e' };
+static const symbol s_0_9[3] = { 'e', 'r', 'e' };
+static const symbol s_0_10[2] = { 'e', 'n' };
+static const symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' };
+static const symbol s_0_12[4] = { 'e', 'r', 'e', 'n' };
+static const symbol s_0_13[2] = { 'e', 'r' };
+static const symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' };
+static const symbol s_0_15[4] = { 'e', 'r', 'e', 'r' };
+static const symbol s_0_16[1] = { 's' };
+static const symbol s_0_17[4] = { 'h', 'e', 'd', 's' };
+static const symbol s_0_18[2] = { 'e', 's' };
+static const symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' };
+static const symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' };
+static const symbol s_0_21[4] = { 'e', 'n', 'e', 's' };
+static const symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' };
+static const symbol s_0_23[4] = { 'e', 'r', 'e', 's' };
+static const symbol s_0_24[3] = { 'e', 'n', 's' };
+static const symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' };
+static const symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' };
+static const symbol s_0_27[3] = { 'e', 'r', 's' };
+static const symbol s_0_28[3] = { 'e', 't', 's' };
+static const symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' };
+static const symbol s_0_30[2] = { 'e', 't' };
+static const symbol s_0_31[4] = { 'e', 'r', 'e', 't' };
+
+static const struct among a_0[32] =
 {
 /*  0 */ { 3, s_0_0, -1, 1, 0},
 /*  1 */ { 5, s_0_1, 0, 1, 0},
@@ -82,12 +96,12 @@ static struct among a_0[32] =
 /* 31 */ { 4, s_0_31, 30, 1, 0}
 };
 
-static symbol s_1_0[2] = { 'g', 'd' };
-static symbol s_1_1[2] = { 'd', 't' };
-static symbol s_1_2[2] = { 'g', 't' };
-static symbol s_1_3[2] = { 'k', 't' };
+static const symbol s_1_0[2] = { 'g', 'd' };
+static const symbol s_1_1[2] = { 'd', 't' };
+static const symbol s_1_2[2] = { 'g', 't' };
+static const symbol s_1_3[2] = { 'k', 't' };
 
-static struct among a_1[4] =
+static const struct among a_1[4] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0},
@@ -95,13 +109,13 @@ static struct among a_1[4] =
 /*  3 */ { 2, s_1_3, -1, -1, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'g' };
-static symbol s_2_1[3] = { 'l', 'i', 'g' };
-static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' };
-static symbol s_2_3[3] = { 'e', 'l', 's' };
-static symbol s_2_4[5] = { 'l', 0xC3, 0xB8, 's', 't' };
+static const symbol s_2_0[2] = { 'i', 'g' };
+static const symbol s_2_1[3] = { 'l', 'i', 'g' };
+static const symbol s_2_2[4] = { 'e', 'l', 'i', 'g' };
+static const symbol s_2_3[3] = { 'e', 'l', 's' };
+static const symbol s_2_4[5] = { 'l', 0xC3, 0xB8, 's', 't' };
 
-static struct among a_2[5] =
+static const struct among a_2[5] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 3, s_2_1, 0, 1, 0},
@@ -110,79 +124,63 @@ static struct among a_2[5] =
 /*  4 */ { 5, s_2_4, -1, 2, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
 
-static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
+static const unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
 
-static symbol s_0[] = { 's', 't' };
-static symbol s_1[] = { 'i', 'g' };
-static symbol s_2[] = { 'l', 0xC3, 0xB8, 's' };
+static const symbol s_0[] = { 's', 't' };
+static const symbol s_1[] = { 'i', 'g' };
+static const symbol s_2[] = { 'l', 0xC3, 0xB8, 's' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     {   int c_test = z->c; /* test, line 33 */
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, + 3);
-            if (c < 0) return 0;
-            z->c = c; /* hop, line 33 */
+        {   int ret = skip_utf8(z->p, z->c, 0, z->l, + 3);
+            if (ret < 0) return 0;
+            z->c = ret; /* hop, line 33 */
         }
         z->I[1] = z->c; /* setmark x, line 33 */
         z->c = c_test;
     }
-    while(1) { /* goto, line 34 */
-        int c = z->c;
-        if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* goto, line 34 */
-        }
-    }
-    while(1) { /* gopast, line 34 */
-        if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1;
-        break;
-    lab1:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 34 */
-        }
+    if (out_grouping_U(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 34 */
+    {    /* gopast */ /* non v, line 34 */
+        int ret = in_grouping_U(z, g_v, 97, 248, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 34 */
      /* try, line 35 */
-    if (!(z->I[0] < z->I[1])) goto lab2;
+    if (!(z->I[0] < z->I[1])) goto lab0;
     z->I[0] = z->I[1];
-lab2:
+lab0:
     return 1;
 }
 
 static int r_main_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 41 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 41 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 41 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 41 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851440 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_0, 32); /* substring, line 41 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 41 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 48 */
+            {   int ret = slice_del(z); /* delete, line 48 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            if (!(in_grouping_b_U(z, g_s_ending, 97, 229))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 50 */
+            if (in_grouping_b_U(z, g_s_ending, 97, 229, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 50 */
                 if (ret < 0) return ret;
             }
             break;
@@ -192,26 +190,26 @@ static int r_main_suffix(struct SN_env * z) {
 
 static int r_consonant_pair(struct SN_env * z) {
     {   int m_test = z->l - z->c; /* test, line 55 */
-        {   int m3; /* setlimit, line 56 */
-            int m = z->l - z->c; (void) m;
+        {   int mlimit; /* setlimit, line 56 */
+            int m1 = z->l - z->c; (void)m1;
             if (z->c < z->I[0]) return 0;
             z->c = z->I[0]; /* tomark, line 56 */
-            m3 = z->lb; z->lb = z->c;
-            z->c = z->l - m;
+            mlimit = z->lb; z->lb = z->c;
+            z->c = z->l - m1;
             z->ket = z->c; /* [, line 56 */
-            if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */
+            if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 116)) { z->lb = mlimit; return 0; }
+            if (!(find_among_b(z, a_1, 4))) { z->lb = mlimit; return 0; } /* substring, line 56 */
             z->bra = z->c; /* ], line 56 */
-            z->lb = m3;
+            z->lb = mlimit;
         }
         z->c = z->l - m_test;
     }
-    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-        if (c < 0) return 0;
-        z->c = c; /* next, line 62 */
+    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+        if (ret < 0) return 0;
+        z->c = ret; /* next, line 62 */
     }
     z->bra = z->c; /* ], line 62 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 62 */
+    {   int ret = slice_del(z); /* delete, line 62 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -219,49 +217,47 @@ static int r_consonant_pair(struct SN_env * z) {
 
 static int r_other_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* do, line 66 */
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 66 */
         z->ket = z->c; /* [, line 66 */
         if (!(eq_s_b(z, 2, s_0))) goto lab0;
         z->bra = z->c; /* ], line 66 */
         if (!(eq_s_b(z, 2, s_1))) goto lab0;
-        {   int ret;
-            ret = slice_del(z); /* delete, line 66 */
+        {   int ret = slice_del(z); /* delete, line 66 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = z->l - m;
+        z->c = z->l - m1;
     }
-    {   int m3; /* setlimit, line 67 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 67 */
+        int m2 = z->l - z->c; (void)m2;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 67 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m2;
         z->ket = z->c; /* [, line 67 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_2, 5); /* substring, line 67 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 67 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 70 */
+            {   int ret = slice_del(z); /* delete, line 70 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 70 */
+            {   int m3 = z->l - z->c; (void)m3; /* do, line 70 */
                 {   int ret = r_consonant_pair(z);
                     if (ret == 0) goto lab1; /* call consonant_pair, line 70 */
                     if (ret < 0) return ret;
                 }
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m3;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_2); /* <-, line 72 */
+            {   int ret = slice_from_s(z, 4, s_2); /* <-, line 72 */
                 if (ret < 0) return ret;
             }
             break;
@@ -270,69 +266,68 @@ static int r_other_suffix(struct SN_env * z) {
 }
 
 static int r_undouble(struct SN_env * z) {
-    {   int m3; /* setlimit, line 76 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 76 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 76 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 76 */
-        if (!(out_grouping_b_U(z, g_v, 97, 248))) { z->lb = m3; return 0; }
+        if (out_grouping_b_U(z, g_v, 97, 248, 0)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 76 */
         z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */
         if (z->S[0] == 0) return -1; /* -> ch, line 76 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 78 */
+    {   int ret = slice_del(z); /* delete, line 78 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 extern int danish_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 84 */
+    {   int c1 = z->c; /* do, line 84 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 84 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 85 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 86 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 86 */
         {   int ret = r_main_suffix(z);
             if (ret == 0) goto lab1; /* call main_suffix, line 86 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 87 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 87 */
         {   int ret = r_consonant_pair(z);
             if (ret == 0) goto lab2; /* call consonant_pair, line 87 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 88 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 88 */
         {   int ret = r_other_suffix(z);
             if (ret == 0) goto lab3; /* call other_suffix, line 88 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 89 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 89 */
         {   int ret = r_undouble(z);
             if (ret == 0) goto lab4; /* call undouble, line 89 */
             if (ret < 0) return ret;
         }
     lab4:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
     z->c = z->lb;
     return 1;
@@ -340,5 +335,5 @@ extern int danish_UTF_8_stem(struct SN_env * z) {
 
 extern struct SN_env * danish_UTF_8_create_env(void) { return SN_create_env(1, 2, 0); }
 
-extern void danish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void danish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 1); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_dutch.c b/libstemmer_c/src_c/stem_UTF_8_dutch.c
index 3de469b..06cb812 100644
--- a/libstemmer_c/src_c/stem_UTF_8_dutch.c
+++ b/libstemmer_c/src_c/stem_UTF_8_dutch.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int dutch_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_standard_suffix(struct SN_env * z);
 static int r_undouble(struct SN_env * z);
 static int r_R2(struct SN_env * z);
@@ -13,22 +19,30 @@ static int r_en_ending(struct SN_env * z);
 static int r_e_ending(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * dutch_UTF_8_create_env(void);
 extern void dutch_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_1[2] = { 0xC3, 0xA1 };
-static symbol s_0_2[2] = { 0xC3, 0xA4 };
-static symbol s_0_3[2] = { 0xC3, 0xA9 };
-static symbol s_0_4[2] = { 0xC3, 0xAB };
-static symbol s_0_5[2] = { 0xC3, 0xAD };
-static symbol s_0_6[2] = { 0xC3, 0xAF };
-static symbol s_0_7[2] = { 0xC3, 0xB3 };
-static symbol s_0_8[2] = { 0xC3, 0xB6 };
-static symbol s_0_9[2] = { 0xC3, 0xBA };
-static symbol s_0_10[2] = { 0xC3, 0xBC };
-
-static struct among a_0[11] =
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[2] = { 0xC3, 0xA1 };
+static const symbol s_0_2[2] = { 0xC3, 0xA4 };
+static const symbol s_0_3[2] = { 0xC3, 0xA9 };
+static const symbol s_0_4[2] = { 0xC3, 0xAB };
+static const symbol s_0_5[2] = { 0xC3, 0xAD };
+static const symbol s_0_6[2] = { 0xC3, 0xAF };
+static const symbol s_0_7[2] = { 0xC3, 0xB3 };
+static const symbol s_0_8[2] = { 0xC3, 0xB6 };
+static const symbol s_0_9[2] = { 0xC3, 0xBA };
+static const symbol s_0_10[2] = { 0xC3, 0xBC };
+
+static const struct among a_0[11] =
 {
 /*  0 */ { 0, 0, -1, 6, 0},
 /*  1 */ { 2, s_0_1, 0, 1, 0},
@@ -43,34 +57,34 @@ static struct among a_0[11] =
 /* 10 */ { 2, s_0_10, 0, 5, 0}
 };
 
-static symbol s_1_1[1] = { 'I' };
-static symbol s_1_2[1] = { 'Y' };
+static const symbol s_1_1[1] = { 'I' };
+static const symbol s_1_2[1] = { 'Y' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 1, s_1_1, 0, 2, 0},
 /*  2 */ { 1, s_1_2, 0, 1, 0}
 };
 
-static symbol s_2_0[2] = { 'd', 'd' };
-static symbol s_2_1[2] = { 'k', 'k' };
-static symbol s_2_2[2] = { 't', 't' };
+static const symbol s_2_0[2] = { 'd', 'd' };
+static const symbol s_2_1[2] = { 'k', 'k' };
+static const symbol s_2_2[2] = { 't', 't' };
 
-static struct among a_2[3] =
+static const struct among a_2[3] =
 {
 /*  0 */ { 2, s_2_0, -1, -1, 0},
 /*  1 */ { 2, s_2_1, -1, -1, 0},
 /*  2 */ { 2, s_2_2, -1, -1, 0}
 };
 
-static symbol s_3_0[3] = { 'e', 'n', 'e' };
-static symbol s_3_1[2] = { 's', 'e' };
-static symbol s_3_2[2] = { 'e', 'n' };
-static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' };
-static symbol s_3_4[1] = { 's' };
+static const symbol s_3_0[3] = { 'e', 'n', 'e' };
+static const symbol s_3_1[2] = { 's', 'e' };
+static const symbol s_3_2[2] = { 'e', 'n' };
+static const symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' };
+static const symbol s_3_4[1] = { 's' };
 
-static struct among a_3[5] =
+static const struct among a_3[5] =
 {
 /*  0 */ { 3, s_3_0, -1, 2, 0},
 /*  1 */ { 2, s_3_1, -1, 3, 0},
@@ -79,14 +93,14 @@ static struct among a_3[5] =
 /*  4 */ { 1, s_3_4, -1, 3, 0}
 };
 
-static symbol s_4_0[3] = { 'e', 'n', 'd' };
-static symbol s_4_1[2] = { 'i', 'g' };
-static symbol s_4_2[3] = { 'i', 'n', 'g' };
-static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' };
-static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' };
-static symbol s_4_5[3] = { 'b', 'a', 'r' };
+static const symbol s_4_0[3] = { 'e', 'n', 'd' };
+static const symbol s_4_1[2] = { 'i', 'g' };
+static const symbol s_4_2[3] = { 'i', 'n', 'g' };
+static const symbol s_4_3[4] = { 'l', 'i', 'j', 'k' };
+static const symbol s_4_4[4] = { 'b', 'a', 'a', 'r' };
+static const symbol s_4_5[3] = { 'b', 'a', 'r' };
 
-static struct among a_4[6] =
+static const struct among a_4[6] =
 {
 /*  0 */ { 3, s_4_0, -1, 1, 0},
 /*  1 */ { 2, s_4_1, -1, 2, 0},
@@ -96,12 +110,12 @@ static struct among a_4[6] =
 /*  5 */ { 3, s_4_5, -1, 5, 0}
 };
 
-static symbol s_5_0[2] = { 'a', 'a' };
-static symbol s_5_1[2] = { 'e', 'e' };
-static symbol s_5_2[2] = { 'o', 'o' };
-static symbol s_5_3[2] = { 'u', 'u' };
+static const symbol s_5_0[2] = { 'a', 'a' };
+static const symbol s_5_1[2] = { 'e', 'e' };
+static const symbol s_5_2[2] = { 'o', 'o' };
+static const symbol s_5_3[2] = { 'u', 'u' };
 
-static struct among a_5[4] =
+static const struct among a_5[4] =
 {
 /*  0 */ { 2, s_5_0, -1, -1, 0},
 /*  1 */ { 2, s_5_1, -1, -1, 0},
@@ -109,138 +123,131 @@ static struct among a_5[4] =
 /*  3 */ { 2, s_5_3, -1, -1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-static symbol s_0[] = { 'a' };
-static symbol s_1[] = { 'e' };
-static symbol s_2[] = { 'i' };
-static symbol s_3[] = { 'o' };
-static symbol s_4[] = { 'u' };
-static symbol s_5[] = { 'y' };
-static symbol s_6[] = { 'Y' };
-static symbol s_7[] = { 'i' };
-static symbol s_8[] = { 'I' };
-static symbol s_9[] = { 'y' };
-static symbol s_10[] = { 'Y' };
-static symbol s_11[] = { 'y' };
-static symbol s_12[] = { 'i' };
-static symbol s_13[] = { 'e' };
-static symbol s_14[] = { 'g', 'e', 'm' };
-static symbol s_15[] = { 'h', 'e', 'i', 'd' };
-static symbol s_16[] = { 'h', 'e', 'i', 'd' };
-static symbol s_17[] = { 'c' };
-static symbol s_18[] = { 'e', 'n' };
-static symbol s_19[] = { 'i', 'g' };
-static symbol s_20[] = { 'e' };
-static symbol s_21[] = { 'e' };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'o' };
+static const symbol s_4[] = { 'u' };
+static const symbol s_5[] = { 'y' };
+static const symbol s_6[] = { 'Y' };
+static const symbol s_7[] = { 'i' };
+static const symbol s_8[] = { 'I' };
+static const symbol s_9[] = { 'y' };
+static const symbol s_10[] = { 'Y' };
+static const symbol s_11[] = { 'y' };
+static const symbol s_12[] = { 'i' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'g', 'e', 'm' };
+static const symbol s_15[] = { 'h', 'e', 'i', 'd' };
+static const symbol s_16[] = { 'h', 'e', 'i', 'd' };
+static const symbol s_17[] = { 'c' };
+static const symbol s_18[] = { 'e', 'n' };
+static const symbol s_19[] = { 'i', 'g' };
+static const symbol s_20[] = { 'e' };
+static const symbol s_21[] = { 'e' };
 
 static int r_prelude(struct SN_env * z) {
     int among_var;
     {   int c_test = z->c; /* test, line 42 */
         while(1) { /* repeat, line 42 */
-            int c = z->c;
+            int c1 = z->c;
             z->bra = z->c; /* [, line 43 */
+            if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((340306450 >> (z->p[z->c + 1] & 0x1f)) & 1)) among_var = 6; else
             among_var = find_among(z, a_0, 11); /* substring, line 43 */
             if (!(among_var)) goto lab0;
             z->ket = z->c; /* ], line 43 */
             switch(among_var) {
                 case 0: goto lab0;
                 case 1:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_0); /* <-, line 45 */
+                    {   int ret = slice_from_s(z, 1, s_0); /* <-, line 45 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_1); /* <-, line 47 */
+                    {   int ret = slice_from_s(z, 1, s_1); /* <-, line 47 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 3:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_2); /* <-, line 49 */
+                    {   int ret = slice_from_s(z, 1, s_2); /* <-, line 49 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 4:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_3); /* <-, line 51 */
+                    {   int ret = slice_from_s(z, 1, s_3); /* <-, line 51 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 5:
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_4); /* <-, line 53 */
+                    {   int ret = slice_from_s(z, 1, s_4); /* <-, line 53 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 6:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab0;
-                        z->c = c; /* next, line 54 */
+                    {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                        if (ret < 0) goto lab0;
+                        z->c = ret; /* next, line 54 */
                     }
                     break;
             }
             continue;
         lab0:
-            z->c = c;
+            z->c = c1;
             break;
         }
         z->c = c_test;
     }
-    {   int c = z->c; /* try, line 57 */
+    {   int c_keep = z->c; /* try, line 57 */
         z->bra = z->c; /* [, line 57 */
-        if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; }
+        if (!(eq_s(z, 1, s_5))) { z->c = c_keep; goto lab1; }
         z->ket = z->c; /* ], line 57 */
-        {   int ret;
-            ret = slice_from_s(z, 1, s_6); /* <-, line 57 */
+        {   int ret = slice_from_s(z, 1, s_6); /* <-, line 57 */
             if (ret < 0) return ret;
         }
     lab1:
         ;
     }
     while(1) { /* repeat, line 58 */
-        int c = z->c;
+        int c2 = z->c;
         while(1) { /* goto, line 58 */
-            int c = z->c;
-            if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3;
+            int c3 = z->c;
+            if (in_grouping_U(z, g_v, 97, 232, 0)) goto lab3;
             z->bra = z->c; /* [, line 59 */
-            {   int c = z->c; /* or, line 59 */
+            {   int c4 = z->c; /* or, line 59 */
                 if (!(eq_s(z, 1, s_7))) goto lab5;
                 z->ket = z->c; /* ], line 59 */
-                if (!(in_grouping_U(z, g_v, 97, 232))) goto lab5;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_8); /* <-, line 59 */
+                if (in_grouping_U(z, g_v, 97, 232, 0)) goto lab5;
+                {   int ret = slice_from_s(z, 1, s_8); /* <-, line 59 */
                     if (ret < 0) return ret;
                 }
                 goto lab4;
             lab5:
-                z->c = c;
+                z->c = c4;
                 if (!(eq_s(z, 1, s_9))) goto lab3;
                 z->ket = z->c; /* ], line 60 */
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 60 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 60 */
                     if (ret < 0) return ret;
                 }
             }
         lab4:
-            z->c = c;
+            z->c = c3;
             break;
         lab3:
-            z->c = c;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab2;
-                z->c = c; /* goto, line 58 */
+            z->c = c3;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab2;
+                z->c = ret; /* goto, line 58 */
             }
         }
         continue;
     lab2:
-        z->c = c;
+        z->c = c2;
         break;
     }
     return 1;
@@ -249,46 +256,30 @@ static int r_prelude(struct SN_env * z) {
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    while(1) { /* gopast, line 69 */
-        if (!(in_grouping_U(z, g_v, 97, 232))) goto lab0;
-        break;
-    lab0:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 69 */
-        }
+    {    /* gopast */ /* grouping v, line 69 */
+        int ret = out_grouping_U(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 69 */
-        if (!(out_grouping_U(z, g_v, 97, 232))) goto lab1;
-        break;
-    lab1:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 69 */
-        }
+    {    /* gopast */ /* non v, line 69 */
+        int ret = in_grouping_U(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 69 */
      /* try, line 70 */
-    if (!(z->I[0] < 3)) goto lab2;
+    if (!(z->I[0] < 3)) goto lab0;
     z->I[0] = 3;
-lab2:
-    while(1) { /* gopast, line 71 */
-        if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3;
-        break;
-    lab3:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 71 */
-        }
+lab0:
+    {    /* gopast */ /* grouping v, line 71 */
+        int ret = out_grouping_U(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 71 */
-        if (!(out_grouping_U(z, g_v, 97, 232))) goto lab4;
-        break;
-    lab4:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 71 */
-        }
+    {    /* gopast */ /* non v, line 71 */
+        int ret = in_grouping_U(z, g_v, 97, 232, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[1] = z->c; /* setmark p2, line 71 */
     return 1;
@@ -297,35 +288,34 @@ lab2:
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 75 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 77 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 89)) among_var = 3; else
         among_var = find_among(z, a_1, 3); /* substring, line 77 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 77 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_11); /* <-, line 78 */
+                {   int ret = slice_from_s(z, 1, s_11); /* <-, line 78 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
+                {   int ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 80 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 80 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -343,17 +333,17 @@ static int r_R2(struct SN_env * z) {
 
 static int r_undouble(struct SN_env * z) {
     {   int m_test = z->l - z->c; /* test, line 91 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1050640 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
         if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */
         z->c = z->l - m_test;
     }
     z->ket = z->c; /* [, line 91 */
-    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-        if (c < 0) return 0;
-        z->c = c; /* next, line 91 */
+    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+        if (ret < 0) return 0;
+        z->c = ret; /* next, line 91 */
     }
     z->bra = z->c; /* ], line 91 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 91 */
+    {   int ret = slice_del(z); /* delete, line 91 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -369,11 +359,10 @@ static int r_e_ending(struct SN_env * z) {
         if (ret < 0) return ret;
     }
     {   int m_test = z->l - z->c; /* test, line 96 */
-        if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0;
+        if (out_grouping_b_U(z, g_v, 97, 232, 0)) return 0;
         z->c = z->l - m_test;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 96 */
+    {   int ret = slice_del(z); /* delete, line 96 */
         if (ret < 0) return ret;
     }
     z->B[0] = 1; /* set e_found, line 97 */
@@ -389,18 +378,17 @@ static int r_en_ending(struct SN_env * z) {
         if (ret == 0) return 0; /* call R1, line 102 */
         if (ret < 0) return ret;
     }
-    {   int m = z->l - z->c; (void) m; /* and, line 102 */
-        if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* not, line 102 */
+    {   int m1 = z->l - z->c; (void)m1; /* and, line 102 */
+        if (out_grouping_b_U(z, g_v, 97, 232, 0)) return 0;
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 102 */
             if (!(eq_s_b(z, 3, s_14))) goto lab0;
             return 0;
         lab0:
-            z->c = z->l - m;
+            z->c = z->l - m2;
         }
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 102 */
+    {   int ret = slice_del(z); /* delete, line 102 */
         if (ret < 0) return ret;
     }
     {   int ret = r_undouble(z);
@@ -412,8 +400,9 @@ static int r_en_ending(struct SN_env * z) {
 
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* do, line 107 */
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 107 */
         z->ket = z->c; /* [, line 108 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((540704 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
         among_var = find_among_b(z, a_3, 5); /* substring, line 108 */
         if (!(among_var)) goto lab0;
         z->bra = z->c; /* ], line 108 */
@@ -424,8 +413,7 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab0; /* call R1, line 110 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_from_s(z, 4, s_15); /* <-, line 110 */
+                {   int ret = slice_from_s(z, 4, s_15); /* <-, line 110 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -440,25 +428,24 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab0; /* call R1, line 116 */
                     if (ret < 0) return ret;
                 }
-                if (!(out_grouping_b_U(z, g_v_j, 97, 232))) goto lab0;
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 116 */
+                if (out_grouping_b_U(z, g_v_j, 97, 232, 0)) goto lab0;
+                {   int ret = slice_del(z); /* delete, line 116 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab0:
-        z->c = z->l - m;
+        z->c = z->l - m1;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 120 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 120 */
         {   int ret = r_e_ending(z);
             if (ret == 0) goto lab1; /* call e_ending, line 120 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 122 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 122 */
         z->ket = z->c; /* [, line 122 */
         if (!(eq_s_b(z, 4, s_16))) goto lab2;
         z->bra = z->c; /* ], line 122 */
@@ -466,14 +453,13 @@ static int r_standard_suffix(struct SN_env * z) {
             if (ret == 0) goto lab2; /* call R2, line 122 */
             if (ret < 0) return ret;
         }
-        {   int m = z->l - z->c; (void) m; /* not, line 122 */
+        {   int m4 = z->l - z->c; (void)m4; /* not, line 122 */
             if (!(eq_s_b(z, 1, s_17))) goto lab3;
             goto lab2;
         lab3:
-            z->c = z->l - m;
+            z->c = z->l - m4;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 122 */
+        {   int ret = slice_del(z); /* delete, line 122 */
             if (ret < 0) return ret;
         }
         z->ket = z->c; /* [, line 123 */
@@ -484,10 +470,11 @@ static int r_standard_suffix(struct SN_env * z) {
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 126 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 126 */
         z->ket = z->c; /* [, line 127 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((264336 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab4;
         among_var = find_among_b(z, a_4, 6); /* substring, line 127 */
         if (!(among_var)) goto lab4;
         z->bra = z->c; /* ], line 127 */
@@ -498,11 +485,10 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 129 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 129 */
+                {   int ret = slice_del(z); /* delete, line 129 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* or, line 130 */
+                {   int m6 = z->l - z->c; (void)m6; /* or, line 130 */
                     z->ket = z->c; /* [, line 130 */
                     if (!(eq_s_b(z, 2, s_19))) goto lab6;
                     z->bra = z->c; /* ], line 130 */
@@ -510,19 +496,18 @@ static int r_standard_suffix(struct SN_env * z) {
                         if (ret == 0) goto lab6; /* call R2, line 130 */
                         if (ret < 0) return ret;
                     }
-                    {   int m = z->l - z->c; (void) m; /* not, line 130 */
+                    {   int m7 = z->l - z->c; (void)m7; /* not, line 130 */
                         if (!(eq_s_b(z, 1, s_20))) goto lab7;
                         goto lab6;
                     lab7:
-                        z->c = z->l - m;
+                        z->c = z->l - m7;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 130 */
+                    {   int ret = slice_del(z); /* delete, line 130 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_undouble(z);
                         if (ret == 0) goto lab4; /* call undouble, line 130 */
                         if (ret < 0) return ret;
@@ -535,14 +520,13 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 133 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* not, line 133 */
+                {   int m8 = z->l - z->c; (void)m8; /* not, line 133 */
                     if (!(eq_s_b(z, 1, s_21))) goto lab8;
                     goto lab4;
                 lab8:
-                    z->c = z->l - m;
+                    z->c = z->l - m8;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 133 */
+                {   int ret = slice_del(z); /* delete, line 133 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -551,8 +535,7 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 136 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 136 */
+                {   int ret = slice_del(z); /* delete, line 136 */
                     if (ret < 0) return ret;
                 }
                 {   int ret = r_e_ending(z);
@@ -565,8 +548,7 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret == 0) goto lab4; /* call R2, line 139 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 139 */
+                {   int ret = slice_del(z); /* delete, line 139 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -576,78 +558,77 @@ static int r_standard_suffix(struct SN_env * z) {
                     if (ret < 0) return ret;
                 }
                 if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 142 */
+                {   int ret = slice_del(z); /* delete, line 142 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab4:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 146 */
-        if (!(out_grouping_b_U(z, g_v_I, 73, 232))) goto lab9;
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 146 */
+        if (out_grouping_b_U(z, g_v_I, 73, 232, 0)) goto lab9;
         {   int m_test = z->l - z->c; /* test, line 148 */
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((2129954 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab9;
             if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */
-            if (!(out_grouping_b_U(z, g_v, 97, 232))) goto lab9;
+            if (out_grouping_b_U(z, g_v, 97, 232, 0)) goto lab9;
             z->c = z->l - m_test;
         }
         z->ket = z->c; /* [, line 152 */
-        {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-            if (c < 0) goto lab9;
-            z->c = c; /* next, line 152 */
+        {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+            if (ret < 0) goto lab9;
+            z->c = ret; /* next, line 152 */
         }
         z->bra = z->c; /* ], line 152 */
-        {   int ret;
-            ret = slice_del(z); /* delete, line 152 */
+        {   int ret = slice_del(z); /* delete, line 152 */
             if (ret < 0) return ret;
         }
     lab9:
-        z->c = z->l - m;
+        z->c = z->l - m9;
     }
     return 1;
 }
 
 extern int dutch_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 159 */
+    {   int c1 = z->c; /* do, line 159 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 159 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 160 */
+    {   int c2 = z->c; /* do, line 160 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 160 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 161 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 162 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 162 */
         {   int ret = r_standard_suffix(z);
             if (ret == 0) goto lab2; /* call standard_suffix, line 162 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 163 */
+    {   int c4 = z->c; /* do, line 163 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab3; /* call postlude, line 163 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = c;
+        z->c = c4;
     }
     return 1;
 }
 
 extern struct SN_env * dutch_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); }
 
-extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_english.c b/libstemmer_c/src_c/stem_UTF_8_english.c
index 1452eea..a00f721 100644
--- a/libstemmer_c/src_c/stem_UTF_8_english.c
+++ b/libstemmer_c/src_c/stem_UTF_8_english.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int english_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_exception2(struct SN_env * z);
 static int r_exception1(struct SN_env * z);
 static int r_Step_5(struct SN_env * z);
@@ -19,38 +25,48 @@ static int r_shortv(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * english_UTF_8_create_env(void);
 extern void english_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' };
-static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' };
 
-static struct among a_0[2] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[5] = { 'a', 'r', 's', 'e', 'n' };
+static const symbol s_0_1[6] = { 'c', 'o', 'm', 'm', 'u', 'n' };
+static const symbol s_0_2[5] = { 'g', 'e', 'n', 'e', 'r' };
+
+static const struct among a_0[3] =
 {
-/*  0 */ { 6, s_0_0, -1, -1, 0},
-/*  1 */ { 5, s_0_1, -1, -1, 0}
+/*  0 */ { 5, s_0_0, -1, -1, 0},
+/*  1 */ { 6, s_0_1, -1, -1, 0},
+/*  2 */ { 5, s_0_2, -1, -1, 0}
 };
 
-static symbol s_1_0[1] = { '\'' };
-static symbol s_1_1[3] = { '\'', 's', '\'' };
-static symbol s_1_2[2] = { '\'', 's' };
+static const symbol s_1_0[1] = { '\'' };
+static const symbol s_1_1[3] = { '\'', 's', '\'' };
+static const symbol s_1_2[2] = { '\'', 's' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 1, s_1_0, -1, 1, 0},
 /*  1 */ { 3, s_1_1, 0, 1, 0},
 /*  2 */ { 2, s_1_2, -1, 1, 0}
 };
 
-static symbol s_2_0[3] = { 'i', 'e', 'd' };
-static symbol s_2_1[1] = { 's' };
-static symbol s_2_2[3] = { 'i', 'e', 's' };
-static symbol s_2_3[4] = { 's', 's', 'e', 's' };
-static symbol s_2_4[2] = { 's', 's' };
-static symbol s_2_5[2] = { 'u', 's' };
+static const symbol s_2_0[3] = { 'i', 'e', 'd' };
+static const symbol s_2_1[1] = { 's' };
+static const symbol s_2_2[3] = { 'i', 'e', 's' };
+static const symbol s_2_3[4] = { 's', 's', 'e', 's' };
+static const symbol s_2_4[2] = { 's', 's' };
+static const symbol s_2_5[2] = { 'u', 's' };
 
-static struct among a_2[6] =
+static const struct among a_2[6] =
 {
 /*  0 */ { 3, s_2_0, -1, 2, 0},
 /*  1 */ { 1, s_2_1, -1, 3, 0},
@@ -60,20 +76,20 @@ static struct among a_2[6] =
 /*  5 */ { 2, s_2_5, 1, -1, 0}
 };
 
-static symbol s_3_1[2] = { 'b', 'b' };
-static symbol s_3_2[2] = { 'd', 'd' };
-static symbol s_3_3[2] = { 'f', 'f' };
-static symbol s_3_4[2] = { 'g', 'g' };
-static symbol s_3_5[2] = { 'b', 'l' };
-static symbol s_3_6[2] = { 'm', 'm' };
-static symbol s_3_7[2] = { 'n', 'n' };
-static symbol s_3_8[2] = { 'p', 'p' };
-static symbol s_3_9[2] = { 'r', 'r' };
-static symbol s_3_10[2] = { 'a', 't' };
-static symbol s_3_11[2] = { 't', 't' };
-static symbol s_3_12[2] = { 'i', 'z' };
+static const symbol s_3_1[2] = { 'b', 'b' };
+static const symbol s_3_2[2] = { 'd', 'd' };
+static const symbol s_3_3[2] = { 'f', 'f' };
+static const symbol s_3_4[2] = { 'g', 'g' };
+static const symbol s_3_5[2] = { 'b', 'l' };
+static const symbol s_3_6[2] = { 'm', 'm' };
+static const symbol s_3_7[2] = { 'n', 'n' };
+static const symbol s_3_8[2] = { 'p', 'p' };
+static const symbol s_3_9[2] = { 'r', 'r' };
+static const symbol s_3_10[2] = { 'a', 't' };
+static const symbol s_3_11[2] = { 't', 't' };
+static const symbol s_3_12[2] = { 'i', 'z' };
 
-static struct among a_3[13] =
+static const struct among a_3[13] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_3_1, 0, 2, 0},
@@ -90,14 +106,14 @@ static struct among a_3[13] =
 /* 12 */ { 2, s_3_12, 0, 1, 0}
 };
 
-static symbol s_4_0[2] = { 'e', 'd' };
-static symbol s_4_1[3] = { 'e', 'e', 'd' };
-static symbol s_4_2[3] = { 'i', 'n', 'g' };
-static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' };
-static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' };
-static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' };
+static const symbol s_4_0[2] = { 'e', 'd' };
+static const symbol s_4_1[3] = { 'e', 'e', 'd' };
+static const symbol s_4_2[3] = { 'i', 'n', 'g' };
+static const symbol s_4_3[4] = { 'e', 'd', 'l', 'y' };
+static const symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' };
+static const symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' };
 
-static struct among a_4[6] =
+static const struct among a_4[6] =
 {
 /*  0 */ { 2, s_4_0, -1, 2, 0},
 /*  1 */ { 3, s_4_1, 0, 1, 0},
@@ -107,32 +123,32 @@ static struct among a_4[6] =
 /*  5 */ { 5, s_4_5, -1, 2, 0}
 };
 
-static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' };
-static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' };
-static symbol s_5_2[3] = { 'o', 'g', 'i' };
-static symbol s_5_3[2] = { 'l', 'i' };
-static symbol s_5_4[3] = { 'b', 'l', 'i' };
-static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' };
-static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' };
-static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' };
-static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' };
-static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' };
-static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' };
-static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' };
-static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
-static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' };
-static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' };
-static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' };
-static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
-static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' };
-static symbol s_5_20[4] = { 'a', 't', 'o', 'r' };
-static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
-static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
-static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
+static const symbol s_5_0[4] = { 'a', 'n', 'c', 'i' };
+static const symbol s_5_1[4] = { 'e', 'n', 'c', 'i' };
+static const symbol s_5_2[3] = { 'o', 'g', 'i' };
+static const symbol s_5_3[2] = { 'l', 'i' };
+static const symbol s_5_4[3] = { 'b', 'l', 'i' };
+static const symbol s_5_5[4] = { 'a', 'b', 'l', 'i' };
+static const symbol s_5_6[4] = { 'a', 'l', 'l', 'i' };
+static const symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' };
+static const symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' };
+static const symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' };
+static const symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' };
+static const symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' };
+static const symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
+static const symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' };
+static const symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' };
+static const symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' };
+static const symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
+static const symbol s_5_19[4] = { 'i', 'z', 'e', 'r' };
+static const symbol s_5_20[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
+static const symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
+static const symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
 
-static struct among a_5[24] =
+static const struct among a_5[24] =
 {
 /*  0 */ { 4, s_5_0, -1, 3, 0},
 /*  1 */ { 4, s_5_1, -1, 2, 0},
@@ -160,17 +176,17 @@ static struct among a_5[24] =
 /* 23 */ { 7, s_5_23, -1, 10, 0}
 };
 
-static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' };
-static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' };
-static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' };
-static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' };
-static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' };
-static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_6_7[3] = { 'f', 'u', 'l' };
-static symbol s_6_8[4] = { 'n', 'e', 's', 's' };
+static const symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' };
+static const symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' };
+static const symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' };
+static const symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' };
+static const symbol s_6_4[4] = { 'i', 'c', 'a', 'l' };
+static const symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_6_7[3] = { 'f', 'u', 'l' };
+static const symbol s_6_8[4] = { 'n', 'e', 's', 's' };
 
-static struct among a_6[9] =
+static const struct among a_6[9] =
 {
 /*  0 */ { 5, s_6_0, -1, 4, 0},
 /*  1 */ { 5, s_6_1, -1, 6, 0},
@@ -183,26 +199,26 @@ static struct among a_6[9] =
 /*  8 */ { 4, s_6_8, -1, 5, 0}
 };
 
-static symbol s_7_0[2] = { 'i', 'c' };
-static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' };
-static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' };
-static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_7_5[3] = { 'a', 't', 'e' };
-static symbol s_7_6[3] = { 'i', 'v', 'e' };
-static symbol s_7_7[3] = { 'i', 'z', 'e' };
-static symbol s_7_8[3] = { 'i', 't', 'i' };
-static symbol s_7_9[2] = { 'a', 'l' };
-static symbol s_7_10[3] = { 'i', 's', 'm' };
-static symbol s_7_11[3] = { 'i', 'o', 'n' };
-static symbol s_7_12[2] = { 'e', 'r' };
-static symbol s_7_13[3] = { 'o', 'u', 's' };
-static symbol s_7_14[3] = { 'a', 'n', 't' };
-static symbol s_7_15[3] = { 'e', 'n', 't' };
-static symbol s_7_16[4] = { 'm', 'e', 'n', 't' };
-static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' };
+static const symbol s_7_0[2] = { 'i', 'c' };
+static const symbol s_7_1[4] = { 'a', 'n', 'c', 'e' };
+static const symbol s_7_2[4] = { 'e', 'n', 'c', 'e' };
+static const symbol s_7_3[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_7_4[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_7_5[3] = { 'a', 't', 'e' };
+static const symbol s_7_6[3] = { 'i', 'v', 'e' };
+static const symbol s_7_7[3] = { 'i', 'z', 'e' };
+static const symbol s_7_8[3] = { 'i', 't', 'i' };
+static const symbol s_7_9[2] = { 'a', 'l' };
+static const symbol s_7_10[3] = { 'i', 's', 'm' };
+static const symbol s_7_11[3] = { 'i', 'o', 'n' };
+static const symbol s_7_12[2] = { 'e', 'r' };
+static const symbol s_7_13[3] = { 'o', 'u', 's' };
+static const symbol s_7_14[3] = { 'a', 'n', 't' };
+static const symbol s_7_15[3] = { 'e', 'n', 't' };
+static const symbol s_7_16[4] = { 'm', 'e', 'n', 't' };
+static const symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' };
 
-static struct among a_7[18] =
+static const struct among a_7[18] =
 {
 /*  0 */ { 2, s_7_0, -1, 1, 0},
 /*  1 */ { 4, s_7_1, -1, 1, 0},
@@ -224,25 +240,25 @@ static struct among a_7[18] =
 /* 17 */ { 5, s_7_17, 16, 1, 0}
 };
 
-static symbol s_8_0[1] = { 'e' };
-static symbol s_8_1[1] = { 'l' };
+static const symbol s_8_0[1] = { 'e' };
+static const symbol s_8_1[1] = { 'l' };
 
-static struct among a_8[2] =
+static const struct among a_8[2] =
 {
 /*  0 */ { 1, s_8_0, -1, 1, 0},
 /*  1 */ { 1, s_8_1, -1, 2, 0}
 };
 
-static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' };
-static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' };
-static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' };
-static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' };
-static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' };
-static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' };
-static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' };
-static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' };
+static const symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' };
+static const symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' };
+static const symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' };
+static const symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' };
+static const symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' };
+static const symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' };
+static const symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' };
+static const symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' };
 
-static struct among a_9[8] =
+static const struct among a_9[8] =
 {
 /*  0 */ { 7, s_9_0, -1, -1, 0},
 /*  1 */ { 7, s_9_1, -1, -1, 0},
@@ -254,26 +270,26 @@ static struct among a_9[8] =
 /*  7 */ { 6, s_9_7, -1, -1, 0}
 };
 
-static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' };
-static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' };
-static symbol s_10_2[4] = { 'b', 'i', 'a', 's' };
-static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' };
-static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' };
-static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' };
-static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' };
-static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' };
-static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' };
-static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' };
-static symbol s_10_10[4] = { 'n', 'e', 'w', 's' };
-static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' };
-static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' };
-static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' };
-static symbol s_10_14[4] = { 's', 'k', 'i', 's' };
-static symbol s_10_15[3] = { 's', 'k', 'y' };
-static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' };
-static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' };
+static const symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' };
+static const symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' };
+static const symbol s_10_2[4] = { 'b', 'i', 'a', 's' };
+static const symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' };
+static const symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' };
+static const symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' };
+static const symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' };
+static const symbol s_10_7[4] = { 'h', 'o', 'w', 'e' };
+static const symbol s_10_8[4] = { 'i', 'd', 'l', 'y' };
+static const symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' };
+static const symbol s_10_10[4] = { 'n', 'e', 'w', 's' };
+static const symbol s_10_11[4] = { 'o', 'n', 'l', 'y' };
+static const symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' };
+static const symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' };
+static const symbol s_10_14[4] = { 's', 'k', 'i', 's' };
+static const symbol s_10_15[3] = { 's', 'k', 'y' };
+static const symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' };
+static const symbol s_10_17[4] = { 'u', 'g', 'l', 'y' };
 
-static struct among a_10[18] =
+static const struct among a_10[18] =
 {
 /*  0 */ { 5, s_10_0, -1, -1, 0},
 /*  1 */ { 5, s_10_1, -1, -1, 0},
@@ -295,117 +311,114 @@ static struct among a_10[18] =
 /* 17 */ { 4, s_10_17, -1, 8, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1 };
+static const unsigned char g_v[] = { 17, 65, 16, 1 };
 
-static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
+static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
 
-static unsigned char g_valid_LI[] = { 55, 141, 2 };
+static const unsigned char g_valid_LI[] = { 55, 141, 2 };
 
-static symbol s_0[] = { '\'' };
-static symbol s_1[] = { 'y' };
-static symbol s_2[] = { 'Y' };
-static symbol s_3[] = { 'y' };
-static symbol s_4[] = { 'Y' };
-static symbol s_5[] = { 's', 's' };
-static symbol s_6[] = { 'i' };
-static symbol s_7[] = { 'i', 'e' };
-static symbol s_8[] = { 'e', 'e' };
-static symbol s_9[] = { 'e' };
-static symbol s_10[] = { 'e' };
-static symbol s_11[] = { 'y' };
-static symbol s_12[] = { 'Y' };
-static symbol s_13[] = { 'i' };
-static symbol s_14[] = { 't', 'i', 'o', 'n' };
-static symbol s_15[] = { 'e', 'n', 'c', 'e' };
-static symbol s_16[] = { 'a', 'n', 'c', 'e' };
-static symbol s_17[] = { 'a', 'b', 'l', 'e' };
-static symbol s_18[] = { 'e', 'n', 't' };
-static symbol s_19[] = { 'i', 'z', 'e' };
-static symbol s_20[] = { 'a', 't', 'e' };
-static symbol s_21[] = { 'a', 'l' };
-static symbol s_22[] = { 'f', 'u', 'l' };
-static symbol s_23[] = { 'o', 'u', 's' };
-static symbol s_24[] = { 'i', 'v', 'e' };
-static symbol s_25[] = { 'b', 'l', 'e' };
-static symbol s_26[] = { 'l' };
-static symbol s_27[] = { 'o', 'g' };
-static symbol s_28[] = { 'f', 'u', 'l' };
-static symbol s_29[] = { 'l', 'e', 's', 's' };
-static symbol s_30[] = { 't', 'i', 'o', 'n' };
-static symbol s_31[] = { 'a', 't', 'e' };
-static symbol s_32[] = { 'a', 'l' };
-static symbol s_33[] = { 'i', 'c' };
-static symbol s_34[] = { 's' };
-static symbol s_35[] = { 't' };
-static symbol s_36[] = { 'l' };
-static symbol s_37[] = { 's', 'k', 'i' };
-static symbol s_38[] = { 's', 'k', 'y' };
-static symbol s_39[] = { 'd', 'i', 'e' };
-static symbol s_40[] = { 'l', 'i', 'e' };
-static symbol s_41[] = { 't', 'i', 'e' };
-static symbol s_42[] = { 'i', 'd', 'l' };
-static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' };
-static symbol s_44[] = { 'u', 'g', 'l', 'i' };
-static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' };
-static symbol s_46[] = { 'o', 'n', 'l', 'i' };
-static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' };
-static symbol s_48[] = { 'Y' };
-static symbol s_49[] = { 'y' };
+static const symbol s_0[] = { '\'' };
+static const symbol s_1[] = { 'y' };
+static const symbol s_2[] = { 'Y' };
+static const symbol s_3[] = { 'y' };
+static const symbol s_4[] = { 'Y' };
+static const symbol s_5[] = { 's', 's' };
+static const symbol s_6[] = { 'i' };
+static const symbol s_7[] = { 'i', 'e' };
+static const symbol s_8[] = { 'e', 'e' };
+static const symbol s_9[] = { 'e' };
+static const symbol s_10[] = { 'e' };
+static const symbol s_11[] = { 'y' };
+static const symbol s_12[] = { 'Y' };
+static const symbol s_13[] = { 'i' };
+static const symbol s_14[] = { 't', 'i', 'o', 'n' };
+static const symbol s_15[] = { 'e', 'n', 'c', 'e' };
+static const symbol s_16[] = { 'a', 'n', 'c', 'e' };
+static const symbol s_17[] = { 'a', 'b', 'l', 'e' };
+static const symbol s_18[] = { 'e', 'n', 't' };
+static const symbol s_19[] = { 'i', 'z', 'e' };
+static const symbol s_20[] = { 'a', 't', 'e' };
+static const symbol s_21[] = { 'a', 'l' };
+static const symbol s_22[] = { 'f', 'u', 'l' };
+static const symbol s_23[] = { 'o', 'u', 's' };
+static const symbol s_24[] = { 'i', 'v', 'e' };
+static const symbol s_25[] = { 'b', 'l', 'e' };
+static const symbol s_26[] = { 'l' };
+static const symbol s_27[] = { 'o', 'g' };
+static const symbol s_28[] = { 'f', 'u', 'l' };
+static const symbol s_29[] = { 'l', 'e', 's', 's' };
+static const symbol s_30[] = { 't', 'i', 'o', 'n' };
+static const symbol s_31[] = { 'a', 't', 'e' };
+static const symbol s_32[] = { 'a', 'l' };
+static const symbol s_33[] = { 'i', 'c' };
+static const symbol s_34[] = { 's' };
+static const symbol s_35[] = { 't' };
+static const symbol s_36[] = { 'l' };
+static const symbol s_37[] = { 's', 'k', 'i' };
+static const symbol s_38[] = { 's', 'k', 'y' };
+static const symbol s_39[] = { 'd', 'i', 'e' };
+static const symbol s_40[] = { 'l', 'i', 'e' };
+static const symbol s_41[] = { 't', 'i', 'e' };
+static const symbol s_42[] = { 'i', 'd', 'l' };
+static const symbol s_43[] = { 'g', 'e', 'n', 't', 'l' };
+static const symbol s_44[] = { 'u', 'g', 'l', 'i' };
+static const symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' };
+static const symbol s_46[] = { 'o', 'n', 'l', 'i' };
+static const symbol s_47[] = { 's', 'i', 'n', 'g', 'l' };
+static const symbol s_48[] = { 'Y' };
+static const symbol s_49[] = { 'y' };
 
 static int r_prelude(struct SN_env * z) {
     z->B[0] = 0; /* unset Y_found, line 26 */
-    {   int c = z->c; /* do, line 27 */
+    {   int c1 = z->c; /* do, line 27 */
         z->bra = z->c; /* [, line 27 */
         if (!(eq_s(z, 1, s_0))) goto lab0;
         z->ket = z->c; /* ], line 27 */
-        {   int ret;
-            ret = slice_del(z); /* delete, line 27 */
+        {   int ret = slice_del(z); /* delete, line 27 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 28 */
+    {   int c2 = z->c; /* do, line 28 */
         z->bra = z->c; /* [, line 28 */
         if (!(eq_s(z, 1, s_1))) goto lab1;
         z->ket = z->c; /* ], line 28 */
-        {   int ret;
-            ret = slice_from_s(z, 1, s_2); /* <-, line 28 */
+        {   int ret = slice_from_s(z, 1, s_2); /* <-, line 28 */
             if (ret < 0) return ret;
         }
         z->B[0] = 1; /* set Y_found, line 28 */
     lab1:
-        z->c = c;
+        z->c = c2;
     }
-    {   int c = z->c; /* do, line 29 */
+    {   int c3 = z->c; /* do, line 29 */
         while(1) { /* repeat, line 29 */
-            int c = z->c;
+            int c4 = z->c;
             while(1) { /* goto, line 29 */
-                int c = z->c;
-                if (!(in_grouping_U(z, g_v, 97, 121))) goto lab4;
+                int c5 = z->c;
+                if (in_grouping_U(z, g_v, 97, 121, 0)) goto lab4;
                 z->bra = z->c; /* [, line 29 */
                 if (!(eq_s(z, 1, s_3))) goto lab4;
                 z->ket = z->c; /* ], line 29 */
-                z->c = c;
+                z->c = c5;
                 break;
             lab4:
-                z->c = c;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab3;
-                    z->c = c; /* goto, line 29 */
+                z->c = c5;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab3;
+                    z->c = ret; /* goto, line 29 */
                 }
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_4); /* <-, line 29 */
+            {   int ret = slice_from_s(z, 1, s_4); /* <-, line 29 */
                 if (ret < 0) return ret;
             }
             z->B[0] = 1; /* set Y_found, line 29 */
             continue;
         lab3:
-            z->c = c;
+            z->c = c4;
             break;
         }
-        z->c = c;
+        z->c = c3;
     }
     return 1;
 }
@@ -413,69 +426,54 @@ static int r_prelude(struct SN_env * z) {
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    {   int c = z->c; /* do, line 35 */
-        {   int c = z->c; /* or, line 40 */
-            if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */
+    {   int c1 = z->c; /* do, line 35 */
+        {   int c2 = z->c; /* or, line 41 */
+            if (z->c + 4 >= z->l || z->p[z->c + 4] >> 5 != 3 || !((2375680 >> (z->p[z->c + 4] & 0x1f)) & 1)) goto lab2;
+            if (!(find_among(z, a_0, 3))) goto lab2; /* among, line 36 */
             goto lab1;
         lab2:
-            z->c = c;
-            while(1) { /* gopast, line 40 */
-                if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3;
-                break;
-            lab3:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* gopast, line 40 */
-                }
+            z->c = c2;
+            {    /* gopast */ /* grouping v, line 41 */
+                int ret = out_grouping_U(z, g_v, 97, 121, 1);
+                if (ret < 0) goto lab0;
+                z->c += ret;
             }
-            while(1) { /* gopast, line 40 */
-                if (!(out_grouping_U(z, g_v, 97, 121))) goto lab4;
-                break;
-            lab4:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* gopast, line 40 */
-                }
+            {    /* gopast */ /* non v, line 41 */
+                int ret = in_grouping_U(z, g_v, 97, 121, 1);
+                if (ret < 0) goto lab0;
+                z->c += ret;
             }
         }
     lab1:
-        z->I[0] = z->c; /* setmark p1, line 41 */
-        while(1) { /* gopast, line 42 */
-            if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5;
-            break;
-        lab5:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* gopast, line 42 */
-            }
+        z->I[0] = z->c; /* setmark p1, line 42 */
+        {    /* gopast */ /* grouping v, line 43 */
+            int ret = out_grouping_U(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 42 */
-            if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6;
-            break;
-        lab6:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* gopast, line 42 */
-            }
+        {    /* gopast */ /* non v, line 43 */
+            int ret = in_grouping_U(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        z->I[1] = z->c; /* setmark p2, line 42 */
+        z->I[1] = z->c; /* setmark p2, line 43 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     return 1;
 }
 
 static int r_shortv(struct SN_env * z) {
-    {   int m = z->l - z->c; (void) m; /* or, line 50 */
-        if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) goto lab1;
-        if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab1;
-        if (!(out_grouping_b_U(z, g_v, 97, 121))) goto lab1;
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 51 */
+        if (out_grouping_b_U(z, g_v_WXY, 89, 121, 0)) goto lab1;
+        if (in_grouping_b_U(z, g_v, 97, 121, 0)) goto lab1;
+        if (out_grouping_b_U(z, g_v, 97, 121, 0)) goto lab1;
         goto lab0;
     lab1:
-        z->c = z->l - m;
-        if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0;
-        if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0;
-        if (z->c > z->lb) return 0; /* atlimit, line 51 */
+        z->c = z->l - m1;
+        if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0;
+        if (in_grouping_b_U(z, g_v, 97, 121, 0)) return 0;
+        if (z->c > z->lb) return 0; /* atlimit, line 52 */
     }
 lab0:
     return 1;
@@ -493,16 +491,16 @@ static int r_R2(struct SN_env * z) {
 
 static int r_Step_1a(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* try, line 58 */
-        z->ket = z->c; /* [, line 59 */
-        among_var = find_among_b(z, a_1, 3); /* substring, line 59 */
-        if (!(among_var)) { z->c = z->l - m; goto lab0; }
-        z->bra = z->c; /* ], line 59 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 59 */
+        z->ket = z->c; /* [, line 60 */
+        if (z->c <= z->lb || (z->p[z->c - 1] != 39 && z->p[z->c - 1] != 115)) { z->c = z->l - m_keep; goto lab0; }
+        among_var = find_among_b(z, a_1, 3); /* substring, line 60 */
+        if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
+        z->bra = z->c; /* ], line 60 */
         switch(among_var) {
-            case 0: { z->c = z->l - m; goto lab0; }
+            case 0: { z->c = z->l - m_keep; goto lab0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 61 */
+                {   int ret = slice_del(z); /* delete, line 62 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -510,54 +508,47 @@ static int r_Step_1a(struct SN_env * z) {
     lab0:
         ;
     }
-    z->ket = z->c; /* [, line 64 */
-    among_var = find_among_b(z, a_2, 6); /* substring, line 64 */
+    z->ket = z->c; /* [, line 65 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 115)) return 0;
+    among_var = find_among_b(z, a_2, 6); /* substring, line 65 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 64 */
+    z->bra = z->c; /* ], line 65 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_5); /* <-, line 65 */
+            {   int ret = slice_from_s(z, 2, s_5); /* <-, line 66 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 67 */
-                {   int c = skip_utf8(z->p, z->c, z->lb, z->l, - 2);
-                    if (c < 0) goto lab2;
-                    z->c = c; /* hop, line 67 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 68 */
+                {   int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 2);
+                    if (ret < 0) goto lab2;
+                    z->c = ret; /* hop, line 68 */
                 }
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_6); /* <-, line 67 */
+                {   int ret = slice_from_s(z, 1, s_6); /* <-, line 68 */
                     if (ret < 0) return ret;
                 }
                 goto lab1;
             lab2:
-                z->c = z->l - m;
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_7); /* <-, line 67 */
+                z->c = z->l - m1;
+                {   int ret = slice_from_s(z, 2, s_7); /* <-, line 68 */
                     if (ret < 0) return ret;
                 }
             }
         lab1:
             break;
         case 3:
-            {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                if (c < 0) return 0;
-                z->c = c; /* next, line 68 */
+            {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                if (ret < 0) return 0;
+                z->c = ret; /* next, line 69 */
             }
-            while(1) { /* gopast, line 68 */
-                if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab3;
-                break;
-            lab3:
-                {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                    if (c < 0) return 0;
-                    z->c = c; /* gopast, line 68 */
-                }
+            {    /* gopast */ /* grouping v, line 69 */
+                int ret = out_grouping_b_U(z, g_v, 97, 121, 1);
+                if (ret < 0) return 0;
+                z->c -= ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 68 */
+            {   int ret = slice_del(z); /* delete, line 69 */
                 if (ret < 0) return ret;
             }
             break;
@@ -567,81 +558,72 @@ static int r_Step_1a(struct SN_env * z) {
 
 static int r_Step_1b(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 74 */
-    among_var = find_among_b(z, a_4, 6); /* substring, line 74 */
+    z->ket = z->c; /* [, line 75 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33554576 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_4, 6); /* substring, line 75 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 74 */
+    z->bra = z->c; /* ], line 75 */
     switch(among_var) {
         case 0: return 0;
         case 1:
             {   int ret = r_R1(z);
-                if (ret == 0) return 0; /* call R1, line 76 */
+                if (ret == 0) return 0; /* call R1, line 77 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
+            {   int ret = slice_from_s(z, 2, s_8); /* <-, line 77 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m_test = z->l - z->c; /* test, line 79 */
-                while(1) { /* gopast, line 79 */
-                    if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0;
-                    break;
-                lab0:
-                    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                        if (c < 0) return 0;
-                        z->c = c; /* gopast, line 79 */
-                    }
+            {   int m_test = z->l - z->c; /* test, line 80 */
+                {    /* gopast */ /* grouping v, line 80 */
+                    int ret = out_grouping_b_U(z, g_v, 97, 121, 1);
+                    if (ret < 0) return 0;
+                    z->c -= ret;
                 }
                 z->c = z->l - m_test;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 79 */
+            {   int ret = slice_del(z); /* delete, line 80 */
                 if (ret < 0) return ret;
             }
-            {   int m_test = z->l - z->c; /* test, line 80 */
-                among_var = find_among_b(z, a_3, 13); /* substring, line 80 */
+            {   int m_test = z->l - z->c; /* test, line 81 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else
+                among_var = find_among_b(z, a_3, 13); /* substring, line 81 */
                 if (!(among_var)) return 0;
                 z->c = z->l - m_test;
             }
             switch(among_var) {
                 case 0: return 0;
                 case 1:
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 83 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
-                    z->ket = z->c; /* [, line 85 */
-                    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                        if (c < 0) return 0;
-                        z->c = c; /* next, line 85 */
+                    z->ket = z->c; /* [, line 86 */
+                    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                        if (ret < 0) return 0;
+                        z->c = ret; /* next, line 86 */
                     }
-                    z->bra = z->c; /* ], line 85 */
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 85 */
+                    z->bra = z->c; /* ], line 86 */
+                    {   int ret = slice_del(z); /* delete, line 86 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 3:
-                    if (z->c != z->I[0]) return 0; /* atmark, line 86 */
-                    {   int m_test = z->l - z->c; /* test, line 86 */
+                    if (z->c != z->I[0]) return 0; /* atmark, line 87 */
+                    {   int m_test = z->l - z->c; /* test, line 87 */
                         {   int ret = r_shortv(z);
-                            if (ret == 0) return 0; /* call shortv, line 86 */
+                            if (ret == 0) return 0; /* call shortv, line 87 */
                             if (ret < 0) return ret;
                         }
                         z->c = z->l - m_test;
                     }
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 87 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
@@ -652,25 +634,24 @@ static int r_Step_1b(struct SN_env * z) {
 }
 
 static int r_Step_1c(struct SN_env * z) {
-    z->ket = z->c; /* [, line 93 */
-    {   int m = z->l - z->c; (void) m; /* or, line 93 */
+    z->ket = z->c; /* [, line 94 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 94 */
         if (!(eq_s_b(z, 1, s_11))) goto lab1;
         goto lab0;
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         if (!(eq_s_b(z, 1, s_12))) return 0;
     }
 lab0:
-    z->bra = z->c; /* ], line 93 */
-    if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0;
-    {   int m = z->l - z->c; (void) m; /* not, line 94 */
-        if (z->c > z->lb) goto lab2; /* atlimit, line 94 */
+    z->bra = z->c; /* ], line 94 */
+    if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0;
+    {   int m2 = z->l - z->c; (void)m2; /* not, line 95 */
+        if (z->c > z->lb) goto lab2; /* atlimit, line 95 */
         return 0;
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int ret;
-        ret = slice_from_s(z, 1, s_13); /* <-, line 95 */
+    {   int ret = slice_from_s(z, 1, s_13); /* <-, line 96 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -678,111 +659,96 @@ lab0:
 
 static int r_Step_2(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 99 */
-    among_var = find_among_b(z, a_5, 24); /* substring, line 99 */
+    z->ket = z->c; /* [, line 100 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_5, 24); /* substring, line 100 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 99 */
+    z->bra = z->c; /* ], line 100 */
     {   int ret = r_R1(z);
-        if (ret == 0) return 0; /* call R1, line 99 */
+        if (ret == 0) return 0; /* call R1, line 100 */
         if (ret < 0) return ret;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_14); /* <-, line 100 */
+            {   int ret = slice_from_s(z, 4, s_14); /* <-, line 101 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_15); /* <-, line 101 */
+            {   int ret = slice_from_s(z, 4, s_15); /* <-, line 102 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_16); /* <-, line 102 */
+            {   int ret = slice_from_s(z, 4, s_16); /* <-, line 103 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_17); /* <-, line 103 */
+            {   int ret = slice_from_s(z, 4, s_17); /* <-, line 104 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_18); /* <-, line 104 */
+            {   int ret = slice_from_s(z, 3, s_18); /* <-, line 105 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_19); /* <-, line 106 */
+            {   int ret = slice_from_s(z, 3, s_19); /* <-, line 107 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_20); /* <-, line 108 */
+            {   int ret = slice_from_s(z, 3, s_20); /* <-, line 109 */
                 if (ret < 0) return ret;
             }
             break;
         case 8:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_21); /* <-, line 110 */
+            {   int ret = slice_from_s(z, 2, s_21); /* <-, line 111 */
                 if (ret < 0) return ret;
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_22); /* <-, line 111 */
+            {   int ret = slice_from_s(z, 3, s_22); /* <-, line 112 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_23); /* <-, line 113 */
+            {   int ret = slice_from_s(z, 3, s_23); /* <-, line 114 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_24); /* <-, line 115 */
+            {   int ret = slice_from_s(z, 3, s_24); /* <-, line 116 */
                 if (ret < 0) return ret;
             }
             break;
         case 12:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_25); /* <-, line 117 */
+            {   int ret = slice_from_s(z, 3, s_25); /* <-, line 118 */
                 if (ret < 0) return ret;
             }
             break;
         case 13:
             if (!(eq_s_b(z, 1, s_26))) return 0;
-            {   int ret;
-                ret = slice_from_s(z, 2, s_27); /* <-, line 118 */
+            {   int ret = slice_from_s(z, 2, s_27); /* <-, line 119 */
                 if (ret < 0) return ret;
             }
             break;
         case 14:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_28); /* <-, line 119 */
+            {   int ret = slice_from_s(z, 3, s_28); /* <-, line 120 */
                 if (ret < 0) return ret;
             }
             break;
         case 15:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_29); /* <-, line 120 */
+            {   int ret = slice_from_s(z, 4, s_29); /* <-, line 121 */
                 if (ret < 0) return ret;
             }
             break;
         case 16:
-            if (!(in_grouping_b_U(z, g_valid_LI, 99, 116))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 121 */
+            if (in_grouping_b_U(z, g_valid_LI, 99, 116, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 122 */
                 if (ret < 0) return ret;
             }
             break;
@@ -792,53 +758,48 @@ static int r_Step_2(struct SN_env * z) {
 
 static int r_Step_3(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 126 */
-    among_var = find_among_b(z, a_6, 9); /* substring, line 126 */
+    z->ket = z->c; /* [, line 127 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_6, 9); /* substring, line 127 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 126 */
+    z->bra = z->c; /* ], line 127 */
     {   int ret = r_R1(z);
-        if (ret == 0) return 0; /* call R1, line 126 */
+        if (ret == 0) return 0; /* call R1, line 127 */
         if (ret < 0) return ret;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_30); /* <-, line 127 */
+            {   int ret = slice_from_s(z, 4, s_30); /* <-, line 128 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_31); /* <-, line 128 */
+            {   int ret = slice_from_s(z, 3, s_31); /* <-, line 129 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_32); /* <-, line 129 */
+            {   int ret = slice_from_s(z, 2, s_32); /* <-, line 130 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_33); /* <-, line 131 */
+            {   int ret = slice_from_s(z, 2, s_33); /* <-, line 132 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 133 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 135 */
+                if (ret == 0) return 0; /* call R2, line 136 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 135 */
+            {   int ret = slice_del(z); /* delete, line 136 */
                 if (ret < 0) return ret;
             }
             break;
@@ -848,33 +809,32 @@ static int r_Step_3(struct SN_env * z) {
 
 static int r_Step_4(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 140 */
-    among_var = find_among_b(z, a_7, 18); /* substring, line 140 */
+    z->ket = z->c; /* [, line 141 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1864232 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_7, 18); /* substring, line 141 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 140 */
+    z->bra = z->c; /* ], line 141 */
     {   int ret = r_R2(z);
-        if (ret == 0) return 0; /* call R2, line 140 */
+        if (ret == 0) return 0; /* call R2, line 141 */
         if (ret < 0) return ret;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 143 */
+            {   int ret = slice_del(z); /* delete, line 144 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 144 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 145 */
                 if (!(eq_s_b(z, 1, s_34))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_35))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 144 */
+            {   int ret = slice_del(z); /* delete, line 145 */
                 if (ret < 0) return ret;
             }
             break;
@@ -884,49 +844,48 @@ static int r_Step_4(struct SN_env * z) {
 
 static int r_Step_5(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 149 */
-    among_var = find_among_b(z, a_8, 2); /* substring, line 149 */
+    z->ket = z->c; /* [, line 150 */
+    if (z->c <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) return 0;
+    among_var = find_among_b(z, a_8, 2); /* substring, line 150 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 149 */
+    z->bra = z->c; /* ], line 150 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* or, line 150 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 151 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) goto lab1; /* call R2, line 150 */
+                    if (ret == 0) goto lab1; /* call R2, line 151 */
                     if (ret < 0) return ret;
                 }
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 {   int ret = r_R1(z);
-                    if (ret == 0) return 0; /* call R1, line 150 */
+                    if (ret == 0) return 0; /* call R1, line 151 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* not, line 150 */
+                {   int m2 = z->l - z->c; (void)m2; /* not, line 151 */
                     {   int ret = r_shortv(z);
-                        if (ret == 0) goto lab2; /* call shortv, line 150 */
+                        if (ret == 0) goto lab2; /* call shortv, line 151 */
                         if (ret < 0) return ret;
                     }
                     return 0;
                 lab2:
-                    z->c = z->l - m;
+                    z->c = z->l - m2;
                 }
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 150 */
+            {   int ret = slice_del(z); /* delete, line 151 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 151 */
+                if (ret == 0) return 0; /* call R2, line 152 */
                 if (ret < 0) return ret;
             }
             if (!(eq_s_b(z, 1, s_36))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 151 */
+            {   int ret = slice_del(z); /* delete, line 152 */
                 if (ret < 0) return ret;
             }
             break;
@@ -935,85 +894,76 @@ static int r_Step_5(struct SN_env * z) {
 }
 
 static int r_exception2(struct SN_env * z) {
-    z->ket = z->c; /* [, line 157 */
-    if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */
-    z->bra = z->c; /* ], line 157 */
-    if (z->c > z->lb) return 0; /* atlimit, line 157 */
+    z->ket = z->c; /* [, line 158 */
+    if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0;
+    if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 158 */
+    z->bra = z->c; /* ], line 158 */
+    if (z->c > z->lb) return 0; /* atlimit, line 158 */
     return 1;
 }
 
 static int r_exception1(struct SN_env * z) {
     int among_var;
-    z->bra = z->c; /* [, line 169 */
-    among_var = find_among(z, a_10, 18); /* substring, line 169 */
+    z->bra = z->c; /* [, line 170 */
+    if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((42750482 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0;
+    among_var = find_among(z, a_10, 18); /* substring, line 170 */
     if (!(among_var)) return 0;
-    z->ket = z->c; /* ], line 169 */
-    if (z->c < z->l) return 0; /* atlimit, line 169 */
+    z->ket = z->c; /* ], line 170 */
+    if (z->c < z->l) return 0; /* atlimit, line 170 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_37); /* <-, line 173 */
+            {   int ret = slice_from_s(z, 3, s_37); /* <-, line 174 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_38); /* <-, line 174 */
+            {   int ret = slice_from_s(z, 3, s_38); /* <-, line 175 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_39); /* <-, line 175 */
+            {   int ret = slice_from_s(z, 3, s_39); /* <-, line 176 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_40); /* <-, line 176 */
+            {   int ret = slice_from_s(z, 3, s_40); /* <-, line 177 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_41); /* <-, line 177 */
+            {   int ret = slice_from_s(z, 3, s_41); /* <-, line 178 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_42); /* <-, line 181 */
+            {   int ret = slice_from_s(z, 3, s_42); /* <-, line 182 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
-            {   int ret;
-                ret = slice_from_s(z, 5, s_43); /* <-, line 182 */
+            {   int ret = slice_from_s(z, 5, s_43); /* <-, line 183 */
                 if (ret < 0) return ret;
             }
             break;
         case 8:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_44); /* <-, line 183 */
+            {   int ret = slice_from_s(z, 4, s_44); /* <-, line 184 */
                 if (ret < 0) return ret;
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 5, s_45); /* <-, line 184 */
+            {   int ret = slice_from_s(z, 5, s_45); /* <-, line 185 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_46); /* <-, line 185 */
+            {   int ret = slice_from_s(z, 4, s_46); /* <-, line 186 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int ret;
-                ret = slice_from_s(z, 5, s_47); /* <-, line 186 */
+            {   int ret = slice_from_s(z, 5, s_47); /* <-, line 187 */
                 if (ret < 0) return ret;
             }
             break;
@@ -1022,148 +972,147 @@ static int r_exception1(struct SN_env * z) {
 }
 
 static int r_postlude(struct SN_env * z) {
-    if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */
-    while(1) { /* repeat, line 202 */
-        int c = z->c;
-        while(1) { /* goto, line 202 */
-            int c = z->c;
-            z->bra = z->c; /* [, line 202 */
+    if (!(z->B[0])) return 0; /* Boolean test Y_found, line 203 */
+    while(1) { /* repeat, line 203 */
+        int c1 = z->c;
+        while(1) { /* goto, line 203 */
+            int c2 = z->c;
+            z->bra = z->c; /* [, line 203 */
             if (!(eq_s(z, 1, s_48))) goto lab1;
-            z->ket = z->c; /* ], line 202 */
-            z->c = c;
+            z->ket = z->c; /* ], line 203 */
+            z->c = c2;
             break;
         lab1:
-            z->c = c;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* goto, line 202 */
+            z->c = c2;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab0;
+                z->c = ret; /* goto, line 203 */
             }
         }
-        {   int ret;
-            ret = slice_from_s(z, 1, s_49); /* <-, line 202 */
+        {   int ret = slice_from_s(z, 1, s_49); /* <-, line 203 */
             if (ret < 0) return ret;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
 }
 
 extern int english_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* or, line 206 */
+    {   int c1 = z->c; /* or, line 207 */
         {   int ret = r_exception1(z);
-            if (ret == 0) goto lab1; /* call exception1, line 206 */
+            if (ret == 0) goto lab1; /* call exception1, line 207 */
             if (ret < 0) return ret;
         }
         goto lab0;
     lab1:
-        z->c = c;
-        {   int c = z->c; /* not, line 207 */
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, + 3);
-                if (c < 0) goto lab3;
-                z->c = c; /* hop, line 207 */
+        z->c = c1;
+        {   int c2 = z->c; /* not, line 208 */
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, + 3);
+                if (ret < 0) goto lab3;
+                z->c = ret; /* hop, line 208 */
             }
             goto lab2;
         lab3:
-            z->c = c;
+            z->c = c2;
         }
         goto lab0;
     lab2:
-        z->c = c;
-        {   int c = z->c; /* do, line 208 */
+        z->c = c1;
+        {   int c3 = z->c; /* do, line 209 */
             {   int ret = r_prelude(z);
-                if (ret == 0) goto lab4; /* call prelude, line 208 */
+                if (ret == 0) goto lab4; /* call prelude, line 209 */
                 if (ret < 0) return ret;
             }
         lab4:
-            z->c = c;
+            z->c = c3;
         }
-        {   int c = z->c; /* do, line 209 */
+        {   int c4 = z->c; /* do, line 210 */
             {   int ret = r_mark_regions(z);
-                if (ret == 0) goto lab5; /* call mark_regions, line 209 */
+                if (ret == 0) goto lab5; /* call mark_regions, line 210 */
                 if (ret < 0) return ret;
             }
         lab5:
-            z->c = c;
+            z->c = c4;
         }
-        z->lb = z->c; z->c = z->l; /* backwards, line 210 */
+        z->lb = z->c; z->c = z->l; /* backwards, line 211 */
 
-        {   int m = z->l - z->c; (void) m; /* do, line 212 */
+        {   int m5 = z->l - z->c; (void)m5; /* do, line 213 */
             {   int ret = r_Step_1a(z);
-                if (ret == 0) goto lab6; /* call Step_1a, line 212 */
+                if (ret == 0) goto lab6; /* call Step_1a, line 213 */
                 if (ret < 0) return ret;
             }
         lab6:
-            z->c = z->l - m;
+            z->c = z->l - m5;
         }
-        {   int m = z->l - z->c; (void) m; /* or, line 214 */
+        {   int m6 = z->l - z->c; (void)m6; /* or, line 215 */
             {   int ret = r_exception2(z);
-                if (ret == 0) goto lab8; /* call exception2, line 214 */
+                if (ret == 0) goto lab8; /* call exception2, line 215 */
                 if (ret < 0) return ret;
             }
             goto lab7;
         lab8:
-            z->c = z->l - m;
-            {   int m = z->l - z->c; (void) m; /* do, line 216 */
+            z->c = z->l - m6;
+            {   int m7 = z->l - z->c; (void)m7; /* do, line 217 */
                 {   int ret = r_Step_1b(z);
-                    if (ret == 0) goto lab9; /* call Step_1b, line 216 */
+                    if (ret == 0) goto lab9; /* call Step_1b, line 217 */
                     if (ret < 0) return ret;
                 }
             lab9:
-                z->c = z->l - m;
+                z->c = z->l - m7;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 217 */
+            {   int m8 = z->l - z->c; (void)m8; /* do, line 218 */
                 {   int ret = r_Step_1c(z);
-                    if (ret == 0) goto lab10; /* call Step_1c, line 217 */
+                    if (ret == 0) goto lab10; /* call Step_1c, line 218 */
                     if (ret < 0) return ret;
                 }
             lab10:
-                z->c = z->l - m;
+                z->c = z->l - m8;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 219 */
+            {   int m9 = z->l - z->c; (void)m9; /* do, line 220 */
                 {   int ret = r_Step_2(z);
-                    if (ret == 0) goto lab11; /* call Step_2, line 219 */
+                    if (ret == 0) goto lab11; /* call Step_2, line 220 */
                     if (ret < 0) return ret;
                 }
             lab11:
-                z->c = z->l - m;
+                z->c = z->l - m9;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 220 */
+            {   int m10 = z->l - z->c; (void)m10; /* do, line 221 */
                 {   int ret = r_Step_3(z);
-                    if (ret == 0) goto lab12; /* call Step_3, line 220 */
+                    if (ret == 0) goto lab12; /* call Step_3, line 221 */
                     if (ret < 0) return ret;
                 }
             lab12:
-                z->c = z->l - m;
+                z->c = z->l - m10;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 221 */
+            {   int m11 = z->l - z->c; (void)m11; /* do, line 222 */
                 {   int ret = r_Step_4(z);
-                    if (ret == 0) goto lab13; /* call Step_4, line 221 */
+                    if (ret == 0) goto lab13; /* call Step_4, line 222 */
                     if (ret < 0) return ret;
                 }
             lab13:
-                z->c = z->l - m;
+                z->c = z->l - m11;
             }
-            {   int m = z->l - z->c; (void) m; /* do, line 223 */
+            {   int m12 = z->l - z->c; (void)m12; /* do, line 224 */
                 {   int ret = r_Step_5(z);
-                    if (ret == 0) goto lab14; /* call Step_5, line 223 */
+                    if (ret == 0) goto lab14; /* call Step_5, line 224 */
                     if (ret < 0) return ret;
                 }
             lab14:
-                z->c = z->l - m;
+                z->c = z->l - m12;
             }
         }
     lab7:
         z->c = z->lb;
-        {   int c = z->c; /* do, line 226 */
+        {   int c13 = z->c; /* do, line 227 */
             {   int ret = r_postlude(z);
-                if (ret == 0) goto lab15; /* call postlude, line 226 */
+                if (ret == 0) goto lab15; /* call postlude, line 227 */
                 if (ret < 0) return ret;
             }
         lab15:
-            z->c = c;
+            z->c = c13;
         }
     }
 lab0:
@@ -1172,5 +1121,5 @@ lab0:
 
 extern struct SN_env * english_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); }
 
-extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_finnish.c b/libstemmer_c/src_c/stem_UTF_8_finnish.c
index a221be6..65a432a 100644
--- a/libstemmer_c/src_c/stem_UTF_8_finnish.c
+++ b/libstemmer_c/src_c/stem_UTF_8_finnish.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int finnish_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_tidy(struct SN_env * z);
 static int r_other_endings(struct SN_env * z);
 static int r_t_plural(struct SN_env * z);
@@ -15,22 +21,30 @@ static int r_possessive(struct SN_env * z);
 static int r_particle_etc(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * finnish_UTF_8_create_env(void);
 extern void finnish_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[2] = { 'p', 'a' };
-static symbol s_0_1[3] = { 's', 't', 'i' };
-static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' };
-static symbol s_0_3[3] = { 'h', 'a', 'n' };
-static symbol s_0_4[3] = { 'k', 'i', 'n' };
-static symbol s_0_5[4] = { 'h', 0xC3, 0xA4, 'n' };
-static symbol s_0_6[6] = { 'k', 0xC3, 0xA4, 0xC3, 0xA4, 'n' };
-static symbol s_0_7[2] = { 'k', 'o' };
-static symbol s_0_8[3] = { 'p', 0xC3, 0xA4 };
-static symbol s_0_9[3] = { 'k', 0xC3, 0xB6 };
-
-static struct among a_0[10] =
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[2] = { 'p', 'a' };
+static const symbol s_0_1[3] = { 's', 't', 'i' };
+static const symbol s_0_2[4] = { 'k', 'a', 'a', 'n' };
+static const symbol s_0_3[3] = { 'h', 'a', 'n' };
+static const symbol s_0_4[3] = { 'k', 'i', 'n' };
+static const symbol s_0_5[4] = { 'h', 0xC3, 0xA4, 'n' };
+static const symbol s_0_6[6] = { 'k', 0xC3, 0xA4, 0xC3, 0xA4, 'n' };
+static const symbol s_0_7[2] = { 'k', 'o' };
+static const symbol s_0_8[3] = { 'p', 0xC3, 0xA4 };
+static const symbol s_0_9[3] = { 'k', 0xC3, 0xB6 };
+
+static const struct among a_0[10] =
 {
 /*  0 */ { 2, s_0_0, -1, 1, 0},
 /*  1 */ { 3, s_0_1, -1, 2, 0},
@@ -44,14 +58,14 @@ static struct among a_0[10] =
 /*  9 */ { 3, s_0_9, -1, 1, 0}
 };
 
-static symbol s_1_0[3] = { 'l', 'l', 'a' };
-static symbol s_1_1[2] = { 'n', 'a' };
-static symbol s_1_2[3] = { 's', 's', 'a' };
-static symbol s_1_3[2] = { 't', 'a' };
-static symbol s_1_4[3] = { 'l', 't', 'a' };
-static symbol s_1_5[3] = { 's', 't', 'a' };
+static const symbol s_1_0[3] = { 'l', 'l', 'a' };
+static const symbol s_1_1[2] = { 'n', 'a' };
+static const symbol s_1_2[3] = { 's', 's', 'a' };
+static const symbol s_1_3[2] = { 't', 'a' };
+static const symbol s_1_4[3] = { 'l', 't', 'a' };
+static const symbol s_1_5[3] = { 's', 't', 'a' };
 
-static struct among a_1[6] =
+static const struct among a_1[6] =
 {
 /*  0 */ { 3, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0},
@@ -61,14 +75,14 @@ static struct among a_1[6] =
 /*  5 */ { 3, s_1_5, 3, -1, 0}
 };
 
-static symbol s_2_0[4] = { 'l', 'l', 0xC3, 0xA4 };
-static symbol s_2_1[3] = { 'n', 0xC3, 0xA4 };
-static symbol s_2_2[4] = { 's', 's', 0xC3, 0xA4 };
-static symbol s_2_3[3] = { 't', 0xC3, 0xA4 };
-static symbol s_2_4[4] = { 'l', 't', 0xC3, 0xA4 };
-static symbol s_2_5[4] = { 's', 't', 0xC3, 0xA4 };
+static const symbol s_2_0[4] = { 'l', 'l', 0xC3, 0xA4 };
+static const symbol s_2_1[3] = { 'n', 0xC3, 0xA4 };
+static const symbol s_2_2[4] = { 's', 's', 0xC3, 0xA4 };
+static const symbol s_2_3[3] = { 't', 0xC3, 0xA4 };
+static const symbol s_2_4[4] = { 'l', 't', 0xC3, 0xA4 };
+static const symbol s_2_5[4] = { 's', 't', 0xC3, 0xA4 };
 
-static struct among a_2[6] =
+static const struct among a_2[6] =
 {
 /*  0 */ { 4, s_2_0, -1, -1, 0},
 /*  1 */ { 3, s_2_1, -1, -1, 0},
@@ -78,26 +92,26 @@ static struct among a_2[6] =
 /*  5 */ { 4, s_2_5, 3, -1, 0}
 };
 
-static symbol s_3_0[3] = { 'l', 'l', 'e' };
-static symbol s_3_1[3] = { 'i', 'n', 'e' };
+static const symbol s_3_0[3] = { 'l', 'l', 'e' };
+static const symbol s_3_1[3] = { 'i', 'n', 'e' };
 
-static struct among a_3[2] =
+static const struct among a_3[2] =
 {
 /*  0 */ { 3, s_3_0, -1, -1, 0},
 /*  1 */ { 3, s_3_1, -1, -1, 0}
 };
 
-static symbol s_4_0[3] = { 'n', 's', 'a' };
-static symbol s_4_1[3] = { 'm', 'm', 'e' };
-static symbol s_4_2[3] = { 'n', 'n', 'e' };
-static symbol s_4_3[2] = { 'n', 'i' };
-static symbol s_4_4[2] = { 's', 'i' };
-static symbol s_4_5[2] = { 'a', 'n' };
-static symbol s_4_6[2] = { 'e', 'n' };
-static symbol s_4_7[3] = { 0xC3, 0xA4, 'n' };
-static symbol s_4_8[4] = { 'n', 's', 0xC3, 0xA4 };
-
-static struct among a_4[9] =
+static const symbol s_4_0[3] = { 'n', 's', 'a' };
+static const symbol s_4_1[3] = { 'm', 'm', 'e' };
+static const symbol s_4_2[3] = { 'n', 'n', 'e' };
+static const symbol s_4_3[2] = { 'n', 'i' };
+static const symbol s_4_4[2] = { 's', 'i' };
+static const symbol s_4_5[2] = { 'a', 'n' };
+static const symbol s_4_6[2] = { 'e', 'n' };
+static const symbol s_4_7[3] = { 0xC3, 0xA4, 'n' };
+static const symbol s_4_8[4] = { 'n', 's', 0xC3, 0xA4 };
+
+static const struct among a_4[9] =
 {
 /*  0 */ { 3, s_4_0, -1, 3, 0},
 /*  1 */ { 3, s_4_1, -1, 3, 0},
@@ -110,15 +124,15 @@ static struct among a_4[9] =
 /*  8 */ { 4, s_4_8, -1, 3, 0}
 };
 
-static symbol s_5_0[2] = { 'a', 'a' };
-static symbol s_5_1[2] = { 'e', 'e' };
-static symbol s_5_2[2] = { 'i', 'i' };
-static symbol s_5_3[2] = { 'o', 'o' };
-static symbol s_5_4[2] = { 'u', 'u' };
-static symbol s_5_5[4] = { 0xC3, 0xA4, 0xC3, 0xA4 };
-static symbol s_5_6[4] = { 0xC3, 0xB6, 0xC3, 0xB6 };
+static const symbol s_5_0[2] = { 'a', 'a' };
+static const symbol s_5_1[2] = { 'e', 'e' };
+static const symbol s_5_2[2] = { 'i', 'i' };
+static const symbol s_5_3[2] = { 'o', 'o' };
+static const symbol s_5_4[2] = { 'u', 'u' };
+static const symbol s_5_5[4] = { 0xC3, 0xA4, 0xC3, 0xA4 };
+static const symbol s_5_6[4] = { 0xC3, 0xB6, 0xC3, 0xB6 };
 
-static struct among a_5[7] =
+static const struct among a_5[7] =
 {
 /*  0 */ { 2, s_5_0, -1, -1, 0},
 /*  1 */ { 2, s_5_1, -1, -1, 0},
@@ -129,38 +143,38 @@ static struct among a_5[7] =
 /*  6 */ { 4, s_5_6, -1, -1, 0}
 };
 
-static symbol s_6_0[1] = { 'a' };
-static symbol s_6_1[3] = { 'l', 'l', 'a' };
-static symbol s_6_2[2] = { 'n', 'a' };
-static symbol s_6_3[3] = { 's', 's', 'a' };
-static symbol s_6_4[2] = { 't', 'a' };
-static symbol s_6_5[3] = { 'l', 't', 'a' };
-static symbol s_6_6[3] = { 's', 't', 'a' };
-static symbol s_6_7[3] = { 't', 't', 'a' };
-static symbol s_6_8[3] = { 'l', 'l', 'e' };
-static symbol s_6_9[3] = { 'i', 'n', 'e' };
-static symbol s_6_10[3] = { 'k', 's', 'i' };
-static symbol s_6_11[1] = { 'n' };
-static symbol s_6_12[3] = { 'h', 'a', 'n' };
-static symbol s_6_13[3] = { 'd', 'e', 'n' };
-static symbol s_6_14[4] = { 's', 'e', 'e', 'n' };
-static symbol s_6_15[3] = { 'h', 'e', 'n' };
-static symbol s_6_16[4] = { 't', 't', 'e', 'n' };
-static symbol s_6_17[3] = { 'h', 'i', 'n' };
-static symbol s_6_18[4] = { 's', 'i', 'i', 'n' };
-static symbol s_6_19[3] = { 'h', 'o', 'n' };
-static symbol s_6_20[4] = { 'h', 0xC3, 0xA4, 'n' };
-static symbol s_6_21[4] = { 'h', 0xC3, 0xB6, 'n' };
-static symbol s_6_22[2] = { 0xC3, 0xA4 };
-static symbol s_6_23[4] = { 'l', 'l', 0xC3, 0xA4 };
-static symbol s_6_24[3] = { 'n', 0xC3, 0xA4 };
-static symbol s_6_25[4] = { 's', 's', 0xC3, 0xA4 };
-static symbol s_6_26[3] = { 't', 0xC3, 0xA4 };
-static symbol s_6_27[4] = { 'l', 't', 0xC3, 0xA4 };
-static symbol s_6_28[4] = { 's', 't', 0xC3, 0xA4 };
-static symbol s_6_29[4] = { 't', 't', 0xC3, 0xA4 };
-
-static struct among a_6[30] =
+static const symbol s_6_0[1] = { 'a' };
+static const symbol s_6_1[3] = { 'l', 'l', 'a' };
+static const symbol s_6_2[2] = { 'n', 'a' };
+static const symbol s_6_3[3] = { 's', 's', 'a' };
+static const symbol s_6_4[2] = { 't', 'a' };
+static const symbol s_6_5[3] = { 'l', 't', 'a' };
+static const symbol s_6_6[3] = { 's', 't', 'a' };
+static const symbol s_6_7[3] = { 't', 't', 'a' };
+static const symbol s_6_8[3] = { 'l', 'l', 'e' };
+static const symbol s_6_9[3] = { 'i', 'n', 'e' };
+static const symbol s_6_10[3] = { 'k', 's', 'i' };
+static const symbol s_6_11[1] = { 'n' };
+static const symbol s_6_12[3] = { 'h', 'a', 'n' };
+static const symbol s_6_13[3] = { 'd', 'e', 'n' };
+static const symbol s_6_14[4] = { 's', 'e', 'e', 'n' };
+static const symbol s_6_15[3] = { 'h', 'e', 'n' };
+static const symbol s_6_16[4] = { 't', 't', 'e', 'n' };
+static const symbol s_6_17[3] = { 'h', 'i', 'n' };
+static const symbol s_6_18[4] = { 's', 'i', 'i', 'n' };
+static const symbol s_6_19[3] = { 'h', 'o', 'n' };
+static const symbol s_6_20[4] = { 'h', 0xC3, 0xA4, 'n' };
+static const symbol s_6_21[4] = { 'h', 0xC3, 0xB6, 'n' };
+static const symbol s_6_22[2] = { 0xC3, 0xA4 };
+static const symbol s_6_23[4] = { 'l', 'l', 0xC3, 0xA4 };
+static const symbol s_6_24[3] = { 'n', 0xC3, 0xA4 };
+static const symbol s_6_25[4] = { 's', 's', 0xC3, 0xA4 };
+static const symbol s_6_26[3] = { 't', 0xC3, 0xA4 };
+static const symbol s_6_27[4] = { 'l', 't', 0xC3, 0xA4 };
+static const symbol s_6_28[4] = { 's', 't', 0xC3, 0xA4 };
+static const symbol s_6_29[4] = { 't', 't', 0xC3, 0xA4 };
+
+static const struct among a_6[30] =
 {
 /*  0 */ { 1, s_6_0, -1, 8, 0},
 /*  1 */ { 3, s_6_1, 0, -1, 0},
@@ -194,22 +208,22 @@ static struct among a_6[30] =
 /* 29 */ { 4, s_6_29, 26, 9, 0}
 };
 
-static symbol s_7_0[3] = { 'e', 'j', 'a' };
-static symbol s_7_1[3] = { 'm', 'm', 'a' };
-static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' };
-static symbol s_7_3[3] = { 'm', 'p', 'a' };
-static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' };
-static symbol s_7_5[3] = { 'm', 'm', 'i' };
-static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' };
-static symbol s_7_7[3] = { 'm', 'p', 'i' };
-static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' };
-static symbol s_7_9[4] = { 'e', 'j', 0xC3, 0xA4 };
-static symbol s_7_10[4] = { 'm', 'm', 0xC3, 0xA4 };
-static symbol s_7_11[5] = { 'i', 'm', 'm', 0xC3, 0xA4 };
-static symbol s_7_12[4] = { 'm', 'p', 0xC3, 0xA4 };
-static symbol s_7_13[5] = { 'i', 'm', 'p', 0xC3, 0xA4 };
-
-static struct among a_7[14] =
+static const symbol s_7_0[3] = { 'e', 'j', 'a' };
+static const symbol s_7_1[3] = { 'm', 'm', 'a' };
+static const symbol s_7_2[4] = { 'i', 'm', 'm', 'a' };
+static const symbol s_7_3[3] = { 'm', 'p', 'a' };
+static const symbol s_7_4[4] = { 'i', 'm', 'p', 'a' };
+static const symbol s_7_5[3] = { 'm', 'm', 'i' };
+static const symbol s_7_6[4] = { 'i', 'm', 'm', 'i' };
+static const symbol s_7_7[3] = { 'm', 'p', 'i' };
+static const symbol s_7_8[4] = { 'i', 'm', 'p', 'i' };
+static const symbol s_7_9[4] = { 'e', 'j', 0xC3, 0xA4 };
+static const symbol s_7_10[4] = { 'm', 'm', 0xC3, 0xA4 };
+static const symbol s_7_11[5] = { 'i', 'm', 'm', 0xC3, 0xA4 };
+static const symbol s_7_12[4] = { 'm', 'p', 0xC3, 0xA4 };
+static const symbol s_7_13[5] = { 'i', 'm', 'p', 0xC3, 0xA4 };
+
+static const struct among a_7[14] =
 {
 /*  0 */ { 3, s_7_0, -1, -1, 0},
 /*  1 */ { 3, s_7_1, -1, 1, 0},
@@ -227,98 +241,68 @@ static struct among a_7[14] =
 /* 13 */ { 5, s_7_13, 12, -1, 0}
 };
 
-static symbol s_8_0[1] = { 'i' };
-static symbol s_8_1[1] = { 'j' };
+static const symbol s_8_0[1] = { 'i' };
+static const symbol s_8_1[1] = { 'j' };
 
-static struct among a_8[2] =
+static const struct among a_8[2] =
 {
 /*  0 */ { 1, s_8_0, -1, -1, 0},
 /*  1 */ { 1, s_8_1, -1, -1, 0}
 };
 
-static symbol s_9_0[3] = { 'm', 'm', 'a' };
-static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' };
+static const symbol s_9_0[3] = { 'm', 'm', 'a' };
+static const symbol s_9_1[4] = { 'i', 'm', 'm', 'a' };
 
-static struct among a_9[2] =
+static const struct among a_9[2] =
 {
 /*  0 */ { 3, s_9_0, -1, 1, 0},
 /*  1 */ { 4, s_9_1, 0, -1, 0}
 };
 
-static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 };
-
-static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
-
-static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
-
-static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
-
-static symbol s_0[] = { 'k' };
-static symbol s_1[] = { 'k', 's', 'e' };
-static symbol s_2[] = { 'k', 's', 'i' };
-static symbol s_3[] = { 'i' };
-static symbol s_4[] = { 'a' };
-static symbol s_5[] = { 'e' };
-static symbol s_6[] = { 'i' };
-static symbol s_7[] = { 'o' };
-static symbol s_8[] = { 0xC3, 0xA4 };
-static symbol s_9[] = { 0xC3, 0xB6 };
-static symbol s_10[] = { 'i', 'e' };
-static symbol s_11[] = { 'e' };
-static symbol s_12[] = { 'p', 'o' };
-static symbol s_13[] = { 't' };
-static symbol s_14[] = { 'p', 'o' };
-static symbol s_15[] = { 'j' };
-static symbol s_16[] = { 'o' };
-static symbol s_17[] = { 'u' };
-static symbol s_18[] = { 'o' };
-static symbol s_19[] = { 'j' };
+static const unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 };
+
+static const unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
+
+static const unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
+
+static const unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };
+
+static const symbol s_0[] = { 'k' };
+static const symbol s_1[] = { 'k', 's', 'e' };
+static const symbol s_2[] = { 'k', 's', 'i' };
+static const symbol s_3[] = { 'i' };
+static const symbol s_4[] = { 'a' };
+static const symbol s_5[] = { 'e' };
+static const symbol s_6[] = { 'i' };
+static const symbol s_7[] = { 'o' };
+static const symbol s_8[] = { 0xC3, 0xA4 };
+static const symbol s_9[] = { 0xC3, 0xB6 };
+static const symbol s_10[] = { 'i', 'e' };
+static const symbol s_11[] = { 'e' };
+static const symbol s_12[] = { 'p', 'o' };
+static const symbol s_13[] = { 't' };
+static const symbol s_14[] = { 'p', 'o' };
+static const symbol s_15[] = { 'j' };
+static const symbol s_16[] = { 'o' };
+static const symbol s_17[] = { 'u' };
+static const symbol s_18[] = { 'o' };
+static const symbol s_19[] = { 'j' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    while(1) { /* goto, line 46 */
-        int c = z->c;
-        if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* goto, line 46 */
-        }
-    }
-    while(1) { /* gopast, line 46 */
-        if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab1;
-        break;
-    lab1:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 46 */
-        }
+    if (out_grouping_U(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 46 */
+    {    /* gopast */ /* non V1, line 46 */
+        int ret = in_grouping_U(z, g_V1, 97, 246, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 46 */
-    while(1) { /* goto, line 47 */
-        int c = z->c;
-        if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab2;
-        z->c = c;
-        break;
-    lab2:
-        z->c = c;
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* goto, line 47 */
-        }
-    }
-    while(1) { /* gopast, line 47 */
-        if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab3;
-        break;
-    lab3:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 47 */
-        }
+    if (out_grouping_U(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 47 */
+    {    /* gopast */ /* non V1, line 47 */
+        int ret = in_grouping_U(z, g_V1, 97, 246, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[1] = z->c; /* setmark p2, line 47 */
     return 1;
@@ -331,22 +315,22 @@ static int r_R2(struct SN_env * z) {
 
 static int r_particle_etc(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 55 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 55 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 55 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 55 */
         among_var = find_among_b(z, a_0, 10); /* substring, line 55 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 55 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            if (!(in_grouping_b_U(z, g_particle_end, 97, 246))) return 0;
+            if (in_grouping_b_U(z, g_particle_end, 97, 246, 0)) return 0;
             break;
         case 2:
             {   int ret = r_R2(z);
@@ -355,8 +339,7 @@ static int r_particle_etc(struct SN_env * z) {
             }
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 66 */
+    {   int ret = slice_del(z); /* delete, line 66 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -364,69 +347,65 @@ static int r_particle_etc(struct SN_env * z) {
 
 static int r_possessive(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 69 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 69 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 69 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 69 */
         among_var = find_among_b(z, a_4, 9); /* substring, line 69 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 69 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* not, line 72 */
+            {   int m2 = z->l - z->c; (void)m2; /* not, line 72 */
                 if (!(eq_s_b(z, 1, s_0))) goto lab0;
                 return 0;
             lab0:
-                z->c = z->l - m;
+                z->c = z->l - m2;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 72 */
+            {   int ret = slice_del(z); /* delete, line 72 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 74 */
+            {   int ret = slice_del(z); /* delete, line 74 */
                 if (ret < 0) return ret;
             }
             z->ket = z->c; /* [, line 74 */
             if (!(eq_s_b(z, 3, s_1))) return 0;
             z->bra = z->c; /* ], line 74 */
-            {   int ret;
-                ret = slice_from_s(z, 3, s_2); /* <-, line 74 */
+            {   int ret = slice_from_s(z, 3, s_2); /* <-, line 74 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 78 */
+            {   int ret = slice_del(z); /* delete, line 78 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] != 97) return 0;
             if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 81 */
+            {   int ret = slice_del(z); /* delete, line 81 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
+            if (z->c - 2 <= z->lb || z->p[z->c - 1] != 164) return 0;
             if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 84 */
+            {   int ret = slice_del(z); /* delete, line 84 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
+            if (z->c - 2 <= z->lb || z->p[z->c - 1] != 101) return 0;
             if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 86 */
+            {   int ret = slice_del(z); /* delete, line 86 */
                 if (ret < 0) return ret;
             }
             break;
@@ -441,23 +420,23 @@ static int r_LONG(struct SN_env * z) {
 
 static int r_VI(struct SN_env * z) {
     if (!(eq_s_b(z, 1, s_3))) return 0;
-    if (!(in_grouping_b_U(z, g_V2, 97, 246))) return 0;
+    if (in_grouping_b_U(z, g_V2, 97, 246, 0)) return 0;
     return 1;
 }
 
 static int r_case_ending(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 96 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 96 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 96 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 96 */
         among_var = find_among_b(z, a_6, 30); /* substring, line 96 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 96 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
@@ -480,23 +459,23 @@ static int r_case_ending(struct SN_env * z) {
             if (!(eq_s_b(z, 2, s_9))) return 0;
             break;
         case 7:
-            {   int m = z->l - z->c; (void) m; /* try, line 111 */
-                {   int m = z->l - z->c; (void) m; /* and, line 113 */
-                    {   int m = z->l - z->c; (void) m; /* or, line 112 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
+                {   int m2 = z->l - z->c; (void)m2; /* and, line 113 */
+                    {   int m3 = z->l - z->c; (void)m3; /* or, line 112 */
                         {   int ret = r_LONG(z);
                             if (ret == 0) goto lab2; /* call LONG, line 111 */
                             if (ret < 0) return ret;
                         }
                         goto lab1;
                     lab2:
-                        z->c = z->l - m;
-                        if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; }
+                        z->c = z->l - m3;
+                        if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m_keep; goto lab0; }
                     }
                 lab1:
-                    z->c = z->l - m;
-                    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                        if (c < 0) { z->c = z->l - m; goto lab0; }
-                        z->c = c; /* next, line 113 */
+                    z->c = z->l - m2;
+                    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                        if (ret < 0) { z->c = z->l - m_keep; goto lab0; }
+                        z->c = ret; /* next, line 113 */
                     }
                 }
                 z->bra = z->c; /* ], line 113 */
@@ -505,15 +484,14 @@ static int r_case_ending(struct SN_env * z) {
             }
             break;
         case 8:
-            if (!(in_grouping_b_U(z, g_V1, 97, 246))) return 0;
-            if (!(out_grouping_b_U(z, g_V1, 97, 246))) return 0;
+            if (in_grouping_b_U(z, g_V1, 97, 246, 0)) return 0;
+            if (out_grouping_b_U(z, g_V1, 97, 246, 0)) return 0;
             break;
         case 9:
             if (!(eq_s_b(z, 1, s_11))) return 0;
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 138 */
+    {   int ret = slice_del(z); /* delete, line 138 */
         if (ret < 0) return ret;
     }
     z->B[0] = 1; /* set ending_removed, line 139 */
@@ -522,50 +500,49 @@ static int r_case_ending(struct SN_env * z) {
 
 static int r_other_endings(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 142 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 142 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[1]) return 0;
         z->c = z->I[1]; /* tomark, line 142 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 142 */
         among_var = find_among_b(z, a_7, 14); /* substring, line 142 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 142 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* not, line 146 */
+            {   int m2 = z->l - z->c; (void)m2; /* not, line 146 */
                 if (!(eq_s_b(z, 2, s_12))) goto lab0;
                 return 0;
             lab0:
-                z->c = z->l - m;
+                z->c = z->l - m2;
             }
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 151 */
+    {   int ret = slice_del(z); /* delete, line 151 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 static int r_i_plural(struct SN_env * z) {
-    {   int m3; /* setlimit, line 154 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 154 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 154 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 154 */
-        if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */
+        if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 106)) { z->lb = mlimit; return 0; }
+        if (!(find_among_b(z, a_8, 2))) { z->lb = mlimit; return 0; } /* substring, line 154 */
         z->bra = z->c; /* ], line 154 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 158 */
+    {   int ret = slice_del(z); /* delete, line 158 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -573,230 +550,213 @@ static int r_i_plural(struct SN_env * z) {
 
 static int r_t_plural(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 161 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 161 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 161 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 162 */
-        if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; }
+        if (!(eq_s_b(z, 1, s_13))) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 162 */
         {   int m_test = z->l - z->c; /* test, line 162 */
-            if (!(in_grouping_b_U(z, g_V1, 97, 246))) { z->lb = m3; return 0; }
+            if (in_grouping_b_U(z, g_V1, 97, 246, 0)) { z->lb = mlimit; return 0; }
             z->c = z->l - m_test;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 163 */
+        {   int ret = slice_del(z); /* delete, line 163 */
             if (ret < 0) return ret;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
-    {   int m3; /* setlimit, line 165 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 165 */
+        int m2 = z->l - z->c; (void)m2;
         if (z->c < z->I[1]) return 0;
         z->c = z->I[1]; /* tomark, line 165 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m2;
         z->ket = z->c; /* [, line 165 */
+        if (z->c - 2 <= z->lb || z->p[z->c - 1] != 97) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_9, 2); /* substring, line 165 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 165 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* not, line 167 */
+            {   int m3 = z->l - z->c; (void)m3; /* not, line 167 */
                 if (!(eq_s_b(z, 2, s_14))) goto lab0;
                 return 0;
             lab0:
-                z->c = z->l - m;
+                z->c = z->l - m3;
             }
             break;
     }
-    {   int ret;
-        ret = slice_del(z); /* delete, line 170 */
+    {   int ret = slice_del(z); /* delete, line 170 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 static int r_tidy(struct SN_env * z) {
-    {   int m3; /* setlimit, line 173 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 173 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 173 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* do, line 174 */
-            {   int m = z->l - z->c; (void) m; /* and, line 174 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* do, line 174 */
+            {   int m3 = z->l - z->c; (void)m3; /* and, line 174 */
                 {   int ret = r_LONG(z);
                     if (ret == 0) goto lab0; /* call LONG, line 174 */
                     if (ret < 0) return ret;
                 }
-                z->c = z->l - m;
+                z->c = z->l - m3;
                 z->ket = z->c; /* [, line 174 */
-                {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 174 */
+                {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 174 */
                 }
                 z->bra = z->c; /* ], line 174 */
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 174 */
+                {   int ret = slice_del(z); /* delete, line 174 */
                     if (ret < 0) return ret;
                 }
             }
         lab0:
-            z->c = z->l - m;
+            z->c = z->l - m2;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 175 */
+        {   int m4 = z->l - z->c; (void)m4; /* do, line 175 */
             z->ket = z->c; /* [, line 175 */
-            if (!(in_grouping_b_U(z, g_AEI, 97, 228))) goto lab1;
+            if (in_grouping_b_U(z, g_AEI, 97, 228, 0)) goto lab1;
             z->bra = z->c; /* ], line 175 */
-            if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab1;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 175 */
+            if (out_grouping_b_U(z, g_V1, 97, 246, 0)) goto lab1;
+            {   int ret = slice_del(z); /* delete, line 175 */
                 if (ret < 0) return ret;
             }
         lab1:
-            z->c = z->l - m;
+            z->c = z->l - m4;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 176 */
+        {   int m5 = z->l - z->c; (void)m5; /* do, line 176 */
             z->ket = z->c; /* [, line 176 */
             if (!(eq_s_b(z, 1, s_15))) goto lab2;
             z->bra = z->c; /* ], line 176 */
-            {   int m = z->l - z->c; (void) m; /* or, line 176 */
+            {   int m6 = z->l - z->c; (void)m6; /* or, line 176 */
                 if (!(eq_s_b(z, 1, s_16))) goto lab4;
                 goto lab3;
             lab4:
-                z->c = z->l - m;
+                z->c = z->l - m6;
                 if (!(eq_s_b(z, 1, s_17))) goto lab2;
             }
         lab3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 176 */
+            {   int ret = slice_del(z); /* delete, line 176 */
                 if (ret < 0) return ret;
             }
         lab2:
-            z->c = z->l - m;
+            z->c = z->l - m5;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 177 */
+        {   int m7 = z->l - z->c; (void)m7; /* do, line 177 */
             z->ket = z->c; /* [, line 177 */
             if (!(eq_s_b(z, 1, s_18))) goto lab5;
             z->bra = z->c; /* ], line 177 */
             if (!(eq_s_b(z, 1, s_19))) goto lab5;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 177 */
+            {   int ret = slice_del(z); /* delete, line 177 */
                 if (ret < 0) return ret;
             }
         lab5:
-            z->c = z->l - m;
-        }
-        z->lb = m3;
-    }
-    while(1) { /* goto, line 179 */
-        int m = z->l - z->c; (void) m;
-        if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab6;
-        z->c = z->l - m;
-        break;
-    lab6:
-        z->c = z->l - m;
-        {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-            if (c < 0) return 0;
-            z->c = c; /* goto, line 179 */
+            z->c = z->l - m7;
         }
+        z->lb = mlimit;
     }
+    if (in_grouping_b_U(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* non V1, line 179 */
     z->ket = z->c; /* [, line 179 */
-    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-        if (c < 0) return 0;
-        z->c = c; /* next, line 179 */
+    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+        if (ret < 0) return 0;
+        z->c = ret; /* next, line 179 */
     }
     z->bra = z->c; /* ], line 179 */
     z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */
     if (z->S[0] == 0) return -1; /* -> x, line 179 */
     if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 179 */
+    {   int ret = slice_del(z); /* delete, line 179 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 extern int finnish_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 185 */
+    {   int c1 = z->c; /* do, line 185 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 185 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->B[0] = 0; /* unset ending_removed, line 186 */
     z->lb = z->c; z->c = z->l; /* backwards, line 187 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 188 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 188 */
         {   int ret = r_particle_etc(z);
             if (ret == 0) goto lab1; /* call particle_etc, line 188 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 189 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 189 */
         {   int ret = r_possessive(z);
             if (ret == 0) goto lab2; /* call possessive, line 189 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 190 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 190 */
         {   int ret = r_case_ending(z);
             if (ret == 0) goto lab3; /* call case_ending, line 190 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 191 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 191 */
         {   int ret = r_other_endings(z);
             if (ret == 0) goto lab4; /* call other_endings, line 191 */
             if (ret < 0) return ret;
         }
     lab4:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
-    {   int m = z->l - z->c; (void) m; /* or, line 192 */
+    {   int m6 = z->l - z->c; (void)m6; /* or, line 192 */
         if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */
-        {   int m = z->l - z->c; (void) m; /* do, line 192 */
+        {   int m7 = z->l - z->c; (void)m7; /* do, line 192 */
             {   int ret = r_i_plural(z);
                 if (ret == 0) goto lab7; /* call i_plural, line 192 */
                 if (ret < 0) return ret;
             }
         lab7:
-            z->c = z->l - m;
+            z->c = z->l - m7;
         }
         goto lab5;
     lab6:
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* do, line 192 */
+        z->c = z->l - m6;
+        {   int m8 = z->l - z->c; (void)m8; /* do, line 192 */
             {   int ret = r_t_plural(z);
                 if (ret == 0) goto lab8; /* call t_plural, line 192 */
                 if (ret < 0) return ret;
             }
         lab8:
-            z->c = z->l - m;
+            z->c = z->l - m8;
         }
     }
 lab5:
-    {   int m = z->l - z->c; (void) m; /* do, line 193 */
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 193 */
         {   int ret = r_tidy(z);
             if (ret == 0) goto lab9; /* call tidy, line 193 */
             if (ret < 0) return ret;
         }
     lab9:
-        z->c = z->l - m;
+        z->c = z->l - m9;
     }
     z->c = z->lb;
     return 1;
@@ -804,5 +764,5 @@ lab5:
 
 extern struct SN_env * finnish_UTF_8_create_env(void) { return SN_create_env(1, 2, 1); }
 
-extern void finnish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void finnish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 1); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_french.c b/libstemmer_c/src_c/stem_UTF_8_french.c
index 1f95c7c..55b5fbf 100644
--- a/libstemmer_c/src_c/stem_UTF_8_french.c
+++ b/libstemmer_c/src_c/stem_UTF_8_french.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int french_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_un_accent(struct SN_env * z);
 static int r_un_double(struct SN_env * z);
 static int r_residual_suffix(struct SN_env * z);
@@ -16,454 +22,468 @@ static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * french_UTF_8_create_env(void);
 extern void french_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 'I' };
-static symbol s_0_2[1] = { 'U' };
-static symbol s_0_3[1] = { 'Y' };
 
-static struct among a_0[4] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[3] = { 'c', 'o', 'l' };
+static const symbol s_0_1[3] = { 'p', 'a', 'r' };
+static const symbol s_0_2[3] = { 't', 'a', 'p' };
+
+static const struct among a_0[3] =
 {
-/*  0 */ { 0, 0, -1, 4, 0},
-/*  1 */ { 1, s_0_1, 0, 1, 0},
-/*  2 */ { 1, s_0_2, 0, 2, 0},
-/*  3 */ { 1, s_0_3, 0, 3, 0}
+/*  0 */ { 3, s_0_0, -1, -1, 0},
+/*  1 */ { 3, s_0_1, -1, -1, 0},
+/*  2 */ { 3, s_0_2, -1, -1, 0}
 };
 
-static symbol s_1_0[3] = { 'i', 'q', 'U' };
-static symbol s_1_1[3] = { 'a', 'b', 'l' };
-static symbol s_1_2[4] = { 'I', 0xC3, 0xA8, 'r' };
-static symbol s_1_3[4] = { 'i', 0xC3, 0xA8, 'r' };
-static symbol s_1_4[3] = { 'e', 'u', 's' };
-static symbol s_1_5[2] = { 'i', 'v' };
+static const symbol s_1_1[1] = { 'I' };
+static const symbol s_1_2[1] = { 'U' };
+static const symbol s_1_3[1] = { 'Y' };
 
-static struct among a_1[6] =
+static const struct among a_1[4] =
 {
-/*  0 */ { 3, s_1_0, -1, 3, 0},
-/*  1 */ { 3, s_1_1, -1, 3, 0},
-/*  2 */ { 4, s_1_2, -1, 4, 0},
-/*  3 */ { 4, s_1_3, -1, 4, 0},
-/*  4 */ { 3, s_1_4, -1, 2, 0},
-/*  5 */ { 2, s_1_5, -1, 1, 0}
+/*  0 */ { 0, 0, -1, 4, 0},
+/*  1 */ { 1, s_1_1, 0, 1, 0},
+/*  2 */ { 1, s_1_2, 0, 2, 0},
+/*  3 */ { 1, s_1_3, 0, 3, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'c' };
-static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_2_2[2] = { 'i', 'v' };
+static const symbol s_2_0[3] = { 'i', 'q', 'U' };
+static const symbol s_2_1[3] = { 'a', 'b', 'l' };
+static const symbol s_2_2[4] = { 'I', 0xC3, 0xA8, 'r' };
+static const symbol s_2_3[4] = { 'i', 0xC3, 0xA8, 'r' };
+static const symbol s_2_4[3] = { 'e', 'u', 's' };
+static const symbol s_2_5[2] = { 'i', 'v' };
 
-static struct among a_2[3] =
+static const struct among a_2[6] =
 {
-/*  0 */ { 2, s_2_0, -1, 2, 0},
-/*  1 */ { 4, s_2_1, -1, 1, 0},
-/*  2 */ { 2, s_2_2, -1, 3, 0}
+/*  0 */ { 3, s_2_0, -1, 3, 0},
+/*  1 */ { 3, s_2_1, -1, 3, 0},
+/*  2 */ { 4, s_2_2, -1, 4, 0},
+/*  3 */ { 4, s_2_3, -1, 4, 0},
+/*  4 */ { 3, s_2_4, -1, 2, 0},
+/*  5 */ { 2, s_2_5, -1, 1, 0}
 };
 
-static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' };
-static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
-static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' };
-static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' };
-static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' };
-static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_3_6[4] = { 'i', 's', 'm', 'e' };
-static symbol s_3_7[4] = { 'e', 'u', 's', 'e' };
-static symbol s_3_8[4] = { 'i', 's', 't', 'e' };
-static symbol s_3_9[3] = { 'i', 'v', 'e' };
-static symbol s_3_10[2] = { 'i', 'f' };
-static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' };
-static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' };
-static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' };
-static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' };
-static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' };
-static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' };
-static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' };
-static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' };
-static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' };
-static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' };
-static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' };
-static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' };
-static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' };
-static symbol s_3_24[4] = { 'i', 'v', 'e', 's' };
-static symbol s_3_25[3] = { 'i', 'f', 's' };
-static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' };
-static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' };
-static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' };
-static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' };
-static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' };
-static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' };
-static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' };
-static symbol s_3_33[5] = { 'i', 't', 0xC3, 0xA9, 's' };
-static symbol s_3_34[4] = { 'm', 'e', 'n', 't' };
-static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' };
-static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' };
-static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' };
-static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' };
-static symbol s_3_39[3] = { 'a', 'u', 'x' };
-static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' };
-static symbol s_3_41[3] = { 'e', 'u', 'x' };
-static symbol s_3_42[4] = { 'i', 't', 0xC3, 0xA9 };
+static const symbol s_3_0[2] = { 'i', 'c' };
+static const symbol s_3_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_3_2[2] = { 'i', 'v' };
 
-static struct among a_3[43] =
+static const struct among a_3[3] =
 {
-/*  0 */ { 4, s_3_0, -1, 1, 0},
-/*  1 */ { 6, s_3_1, -1, 2, 0},
-/*  2 */ { 4, s_3_2, -1, 1, 0},
-/*  3 */ { 4, s_3_3, -1, 5, 0},
-/*  4 */ { 5, s_3_4, -1, 3, 0},
-/*  5 */ { 4, s_3_5, -1, 1, 0},
-/*  6 */ { 4, s_3_6, -1, 1, 0},
-/*  7 */ { 4, s_3_7, -1, 11, 0},
-/*  8 */ { 4, s_3_8, -1, 1, 0},
-/*  9 */ { 3, s_3_9, -1, 8, 0},
-/* 10 */ { 2, s_3_10, -1, 8, 0},
-/* 11 */ { 5, s_3_11, -1, 4, 0},
-/* 12 */ { 5, s_3_12, -1, 2, 0},
-/* 13 */ { 5, s_3_13, -1, 4, 0},
-/* 14 */ { 5, s_3_14, -1, 2, 0},
-/* 15 */ { 5, s_3_15, -1, 1, 0},
-/* 16 */ { 7, s_3_16, -1, 2, 0},
-/* 17 */ { 5, s_3_17, -1, 1, 0},
-/* 18 */ { 5, s_3_18, -1, 5, 0},
-/* 19 */ { 6, s_3_19, -1, 3, 0},
-/* 20 */ { 5, s_3_20, -1, 1, 0},
-/* 21 */ { 5, s_3_21, -1, 1, 0},
-/* 22 */ { 5, s_3_22, -1, 11, 0},
-/* 23 */ { 5, s_3_23, -1, 1, 0},
-/* 24 */ { 4, s_3_24, -1, 8, 0},
-/* 25 */ { 3, s_3_25, -1, 8, 0},
-/* 26 */ { 6, s_3_26, -1, 4, 0},
-/* 27 */ { 6, s_3_27, -1, 2, 0},
-/* 28 */ { 6, s_3_28, -1, 4, 0},
-/* 29 */ { 6, s_3_29, -1, 2, 0},
-/* 30 */ { 5, s_3_30, -1, 15, 0},
-/* 31 */ { 6, s_3_31, 30, 6, 0},
-/* 32 */ { 9, s_3_32, 31, 12, 0},
-/* 33 */ { 5, s_3_33, -1, 7, 0},
-/* 34 */ { 4, s_3_34, -1, 15, 0},
-/* 35 */ { 5, s_3_35, 34, 6, 0},
-/* 36 */ { 8, s_3_36, 35, 12, 0},
-/* 37 */ { 6, s_3_37, 34, 13, 0},
-/* 38 */ { 6, s_3_38, 34, 14, 0},
-/* 39 */ { 3, s_3_39, -1, 10, 0},
-/* 40 */ { 4, s_3_40, 39, 9, 0},
-/* 41 */ { 3, s_3_41, -1, 1, 0},
-/* 42 */ { 4, s_3_42, -1, 7, 0}
+/*  0 */ { 2, s_3_0, -1, 2, 0},
+/*  1 */ { 4, s_3_1, -1, 1, 0},
+/*  2 */ { 2, s_3_2, -1, 3, 0}
 };
 
-static symbol s_4_0[3] = { 'i', 'r', 'a' };
-static symbol s_4_1[2] = { 'i', 'e' };
-static symbol s_4_2[4] = { 'i', 's', 's', 'e' };
-static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' };
-static symbol s_4_4[1] = { 'i' };
-static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' };
-static symbol s_4_6[2] = { 'i', 'r' };
-static symbol s_4_7[4] = { 'i', 'r', 'a', 's' };
-static symbol s_4_8[3] = { 'i', 'e', 's' };
-static symbol s_4_9[5] = { 0xC3, 0xAE, 'm', 'e', 's' };
-static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' };
-static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' };
-static symbol s_4_12[5] = { 0xC3, 0xAE, 't', 'e', 's' };
-static symbol s_4_13[2] = { 'i', 's' };
-static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' };
-static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' };
-static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' };
-static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' };
-static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' };
-static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' };
-static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' };
-static symbol s_4_21[2] = { 'i', 't' };
-static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' };
-static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' };
-static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' };
-static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' };
-static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' };
-static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' };
-static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' };
-static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' };
-static symbol s_4_30[3] = { 0xC3, 0xAE, 't' };
-static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' };
-static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' };
-static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' };
-static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' };
+static const symbol s_4_0[4] = { 'i', 'q', 'U', 'e' };
+static const symbol s_4_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
+static const symbol s_4_2[4] = { 'a', 'n', 'c', 'e' };
+static const symbol s_4_3[4] = { 'e', 'n', 'c', 'e' };
+static const symbol s_4_4[5] = { 'l', 'o', 'g', 'i', 'e' };
+static const symbol s_4_5[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_4_6[4] = { 'i', 's', 'm', 'e' };
+static const symbol s_4_7[4] = { 'e', 'u', 's', 'e' };
+static const symbol s_4_8[4] = { 'i', 's', 't', 'e' };
+static const symbol s_4_9[3] = { 'i', 'v', 'e' };
+static const symbol s_4_10[2] = { 'i', 'f' };
+static const symbol s_4_11[5] = { 'u', 's', 'i', 'o', 'n' };
+static const symbol s_4_12[5] = { 'a', 't', 'i', 'o', 'n' };
+static const symbol s_4_13[5] = { 'u', 't', 'i', 'o', 'n' };
+static const symbol s_4_14[5] = { 'a', 't', 'e', 'u', 'r' };
+static const symbol s_4_15[5] = { 'i', 'q', 'U', 'e', 's' };
+static const symbol s_4_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' };
+static const symbol s_4_17[5] = { 'a', 'n', 'c', 'e', 's' };
+static const symbol s_4_18[5] = { 'e', 'n', 'c', 'e', 's' };
+static const symbol s_4_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' };
+static const symbol s_4_20[5] = { 'a', 'b', 'l', 'e', 's' };
+static const symbol s_4_21[5] = { 'i', 's', 'm', 'e', 's' };
+static const symbol s_4_22[5] = { 'e', 'u', 's', 'e', 's' };
+static const symbol s_4_23[5] = { 'i', 's', 't', 'e', 's' };
+static const symbol s_4_24[4] = { 'i', 'v', 'e', 's' };
+static const symbol s_4_25[3] = { 'i', 'f', 's' };
+static const symbol s_4_26[6] = { 'u', 's', 'i', 'o', 'n', 's' };
+static const symbol s_4_27[6] = { 'a', 't', 'i', 'o', 'n', 's' };
+static const symbol s_4_28[6] = { 'u', 't', 'i', 'o', 'n', 's' };
+static const symbol s_4_29[6] = { 'a', 't', 'e', 'u', 'r', 's' };
+static const symbol s_4_30[5] = { 'm', 'e', 'n', 't', 's' };
+static const symbol s_4_31[6] = { 'e', 'm', 'e', 'n', 't', 's' };
+static const symbol s_4_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' };
+static const symbol s_4_33[5] = { 'i', 't', 0xC3, 0xA9, 's' };
+static const symbol s_4_34[4] = { 'm', 'e', 'n', 't' };
+static const symbol s_4_35[5] = { 'e', 'm', 'e', 'n', 't' };
+static const symbol s_4_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' };
+static const symbol s_4_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' };
+static const symbol s_4_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' };
+static const symbol s_4_39[3] = { 'a', 'u', 'x' };
+static const symbol s_4_40[4] = { 'e', 'a', 'u', 'x' };
+static const symbol s_4_41[3] = { 'e', 'u', 'x' };
+static const symbol s_4_42[4] = { 'i', 't', 0xC3, 0xA9 };
 
-static struct among a_4[35] =
+static const struct among a_4[43] =
 {
-/*  0 */ { 3, s_4_0, -1, 1, 0},
-/*  1 */ { 2, s_4_1, -1, 1, 0},
+/*  0 */ { 4, s_4_0, -1, 1, 0},
+/*  1 */ { 6, s_4_1, -1, 2, 0},
 /*  2 */ { 4, s_4_2, -1, 1, 0},
-/*  3 */ { 7, s_4_3, -1, 1, 0},
-/*  4 */ { 1, s_4_4, -1, 1, 0},
-/*  5 */ { 4, s_4_5, 4, 1, 0},
-/*  6 */ { 2, s_4_6, -1, 1, 0},
-/*  7 */ { 4, s_4_7, -1, 1, 0},
-/*  8 */ { 3, s_4_8, -1, 1, 0},
-/*  9 */ { 5, s_4_9, -1, 1, 0},
-/* 10 */ { 5, s_4_10, -1, 1, 0},
-/* 11 */ { 8, s_4_11, -1, 1, 0},
-/* 12 */ { 5, s_4_12, -1, 1, 0},
-/* 13 */ { 2, s_4_13, -1, 1, 0},
-/* 14 */ { 5, s_4_14, 13, 1, 0},
-/* 15 */ { 6, s_4_15, 13, 1, 0},
-/* 16 */ { 6, s_4_16, -1, 1, 0},
-/* 17 */ { 7, s_4_17, -1, 1, 0},
-/* 18 */ { 5, s_4_18, -1, 1, 0},
-/* 19 */ { 6, s_4_19, -1, 1, 0},
-/* 20 */ { 7, s_4_20, -1, 1, 0},
-/* 21 */ { 2, s_4_21, -1, 1, 0},
-/* 22 */ { 5, s_4_22, 21, 1, 0},
-/* 23 */ { 6, s_4_23, 21, 1, 0},
-/* 24 */ { 6, s_4_24, -1, 1, 0},
-/* 25 */ { 7, s_4_25, -1, 1, 0},
-/* 26 */ { 8, s_4_26, -1, 1, 0},
-/* 27 */ { 5, s_4_27, -1, 1, 0},
-/* 28 */ { 6, s_4_28, -1, 1, 0},
-/* 29 */ { 5, s_4_29, -1, 1, 0},
-/* 30 */ { 3, s_4_30, -1, 1, 0},
-/* 31 */ { 5, s_4_31, -1, 1, 0},
-/* 32 */ { 6, s_4_32, -1, 1, 0},
-/* 33 */ { 4, s_4_33, -1, 1, 0},
-/* 34 */ { 5, s_4_34, -1, 1, 0}
+/*  3 */ { 4, s_4_3, -1, 5, 0},
+/*  4 */ { 5, s_4_4, -1, 3, 0},
+/*  5 */ { 4, s_4_5, -1, 1, 0},
+/*  6 */ { 4, s_4_6, -1, 1, 0},
+/*  7 */ { 4, s_4_7, -1, 11, 0},
+/*  8 */ { 4, s_4_8, -1, 1, 0},
+/*  9 */ { 3, s_4_9, -1, 8, 0},
+/* 10 */ { 2, s_4_10, -1, 8, 0},
+/* 11 */ { 5, s_4_11, -1, 4, 0},
+/* 12 */ { 5, s_4_12, -1, 2, 0},
+/* 13 */ { 5, s_4_13, -1, 4, 0},
+/* 14 */ { 5, s_4_14, -1, 2, 0},
+/* 15 */ { 5, s_4_15, -1, 1, 0},
+/* 16 */ { 7, s_4_16, -1, 2, 0},
+/* 17 */ { 5, s_4_17, -1, 1, 0},
+/* 18 */ { 5, s_4_18, -1, 5, 0},
+/* 19 */ { 6, s_4_19, -1, 3, 0},
+/* 20 */ { 5, s_4_20, -1, 1, 0},
+/* 21 */ { 5, s_4_21, -1, 1, 0},
+/* 22 */ { 5, s_4_22, -1, 11, 0},
+/* 23 */ { 5, s_4_23, -1, 1, 0},
+/* 24 */ { 4, s_4_24, -1, 8, 0},
+/* 25 */ { 3, s_4_25, -1, 8, 0},
+/* 26 */ { 6, s_4_26, -1, 4, 0},
+/* 27 */ { 6, s_4_27, -1, 2, 0},
+/* 28 */ { 6, s_4_28, -1, 4, 0},
+/* 29 */ { 6, s_4_29, -1, 2, 0},
+/* 30 */ { 5, s_4_30, -1, 15, 0},
+/* 31 */ { 6, s_4_31, 30, 6, 0},
+/* 32 */ { 9, s_4_32, 31, 12, 0},
+/* 33 */ { 5, s_4_33, -1, 7, 0},
+/* 34 */ { 4, s_4_34, -1, 15, 0},
+/* 35 */ { 5, s_4_35, 34, 6, 0},
+/* 36 */ { 8, s_4_36, 35, 12, 0},
+/* 37 */ { 6, s_4_37, 34, 13, 0},
+/* 38 */ { 6, s_4_38, 34, 14, 0},
+/* 39 */ { 3, s_4_39, -1, 10, 0},
+/* 40 */ { 4, s_4_40, 39, 9, 0},
+/* 41 */ { 3, s_4_41, -1, 1, 0},
+/* 42 */ { 4, s_4_42, -1, 7, 0}
 };
 
-static symbol s_5_0[1] = { 'a' };
-static symbol s_5_1[3] = { 'e', 'r', 'a' };
-static symbol s_5_2[4] = { 'a', 's', 's', 'e' };
-static symbol s_5_3[4] = { 'a', 'n', 't', 'e' };
-static symbol s_5_4[3] = { 0xC3, 0xA9, 'e' };
-static symbol s_5_5[2] = { 'a', 'i' };
-static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' };
-static symbol s_5_7[2] = { 'e', 'r' };
-static symbol s_5_8[2] = { 'a', 's' };
-static symbol s_5_9[4] = { 'e', 'r', 'a', 's' };
-static symbol s_5_10[5] = { 0xC3, 0xA2, 'm', 'e', 's' };
-static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' };
-static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' };
-static symbol s_5_13[5] = { 0xC3, 0xA2, 't', 'e', 's' };
-static symbol s_5_14[4] = { 0xC3, 0xA9, 'e', 's' };
-static symbol s_5_15[3] = { 'a', 'i', 's' };
-static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' };
-static symbol s_5_17[4] = { 'i', 'o', 'n', 's' };
-static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' };
-static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' };
-static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' };
-static symbol s_5_21[4] = { 'a', 'n', 't', 's' };
-static symbol s_5_22[3] = { 0xC3, 0xA9, 's' };
-static symbol s_5_23[3] = { 'a', 'i', 't' };
-static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' };
-static symbol s_5_25[3] = { 'a', 'n', 't' };
-static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' };
-static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' };
-static symbol s_5_28[6] = { 0xC3, 0xA8, 'r', 'e', 'n', 't' };
-static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' };
-static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' };
-static symbol s_5_31[3] = { 0xC3, 0xA2, 't' };
-static symbol s_5_32[2] = { 'e', 'z' };
-static symbol s_5_33[3] = { 'i', 'e', 'z' };
-static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' };
-static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' };
-static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' };
-static symbol s_5_37[2] = { 0xC3, 0xA9 };
+static const symbol s_5_0[3] = { 'i', 'r', 'a' };
+static const symbol s_5_1[2] = { 'i', 'e' };
+static const symbol s_5_2[4] = { 'i', 's', 's', 'e' };
+static const symbol s_5_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' };
+static const symbol s_5_4[1] = { 'i' };
+static const symbol s_5_5[4] = { 'i', 'r', 'a', 'i' };
+static const symbol s_5_6[2] = { 'i', 'r' };
+static const symbol s_5_7[4] = { 'i', 'r', 'a', 's' };
+static const symbol s_5_8[3] = { 'i', 'e', 's' };
+static const symbol s_5_9[5] = { 0xC3, 0xAE, 'm', 'e', 's' };
+static const symbol s_5_10[5] = { 'i', 's', 's', 'e', 's' };
+static const symbol s_5_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' };
+static const symbol s_5_12[5] = { 0xC3, 0xAE, 't', 'e', 's' };
+static const symbol s_5_13[2] = { 'i', 's' };
+static const symbol s_5_14[5] = { 'i', 'r', 'a', 'i', 's' };
+static const symbol s_5_15[6] = { 'i', 's', 's', 'a', 'i', 's' };
+static const symbol s_5_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' };
+static const symbol s_5_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' };
+static const symbol s_5_18[5] = { 'i', 'r', 'o', 'n', 's' };
+static const symbol s_5_19[6] = { 'i', 's', 's', 'o', 'n', 's' };
+static const symbol s_5_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' };
+static const symbol s_5_21[2] = { 'i', 't' };
+static const symbol s_5_22[5] = { 'i', 'r', 'a', 'i', 't' };
+static const symbol s_5_23[6] = { 'i', 's', 's', 'a', 'i', 't' };
+static const symbol s_5_24[6] = { 'i', 's', 's', 'a', 'n', 't' };
+static const symbol s_5_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' };
+static const symbol s_5_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' };
+static const symbol s_5_27[5] = { 'i', 'r', 'e', 'n', 't' };
+static const symbol s_5_28[6] = { 'i', 's', 's', 'e', 'n', 't' };
+static const symbol s_5_29[5] = { 'i', 'r', 'o', 'n', 't' };
+static const symbol s_5_30[3] = { 0xC3, 0xAE, 't' };
+static const symbol s_5_31[5] = { 'i', 'r', 'i', 'e', 'z' };
+static const symbol s_5_32[6] = { 'i', 's', 's', 'i', 'e', 'z' };
+static const symbol s_5_33[4] = { 'i', 'r', 'e', 'z' };
+static const symbol s_5_34[5] = { 'i', 's', 's', 'e', 'z' };
 
-static struct among a_5[38] =
+static const struct among a_5[35] =
 {
-/*  0 */ { 1, s_5_0, -1, 3, 0},
-/*  1 */ { 3, s_5_1, 0, 2, 0},
-/*  2 */ { 4, s_5_2, -1, 3, 0},
-/*  3 */ { 4, s_5_3, -1, 3, 0},
-/*  4 */ { 3, s_5_4, -1, 2, 0},
-/*  5 */ { 2, s_5_5, -1, 3, 0},
-/*  6 */ { 4, s_5_6, 5, 2, 0},
-/*  7 */ { 2, s_5_7, -1, 2, 0},
-/*  8 */ { 2, s_5_8, -1, 3, 0},
-/*  9 */ { 4, s_5_9, 8, 2, 0},
-/* 10 */ { 5, s_5_10, -1, 3, 0},
-/* 11 */ { 5, s_5_11, -1, 3, 0},
-/* 12 */ { 5, s_5_12, -1, 3, 0},
-/* 13 */ { 5, s_5_13, -1, 3, 0},
-/* 14 */ { 4, s_5_14, -1, 2, 0},
-/* 15 */ { 3, s_5_15, -1, 3, 0},
-/* 16 */ { 5, s_5_16, 15, 2, 0},
-/* 17 */ { 4, s_5_17, -1, 1, 0},
-/* 18 */ { 6, s_5_18, 17, 2, 0},
-/* 19 */ { 7, s_5_19, 17, 3, 0},
-/* 20 */ { 5, s_5_20, -1, 2, 0},
-/* 21 */ { 4, s_5_21, -1, 3, 0},
-/* 22 */ { 3, s_5_22, -1, 2, 0},
-/* 23 */ { 3, s_5_23, -1, 3, 0},
-/* 24 */ { 5, s_5_24, 23, 2, 0},
-/* 25 */ { 3, s_5_25, -1, 3, 0},
-/* 26 */ { 5, s_5_26, -1, 3, 0},
-/* 27 */ { 7, s_5_27, 26, 2, 0},
-/* 28 */ { 6, s_5_28, -1, 2, 0},
-/* 29 */ { 6, s_5_29, -1, 3, 0},
-/* 30 */ { 5, s_5_30, -1, 2, 0},
-/* 31 */ { 3, s_5_31, -1, 3, 0},
-/* 32 */ { 2, s_5_32, -1, 2, 0},
-/* 33 */ { 3, s_5_33, 32, 2, 0},
-/* 34 */ { 5, s_5_34, 33, 2, 0},
-/* 35 */ { 6, s_5_35, 33, 3, 0},
-/* 36 */ { 4, s_5_36, 32, 2, 0},
-/* 37 */ { 2, s_5_37, -1, 2, 0}
+/*  0 */ { 3, s_5_0, -1, 1, 0},
+/*  1 */ { 2, s_5_1, -1, 1, 0},
+/*  2 */ { 4, s_5_2, -1, 1, 0},
+/*  3 */ { 7, s_5_3, -1, 1, 0},
+/*  4 */ { 1, s_5_4, -1, 1, 0},
+/*  5 */ { 4, s_5_5, 4, 1, 0},
+/*  6 */ { 2, s_5_6, -1, 1, 0},
+/*  7 */ { 4, s_5_7, -1, 1, 0},
+/*  8 */ { 3, s_5_8, -1, 1, 0},
+/*  9 */ { 5, s_5_9, -1, 1, 0},
+/* 10 */ { 5, s_5_10, -1, 1, 0},
+/* 11 */ { 8, s_5_11, -1, 1, 0},
+/* 12 */ { 5, s_5_12, -1, 1, 0},
+/* 13 */ { 2, s_5_13, -1, 1, 0},
+/* 14 */ { 5, s_5_14, 13, 1, 0},
+/* 15 */ { 6, s_5_15, 13, 1, 0},
+/* 16 */ { 6, s_5_16, -1, 1, 0},
+/* 17 */ { 7, s_5_17, -1, 1, 0},
+/* 18 */ { 5, s_5_18, -1, 1, 0},
+/* 19 */ { 6, s_5_19, -1, 1, 0},
+/* 20 */ { 7, s_5_20, -1, 1, 0},
+/* 21 */ { 2, s_5_21, -1, 1, 0},
+/* 22 */ { 5, s_5_22, 21, 1, 0},
+/* 23 */ { 6, s_5_23, 21, 1, 0},
+/* 24 */ { 6, s_5_24, -1, 1, 0},
+/* 25 */ { 7, s_5_25, -1, 1, 0},
+/* 26 */ { 8, s_5_26, -1, 1, 0},
+/* 27 */ { 5, s_5_27, -1, 1, 0},
+/* 28 */ { 6, s_5_28, -1, 1, 0},
+/* 29 */ { 5, s_5_29, -1, 1, 0},
+/* 30 */ { 3, s_5_30, -1, 1, 0},
+/* 31 */ { 5, s_5_31, -1, 1, 0},
+/* 32 */ { 6, s_5_32, -1, 1, 0},
+/* 33 */ { 4, s_5_33, -1, 1, 0},
+/* 34 */ { 5, s_5_34, -1, 1, 0}
 };
 
-static symbol s_6_0[1] = { 'e' };
-static symbol s_6_1[5] = { 'I', 0xC3, 0xA8, 'r', 'e' };
-static symbol s_6_2[5] = { 'i', 0xC3, 0xA8, 'r', 'e' };
-static symbol s_6_3[3] = { 'i', 'o', 'n' };
-static symbol s_6_4[3] = { 'I', 'e', 'r' };
-static symbol s_6_5[3] = { 'i', 'e', 'r' };
-static symbol s_6_6[2] = { 0xC3, 0xAB };
+static const symbol s_6_0[1] = { 'a' };
+static const symbol s_6_1[3] = { 'e', 'r', 'a' };
+static const symbol s_6_2[4] = { 'a', 's', 's', 'e' };
+static const symbol s_6_3[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_6_4[3] = { 0xC3, 0xA9, 'e' };
+static const symbol s_6_5[2] = { 'a', 'i' };
+static const symbol s_6_6[4] = { 'e', 'r', 'a', 'i' };
+static const symbol s_6_7[2] = { 'e', 'r' };
+static const symbol s_6_8[2] = { 'a', 's' };
+static const symbol s_6_9[4] = { 'e', 'r', 'a', 's' };
+static const symbol s_6_10[5] = { 0xC3, 0xA2, 'm', 'e', 's' };
+static const symbol s_6_11[5] = { 'a', 's', 's', 'e', 's' };
+static const symbol s_6_12[5] = { 'a', 'n', 't', 'e', 's' };
+static const symbol s_6_13[5] = { 0xC3, 0xA2, 't', 'e', 's' };
+static const symbol s_6_14[4] = { 0xC3, 0xA9, 'e', 's' };
+static const symbol s_6_15[3] = { 'a', 'i', 's' };
+static const symbol s_6_16[5] = { 'e', 'r', 'a', 'i', 's' };
+static const symbol s_6_17[4] = { 'i', 'o', 'n', 's' };
+static const symbol s_6_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' };
+static const symbol s_6_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' };
+static const symbol s_6_20[5] = { 'e', 'r', 'o', 'n', 's' };
+static const symbol s_6_21[4] = { 'a', 'n', 't', 's' };
+static const symbol s_6_22[3] = { 0xC3, 0xA9, 's' };
+static const symbol s_6_23[3] = { 'a', 'i', 't' };
+static const symbol s_6_24[5] = { 'e', 'r', 'a', 'i', 't' };
+static const symbol s_6_25[3] = { 'a', 'n', 't' };
+static const symbol s_6_26[5] = { 'a', 'I', 'e', 'n', 't' };
+static const symbol s_6_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' };
+static const symbol s_6_28[6] = { 0xC3, 0xA8, 'r', 'e', 'n', 't' };
+static const symbol s_6_29[6] = { 'a', 's', 's', 'e', 'n', 't' };
+static const symbol s_6_30[5] = { 'e', 'r', 'o', 'n', 't' };
+static const symbol s_6_31[3] = { 0xC3, 0xA2, 't' };
+static const symbol s_6_32[2] = { 'e', 'z' };
+static const symbol s_6_33[3] = { 'i', 'e', 'z' };
+static const symbol s_6_34[5] = { 'e', 'r', 'i', 'e', 'z' };
+static const symbol s_6_35[6] = { 'a', 's', 's', 'i', 'e', 'z' };
+static const symbol s_6_36[4] = { 'e', 'r', 'e', 'z' };
+static const symbol s_6_37[2] = { 0xC3, 0xA9 };
 
-static struct among a_6[7] =
+static const struct among a_6[38] =
 {
 /*  0 */ { 1, s_6_0, -1, 3, 0},
-/*  1 */ { 5, s_6_1, 0, 2, 0},
-/*  2 */ { 5, s_6_2, 0, 2, 0},
-/*  3 */ { 3, s_6_3, -1, 1, 0},
+/*  1 */ { 3, s_6_1, 0, 2, 0},
+/*  2 */ { 4, s_6_2, -1, 3, 0},
+/*  3 */ { 4, s_6_3, -1, 3, 0},
 /*  4 */ { 3, s_6_4, -1, 2, 0},
-/*  5 */ { 3, s_6_5, -1, 2, 0},
-/*  6 */ { 2, s_6_6, -1, 4, 0}
+/*  5 */ { 2, s_6_5, -1, 3, 0},
+/*  6 */ { 4, s_6_6, 5, 2, 0},
+/*  7 */ { 2, s_6_7, -1, 2, 0},
+/*  8 */ { 2, s_6_8, -1, 3, 0},
+/*  9 */ { 4, s_6_9, 8, 2, 0},
+/* 10 */ { 5, s_6_10, -1, 3, 0},
+/* 11 */ { 5, s_6_11, -1, 3, 0},
+/* 12 */ { 5, s_6_12, -1, 3, 0},
+/* 13 */ { 5, s_6_13, -1, 3, 0},
+/* 14 */ { 4, s_6_14, -1, 2, 0},
+/* 15 */ { 3, s_6_15, -1, 3, 0},
+/* 16 */ { 5, s_6_16, 15, 2, 0},
+/* 17 */ { 4, s_6_17, -1, 1, 0},
+/* 18 */ { 6, s_6_18, 17, 2, 0},
+/* 19 */ { 7, s_6_19, 17, 3, 0},
+/* 20 */ { 5, s_6_20, -1, 2, 0},
+/* 21 */ { 4, s_6_21, -1, 3, 0},
+/* 22 */ { 3, s_6_22, -1, 2, 0},
+/* 23 */ { 3, s_6_23, -1, 3, 0},
+/* 24 */ { 5, s_6_24, 23, 2, 0},
+/* 25 */ { 3, s_6_25, -1, 3, 0},
+/* 26 */ { 5, s_6_26, -1, 3, 0},
+/* 27 */ { 7, s_6_27, 26, 2, 0},
+/* 28 */ { 6, s_6_28, -1, 2, 0},
+/* 29 */ { 6, s_6_29, -1, 3, 0},
+/* 30 */ { 5, s_6_30, -1, 2, 0},
+/* 31 */ { 3, s_6_31, -1, 3, 0},
+/* 32 */ { 2, s_6_32, -1, 2, 0},
+/* 33 */ { 3, s_6_33, 32, 2, 0},
+/* 34 */ { 5, s_6_34, 33, 2, 0},
+/* 35 */ { 6, s_6_35, 33, 3, 0},
+/* 36 */ { 4, s_6_36, 32, 2, 0},
+/* 37 */ { 2, s_6_37, -1, 2, 0}
 };
 
-static symbol s_7_0[3] = { 'e', 'l', 'l' };
-static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' };
-static symbol s_7_2[3] = { 'e', 'n', 'n' };
-static symbol s_7_3[3] = { 'o', 'n', 'n' };
-static symbol s_7_4[3] = { 'e', 't', 't' };
+static const symbol s_7_0[1] = { 'e' };
+static const symbol s_7_1[5] = { 'I', 0xC3, 0xA8, 'r', 'e' };
+static const symbol s_7_2[5] = { 'i', 0xC3, 0xA8, 'r', 'e' };
+static const symbol s_7_3[3] = { 'i', 'o', 'n' };
+static const symbol s_7_4[3] = { 'I', 'e', 'r' };
+static const symbol s_7_5[3] = { 'i', 'e', 'r' };
+static const symbol s_7_6[2] = { 0xC3, 0xAB };
 
-static struct among a_7[5] =
+static const struct among a_7[7] =
 {
-/*  0 */ { 3, s_7_0, -1, -1, 0},
-/*  1 */ { 4, s_7_1, -1, -1, 0},
-/*  2 */ { 3, s_7_2, -1, -1, 0},
-/*  3 */ { 3, s_7_3, -1, -1, 0},
-/*  4 */ { 3, s_7_4, -1, -1, 0}
+/*  0 */ { 1, s_7_0, -1, 3, 0},
+/*  1 */ { 5, s_7_1, 0, 2, 0},
+/*  2 */ { 5, s_7_2, 0, 2, 0},
+/*  3 */ { 3, s_7_3, -1, 1, 0},
+/*  4 */ { 3, s_7_4, -1, 2, 0},
+/*  5 */ { 3, s_7_5, -1, 2, 0},
+/*  6 */ { 2, s_7_6, -1, 4, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 };
+static const symbol s_8_0[3] = { 'e', 'l', 'l' };
+static const symbol s_8_1[4] = { 'e', 'i', 'l', 'l' };
+static const symbol s_8_2[3] = { 'e', 'n', 'n' };
+static const symbol s_8_3[3] = { 'o', 'n', 'n' };
+static const symbol s_8_4[3] = { 'e', 't', 't' };
 
-static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+static const struct among a_8[5] =
+{
+/*  0 */ { 3, s_8_0, -1, -1, 0},
+/*  1 */ { 4, s_8_1, -1, -1, 0},
+/*  2 */ { 3, s_8_2, -1, -1, 0},
+/*  3 */ { 3, s_8_3, -1, -1, 0},
+/*  4 */ { 3, s_8_4, -1, -1, 0}
+};
+
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 };
 
-static symbol s_0[] = { 'u' };
-static symbol s_1[] = { 'U' };
-static symbol s_2[] = { 'i' };
-static symbol s_3[] = { 'I' };
-static symbol s_4[] = { 'y' };
-static symbol s_5[] = { 'Y' };
-static symbol s_6[] = { 'y' };
-static symbol s_7[] = { 'Y' };
-static symbol s_8[] = { 'q' };
-static symbol s_9[] = { 'u' };
-static symbol s_10[] = { 'U' };
-static symbol s_11[] = { 'i' };
-static symbol s_12[] = { 'u' };
-static symbol s_13[] = { 'y' };
-static symbol s_14[] = { 'i', 'c' };
-static symbol s_15[] = { 'i', 'q', 'U' };
-static symbol s_16[] = { 'l', 'o', 'g' };
-static symbol s_17[] = { 'u' };
-static symbol s_18[] = { 'e', 'n', 't' };
-static symbol s_19[] = { 'a', 't' };
-static symbol s_20[] = { 'e', 'u', 'x' };
-static symbol s_21[] = { 'i' };
-static symbol s_22[] = { 'a', 'b', 'l' };
-static symbol s_23[] = { 'i', 'q', 'U' };
-static symbol s_24[] = { 'a', 't' };
-static symbol s_25[] = { 'i', 'c' };
-static symbol s_26[] = { 'i', 'q', 'U' };
-static symbol s_27[] = { 'e', 'a', 'u' };
-static symbol s_28[] = { 'a', 'l' };
-static symbol s_29[] = { 'e', 'u', 'x' };
-static symbol s_30[] = { 'a', 'n', 't' };
-static symbol s_31[] = { 'e', 'n', 't' };
-static symbol s_32[] = { 'e' };
-static symbol s_33[] = { 's' };
-static symbol s_34[] = { 's' };
-static symbol s_35[] = { 't' };
-static symbol s_36[] = { 'i' };
-static symbol s_37[] = { 'g', 'u' };
-static symbol s_38[] = { 0xC3, 0xA9 };
-static symbol s_39[] = { 0xC3, 0xA8 };
-static symbol s_40[] = { 'e' };
-static symbol s_41[] = { 'Y' };
-static symbol s_42[] = { 'i' };
-static symbol s_43[] = { 0xC3, 0xA7 };
-static symbol s_44[] = { 'c' };
+static const unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
+
+static const symbol s_0[] = { 'u' };
+static const symbol s_1[] = { 'U' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'I' };
+static const symbol s_4[] = { 'y' };
+static const symbol s_5[] = { 'Y' };
+static const symbol s_6[] = { 'y' };
+static const symbol s_7[] = { 'Y' };
+static const symbol s_8[] = { 'q' };
+static const symbol s_9[] = { 'u' };
+static const symbol s_10[] = { 'U' };
+static const symbol s_11[] = { 'i' };
+static const symbol s_12[] = { 'u' };
+static const symbol s_13[] = { 'y' };
+static const symbol s_14[] = { 'i', 'c' };
+static const symbol s_15[] = { 'i', 'q', 'U' };
+static const symbol s_16[] = { 'l', 'o', 'g' };
+static const symbol s_17[] = { 'u' };
+static const symbol s_18[] = { 'e', 'n', 't' };
+static const symbol s_19[] = { 'a', 't' };
+static const symbol s_20[] = { 'e', 'u', 'x' };
+static const symbol s_21[] = { 'i' };
+static const symbol s_22[] = { 'a', 'b', 'l' };
+static const symbol s_23[] = { 'i', 'q', 'U' };
+static const symbol s_24[] = { 'a', 't' };
+static const symbol s_25[] = { 'i', 'c' };
+static const symbol s_26[] = { 'i', 'q', 'U' };
+static const symbol s_27[] = { 'e', 'a', 'u' };
+static const symbol s_28[] = { 'a', 'l' };
+static const symbol s_29[] = { 'e', 'u', 'x' };
+static const symbol s_30[] = { 'a', 'n', 't' };
+static const symbol s_31[] = { 'e', 'n', 't' };
+static const symbol s_32[] = { 'e' };
+static const symbol s_33[] = { 's' };
+static const symbol s_34[] = { 's' };
+static const symbol s_35[] = { 't' };
+static const symbol s_36[] = { 'i' };
+static const symbol s_37[] = { 'g', 'u' };
+static const symbol s_38[] = { 0xC3, 0xA9 };
+static const symbol s_39[] = { 0xC3, 0xA8 };
+static const symbol s_40[] = { 'e' };
+static const symbol s_41[] = { 'Y' };
+static const symbol s_42[] = { 'i' };
+static const symbol s_43[] = { 0xC3, 0xA7 };
+static const symbol s_44[] = { 'c' };
 
 static int r_prelude(struct SN_env * z) {
     while(1) { /* repeat, line 38 */
-        int c = z->c;
+        int c1 = z->c;
         while(1) { /* goto, line 38 */
-            int c = z->c;
-            {   int c = z->c; /* or, line 44 */
-                if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3;
+            int c2 = z->c;
+            {   int c3 = z->c; /* or, line 44 */
+                if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab3;
                 z->bra = z->c; /* [, line 40 */
-                {   int c = z->c; /* or, line 40 */
+                {   int c4 = z->c; /* or, line 40 */
                     if (!(eq_s(z, 1, s_0))) goto lab5;
                     z->ket = z->c; /* ], line 40 */
-                    if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5;
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_1); /* <-, line 40 */
+                    if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab5;
+                    {   int ret = slice_from_s(z, 1, s_1); /* <-, line 40 */
                         if (ret < 0) return ret;
                     }
                     goto lab4;
                 lab5:
-                    z->c = c;
+                    z->c = c4;
                     if (!(eq_s(z, 1, s_2))) goto lab6;
                     z->ket = z->c; /* ], line 41 */
-                    if (!(in_grouping_U(z, g_v, 97, 251))) goto lab6;
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_3); /* <-, line 41 */
+                    if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab6;
+                    {   int ret = slice_from_s(z, 1, s_3); /* <-, line 41 */
                         if (ret < 0) return ret;
                     }
                     goto lab4;
                 lab6:
-                    z->c = c;
+                    z->c = c4;
                     if (!(eq_s(z, 1, s_4))) goto lab3;
                     z->ket = z->c; /* ], line 42 */
-                    {   int ret;
-                        ret = slice_from_s(z, 1, s_5); /* <-, line 42 */
+                    {   int ret = slice_from_s(z, 1, s_5); /* <-, line 42 */
                         if (ret < 0) return ret;
                     }
                 }
             lab4:
                 goto lab2;
             lab3:
-                z->c = c;
+                z->c = c3;
                 z->bra = z->c; /* [, line 45 */
                 if (!(eq_s(z, 1, s_6))) goto lab7;
                 z->ket = z->c; /* ], line 45 */
-                if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_7); /* <-, line 45 */
+                if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab7;
+                {   int ret = slice_from_s(z, 1, s_7); /* <-, line 45 */
                     if (ret < 0) return ret;
                 }
                 goto lab2;
             lab7:
-                z->c = c;
+                z->c = c3;
                 if (!(eq_s(z, 1, s_8))) goto lab1;
                 z->bra = z->c; /* [, line 47 */
                 if (!(eq_s(z, 1, s_9))) goto lab1;
                 z->ket = z->c; /* ], line 47 */
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 47 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 47 */
                     if (ret < 0) return ret;
                 }
             }
         lab2:
-            z->c = c;
+            z->c = c2;
             break;
         lab1:
-            z->c = c;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* goto, line 38 */
+            z->c = c2;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab0;
+                z->c = ret; /* goto, line 38 */
             }
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -473,119 +493,102 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 56 */
-        {   int c = z->c; /* or, line 57 */
-            if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2;
-            if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab2;
-                z->c = c; /* next, line 57 */
+    {   int c1 = z->c; /* do, line 56 */
+        {   int c2 = z->c; /* or, line 58 */
+            if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab2;
+            if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab2;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab2;
+                z->c = ret; /* next, line 57 */
             }
             goto lab1;
         lab2:
-            z->c = c;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* next, line 57 */
+            z->c = c2;
+            if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((331776 >> (z->p[z->c + 2] & 0x1f)) & 1)) goto lab3;
+            if (!(find_among(z, a_0, 3))) goto lab3; /* among, line 59 */
+            goto lab1;
+        lab3:
+            z->c = c2;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab0;
+                z->c = ret; /* next, line 66 */
             }
-            while(1) { /* gopast, line 57 */
-                if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3;
-                break;
-            lab3:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* gopast, line 57 */
-                }
+            {    /* gopast */ /* grouping v, line 66 */
+                int ret = out_grouping_U(z, g_v, 97, 251, 1);
+                if (ret < 0) goto lab0;
+                z->c += ret;
             }
         }
     lab1:
-        z->I[0] = z->c; /* setmark pV, line 58 */
+        z->I[0] = z->c; /* setmark pV, line 67 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 60 */
-        while(1) { /* gopast, line 61 */
-            if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5;
-            break;
-        lab5:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 61 */
-            }
+    {   int c3 = z->c; /* do, line 69 */
+        {    /* gopast */ /* grouping v, line 70 */
+            int ret = out_grouping_U(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 61 */
-            if (!(out_grouping_U(z, g_v, 97, 251))) goto lab6;
-            break;
-        lab6:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 61 */
-            }
+        {    /* gopast */ /* non v, line 70 */
+            int ret = in_grouping_U(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        z->I[1] = z->c; /* setmark p1, line 61 */
-        while(1) { /* gopast, line 62 */
-            if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7;
-            break;
-        lab7:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 62 */
-            }
+        z->I[1] = z->c; /* setmark p1, line 70 */
+        {    /* gopast */ /* grouping v, line 71 */
+            int ret = out_grouping_U(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 62 */
-            if (!(out_grouping_U(z, g_v, 97, 251))) goto lab8;
-            break;
-        lab8:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 62 */
-            }
+        {    /* gopast */ /* non v, line 71 */
+            int ret = in_grouping_U(z, g_v, 97, 251, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        z->I[2] = z->c; /* setmark p2, line 62 */
+        z->I[2] = z->c; /* setmark p2, line 71 */
     lab4:
-        z->c = c;
+        z->c = c3;
     }
     return 1;
 }
 
 static int r_postlude(struct SN_env * z) {
     int among_var;
-    while(1) { /* repeat, line 66 */
-        int c = z->c;
-        z->bra = z->c; /* [, line 68 */
-        among_var = find_among(z, a_0, 4); /* substring, line 68 */
+    while(1) { /* repeat, line 75 */
+        int c1 = z->c;
+        z->bra = z->c; /* [, line 77 */
+        if (z->c >= z->l || z->p[z->c + 0] >> 5 != 2 || !((35652096 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 4; else
+        among_var = find_among(z, a_1, 4); /* substring, line 77 */
         if (!(among_var)) goto lab0;
-        z->ket = z->c; /* ], line 68 */
+        z->ket = z->c; /* ], line 77 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_11); /* <-, line 69 */
+                {   int ret = slice_from_s(z, 1, s_11); /* <-, line 78 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_12); /* <-, line 70 */
+                {   int ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_13); /* <-, line 71 */
+                {   int ret = slice_from_s(z, 1, s_13); /* <-, line 80 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 72 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 81 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -608,49 +611,45 @@ static int r_R2(struct SN_env * z) {
 
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
-    z->ket = z->c; /* [, line 83 */
-    among_var = find_among_b(z, a_3, 43); /* substring, line 83 */
+    z->ket = z->c; /* [, line 92 */
+    among_var = find_among_b(z, a_4, 43); /* substring, line 92 */
     if (!(among_var)) return 0;
-    z->bra = z->c; /* ], line 83 */
+    z->bra = z->c; /* ], line 92 */
     switch(among_var) {
         case 0: return 0;
         case 1:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 87 */
+                if (ret == 0) return 0; /* call R2, line 96 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 87 */
+            {   int ret = slice_del(z); /* delete, line 96 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 90 */
+                if (ret == 0) return 0; /* call R2, line 99 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 90 */
+            {   int ret = slice_del(z); /* delete, line 99 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 91 */
-                z->ket = z->c; /* [, line 91 */
-                if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; }
-                z->bra = z->c; /* ], line 91 */
-                {   int m = z->l - z->c; (void) m; /* or, line 91 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 100 */
+                z->ket = z->c; /* [, line 100 */
+                if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m_keep; goto lab0; }
+                z->bra = z->c; /* ], line 100 */
+                {   int m1 = z->l - z->c; (void)m1; /* or, line 100 */
                     {   int ret = r_R2(z);
-                        if (ret == 0) goto lab2; /* call R2, line 91 */
+                        if (ret == 0) goto lab2; /* call R2, line 100 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 91 */
+                    {   int ret = slice_del(z); /* delete, line 100 */
                         if (ret < 0) return ret;
                     }
                     goto lab1;
                 lab2:
-                    z->c = z->l - m;
-                    {   int ret;
-                        ret = slice_from_s(z, 3, s_15); /* <-, line 91 */
+                    z->c = z->l - m1;
+                    {   int ret = slice_from_s(z, 3, s_15); /* <-, line 100 */
                         if (ret < 0) return ret;
                     }
                 }
@@ -661,90 +660,82 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 3:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 95 */
+                if (ret == 0) return 0; /* call R2, line 104 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_16); /* <-, line 95 */
+            {   int ret = slice_from_s(z, 3, s_16); /* <-, line 104 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 98 */
+                if (ret == 0) return 0; /* call R2, line 107 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_17); /* <-, line 98 */
+            {   int ret = slice_from_s(z, 1, s_17); /* <-, line 107 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 101 */
+                if (ret == 0) return 0; /* call R2, line 110 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_18); /* <-, line 101 */
+            {   int ret = slice_from_s(z, 3, s_18); /* <-, line 110 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
             {   int ret = r_RV(z);
-                if (ret == 0) return 0; /* call RV, line 105 */
+                if (ret == 0) return 0; /* call RV, line 114 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 105 */
+            {   int ret = slice_del(z); /* delete, line 114 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 106 */
-                z->ket = z->c; /* [, line 107 */
-                among_var = find_among_b(z, a_1, 6); /* substring, line 107 */
-                if (!(among_var)) { z->c = z->l - m; goto lab3; }
-                z->bra = z->c; /* ], line 107 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 115 */
+                z->ket = z->c; /* [, line 116 */
+                among_var = find_among_b(z, a_2, 6); /* substring, line 116 */
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab3; }
+                z->bra = z->c; /* ], line 116 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab3; }
+                    case 0: { z->c = z->l - m_keep; goto lab3; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 117 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 108 */
+                        {   int ret = slice_del(z); /* delete, line 117 */
                             if (ret < 0) return ret;
                         }
-                        z->ket = z->c; /* [, line 108 */
-                        if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; }
-                        z->bra = z->c; /* ], line 108 */
+                        z->ket = z->c; /* [, line 117 */
+                        if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m_keep; goto lab3; }
+                        z->bra = z->c; /* ], line 117 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 117 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 108 */
+                        {   int ret = slice_del(z); /* delete, line 117 */
                             if (ret < 0) return ret;
                         }
                         break;
                     case 2:
-                        {   int m = z->l - z->c; (void) m; /* or, line 109 */
+                        {   int m2 = z->l - z->c; (void)m2; /* or, line 118 */
                             {   int ret = r_R2(z);
-                                if (ret == 0) goto lab5; /* call R2, line 109 */
+                                if (ret == 0) goto lab5; /* call R2, line 118 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 109 */
+                            {   int ret = slice_del(z); /* delete, line 118 */
                                 if (ret < 0) return ret;
                             }
                             goto lab4;
                         lab5:
-                            z->c = z->l - m;
+                            z->c = z->l - m2;
                             {   int ret = r_R1(z);
-                                if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */
+                                if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R1, line 118 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_from_s(z, 3, s_20); /* <-, line 109 */
+                            {   int ret = slice_from_s(z, 3, s_20); /* <-, line 118 */
                                 if (ret < 0) return ret;
                             }
                         }
@@ -752,21 +743,19 @@ static int r_standard_suffix(struct SN_env * z) {
                         break;
                     case 3:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 120 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 111 */
+                        {   int ret = slice_del(z); /* delete, line 120 */
                             if (ret < 0) return ret;
                         }
                         break;
                     case 4:
                         {   int ret = r_RV(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call RV, line 122 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_from_s(z, 1, s_21); /* <-, line 113 */
+                        {   int ret = slice_from_s(z, 1, s_21); /* <-, line 122 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -777,55 +766,51 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 7:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 120 */
+                if (ret == 0) return 0; /* call R2, line 129 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 120 */
+            {   int ret = slice_del(z); /* delete, line 129 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 121 */
-                z->ket = z->c; /* [, line 122 */
-                among_var = find_among_b(z, a_2, 3); /* substring, line 122 */
-                if (!(among_var)) { z->c = z->l - m; goto lab6; }
-                z->bra = z->c; /* ], line 122 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 130 */
+                z->ket = z->c; /* [, line 131 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab6; }
+                among_var = find_among_b(z, a_3, 3); /* substring, line 131 */
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab6; }
+                z->bra = z->c; /* ], line 131 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab6; }
+                    case 0: { z->c = z->l - m_keep; goto lab6; }
                     case 1:
-                        {   int m = z->l - z->c; (void) m; /* or, line 123 */
+                        {   int m3 = z->l - z->c; (void)m3; /* or, line 132 */
                             {   int ret = r_R2(z);
-                                if (ret == 0) goto lab8; /* call R2, line 123 */
+                                if (ret == 0) goto lab8; /* call R2, line 132 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 123 */
+                            {   int ret = slice_del(z); /* delete, line 132 */
                                 if (ret < 0) return ret;
                             }
                             goto lab7;
                         lab8:
-                            z->c = z->l - m;
-                            {   int ret;
-                                ret = slice_from_s(z, 3, s_22); /* <-, line 123 */
+                            z->c = z->l - m3;
+                            {   int ret = slice_from_s(z, 3, s_22); /* <-, line 132 */
                                 if (ret < 0) return ret;
                             }
                         }
                     lab7:
                         break;
                     case 2:
-                        {   int m = z->l - z->c; (void) m; /* or, line 124 */
+                        {   int m4 = z->l - z->c; (void)m4; /* or, line 133 */
                             {   int ret = r_R2(z);
-                                if (ret == 0) goto lab10; /* call R2, line 124 */
+                                if (ret == 0) goto lab10; /* call R2, line 133 */
                                 if (ret < 0) return ret;
                             }
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 124 */
+                            {   int ret = slice_del(z); /* delete, line 133 */
                                 if (ret < 0) return ret;
                             }
                             goto lab9;
                         lab10:
-                            z->c = z->l - m;
-                            {   int ret;
-                                ret = slice_from_s(z, 3, s_23); /* <-, line 124 */
+                            z->c = z->l - m4;
+                            {   int ret = slice_from_s(z, 3, s_23); /* <-, line 133 */
                                 if (ret < 0) return ret;
                             }
                         }
@@ -833,11 +818,10 @@ static int r_standard_suffix(struct SN_env * z) {
                         break;
                     case 3:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab6; } /* call R2, line 134 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 125 */
+                        {   int ret = slice_del(z); /* delete, line 134 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -848,42 +832,38 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 8:
             {   int ret = r_R2(z);
-                if (ret == 0) return 0; /* call R2, line 132 */
+                if (ret == 0) return 0; /* call R2, line 141 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 132 */
+            {   int ret = slice_del(z); /* delete, line 141 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 133 */
-                z->ket = z->c; /* [, line 133 */
-                if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; }
-                z->bra = z->c; /* ], line 133 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 142 */
+                z->ket = z->c; /* [, line 142 */
+                if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m_keep; goto lab11; }
+                z->bra = z->c; /* ], line 142 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab11; } /* call R2, line 142 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 133 */
+                {   int ret = slice_del(z); /* delete, line 142 */
                     if (ret < 0) return ret;
                 }
-                z->ket = z->c; /* [, line 133 */
-                if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; }
-                z->bra = z->c; /* ], line 133 */
-                {   int m = z->l - z->c; (void) m; /* or, line 133 */
+                z->ket = z->c; /* [, line 142 */
+                if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m_keep; goto lab11; }
+                z->bra = z->c; /* ], line 142 */
+                {   int m5 = z->l - z->c; (void)m5; /* or, line 142 */
                     {   int ret = r_R2(z);
-                        if (ret == 0) goto lab13; /* call R2, line 133 */
+                        if (ret == 0) goto lab13; /* call R2, line 142 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 133 */
+                    {   int ret = slice_del(z); /* delete, line 142 */
                         if (ret < 0) return ret;
                     }
                     goto lab12;
                 lab13:
-                    z->c = z->l - m;
-                    {   int ret;
-                        ret = slice_from_s(z, 3, s_26); /* <-, line 133 */
+                    z->c = z->l - m5;
+                    {   int ret = slice_from_s(z, 3, s_26); /* <-, line 142 */
                         if (ret < 0) return ret;
                     }
                 }
@@ -893,40 +873,36 @@ static int r_standard_suffix(struct SN_env * z) {
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_27); /* <-, line 135 */
+            {   int ret = slice_from_s(z, 3, s_27); /* <-, line 144 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
             {   int ret = r_R1(z);
-                if (ret == 0) return 0; /* call R1, line 136 */
+                if (ret == 0) return 0; /* call R1, line 145 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 2, s_28); /* <-, line 136 */
+            {   int ret = slice_from_s(z, 2, s_28); /* <-, line 145 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int m = z->l - z->c; (void) m; /* or, line 138 */
+            {   int m6 = z->l - z->c; (void)m6; /* or, line 147 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) goto lab15; /* call R2, line 138 */
+                    if (ret == 0) goto lab15; /* call R2, line 147 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 138 */
+                {   int ret = slice_del(z); /* delete, line 147 */
                     if (ret < 0) return ret;
                 }
                 goto lab14;
             lab15:
-                z->c = z->l - m;
+                z->c = z->l - m6;
                 {   int ret = r_R1(z);
-                    if (ret == 0) return 0; /* call R1, line 138 */
+                    if (ret == 0) return 0; /* call R1, line 147 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_from_s(z, 3, s_29); /* <-, line 138 */
+                {   int ret = slice_from_s(z, 3, s_29); /* <-, line 147 */
                     if (ret < 0) return ret;
                 }
             }
@@ -934,51 +910,47 @@ static int r_standard_suffix(struct SN_env * z) {
             break;
         case 12:
             {   int ret = r_R1(z);
-                if (ret == 0) return 0; /* call R1, line 141 */
+                if (ret == 0) return 0; /* call R1, line 150 */
                 if (ret < 0) return ret;
             }
-            if (!(out_grouping_b_U(z, g_v, 97, 251))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 141 */
+            if (out_grouping_b_U(z, g_v, 97, 251, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 150 */
                 if (ret < 0) return ret;
             }
             break;
         case 13:
             {   int ret = r_RV(z);
-                if (ret == 0) return 0; /* call RV, line 146 */
+                if (ret == 0) return 0; /* call RV, line 155 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_30); /* <-, line 146 */
+            {   int ret = slice_from_s(z, 3, s_30); /* <-, line 155 */
                 if (ret < 0) return ret;
             }
-            return 0; /* fail, line 146 */
+            return 0; /* fail, line 155 */
             break;
         case 14:
             {   int ret = r_RV(z);
-                if (ret == 0) return 0; /* call RV, line 147 */
+                if (ret == 0) return 0; /* call RV, line 156 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_31); /* <-, line 147 */
+            {   int ret = slice_from_s(z, 3, s_31); /* <-, line 156 */
                 if (ret < 0) return ret;
             }
-            return 0; /* fail, line 147 */
+            return 0; /* fail, line 156 */
             break;
         case 15:
-            {   int m_test = z->l - z->c; /* test, line 149 */
-                if (!(in_grouping_b_U(z, g_v, 97, 251))) return 0;
+            {   int m_test = z->l - z->c; /* test, line 158 */
+                if (in_grouping_b_U(z, g_v, 97, 251, 0)) return 0;
                 {   int ret = r_RV(z);
-                    if (ret == 0) return 0; /* call RV, line 149 */
+                    if (ret == 0) return 0; /* call RV, line 158 */
                     if (ret < 0) return ret;
                 }
                 z->c = z->l - m_test;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 149 */
+            {   int ret = slice_del(z); /* delete, line 158 */
                 if (ret < 0) return ret;
             }
-            return 0; /* fail, line 149 */
+            return 0; /* fail, line 158 */
             break;
     }
     return 1;
@@ -986,72 +958,68 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_i_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 154 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 163 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
-        z->c = z->I[0]; /* tomark, line 154 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        z->ket = z->c; /* [, line 155 */
-        among_var = find_among_b(z, a_4, 35); /* substring, line 155 */
-        if (!(among_var)) { z->lb = m3; return 0; }
-        z->bra = z->c; /* ], line 155 */
+        z->c = z->I[0]; /* tomark, line 163 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 164 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68944418 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
+        among_var = find_among_b(z, a_5, 35); /* substring, line 164 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 164 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                if (!(out_grouping_b_U(z, g_v, 97, 251))) { z->lb = m3; return 0; }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 161 */
+                if (out_grouping_b_U(z, g_v, 97, 251, 0)) { z->lb = mlimit; return 0; }
+                {   int ret = slice_del(z); /* delete, line 170 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 165 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 174 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
-        z->c = z->I[0]; /* tomark, line 165 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        z->ket = z->c; /* [, line 166 */
-        among_var = find_among_b(z, a_5, 38); /* substring, line 166 */
-        if (!(among_var)) { z->lb = m3; return 0; }
-        z->bra = z->c; /* ], line 166 */
+        z->c = z->I[0]; /* tomark, line 174 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 175 */
+        among_var = find_among_b(z, a_6, 38); /* substring, line 175 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 175 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */
+                    if (ret == 0) { z->lb = mlimit; return 0; } /* call R2, line 177 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 168 */
+                {   int ret = slice_del(z); /* delete, line 177 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 176 */
+                {   int ret = slice_del(z); /* delete, line 185 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 181 */
+                {   int ret = slice_del(z); /* delete, line 190 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 182 */
-                    z->ket = z->c; /* [, line 182 */
-                    if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; }
-                    z->bra = z->c; /* ], line 182 */
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 182 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 191 */
+                    z->ket = z->c; /* [, line 191 */
+                    if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m_keep; goto lab0; }
+                    z->bra = z->c; /* ], line 191 */
+                    {   int ret = slice_del(z); /* delete, line 191 */
                         if (ret < 0) return ret;
                     }
                 lab0:
@@ -1059,96 +1027,91 @@ static int r_verb_suffix(struct SN_env * z) {
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_residual_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* try, line 190 */
-        z->ket = z->c; /* [, line 190 */
-        if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; }
-        z->bra = z->c; /* ], line 190 */
-        {   int m_test = z->l - z->c; /* test, line 190 */
-            if (!(out_grouping_b_U(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; }
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 199 */
+        z->ket = z->c; /* [, line 199 */
+        if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m_keep; goto lab0; }
+        z->bra = z->c; /* ], line 199 */
+        {   int m_test = z->l - z->c; /* test, line 199 */
+            if (out_grouping_b_U(z, g_keep_with_s, 97, 232, 0)) { z->c = z->l - m_keep; goto lab0; }
             z->c = z->l - m_test;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 190 */
+        {   int ret = slice_del(z); /* delete, line 199 */
             if (ret < 0) return ret;
         }
     lab0:
         ;
     }
-    {   int m3; /* setlimit, line 191 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 200 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
-        z->c = z->I[0]; /* tomark, line 191 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        z->ket = z->c; /* [, line 192 */
-        among_var = find_among_b(z, a_6, 7); /* substring, line 192 */
-        if (!(among_var)) { z->lb = m3; return 0; }
-        z->bra = z->c; /* ], line 192 */
+        z->c = z->I[0]; /* tomark, line 200 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 201 */
+        among_var = find_among_b(z, a_7, 7); /* substring, line 201 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 201 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */
+                    if (ret == 0) { z->lb = mlimit; return 0; } /* call R2, line 202 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* or, line 193 */
+                {   int m2 = z->l - z->c; (void)m2; /* or, line 202 */
                     if (!(eq_s_b(z, 1, s_34))) goto lab2;
                     goto lab1;
                 lab2:
-                    z->c = z->l - m;
-                    if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; }
+                    z->c = z->l - m2;
+                    if (!(eq_s_b(z, 1, s_35))) { z->lb = mlimit; return 0; }
                 }
             lab1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 193 */
+                {   int ret = slice_del(z); /* delete, line 202 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_36); /* <-, line 195 */
+                {   int ret = slice_from_s(z, 1, s_36); /* <-, line 204 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 196 */
+                {   int ret = slice_del(z); /* delete, line 205 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 197 */
+                if (!(eq_s_b(z, 2, s_37))) { z->lb = mlimit; return 0; }
+                {   int ret = slice_del(z); /* delete, line 206 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_un_double(struct SN_env * z) {
-    {   int m_test = z->l - z->c; /* test, line 203 */
-        if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */
+    {   int m_test = z->l - z->c; /* test, line 212 */
+        if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1069056 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+        if (!(find_among_b(z, a_8, 5))) return 0; /* among, line 212 */
         z->c = z->l - m_test;
     }
-    z->ket = z->c; /* [, line 203 */
-    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-        if (c < 0) return 0;
-        z->c = c; /* next, line 203 */
+    z->ket = z->c; /* [, line 212 */
+    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+        if (ret < 0) return 0;
+        z->c = ret; /* next, line 212 */
     }
-    z->bra = z->c; /* ], line 203 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 203 */
+    z->bra = z->c; /* ], line 212 */
+    {   int ret = slice_del(z); /* delete, line 212 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -1156,8 +1119,8 @@ static int r_un_double(struct SN_env * z) {
 
 static int r_un_accent(struct SN_env * z) {
     {   int i = 1;
-        while(1) { /* atleast, line 207 */
-            if (!(out_grouping_b_U(z, g_v, 97, 251))) goto lab0;
+        while(1) { /* atleast, line 216 */
+            if (out_grouping_b_U(z, g_v, 97, 251, 0)) goto lab0;
             i--;
             continue;
         lab0:
@@ -1165,83 +1128,80 @@ static int r_un_accent(struct SN_env * z) {
         }
         if (i > 0) return 0;
     }
-    z->ket = z->c; /* [, line 208 */
-    {   int m = z->l - z->c; (void) m; /* or, line 208 */
+    z->ket = z->c; /* [, line 217 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 217 */
         if (!(eq_s_b(z, 2, s_38))) goto lab2;
         goto lab1;
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         if (!(eq_s_b(z, 2, s_39))) return 0;
     }
 lab1:
-    z->bra = z->c; /* ], line 208 */
-    {   int ret;
-        ret = slice_from_s(z, 1, s_40); /* <-, line 208 */
+    z->bra = z->c; /* ], line 217 */
+    {   int ret = slice_from_s(z, 1, s_40); /* <-, line 217 */
         if (ret < 0) return ret;
     }
     return 1;
 }
 
 extern int french_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 214 */
+    {   int c1 = z->c; /* do, line 223 */
         {   int ret = r_prelude(z);
-            if (ret == 0) goto lab0; /* call prelude, line 214 */
+            if (ret == 0) goto lab0; /* call prelude, line 223 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 215 */
+    {   int c2 = z->c; /* do, line 224 */
         {   int ret = r_mark_regions(z);
-            if (ret == 0) goto lab1; /* call mark_regions, line 215 */
+            if (ret == 0) goto lab1; /* call mark_regions, line 224 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
-    z->lb = z->c; z->c = z->l; /* backwards, line 216 */
+    z->lb = z->c; z->c = z->l; /* backwards, line 225 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 218 */
-        {   int m = z->l - z->c; (void) m; /* or, line 228 */
-            {   int m = z->l - z->c; (void) m; /* and, line 224 */
-                {   int m = z->l - z->c; (void) m; /* or, line 220 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 227 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 237 */
+            {   int m5 = z->l - z->c; (void)m5; /* and, line 233 */
+                {   int m6 = z->l - z->c; (void)m6; /* or, line 229 */
                     {   int ret = r_standard_suffix(z);
-                        if (ret == 0) goto lab6; /* call standard_suffix, line 220 */
+                        if (ret == 0) goto lab6; /* call standard_suffix, line 229 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_i_verb_suffix(z);
-                        if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */
+                        if (ret == 0) goto lab7; /* call i_verb_suffix, line 230 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab7:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_verb_suffix(z);
-                        if (ret == 0) goto lab4; /* call verb_suffix, line 222 */
+                        if (ret == 0) goto lab4; /* call verb_suffix, line 231 */
                         if (ret < 0) return ret;
                     }
                 }
             lab5:
-                z->c = z->l - m;
-                {   int m = z->l - z->c; (void) m; /* try, line 225 */
-                    z->ket = z->c; /* [, line 225 */
-                    {   int m = z->l - z->c; (void) m; /* or, line 225 */
+                z->c = z->l - m5;
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 234 */
+                    z->ket = z->c; /* [, line 234 */
+                    {   int m7 = z->l - z->c; (void)m7; /* or, line 234 */
                         if (!(eq_s_b(z, 1, s_41))) goto lab10;
-                        z->bra = z->c; /* ], line 225 */
-                        {   int ret;
-                            ret = slice_from_s(z, 1, s_42); /* <-, line 225 */
+                        z->bra = z->c; /* ], line 234 */
+                        {   int ret = slice_from_s(z, 1, s_42); /* <-, line 234 */
                             if (ret < 0) return ret;
                         }
                         goto lab9;
                     lab10:
-                        z->c = z->l - m;
-                        if (!(eq_s_b(z, 2, s_43))) { z->c = z->l - m; goto lab8; }
-                        z->bra = z->c; /* ], line 226 */
-                        {   int ret;
-                            ret = slice_from_s(z, 1, s_44); /* <-, line 226 */
+                        z->c = z->l - m7;
+                        if (!(eq_s_b(z, 2, s_43))) { z->c = z->l - m_keep; goto lab8; }
+                        z->bra = z->c; /* ], line 235 */
+                        {   int ret = slice_from_s(z, 1, s_44); /* <-, line 235 */
                             if (ret < 0) return ret;
                         }
                     }
@@ -1252,45 +1212,45 @@ extern int french_UTF_8_stem(struct SN_env * z) {
             }
             goto lab3;
         lab4:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_residual_suffix(z);
-                if (ret == 0) goto lab2; /* call residual_suffix, line 229 */
+                if (ret == 0) goto lab2; /* call residual_suffix, line 238 */
                 if (ret < 0) return ret;
             }
         }
     lab3:
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 234 */
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 243 */
         {   int ret = r_un_double(z);
-            if (ret == 0) goto lab11; /* call un_double, line 234 */
+            if (ret == 0) goto lab11; /* call un_double, line 243 */
             if (ret < 0) return ret;
         }
     lab11:
-        z->c = z->l - m;
+        z->c = z->l - m8;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 235 */
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 244 */
         {   int ret = r_un_accent(z);
-            if (ret == 0) goto lab12; /* call un_accent, line 235 */
+            if (ret == 0) goto lab12; /* call un_accent, line 244 */
             if (ret < 0) return ret;
         }
     lab12:
-        z->c = z->l - m;
+        z->c = z->l - m9;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 237 */
+    {   int c10 = z->c; /* do, line 246 */
         {   int ret = r_postlude(z);
-            if (ret == 0) goto lab13; /* call postlude, line 237 */
+            if (ret == 0) goto lab13; /* call postlude, line 246 */
             if (ret < 0) return ret;
         }
     lab13:
-        z->c = c;
+        z->c = c10;
     }
     return 1;
 }
 
 extern struct SN_env * french_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void french_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void french_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_german.c b/libstemmer_c/src_c/stem_UTF_8_german.c
index d66a137..d79281c 100644
--- a/libstemmer_c/src_c/stem_UTF_8_german.c
+++ b/libstemmer_c/src_c/stem_UTF_8_german.c
@@ -3,24 +3,38 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int german_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_standard_suffix(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_R1(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * german_UTF_8_create_env(void);
 extern void german_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_1[1] = { 'U' };
-static symbol s_0_2[1] = { 'Y' };
-static symbol s_0_3[2] = { 0xC3, 0xA4 };
-static symbol s_0_4[2] = { 0xC3, 0xB6 };
-static symbol s_0_5[2] = { 0xC3, 0xBC };
 
-static struct among a_0[6] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 'U' };
+static const symbol s_0_2[1] = { 'Y' };
+static const symbol s_0_3[2] = { 0xC3, 0xA4 };
+static const symbol s_0_4[2] = { 0xC3, 0xB6 };
+static const symbol s_0_5[2] = { 0xC3, 0xBC };
+
+static const struct among a_0[6] =
 {
 /*  0 */ { 0, 0, -1, 6, 0},
 /*  1 */ { 1, s_0_1, 0, 2, 0},
@@ -30,15 +44,15 @@ static struct among a_0[6] =
 /*  5 */ { 2, s_0_5, 0, 5, 0}
 };
 
-static symbol s_1_0[1] = { 'e' };
-static symbol s_1_1[2] = { 'e', 'm' };
-static symbol s_1_2[2] = { 'e', 'n' };
-static symbol s_1_3[3] = { 'e', 'r', 'n' };
-static symbol s_1_4[2] = { 'e', 'r' };
-static symbol s_1_5[1] = { 's' };
-static symbol s_1_6[2] = { 'e', 's' };
+static const symbol s_1_0[1] = { 'e' };
+static const symbol s_1_1[2] = { 'e', 'm' };
+static const symbol s_1_2[2] = { 'e', 'n' };
+static const symbol s_1_3[3] = { 'e', 'r', 'n' };
+static const symbol s_1_4[2] = { 'e', 'r' };
+static const symbol s_1_5[1] = { 's' };
+static const symbol s_1_6[2] = { 'e', 's' };
 
-static struct among a_1[7] =
+static const struct among a_1[7] =
 {
 /*  0 */ { 1, s_1_0, -1, 1, 0},
 /*  1 */ { 2, s_1_1, -1, 1, 0},
@@ -49,12 +63,12 @@ static struct among a_1[7] =
 /*  6 */ { 2, s_1_6, 5, 1, 0}
 };
 
-static symbol s_2_0[2] = { 'e', 'n' };
-static symbol s_2_1[2] = { 'e', 'r' };
-static symbol s_2_2[2] = { 's', 't' };
-static symbol s_2_3[3] = { 'e', 's', 't' };
+static const symbol s_2_0[2] = { 'e', 'n' };
+static const symbol s_2_1[2] = { 'e', 'r' };
+static const symbol s_2_2[2] = { 's', 't' };
+static const symbol s_2_3[3] = { 'e', 's', 't' };
 
-static struct among a_2[4] =
+static const struct among a_2[4] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 2, s_2_1, -1, 1, 0},
@@ -62,25 +76,25 @@ static struct among a_2[4] =
 /*  3 */ { 3, s_2_3, 2, 1, 0}
 };
 
-static symbol s_3_0[2] = { 'i', 'g' };
-static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' };
+static const symbol s_3_0[2] = { 'i', 'g' };
+static const symbol s_3_1[4] = { 'l', 'i', 'c', 'h' };
 
-static struct among a_3[2] =
+static const struct among a_3[2] =
 {
 /*  0 */ { 2, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0}
 };
 
-static symbol s_4_0[3] = { 'e', 'n', 'd' };
-static symbol s_4_1[2] = { 'i', 'g' };
-static symbol s_4_2[3] = { 'u', 'n', 'g' };
-static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' };
-static symbol s_4_4[4] = { 'i', 's', 'c', 'h' };
-static symbol s_4_5[2] = { 'i', 'k' };
-static symbol s_4_6[4] = { 'h', 'e', 'i', 't' };
-static symbol s_4_7[4] = { 'k', 'e', 'i', 't' };
+static const symbol s_4_0[3] = { 'e', 'n', 'd' };
+static const symbol s_4_1[2] = { 'i', 'g' };
+static const symbol s_4_2[3] = { 'u', 'n', 'g' };
+static const symbol s_4_3[4] = { 'l', 'i', 'c', 'h' };
+static const symbol s_4_4[4] = { 'i', 's', 'c', 'h' };
+static const symbol s_4_5[2] = { 'i', 'k' };
+static const symbol s_4_6[4] = { 'h', 'e', 'i', 't' };
+static const symbol s_4_7[4] = { 'k', 'e', 'i', 't' };
 
-static struct among a_4[8] =
+static const struct among a_4[8] =
 {
 /*  0 */ { 3, s_4_0, -1, 1, 0},
 /*  1 */ { 2, s_4_1, -1, 2, 0},
@@ -92,95 +106,92 @@ static struct among a_4[8] =
 /*  7 */ { 4, s_4_7, -1, 4, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 };
 
-static unsigned char g_s_ending[] = { 117, 30, 5 };
+static const unsigned char g_s_ending[] = { 117, 30, 5 };
 
-static unsigned char g_st_ending[] = { 117, 30, 4 };
+static const unsigned char g_st_ending[] = { 117, 30, 4 };
 
-static symbol s_0[] = { 0xC3, 0x9F };
-static symbol s_1[] = { 's', 's' };
-static symbol s_2[] = { 'u' };
-static symbol s_3[] = { 'U' };
-static symbol s_4[] = { 'y' };
-static symbol s_5[] = { 'Y' };
-static symbol s_6[] = { 'y' };
-static symbol s_7[] = { 'u' };
-static symbol s_8[] = { 'a' };
-static symbol s_9[] = { 'o' };
-static symbol s_10[] = { 'u' };
-static symbol s_11[] = { 'i', 'g' };
-static symbol s_12[] = { 'e' };
-static symbol s_13[] = { 'e' };
-static symbol s_14[] = { 'e', 'r' };
-static symbol s_15[] = { 'e', 'n' };
+static const symbol s_0[] = { 0xC3, 0x9F };
+static const symbol s_1[] = { 's', 's' };
+static const symbol s_2[] = { 'u' };
+static const symbol s_3[] = { 'U' };
+static const symbol s_4[] = { 'y' };
+static const symbol s_5[] = { 'Y' };
+static const symbol s_6[] = { 'y' };
+static const symbol s_7[] = { 'u' };
+static const symbol s_8[] = { 'a' };
+static const symbol s_9[] = { 'o' };
+static const symbol s_10[] = { 'u' };
+static const symbol s_11[] = { 'i', 'g' };
+static const symbol s_12[] = { 'e' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'e', 'r' };
+static const symbol s_15[] = { 'e', 'n' };
 
 static int r_prelude(struct SN_env * z) {
     {   int c_test = z->c; /* test, line 30 */
         while(1) { /* repeat, line 30 */
-            int c = z->c;
-            {   int c = z->c; /* or, line 33 */
+            int c1 = z->c;
+            {   int c2 = z->c; /* or, line 33 */
                 z->bra = z->c; /* [, line 32 */
                 if (!(eq_s(z, 2, s_0))) goto lab2;
                 z->ket = z->c; /* ], line 32 */
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_1); /* <-, line 32 */
+                {   int ret = slice_from_s(z, 2, s_1); /* <-, line 32 */
                     if (ret < 0) return ret;
                 }
                 goto lab1;
             lab2:
-                z->c = c;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 33 */
+                z->c = c2;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 33 */
                 }
             }
         lab1:
             continue;
         lab0:
-            z->c = c;
+            z->c = c1;
             break;
         }
         z->c = c_test;
     }
     while(1) { /* repeat, line 36 */
-        int c = z->c;
+        int c3 = z->c;
         while(1) { /* goto, line 36 */
-            int c = z->c;
-            if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4;
+            int c4 = z->c;
+            if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab4;
             z->bra = z->c; /* [, line 37 */
-            {   int c = z->c; /* or, line 37 */
+            {   int c5 = z->c; /* or, line 37 */
                 if (!(eq_s(z, 1, s_2))) goto lab6;
                 z->ket = z->c; /* ], line 37 */
-                if (!(in_grouping_U(z, g_v, 97, 252))) goto lab6;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_3); /* <-, line 37 */
+                if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab6;
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 37 */
                     if (ret < 0) return ret;
                 }
                 goto lab5;
             lab6:
-                z->c = c;
+                z->c = c5;
                 if (!(eq_s(z, 1, s_4))) goto lab4;
                 z->ket = z->c; /* ], line 38 */
-                if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_5); /* <-, line 38 */
+                if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab4;
+                {   int ret = slice_from_s(z, 1, s_5); /* <-, line 38 */
                     if (ret < 0) return ret;
                 }
             }
         lab5:
-            z->c = c;
+            z->c = c4;
             break;
         lab4:
-            z->c = c;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab3;
-                z->c = c; /* goto, line 36 */
+            z->c = c4;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab3;
+                z->c = ret; /* goto, line 36 */
             }
         }
         continue;
     lab3:
-        z->c = c;
+        z->c = c3;
         break;
     }
     return 1;
@@ -190,53 +201,37 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     {   int c_test = z->c; /* test, line 47 */
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, + 3);
-            if (c < 0) return 0;
-            z->c = c; /* hop, line 47 */
+        {   int ret = skip_utf8(z->p, z->c, 0, z->l, + 3);
+            if (ret < 0) return 0;
+            z->c = ret; /* hop, line 47 */
         }
         z->I[2] = z->c; /* setmark x, line 47 */
         z->c = c_test;
     }
-    while(1) { /* gopast, line 49 */
-        if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0;
-        break;
-    lab0:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 49 */
-        }
+    {    /* gopast */ /* grouping v, line 49 */
+        int ret = out_grouping_U(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 49 */
-        if (!(out_grouping_U(z, g_v, 97, 252))) goto lab1;
-        break;
-    lab1:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 49 */
-        }
+    {    /* gopast */ /* non v, line 49 */
+        int ret = in_grouping_U(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 49 */
      /* try, line 50 */
-    if (!(z->I[0] < z->I[2])) goto lab2;
+    if (!(z->I[0] < z->I[2])) goto lab0;
     z->I[0] = z->I[2];
-lab2:
-    while(1) { /* gopast, line 51 */
-        if (!(in_grouping_U(z, g_v, 97, 252))) goto lab3;
-        break;
-    lab3:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 51 */
-        }
+lab0:
+    {    /* gopast */ /* grouping v, line 51 */
+        int ret = out_grouping_U(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
-    while(1) { /* gopast, line 51 */
-        if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4;
-        break;
-    lab4:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 51 */
-        }
+    {    /* gopast */ /* non v, line 51 */
+        int ret = in_grouping_U(z, g_v, 97, 252, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[1] = z->c; /* setmark p2, line 51 */
     return 1;
@@ -245,7 +240,7 @@ lab2:
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 55 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 57 */
         among_var = find_among(z, a_0, 6); /* substring, line 57 */
         if (!(among_var)) goto lab0;
@@ -253,45 +248,40 @@ static int r_postlude(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_6); /* <-, line 58 */
+                {   int ret = slice_from_s(z, 1, s_6); /* <-, line 58 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_7); /* <-, line 59 */
+                {   int ret = slice_from_s(z, 1, s_7); /* <-, line 59 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_8); /* <-, line 60 */
+                {   int ret = slice_from_s(z, 1, s_8); /* <-, line 60 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_9); /* <-, line 61 */
+                {   int ret = slice_from_s(z, 1, s_9); /* <-, line 61 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 5:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 62 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 62 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 6:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 63 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 63 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -309,8 +299,9 @@ static int r_R2(struct SN_env * z) {
 
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
-    {   int m = z->l - z->c; (void) m; /* do, line 74 */
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 74 */
         z->ket = z->c; /* [, line 75 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((811040 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0;
         among_var = find_among_b(z, a_1, 7); /* substring, line 75 */
         if (!(among_var)) goto lab0;
         z->bra = z->c; /* ], line 75 */
@@ -321,24 +312,23 @@ static int r_standard_suffix(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 77 */
+                {   int ret = slice_del(z); /* delete, line 77 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                if (!(in_grouping_b_U(z, g_s_ending, 98, 116))) goto lab0;
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 80 */
+                if (in_grouping_b_U(z, g_s_ending, 98, 116, 0)) goto lab0;
+                {   int ret = slice_del(z); /* delete, line 80 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab0:
-        z->c = z->l - m;
+        z->c = z->l - m1;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 84 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 84 */
         z->ket = z->c; /* [, line 85 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1327104 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab1;
         among_var = find_among_b(z, a_2, 4); /* substring, line 85 */
         if (!(among_var)) goto lab1;
         z->bra = z->c; /* ], line 85 */
@@ -349,28 +339,27 @@ static int r_standard_suffix(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab1;
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 87 */
+                {   int ret = slice_del(z); /* delete, line 87 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                if (!(in_grouping_b_U(z, g_st_ending, 98, 116))) goto lab1;
-                {   int c = skip_utf8(z->p, z->c, z->lb, z->l, - 3);
-                    if (c < 0) goto lab1;
-                    z->c = c; /* hop, line 90 */
+                if (in_grouping_b_U(z, g_st_ending, 98, 116, 0)) goto lab1;
+                {   int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 3);
+                    if (ret < 0) goto lab1;
+                    z->c = ret; /* hop, line 90 */
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 90 */
+                {   int ret = slice_del(z); /* delete, line 90 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 94 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 94 */
         z->ket = z->c; /* [, line 95 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1051024 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab2;
         among_var = find_among_b(z, a_4, 8); /* substring, line 95 */
         if (!(among_var)) goto lab2;
         z->bra = z->c; /* ], line 95 */
@@ -381,26 +370,24 @@ static int r_standard_suffix(struct SN_env * z) {
         switch(among_var) {
             case 0: goto lab2;
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 97 */
+                {   int ret = slice_del(z); /* delete, line 97 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 98 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 98 */
                     z->ket = z->c; /* [, line 98 */
-                    if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; }
+                    if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m_keep; goto lab3; }
                     z->bra = z->c; /* ], line 98 */
-                    {   int m = z->l - z->c; (void) m; /* not, line 98 */
+                    {   int m4 = z->l - z->c; (void)m4; /* not, line 98 */
                         if (!(eq_s_b(z, 1, s_12))) goto lab4;
-                        { z->c = z->l - m; goto lab3; }
+                        { z->c = z->l - m_keep; goto lab3; }
                     lab4:
-                        z->c = z->l - m;
+                        z->c = z->l - m4;
                     }
                     {   int ret = r_R2(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 98 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 98 */
+                    {   int ret = slice_del(z); /* delete, line 98 */
                         if (ret < 0) return ret;
                     }
                 lab3:
@@ -408,39 +395,36 @@ static int r_standard_suffix(struct SN_env * z) {
                 }
                 break;
             case 2:
-                {   int m = z->l - z->c; (void) m; /* not, line 101 */
+                {   int m5 = z->l - z->c; (void)m5; /* not, line 101 */
                     if (!(eq_s_b(z, 1, s_13))) goto lab5;
                     goto lab2;
                 lab5:
-                    z->c = z->l - m;
+                    z->c = z->l - m5;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 101 */
+                {   int ret = slice_del(z); /* delete, line 101 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 104 */
+                {   int ret = slice_del(z); /* delete, line 104 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 105 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 105 */
                     z->ket = z->c; /* [, line 106 */
-                    {   int m = z->l - z->c; (void) m; /* or, line 106 */
+                    {   int m6 = z->l - z->c; (void)m6; /* or, line 106 */
                         if (!(eq_s_b(z, 2, s_14))) goto lab8;
                         goto lab7;
                     lab8:
-                        z->c = z->l - m;
-                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; }
+                        z->c = z->l - m6;
+                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m_keep; goto lab6; }
                     }
                 lab7:
                     z->bra = z->c; /* ], line 106 */
                     {   int ret = r_R1(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab6; } /* call R1, line 106 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 106 */
+                    {   int ret = slice_del(z); /* delete, line 106 */
                         if (ret < 0) return ret;
                     }
                 lab6:
@@ -448,24 +432,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 }
                 break;
             case 4:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 110 */
+                {   int ret = slice_del(z); /* delete, line 110 */
                     if (ret < 0) return ret;
                 }
-                {   int m = z->l - z->c; (void) m; /* try, line 111 */
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
                     z->ket = z->c; /* [, line 112 */
+                    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 103 && z->p[z->c - 1] != 104)) { z->c = z->l - m_keep; goto lab9; }
                     among_var = find_among_b(z, a_3, 2); /* substring, line 112 */
-                    if (!(among_var)) { z->c = z->l - m; goto lab9; }
+                    if (!(among_var)) { z->c = z->l - m_keep; goto lab9; }
                     z->bra = z->c; /* ], line 112 */
                     {   int ret = r_R2(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab9; } /* call R2, line 112 */
                         if (ret < 0) return ret;
                     }
                     switch(among_var) {
-                        case 0: { z->c = z->l - m; goto lab9; }
+                        case 0: { z->c = z->l - m_keep; goto lab9; }
                         case 1:
-                            {   int ret;
-                                ret = slice_del(z); /* delete, line 114 */
+                            {   int ret = slice_del(z); /* delete, line 114 */
                                 if (ret < 0) return ret;
                             }
                             break;
@@ -476,51 +459,51 @@ static int r_standard_suffix(struct SN_env * z) {
                 break;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
     return 1;
 }
 
 extern int german_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 125 */
+    {   int c1 = z->c; /* do, line 125 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 125 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 126 */
+    {   int c2 = z->c; /* do, line 126 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 126 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 127 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 128 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 128 */
         {   int ret = r_standard_suffix(z);
             if (ret == 0) goto lab2; /* call standard_suffix, line 128 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 129 */
+    {   int c4 = z->c; /* do, line 129 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab3; /* call postlude, line 129 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = c;
+        z->c = c4;
     }
     return 1;
 }
 
 extern struct SN_env * german_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void german_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void german_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_hungarian.c b/libstemmer_c/src_c/stem_UTF_8_hungarian.c
new file mode 100644
index 0000000..44a62f7
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_hungarian.c
@@ -0,0 +1,1234 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int hungarian_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
+static int r_double(struct SN_env * z);
+static int r_undouble(struct SN_env * z);
+static int r_factive(struct SN_env * z);
+static int r_instrum(struct SN_env * z);
+static int r_plur_owner(struct SN_env * z);
+static int r_sing_owner(struct SN_env * z);
+static int r_owned(struct SN_env * z);
+static int r_plural(struct SN_env * z);
+static int r_case_other(struct SN_env * z);
+static int r_case_special(struct SN_env * z);
+static int r_case(struct SN_env * z);
+static int r_v_ending(struct SN_env * z);
+static int r_R1(struct SN_env * z);
+static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern struct SN_env * hungarian_UTF_8_create_env(void);
+extern void hungarian_UTF_8_close_env(struct SN_env * z);
+
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[2] = { 'c', 's' };
+static const symbol s_0_1[3] = { 'd', 'z', 's' };
+static const symbol s_0_2[2] = { 'g', 'y' };
+static const symbol s_0_3[2] = { 'l', 'y' };
+static const symbol s_0_4[2] = { 'n', 'y' };
+static const symbol s_0_5[2] = { 's', 'z' };
+static const symbol s_0_6[2] = { 't', 'y' };
+static const symbol s_0_7[2] = { 'z', 's' };
+
+static const struct among a_0[8] =
+{
+/*  0 */ { 2, s_0_0, -1, -1, 0},
+/*  1 */ { 3, s_0_1, -1, -1, 0},
+/*  2 */ { 2, s_0_2, -1, -1, 0},
+/*  3 */ { 2, s_0_3, -1, -1, 0},
+/*  4 */ { 2, s_0_4, -1, -1, 0},
+/*  5 */ { 2, s_0_5, -1, -1, 0},
+/*  6 */ { 2, s_0_6, -1, -1, 0},
+/*  7 */ { 2, s_0_7, -1, -1, 0}
+};
+
+static const symbol s_1_0[2] = { 0xC3, 0xA1 };
+static const symbol s_1_1[2] = { 0xC3, 0xA9 };
+
+static const struct among a_1[2] =
+{
+/*  0 */ { 2, s_1_0, -1, 1, 0},
+/*  1 */ { 2, s_1_1, -1, 2, 0}
+};
+
+static const symbol s_2_0[2] = { 'b', 'b' };
+static const symbol s_2_1[2] = { 'c', 'c' };
+static const symbol s_2_2[2] = { 'd', 'd' };
+static const symbol s_2_3[2] = { 'f', 'f' };
+static const symbol s_2_4[2] = { 'g', 'g' };
+static const symbol s_2_5[2] = { 'j', 'j' };
+static const symbol s_2_6[2] = { 'k', 'k' };
+static const symbol s_2_7[2] = { 'l', 'l' };
+static const symbol s_2_8[2] = { 'm', 'm' };
+static const symbol s_2_9[2] = { 'n', 'n' };
+static const symbol s_2_10[2] = { 'p', 'p' };
+static const symbol s_2_11[2] = { 'r', 'r' };
+static const symbol s_2_12[3] = { 'c', 'c', 's' };
+static const symbol s_2_13[2] = { 's', 's' };
+static const symbol s_2_14[3] = { 'z', 'z', 's' };
+static const symbol s_2_15[2] = { 't', 't' };
+static const symbol s_2_16[2] = { 'v', 'v' };
+static const symbol s_2_17[3] = { 'g', 'g', 'y' };
+static const symbol s_2_18[3] = { 'l', 'l', 'y' };
+static const symbol s_2_19[3] = { 'n', 'n', 'y' };
+static const symbol s_2_20[3] = { 't', 't', 'y' };
+static const symbol s_2_21[3] = { 's', 's', 'z' };
+static const symbol s_2_22[2] = { 'z', 'z' };
+
+static const struct among a_2[23] =
+{
+/*  0 */ { 2, s_2_0, -1, -1, 0},
+/*  1 */ { 2, s_2_1, -1, -1, 0},
+/*  2 */ { 2, s_2_2, -1, -1, 0},
+/*  3 */ { 2, s_2_3, -1, -1, 0},
+/*  4 */ { 2, s_2_4, -1, -1, 0},
+/*  5 */ { 2, s_2_5, -1, -1, 0},
+/*  6 */ { 2, s_2_6, -1, -1, 0},
+/*  7 */ { 2, s_2_7, -1, -1, 0},
+/*  8 */ { 2, s_2_8, -1, -1, 0},
+/*  9 */ { 2, s_2_9, -1, -1, 0},
+/* 10 */ { 2, s_2_10, -1, -1, 0},
+/* 11 */ { 2, s_2_11, -1, -1, 0},
+/* 12 */ { 3, s_2_12, -1, -1, 0},
+/* 13 */ { 2, s_2_13, -1, -1, 0},
+/* 14 */ { 3, s_2_14, -1, -1, 0},
+/* 15 */ { 2, s_2_15, -1, -1, 0},
+/* 16 */ { 2, s_2_16, -1, -1, 0},
+/* 17 */ { 3, s_2_17, -1, -1, 0},
+/* 18 */ { 3, s_2_18, -1, -1, 0},
+/* 19 */ { 3, s_2_19, -1, -1, 0},
+/* 20 */ { 3, s_2_20, -1, -1, 0},
+/* 21 */ { 3, s_2_21, -1, -1, 0},
+/* 22 */ { 2, s_2_22, -1, -1, 0}
+};
+
+static const symbol s_3_0[2] = { 'a', 'l' };
+static const symbol s_3_1[2] = { 'e', 'l' };
+
+static const struct among a_3[2] =
+{
+/*  0 */ { 2, s_3_0, -1, 1, 0},
+/*  1 */ { 2, s_3_1, -1, 2, 0}
+};
+
+static const symbol s_4_0[2] = { 'b', 'a' };
+static const symbol s_4_1[2] = { 'r', 'a' };
+static const symbol s_4_2[2] = { 'b', 'e' };
+static const symbol s_4_3[2] = { 'r', 'e' };
+static const symbol s_4_4[2] = { 'i', 'g' };
+static const symbol s_4_5[3] = { 'n', 'a', 'k' };
+static const symbol s_4_6[3] = { 'n', 'e', 'k' };
+static const symbol s_4_7[3] = { 'v', 'a', 'l' };
+static const symbol s_4_8[3] = { 'v', 'e', 'l' };
+static const symbol s_4_9[2] = { 'u', 'l' };
+static const symbol s_4_10[4] = { 'n', 0xC3, 0xA1, 'l' };
+static const symbol s_4_11[4] = { 'n', 0xC3, 0xA9, 'l' };
+static const symbol s_4_12[4] = { 'b', 0xC3, 0xB3, 'l' };
+static const symbol s_4_13[4] = { 'r', 0xC3, 0xB3, 'l' };
+static const symbol s_4_14[4] = { 't', 0xC3, 0xB3, 'l' };
+static const symbol s_4_15[4] = { 'b', 0xC3, 0xB5, 'l' };
+static const symbol s_4_16[4] = { 'r', 0xC3, 0xB5, 'l' };
+static const symbol s_4_17[4] = { 't', 0xC3, 0xB5, 'l' };
+static const symbol s_4_18[3] = { 0xC3, 0xBC, 'l' };
+static const symbol s_4_19[1] = { 'n' };
+static const symbol s_4_20[2] = { 'a', 'n' };
+static const symbol s_4_21[3] = { 'b', 'a', 'n' };
+static const symbol s_4_22[2] = { 'e', 'n' };
+static const symbol s_4_23[3] = { 'b', 'e', 'n' };
+static const symbol s_4_24[7] = { 'k', 0xC3, 0xA9, 'p', 'p', 'e', 'n' };
+static const symbol s_4_25[2] = { 'o', 'n' };
+static const symbol s_4_26[3] = { 0xC3, 0xB6, 'n' };
+static const symbol s_4_27[5] = { 'k', 0xC3, 0xA9, 'p', 'p' };
+static const symbol s_4_28[3] = { 'k', 'o', 'r' };
+static const symbol s_4_29[1] = { 't' };
+static const symbol s_4_30[2] = { 'a', 't' };
+static const symbol s_4_31[2] = { 'e', 't' };
+static const symbol s_4_32[5] = { 'k', 0xC3, 0xA9, 'n', 't' };
+static const symbol s_4_33[7] = { 'a', 'n', 'k', 0xC3, 0xA9, 'n', 't' };
+static const symbol s_4_34[7] = { 'e', 'n', 'k', 0xC3, 0xA9, 'n', 't' };
+static const symbol s_4_35[7] = { 'o', 'n', 'k', 0xC3, 0xA9, 'n', 't' };
+static const symbol s_4_36[2] = { 'o', 't' };
+static const symbol s_4_37[4] = { 0xC3, 0xA9, 'r', 't' };
+static const symbol s_4_38[3] = { 0xC3, 0xB6, 't' };
+static const symbol s_4_39[3] = { 'h', 'e', 'z' };
+static const symbol s_4_40[3] = { 'h', 'o', 'z' };
+static const symbol s_4_41[4] = { 'h', 0xC3, 0xB6, 'z' };
+static const symbol s_4_42[3] = { 'v', 0xC3, 0xA1 };
+static const symbol s_4_43[3] = { 'v', 0xC3, 0xA9 };
+
+static const struct among a_4[44] =
+{
+/*  0 */ { 2, s_4_0, -1, -1, 0},
+/*  1 */ { 2, s_4_1, -1, -1, 0},
+/*  2 */ { 2, s_4_2, -1, -1, 0},
+/*  3 */ { 2, s_4_3, -1, -1, 0},
+/*  4 */ { 2, s_4_4, -1, -1, 0},
+/*  5 */ { 3, s_4_5, -1, -1, 0},
+/*  6 */ { 3, s_4_6, -1, -1, 0},
+/*  7 */ { 3, s_4_7, -1, -1, 0},
+/*  8 */ { 3, s_4_8, -1, -1, 0},
+/*  9 */ { 2, s_4_9, -1, -1, 0},
+/* 10 */ { 4, s_4_10, -1, -1, 0},
+/* 11 */ { 4, s_4_11, -1, -1, 0},
+/* 12 */ { 4, s_4_12, -1, -1, 0},
+/* 13 */ { 4, s_4_13, -1, -1, 0},
+/* 14 */ { 4, s_4_14, -1, -1, 0},
+/* 15 */ { 4, s_4_15, -1, -1, 0},
+/* 16 */ { 4, s_4_16, -1, -1, 0},
+/* 17 */ { 4, s_4_17, -1, -1, 0},
+/* 18 */ { 3, s_4_18, -1, -1, 0},
+/* 19 */ { 1, s_4_19, -1, -1, 0},
+/* 20 */ { 2, s_4_20, 19, -1, 0},
+/* 21 */ { 3, s_4_21, 20, -1, 0},
+/* 22 */ { 2, s_4_22, 19, -1, 0},
+/* 23 */ { 3, s_4_23, 22, -1, 0},
+/* 24 */ { 7, s_4_24, 22, -1, 0},
+/* 25 */ { 2, s_4_25, 19, -1, 0},
+/* 26 */ { 3, s_4_26, 19, -1, 0},
+/* 27 */ { 5, s_4_27, -1, -1, 0},
+/* 28 */ { 3, s_4_28, -1, -1, 0},
+/* 29 */ { 1, s_4_29, -1, -1, 0},
+/* 30 */ { 2, s_4_30, 29, -1, 0},
+/* 31 */ { 2, s_4_31, 29, -1, 0},
+/* 32 */ { 5, s_4_32, 29, -1, 0},
+/* 33 */ { 7, s_4_33, 32, -1, 0},
+/* 34 */ { 7, s_4_34, 32, -1, 0},
+/* 35 */ { 7, s_4_35, 32, -1, 0},
+/* 36 */ { 2, s_4_36, 29, -1, 0},
+/* 37 */ { 4, s_4_37, 29, -1, 0},
+/* 38 */ { 3, s_4_38, 29, -1, 0},
+/* 39 */ { 3, s_4_39, -1, -1, 0},
+/* 40 */ { 3, s_4_40, -1, -1, 0},
+/* 41 */ { 4, s_4_41, -1, -1, 0},
+/* 42 */ { 3, s_4_42, -1, -1, 0},
+/* 43 */ { 3, s_4_43, -1, -1, 0}
+};
+
+static const symbol s_5_0[3] = { 0xC3, 0xA1, 'n' };
+static const symbol s_5_1[3] = { 0xC3, 0xA9, 'n' };
+static const symbol s_5_2[8] = { 0xC3, 0xA1, 'n', 'k', 0xC3, 0xA9, 'n', 't' };
+
+static const struct among a_5[3] =
+{
+/*  0 */ { 3, s_5_0, -1, 2, 0},
+/*  1 */ { 3, s_5_1, -1, 1, 0},
+/*  2 */ { 8, s_5_2, -1, 3, 0}
+};
+
+static const symbol s_6_0[4] = { 's', 't', 'u', 'l' };
+static const symbol s_6_1[5] = { 'a', 's', 't', 'u', 'l' };
+static const symbol s_6_2[6] = { 0xC3, 0xA1, 's', 't', 'u', 'l' };
+static const symbol s_6_3[5] = { 's', 't', 0xC3, 0xBC, 'l' };
+static const symbol s_6_4[6] = { 'e', 's', 't', 0xC3, 0xBC, 'l' };
+static const symbol s_6_5[7] = { 0xC3, 0xA9, 's', 't', 0xC3, 0xBC, 'l' };
+
+static const struct among a_6[6] =
+{
+/*  0 */ { 4, s_6_0, -1, 2, 0},
+/*  1 */ { 5, s_6_1, 0, 1, 0},
+/*  2 */ { 6, s_6_2, 0, 3, 0},
+/*  3 */ { 5, s_6_3, -1, 2, 0},
+/*  4 */ { 6, s_6_4, 3, 1, 0},
+/*  5 */ { 7, s_6_5, 3, 4, 0}
+};
+
+static const symbol s_7_0[2] = { 0xC3, 0xA1 };
+static const symbol s_7_1[2] = { 0xC3, 0xA9 };
+
+static const struct among a_7[2] =
+{
+/*  0 */ { 2, s_7_0, -1, 1, 0},
+/*  1 */ { 2, s_7_1, -1, 2, 0}
+};
+
+static const symbol s_8_0[1] = { 'k' };
+static const symbol s_8_1[2] = { 'a', 'k' };
+static const symbol s_8_2[2] = { 'e', 'k' };
+static const symbol s_8_3[2] = { 'o', 'k' };
+static const symbol s_8_4[3] = { 0xC3, 0xA1, 'k' };
+static const symbol s_8_5[3] = { 0xC3, 0xA9, 'k' };
+static const symbol s_8_6[3] = { 0xC3, 0xB6, 'k' };
+
+static const struct among a_8[7] =
+{
+/*  0 */ { 1, s_8_0, -1, 7, 0},
+/*  1 */ { 2, s_8_1, 0, 4, 0},
+/*  2 */ { 2, s_8_2, 0, 6, 0},
+/*  3 */ { 2, s_8_3, 0, 5, 0},
+/*  4 */ { 3, s_8_4, 0, 1, 0},
+/*  5 */ { 3, s_8_5, 0, 2, 0},
+/*  6 */ { 3, s_8_6, 0, 3, 0}
+};
+
+static const symbol s_9_0[3] = { 0xC3, 0xA9, 'i' };
+static const symbol s_9_1[5] = { 0xC3, 0xA1, 0xC3, 0xA9, 'i' };
+static const symbol s_9_2[5] = { 0xC3, 0xA9, 0xC3, 0xA9, 'i' };
+static const symbol s_9_3[2] = { 0xC3, 0xA9 };
+static const symbol s_9_4[3] = { 'k', 0xC3, 0xA9 };
+static const symbol s_9_5[4] = { 'a', 'k', 0xC3, 0xA9 };
+static const symbol s_9_6[4] = { 'e', 'k', 0xC3, 0xA9 };
+static const symbol s_9_7[4] = { 'o', 'k', 0xC3, 0xA9 };
+static const symbol s_9_8[5] = { 0xC3, 0xA1, 'k', 0xC3, 0xA9 };
+static const symbol s_9_9[5] = { 0xC3, 0xA9, 'k', 0xC3, 0xA9 };
+static const symbol s_9_10[5] = { 0xC3, 0xB6, 'k', 0xC3, 0xA9 };
+static const symbol s_9_11[4] = { 0xC3, 0xA9, 0xC3, 0xA9 };
+
+static const struct among a_9[12] =
+{
+/*  0 */ { 3, s_9_0, -1, 7, 0},
+/*  1 */ { 5, s_9_1, 0, 6, 0},
+/*  2 */ { 5, s_9_2, 0, 5, 0},
+/*  3 */ { 2, s_9_3, -1, 9, 0},
+/*  4 */ { 3, s_9_4, 3, 4, 0},
+/*  5 */ { 4, s_9_5, 4, 1, 0},
+/*  6 */ { 4, s_9_6, 4, 1, 0},
+/*  7 */ { 4, s_9_7, 4, 1, 0},
+/*  8 */ { 5, s_9_8, 4, 3, 0},
+/*  9 */ { 5, s_9_9, 4, 2, 0},
+/* 10 */ { 5, s_9_10, 4, 1, 0},
+/* 11 */ { 4, s_9_11, 3, 8, 0}
+};
+
+static const symbol s_10_0[1] = { 'a' };
+static const symbol s_10_1[2] = { 'j', 'a' };
+static const symbol s_10_2[1] = { 'd' };
+static const symbol s_10_3[2] = { 'a', 'd' };
+static const symbol s_10_4[2] = { 'e', 'd' };
+static const symbol s_10_5[2] = { 'o', 'd' };
+static const symbol s_10_6[3] = { 0xC3, 0xA1, 'd' };
+static const symbol s_10_7[3] = { 0xC3, 0xA9, 'd' };
+static const symbol s_10_8[3] = { 0xC3, 0xB6, 'd' };
+static const symbol s_10_9[1] = { 'e' };
+static const symbol s_10_10[2] = { 'j', 'e' };
+static const symbol s_10_11[2] = { 'n', 'k' };
+static const symbol s_10_12[3] = { 'u', 'n', 'k' };
+static const symbol s_10_13[4] = { 0xC3, 0xA1, 'n', 'k' };
+static const symbol s_10_14[4] = { 0xC3, 0xA9, 'n', 'k' };
+static const symbol s_10_15[4] = { 0xC3, 0xBC, 'n', 'k' };
+static const symbol s_10_16[2] = { 'u', 'k' };
+static const symbol s_10_17[3] = { 'j', 'u', 'k' };
+static const symbol s_10_18[5] = { 0xC3, 0xA1, 'j', 'u', 'k' };
+static const symbol s_10_19[3] = { 0xC3, 0xBC, 'k' };
+static const symbol s_10_20[4] = { 'j', 0xC3, 0xBC, 'k' };
+static const symbol s_10_21[6] = { 0xC3, 0xA9, 'j', 0xC3, 0xBC, 'k' };
+static const symbol s_10_22[1] = { 'm' };
+static const symbol s_10_23[2] = { 'a', 'm' };
+static const symbol s_10_24[2] = { 'e', 'm' };
+static const symbol s_10_25[2] = { 'o', 'm' };
+static const symbol s_10_26[3] = { 0xC3, 0xA1, 'm' };
+static const symbol s_10_27[3] = { 0xC3, 0xA9, 'm' };
+static const symbol s_10_28[1] = { 'o' };
+static const symbol s_10_29[2] = { 0xC3, 0xA1 };
+static const symbol s_10_30[2] = { 0xC3, 0xA9 };
+
+static const struct among a_10[31] =
+{
+/*  0 */ { 1, s_10_0, -1, 18, 0},
+/*  1 */ { 2, s_10_1, 0, 17, 0},
+/*  2 */ { 1, s_10_2, -1, 16, 0},
+/*  3 */ { 2, s_10_3, 2, 13, 0},
+/*  4 */ { 2, s_10_4, 2, 13, 0},
+/*  5 */ { 2, s_10_5, 2, 13, 0},
+/*  6 */ { 3, s_10_6, 2, 14, 0},
+/*  7 */ { 3, s_10_7, 2, 15, 0},
+/*  8 */ { 3, s_10_8, 2, 13, 0},
+/*  9 */ { 1, s_10_9, -1, 18, 0},
+/* 10 */ { 2, s_10_10, 9, 17, 0},
+/* 11 */ { 2, s_10_11, -1, 4, 0},
+/* 12 */ { 3, s_10_12, 11, 1, 0},
+/* 13 */ { 4, s_10_13, 11, 2, 0},
+/* 14 */ { 4, s_10_14, 11, 3, 0},
+/* 15 */ { 4, s_10_15, 11, 1, 0},
+/* 16 */ { 2, s_10_16, -1, 8, 0},
+/* 17 */ { 3, s_10_17, 16, 7, 0},
+/* 18 */ { 5, s_10_18, 17, 5, 0},
+/* 19 */ { 3, s_10_19, -1, 8, 0},
+/* 20 */ { 4, s_10_20, 19, 7, 0},
+/* 21 */ { 6, s_10_21, 20, 6, 0},
+/* 22 */ { 1, s_10_22, -1, 12, 0},
+/* 23 */ { 2, s_10_23, 22, 9, 0},
+/* 24 */ { 2, s_10_24, 22, 9, 0},
+/* 25 */ { 2, s_10_25, 22, 9, 0},
+/* 26 */ { 3, s_10_26, 22, 10, 0},
+/* 27 */ { 3, s_10_27, 22, 11, 0},
+/* 28 */ { 1, s_10_28, -1, 18, 0},
+/* 29 */ { 2, s_10_29, -1, 19, 0},
+/* 30 */ { 2, s_10_30, -1, 20, 0}
+};
+
+static const symbol s_11_0[2] = { 'i', 'd' };
+static const symbol s_11_1[3] = { 'a', 'i', 'd' };
+static const symbol s_11_2[4] = { 'j', 'a', 'i', 'd' };
+static const symbol s_11_3[3] = { 'e', 'i', 'd' };
+static const symbol s_11_4[4] = { 'j', 'e', 'i', 'd' };
+static const symbol s_11_5[4] = { 0xC3, 0xA1, 'i', 'd' };
+static const symbol s_11_6[4] = { 0xC3, 0xA9, 'i', 'd' };
+static const symbol s_11_7[1] = { 'i' };
+static const symbol s_11_8[2] = { 'a', 'i' };
+static const symbol s_11_9[3] = { 'j', 'a', 'i' };
+static const symbol s_11_10[2] = { 'e', 'i' };
+static const symbol s_11_11[3] = { 'j', 'e', 'i' };
+static const symbol s_11_12[3] = { 0xC3, 0xA1, 'i' };
+static const symbol s_11_13[3] = { 0xC3, 0xA9, 'i' };
+static const symbol s_11_14[4] = { 'i', 't', 'e', 'k' };
+static const symbol s_11_15[5] = { 'e', 'i', 't', 'e', 'k' };
+static const symbol s_11_16[6] = { 'j', 'e', 'i', 't', 'e', 'k' };
+static const symbol s_11_17[6] = { 0xC3, 0xA9, 'i', 't', 'e', 'k' };
+static const symbol s_11_18[2] = { 'i', 'k' };
+static const symbol s_11_19[3] = { 'a', 'i', 'k' };
+static const symbol s_11_20[4] = { 'j', 'a', 'i', 'k' };
+static const symbol s_11_21[3] = { 'e', 'i', 'k' };
+static const symbol s_11_22[4] = { 'j', 'e', 'i', 'k' };
+static const symbol s_11_23[4] = { 0xC3, 0xA1, 'i', 'k' };
+static const symbol s_11_24[4] = { 0xC3, 0xA9, 'i', 'k' };
+static const symbol s_11_25[3] = { 'i', 'n', 'k' };
+static const symbol s_11_26[4] = { 'a', 'i', 'n', 'k' };
+static const symbol s_11_27[5] = { 'j', 'a', 'i', 'n', 'k' };
+static const symbol s_11_28[4] = { 'e', 'i', 'n', 'k' };
+static const symbol s_11_29[5] = { 'j', 'e', 'i', 'n', 'k' };
+static const symbol s_11_30[5] = { 0xC3, 0xA1, 'i', 'n', 'k' };
+static const symbol s_11_31[5] = { 0xC3, 0xA9, 'i', 'n', 'k' };
+static const symbol s_11_32[5] = { 'a', 'i', 't', 'o', 'k' };
+static const symbol s_11_33[6] = { 'j', 'a', 'i', 't', 'o', 'k' };
+static const symbol s_11_34[6] = { 0xC3, 0xA1, 'i', 't', 'o', 'k' };
+static const symbol s_11_35[2] = { 'i', 'm' };
+static const symbol s_11_36[3] = { 'a', 'i', 'm' };
+static const symbol s_11_37[4] = { 'j', 'a', 'i', 'm' };
+static const symbol s_11_38[3] = { 'e', 'i', 'm' };
+static const symbol s_11_39[4] = { 'j', 'e', 'i', 'm' };
+static const symbol s_11_40[4] = { 0xC3, 0xA1, 'i', 'm' };
+static const symbol s_11_41[4] = { 0xC3, 0xA9, 'i', 'm' };
+
+static const struct among a_11[42] =
+{
+/*  0 */ { 2, s_11_0, -1, 10, 0},
+/*  1 */ { 3, s_11_1, 0, 9, 0},
+/*  2 */ { 4, s_11_2, 1, 6, 0},
+/*  3 */ { 3, s_11_3, 0, 9, 0},
+/*  4 */ { 4, s_11_4, 3, 6, 0},
+/*  5 */ { 4, s_11_5, 0, 7, 0},
+/*  6 */ { 4, s_11_6, 0, 8, 0},
+/*  7 */ { 1, s_11_7, -1, 15, 0},
+/*  8 */ { 2, s_11_8, 7, 14, 0},
+/*  9 */ { 3, s_11_9, 8, 11, 0},
+/* 10 */ { 2, s_11_10, 7, 14, 0},
+/* 11 */ { 3, s_11_11, 10, 11, 0},
+/* 12 */ { 3, s_11_12, 7, 12, 0},
+/* 13 */ { 3, s_11_13, 7, 13, 0},
+/* 14 */ { 4, s_11_14, -1, 24, 0},
+/* 15 */ { 5, s_11_15, 14, 21, 0},
+/* 16 */ { 6, s_11_16, 15, 20, 0},
+/* 17 */ { 6, s_11_17, 14, 23, 0},
+/* 18 */ { 2, s_11_18, -1, 29, 0},
+/* 19 */ { 3, s_11_19, 18, 26, 0},
+/* 20 */ { 4, s_11_20, 19, 25, 0},
+/* 21 */ { 3, s_11_21, 18, 26, 0},
+/* 22 */ { 4, s_11_22, 21, 25, 0},
+/* 23 */ { 4, s_11_23, 18, 27, 0},
+/* 24 */ { 4, s_11_24, 18, 28, 0},
+/* 25 */ { 3, s_11_25, -1, 20, 0},
+/* 26 */ { 4, s_11_26, 25, 17, 0},
+/* 27 */ { 5, s_11_27, 26, 16, 0},
+/* 28 */ { 4, s_11_28, 25, 17, 0},
+/* 29 */ { 5, s_11_29, 28, 16, 0},
+/* 30 */ { 5, s_11_30, 25, 18, 0},
+/* 31 */ { 5, s_11_31, 25, 19, 0},
+/* 32 */ { 5, s_11_32, -1, 21, 0},
+/* 33 */ { 6, s_11_33, 32, 20, 0},
+/* 34 */ { 6, s_11_34, -1, 22, 0},
+/* 35 */ { 2, s_11_35, -1, 5, 0},
+/* 36 */ { 3, s_11_36, 35, 4, 0},
+/* 37 */ { 4, s_11_37, 36, 1, 0},
+/* 38 */ { 3, s_11_38, 35, 4, 0},
+/* 39 */ { 4, s_11_39, 38, 1, 0},
+/* 40 */ { 4, s_11_40, 35, 2, 0},
+/* 41 */ { 4, s_11_41, 35, 3, 0}
+};
+
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 52, 14 };
+
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 'e' };
+static const symbol s_3[] = { 'a' };
+static const symbol s_4[] = { 'a' };
+static const symbol s_5[] = { 'a' };
+static const symbol s_6[] = { 'e' };
+static const symbol s_7[] = { 'a' };
+static const symbol s_8[] = { 'e' };
+static const symbol s_9[] = { 'e' };
+static const symbol s_10[] = { 'a' };
+static const symbol s_11[] = { 'e' };
+static const symbol s_12[] = { 'a' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'a' };
+static const symbol s_15[] = { 'e' };
+static const symbol s_16[] = { 'a' };
+static const symbol s_17[] = { 'e' };
+static const symbol s_18[] = { 'a' };
+static const symbol s_19[] = { 'e' };
+static const symbol s_20[] = { 'a' };
+static const symbol s_21[] = { 'e' };
+static const symbol s_22[] = { 'a' };
+static const symbol s_23[] = { 'e' };
+static const symbol s_24[] = { 'a' };
+static const symbol s_25[] = { 'e' };
+static const symbol s_26[] = { 'a' };
+static const symbol s_27[] = { 'e' };
+static const symbol s_28[] = { 'a' };
+static const symbol s_29[] = { 'e' };
+static const symbol s_30[] = { 'a' };
+static const symbol s_31[] = { 'e' };
+static const symbol s_32[] = { 'a' };
+static const symbol s_33[] = { 'e' };
+static const symbol s_34[] = { 'a' };
+static const symbol s_35[] = { 'e' };
+
+static int r_mark_regions(struct SN_env * z) {
+    z->I[0] = z->l;
+    {   int c1 = z->c; /* or, line 51 */
+        if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab1;
+        if (in_grouping_U(z, g_v, 97, 252, 1) < 0) goto lab1; /* goto */ /* non v, line 48 */
+        {   int c2 = z->c; /* or, line 49 */
+            if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 3 || !((101187584 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab3;
+            if (!(find_among(z, a_0, 8))) goto lab3; /* among, line 49 */
+            goto lab2;
+        lab3:
+            z->c = c2;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab1;
+                z->c = ret; /* next, line 49 */
+            }
+        }
+    lab2:
+        z->I[0] = z->c; /* setmark p1, line 50 */
+        goto lab0;
+    lab1:
+        z->c = c1;
+        if (out_grouping_U(z, g_v, 97, 252, 0)) return 0;
+        {    /* gopast */ /* grouping v, line 53 */
+            int ret = out_grouping_U(z, g_v, 97, 252, 1);
+            if (ret < 0) return 0;
+            z->c += ret;
+        }
+        z->I[0] = z->c; /* setmark p1, line 53 */
+    }
+lab0:
+    return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+    if (!(z->I[0] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_v_ending(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 61 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 161 && z->p[z->c - 1] != 169)) return 0;
+    among_var = find_among_b(z, a_1, 2); /* substring, line 61 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 61 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 61 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_0); /* <-, line 62 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_1); /* <-, line 63 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_double(struct SN_env * z) {
+    {   int m_test = z->l - z->c; /* test, line 68 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((106790108 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+        if (!(find_among_b(z, a_2, 23))) return 0; /* among, line 68 */
+        z->c = z->l - m_test;
+    }
+    return 1;
+}
+
+static int r_undouble(struct SN_env * z) {
+    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+        if (ret < 0) return 0;
+        z->c = ret; /* next, line 73 */
+    }
+    z->ket = z->c; /* [, line 73 */
+    {   int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 1);
+        if (ret < 0) return 0;
+        z->c = ret; /* hop, line 73 */
+    }
+    z->bra = z->c; /* ], line 73 */
+    {   int ret = slice_del(z); /* delete, line 73 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_instrum(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 77 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] != 108) return 0;
+    among_var = find_among_b(z, a_3, 2); /* substring, line 77 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 77 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 77 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 78 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 79 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    {   int ret = slice_del(z); /* delete, line 81 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = r_undouble(z);
+        if (ret == 0) return 0; /* call undouble, line 82 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_case(struct SN_env * z) {
+    z->ket = z->c; /* [, line 87 */
+    if (!(find_among_b(z, a_4, 44))) return 0; /* substring, line 87 */
+    z->bra = z->c; /* ], line 87 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 87 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = slice_del(z); /* delete, line 111 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = r_v_ending(z);
+        if (ret == 0) return 0; /* call v_ending, line 112 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_case_special(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 116 */
+    if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 110 && z->p[z->c - 1] != 116)) return 0;
+    among_var = find_among_b(z, a_5, 3); /* substring, line 116 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 116 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 116 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_2); /* <-, line 117 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_3); /* <-, line 118 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_4); /* <-, line 119 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_case_other(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 124 */
+    if (z->c - 3 <= z->lb || z->p[z->c - 1] != 108) return 0;
+    among_var = find_among_b(z, a_6, 6); /* substring, line 124 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 124 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 124 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 125 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_del(z); /* delete, line 126 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_5); /* <-, line 127 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_from_s(z, 1, s_6); /* <-, line 128 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_factive(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 133 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 161 && z->p[z->c - 1] != 169)) return 0;
+    among_var = find_among_b(z, a_7, 2); /* substring, line 133 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 133 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 133 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 134 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = r_double(z);
+                if (ret == 0) return 0; /* call double, line 135 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    {   int ret = slice_del(z); /* delete, line 137 */
+        if (ret < 0) return ret;
+    }
+    {   int ret = r_undouble(z);
+        if (ret == 0) return 0; /* call undouble, line 138 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_plural(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 142 */
+    if (z->c <= z->lb || z->p[z->c - 1] != 107) return 0;
+    among_var = find_among_b(z, a_8, 7); /* substring, line 142 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 142 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 142 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_7); /* <-, line 143 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_8); /* <-, line 144 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_del(z); /* delete, line 145 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 146 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_del(z); /* delete, line 147 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_del(z); /* delete, line 148 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_del(z); /* delete, line 149 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_owned(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 154 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 169)) return 0;
+    among_var = find_among_b(z, a_9, 12); /* substring, line 154 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 154 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 154 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 155 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_9); /* <-, line 156 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_10); /* <-, line 157 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 158 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_from_s(z, 1, s_11); /* <-, line 159 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_from_s(z, 1, s_12); /* <-, line 160 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_del(z); /* delete, line 161 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 8:
+            {   int ret = slice_from_s(z, 1, s_13); /* <-, line 162 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 9:
+            {   int ret = slice_del(z); /* delete, line 163 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_sing_owner(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 168 */
+    among_var = find_among_b(z, a_10, 31); /* substring, line 168 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 168 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 168 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 169 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_14); /* <-, line 170 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_15); /* <-, line 171 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 172 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_from_s(z, 1, s_16); /* <-, line 173 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_from_s(z, 1, s_17); /* <-, line 174 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_del(z); /* delete, line 175 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 8:
+            {   int ret = slice_del(z); /* delete, line 176 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 9:
+            {   int ret = slice_del(z); /* delete, line 177 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 10:
+            {   int ret = slice_from_s(z, 1, s_18); /* <-, line 178 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 11:
+            {   int ret = slice_from_s(z, 1, s_19); /* <-, line 179 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 12:
+            {   int ret = slice_del(z); /* delete, line 180 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 13:
+            {   int ret = slice_del(z); /* delete, line 181 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 14:
+            {   int ret = slice_from_s(z, 1, s_20); /* <-, line 182 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 15:
+            {   int ret = slice_from_s(z, 1, s_21); /* <-, line 183 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 16:
+            {   int ret = slice_del(z); /* delete, line 184 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 17:
+            {   int ret = slice_del(z); /* delete, line 185 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 18:
+            {   int ret = slice_del(z); /* delete, line 186 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 19:
+            {   int ret = slice_from_s(z, 1, s_22); /* <-, line 187 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 20:
+            {   int ret = slice_from_s(z, 1, s_23); /* <-, line 188 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_plur_owner(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 193 */
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((10768 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_11, 42); /* substring, line 193 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 193 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 193 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 194 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_24); /* <-, line 195 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_25); /* <-, line 196 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_del(z); /* delete, line 197 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int ret = slice_del(z); /* delete, line 198 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_del(z); /* delete, line 199 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_from_s(z, 1, s_26); /* <-, line 200 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 8:
+            {   int ret = slice_from_s(z, 1, s_27); /* <-, line 201 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 9:
+            {   int ret = slice_del(z); /* delete, line 202 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 10:
+            {   int ret = slice_del(z); /* delete, line 203 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 11:
+            {   int ret = slice_del(z); /* delete, line 204 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 12:
+            {   int ret = slice_from_s(z, 1, s_28); /* <-, line 205 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 13:
+            {   int ret = slice_from_s(z, 1, s_29); /* <-, line 206 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 14:
+            {   int ret = slice_del(z); /* delete, line 207 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 15:
+            {   int ret = slice_del(z); /* delete, line 208 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 16:
+            {   int ret = slice_del(z); /* delete, line 209 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 17:
+            {   int ret = slice_del(z); /* delete, line 210 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 18:
+            {   int ret = slice_from_s(z, 1, s_30); /* <-, line 211 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 19:
+            {   int ret = slice_from_s(z, 1, s_31); /* <-, line 212 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 20:
+            {   int ret = slice_del(z); /* delete, line 214 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 21:
+            {   int ret = slice_del(z); /* delete, line 215 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 22:
+            {   int ret = slice_from_s(z, 1, s_32); /* <-, line 216 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 23:
+            {   int ret = slice_from_s(z, 1, s_33); /* <-, line 217 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 24:
+            {   int ret = slice_del(z); /* delete, line 218 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 25:
+            {   int ret = slice_del(z); /* delete, line 219 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 26:
+            {   int ret = slice_del(z); /* delete, line 220 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 27:
+            {   int ret = slice_from_s(z, 1, s_34); /* <-, line 221 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 28:
+            {   int ret = slice_from_s(z, 1, s_35); /* <-, line 222 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 29:
+            {   int ret = slice_del(z); /* delete, line 223 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+extern int hungarian_UTF_8_stem(struct SN_env * z) {
+    {   int c1 = z->c; /* do, line 229 */
+        {   int ret = r_mark_regions(z);
+            if (ret == 0) goto lab0; /* call mark_regions, line 229 */
+            if (ret < 0) return ret;
+        }
+    lab0:
+        z->c = c1;
+    }
+    z->lb = z->c; z->c = z->l; /* backwards, line 230 */
+
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 231 */
+        {   int ret = r_instrum(z);
+            if (ret == 0) goto lab1; /* call instrum, line 231 */
+            if (ret < 0) return ret;
+        }
+    lab1:
+        z->c = z->l - m2;
+    }
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 232 */
+        {   int ret = r_case(z);
+            if (ret == 0) goto lab2; /* call case, line 232 */
+            if (ret < 0) return ret;
+        }
+    lab2:
+        z->c = z->l - m3;
+    }
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 233 */
+        {   int ret = r_case_special(z);
+            if (ret == 0) goto lab3; /* call case_special, line 233 */
+            if (ret < 0) return ret;
+        }
+    lab3:
+        z->c = z->l - m4;
+    }
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 234 */
+        {   int ret = r_case_other(z);
+            if (ret == 0) goto lab4; /* call case_other, line 234 */
+            if (ret < 0) return ret;
+        }
+    lab4:
+        z->c = z->l - m5;
+    }
+    {   int m6 = z->l - z->c; (void)m6; /* do, line 235 */
+        {   int ret = r_factive(z);
+            if (ret == 0) goto lab5; /* call factive, line 235 */
+            if (ret < 0) return ret;
+        }
+    lab5:
+        z->c = z->l - m6;
+    }
+    {   int m7 = z->l - z->c; (void)m7; /* do, line 236 */
+        {   int ret = r_owned(z);
+            if (ret == 0) goto lab6; /* call owned, line 236 */
+            if (ret < 0) return ret;
+        }
+    lab6:
+        z->c = z->l - m7;
+    }
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 237 */
+        {   int ret = r_sing_owner(z);
+            if (ret == 0) goto lab7; /* call sing_owner, line 237 */
+            if (ret < 0) return ret;
+        }
+    lab7:
+        z->c = z->l - m8;
+    }
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 238 */
+        {   int ret = r_plur_owner(z);
+            if (ret == 0) goto lab8; /* call plur_owner, line 238 */
+            if (ret < 0) return ret;
+        }
+    lab8:
+        z->c = z->l - m9;
+    }
+    {   int m10 = z->l - z->c; (void)m10; /* do, line 239 */
+        {   int ret = r_plural(z);
+            if (ret == 0) goto lab9; /* call plural, line 239 */
+            if (ret < 0) return ret;
+        }
+    lab9:
+        z->c = z->l - m10;
+    }
+    z->c = z->lb;
+    return 1;
+}
+
+extern struct SN_env * hungarian_UTF_8_create_env(void) { return SN_create_env(0, 1, 0); }
+
+extern void hungarian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_hungarian.h b/libstemmer_c/src_c/stem_UTF_8_hungarian.h
new file mode 100644
index 0000000..d81bd23
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_hungarian.h
@@ -0,0 +1,16 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct SN_env * hungarian_UTF_8_create_env(void);
+extern void hungarian_UTF_8_close_env(struct SN_env * z);
+
+extern int hungarian_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_italian.c b/libstemmer_c/src_c/stem_UTF_8_italian.c
index 5639b1c..7bb0511 100644
--- a/libstemmer_c/src_c/stem_UTF_8_italian.c
+++ b/libstemmer_c/src_c/stem_UTF_8_italian.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int italian_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_vowel_suffix(struct SN_env * z);
 static int r_verb_suffix(struct SN_env * z);
 static int r_standard_suffix(struct SN_env * z);
@@ -14,18 +20,26 @@ static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * italian_UTF_8_create_env(void);
 extern void italian_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_1[2] = { 'q', 'u' };
-static symbol s_0_2[2] = { 0xC3, 0xA1 };
-static symbol s_0_3[2] = { 0xC3, 0xA9 };
-static symbol s_0_4[2] = { 0xC3, 0xAD };
-static symbol s_0_5[2] = { 0xC3, 0xB3 };
-static symbol s_0_6[2] = { 0xC3, 0xBA };
 
-static struct among a_0[7] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[2] = { 'q', 'u' };
+static const symbol s_0_2[2] = { 0xC3, 0xA1 };
+static const symbol s_0_3[2] = { 0xC3, 0xA9 };
+static const symbol s_0_4[2] = { 0xC3, 0xAD };
+static const symbol s_0_5[2] = { 0xC3, 0xB3 };
+static const symbol s_0_6[2] = { 0xC3, 0xBA };
+
+static const struct among a_0[7] =
 {
 /*  0 */ { 0, 0, -1, 7, 0},
 /*  1 */ { 2, s_0_1, 0, 6, 0},
@@ -36,55 +50,55 @@ static struct among a_0[7] =
 /*  6 */ { 2, s_0_6, 0, 5, 0}
 };
 
-static symbol s_1_1[1] = { 'I' };
-static symbol s_1_2[1] = { 'U' };
+static const symbol s_1_1[1] = { 'I' };
+static const symbol s_1_2[1] = { 'U' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 1, s_1_1, 0, 1, 0},
 /*  2 */ { 1, s_1_2, 0, 2, 0}
 };
 
-static symbol s_2_0[2] = { 'l', 'a' };
-static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' };
-static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' };
-static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' };
-static symbol s_2_4[4] = { 't', 'e', 'l', 'a' };
-static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' };
-static symbol s_2_6[2] = { 'l', 'e' };
-static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' };
-static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' };
-static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' };
-static symbol s_2_10[4] = { 't', 'e', 'l', 'e' };
-static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' };
-static symbol s_2_12[2] = { 'n', 'e' };
-static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' };
-static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' };
-static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' };
-static symbol s_2_16[4] = { 's', 'e', 'n', 'e' };
-static symbol s_2_17[4] = { 't', 'e', 'n', 'e' };
-static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' };
-static symbol s_2_19[2] = { 'c', 'i' };
-static symbol s_2_20[2] = { 'l', 'i' };
-static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' };
-static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' };
-static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' };
-static symbol s_2_24[4] = { 't', 'e', 'l', 'i' };
-static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' };
-static symbol s_2_26[3] = { 'g', 'l', 'i' };
-static symbol s_2_27[2] = { 'm', 'i' };
-static symbol s_2_28[2] = { 's', 'i' };
-static symbol s_2_29[2] = { 't', 'i' };
-static symbol s_2_30[2] = { 'v', 'i' };
-static symbol s_2_31[2] = { 'l', 'o' };
-static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' };
-static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' };
-static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' };
-static symbol s_2_35[4] = { 't', 'e', 'l', 'o' };
-static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' };
+static const symbol s_2_0[2] = { 'l', 'a' };
+static const symbol s_2_1[4] = { 'c', 'e', 'l', 'a' };
+static const symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' };
+static const symbol s_2_3[4] = { 'm', 'e', 'l', 'a' };
+static const symbol s_2_4[4] = { 't', 'e', 'l', 'a' };
+static const symbol s_2_5[4] = { 'v', 'e', 'l', 'a' };
+static const symbol s_2_6[2] = { 'l', 'e' };
+static const symbol s_2_7[4] = { 'c', 'e', 'l', 'e' };
+static const symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' };
+static const symbol s_2_9[4] = { 'm', 'e', 'l', 'e' };
+static const symbol s_2_10[4] = { 't', 'e', 'l', 'e' };
+static const symbol s_2_11[4] = { 'v', 'e', 'l', 'e' };
+static const symbol s_2_12[2] = { 'n', 'e' };
+static const symbol s_2_13[4] = { 'c', 'e', 'n', 'e' };
+static const symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' };
+static const symbol s_2_15[4] = { 'm', 'e', 'n', 'e' };
+static const symbol s_2_16[4] = { 's', 'e', 'n', 'e' };
+static const symbol s_2_17[4] = { 't', 'e', 'n', 'e' };
+static const symbol s_2_18[4] = { 'v', 'e', 'n', 'e' };
+static const symbol s_2_19[2] = { 'c', 'i' };
+static const symbol s_2_20[2] = { 'l', 'i' };
+static const symbol s_2_21[4] = { 'c', 'e', 'l', 'i' };
+static const symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' };
+static const symbol s_2_23[4] = { 'm', 'e', 'l', 'i' };
+static const symbol s_2_24[4] = { 't', 'e', 'l', 'i' };
+static const symbol s_2_25[4] = { 'v', 'e', 'l', 'i' };
+static const symbol s_2_26[3] = { 'g', 'l', 'i' };
+static const symbol s_2_27[2] = { 'm', 'i' };
+static const symbol s_2_28[2] = { 's', 'i' };
+static const symbol s_2_29[2] = { 't', 'i' };
+static const symbol s_2_30[2] = { 'v', 'i' };
+static const symbol s_2_31[2] = { 'l', 'o' };
+static const symbol s_2_32[4] = { 'c', 'e', 'l', 'o' };
+static const symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' };
+static const symbol s_2_34[4] = { 'm', 'e', 'l', 'o' };
+static const symbol s_2_35[4] = { 't', 'e', 'l', 'o' };
+static const symbol s_2_36[4] = { 'v', 'e', 'l', 'o' };
 
-static struct among a_2[37] =
+static const struct among a_2[37] =
 {
 /*  0 */ { 2, s_2_0, -1, -1, 0},
 /*  1 */ { 4, s_2_1, 0, -1, 0},
@@ -125,13 +139,13 @@ static struct among a_2[37] =
 /* 36 */ { 4, s_2_36, 31, -1, 0}
 };
 
-static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' };
-static symbol s_3_2[2] = { 'a', 'r' };
-static symbol s_3_3[2] = { 'e', 'r' };
-static symbol s_3_4[2] = { 'i', 'r' };
+static const symbol s_3_0[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_3_1[4] = { 'e', 'n', 'd', 'o' };
+static const symbol s_3_2[2] = { 'a', 'r' };
+static const symbol s_3_3[2] = { 'e', 'r' };
+static const symbol s_3_4[2] = { 'i', 'r' };
 
-static struct among a_3[5] =
+static const struct among a_3[5] =
 {
 /*  0 */ { 4, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0},
@@ -140,12 +154,12 @@ static struct among a_3[5] =
 /*  4 */ { 2, s_3_4, -1, 2, 0}
 };
 
-static symbol s_4_0[2] = { 'i', 'c' };
-static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_4_2[2] = { 'o', 's' };
-static symbol s_4_3[2] = { 'i', 'v' };
+static const symbol s_4_0[2] = { 'i', 'c' };
+static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_4_2[2] = { 'o', 's' };
+static const symbol s_4_3[2] = { 'i', 'v' };
 
-static struct among a_4[4] =
+static const struct among a_4[4] =
 {
 /*  0 */ { 2, s_4_0, -1, -1, 0},
 /*  1 */ { 4, s_4_1, -1, -1, 0},
@@ -153,70 +167,70 @@ static struct among a_4[4] =
 /*  3 */ { 2, s_4_3, -1, 1, 0}
 };
 
-static symbol s_5_0[2] = { 'i', 'c' };
-static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_5_2[2] = { 'i', 'v' };
+static const symbol s_5_0[2] = { 'i', 'c' };
+static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_5_2[2] = { 'i', 'v' };
 
-static struct among a_5[3] =
+static const struct among a_5[3] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
 /*  2 */ { 2, s_5_2, -1, 1, 0}
 };
 
-static symbol s_6_0[3] = { 'i', 'c', 'a' };
-static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' };
-static symbol s_6_2[3] = { 'o', 's', 'a' };
-static symbol s_6_3[4] = { 'i', 's', 't', 'a' };
-static symbol s_6_4[3] = { 'i', 'v', 'a' };
-static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' };
-static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' };
-static symbol s_6_7[3] = { 'i', 'c', 'e' };
-static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
-static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' };
-static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' };
-static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' };
-static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' };
-static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' };
-static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' };
-static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' };
-static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' };
-static symbol s_6_17[3] = { 'o', 's', 'e' };
-static symbol s_6_18[4] = { 'a', 'n', 't', 'e' };
-static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_21[4] = { 'i', 's', 't', 'e' };
-static symbol s_6_22[3] = { 'i', 'v', 'e' };
-static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' };
-static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' };
-static symbol s_6_25[3] = { 'i', 'c', 'i' };
-static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' };
-static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' };
-static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' };
-static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' };
-static symbol s_6_30[4] = { 'i', 's', 'm', 'i' };
-static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' };
-static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' };
-static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' };
-static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' };
-static symbol s_6_35[3] = { 'o', 's', 'i' };
-static symbol s_6_36[4] = { 'a', 'n', 't', 'i' };
-static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' };
-static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' };
-static symbol s_6_39[4] = { 'i', 's', 't', 'i' };
-static symbol s_6_40[3] = { 'i', 'v', 'i' };
-static symbol s_6_41[3] = { 'i', 'c', 'o' };
-static symbol s_6_42[4] = { 'i', 's', 'm', 'o' };
-static symbol s_6_43[3] = { 'o', 's', 'o' };
-static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
-static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
-static symbol s_6_46[3] = { 'i', 'v', 'o' };
-static symbol s_6_47[4] = { 'i', 't', 0xC3, 0xA0 };
-static symbol s_6_48[5] = { 'i', 's', 't', 0xC3, 0xA0 };
-static symbol s_6_49[5] = { 'i', 's', 't', 0xC3, 0xA8 };
-static symbol s_6_50[5] = { 'i', 's', 't', 0xC3, 0xAC };
+static const symbol s_6_0[3] = { 'i', 'c', 'a' };
+static const symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' };
+static const symbol s_6_2[3] = { 'o', 's', 'a' };
+static const symbol s_6_3[4] = { 'i', 's', 't', 'a' };
+static const symbol s_6_4[3] = { 'i', 'v', 'a' };
+static const symbol s_6_5[4] = { 'a', 'n', 'z', 'a' };
+static const symbol s_6_6[4] = { 'e', 'n', 'z', 'a' };
+static const symbol s_6_7[3] = { 'i', 'c', 'e' };
+static const symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' };
+static const symbol s_6_9[4] = { 'i', 'c', 'h', 'e' };
+static const symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' };
+static const symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' };
+static const symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' };
+static const symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' };
+static const symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' };
+static const symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' };
+static const symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' };
+static const symbol s_6_17[3] = { 'o', 's', 'e' };
+static const symbol s_6_18[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_21[4] = { 'i', 's', 't', 'e' };
+static const symbol s_6_22[3] = { 'i', 'v', 'e' };
+static const symbol s_6_23[4] = { 'a', 'n', 'z', 'e' };
+static const symbol s_6_24[4] = { 'e', 'n', 'z', 'e' };
+static const symbol s_6_25[3] = { 'i', 'c', 'i' };
+static const symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' };
+static const symbol s_6_27[4] = { 'i', 'c', 'h', 'i' };
+static const symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' };
+static const symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' };
+static const symbol s_6_30[4] = { 'i', 's', 'm', 'i' };
+static const symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' };
+static const symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' };
+static const symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' };
+static const symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' };
+static const symbol s_6_35[3] = { 'o', 's', 'i' };
+static const symbol s_6_36[4] = { 'a', 'n', 't', 'i' };
+static const symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' };
+static const symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' };
+static const symbol s_6_39[4] = { 'i', 's', 't', 'i' };
+static const symbol s_6_40[3] = { 'i', 'v', 'i' };
+static const symbol s_6_41[3] = { 'i', 'c', 'o' };
+static const symbol s_6_42[4] = { 'i', 's', 'm', 'o' };
+static const symbol s_6_43[3] = { 'o', 's', 'o' };
+static const symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_6_46[3] = { 'i', 'v', 'o' };
+static const symbol s_6_47[4] = { 'i', 't', 0xC3, 0xA0 };
+static const symbol s_6_48[5] = { 'i', 's', 't', 0xC3, 0xA0 };
+static const symbol s_6_49[5] = { 'i', 's', 't', 0xC3, 0xA8 };
+static const symbol s_6_50[5] = { 'i', 's', 't', 0xC3, 0xAC };
 
-static struct among a_6[51] =
+static const struct among a_6[51] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 5, s_6_1, -1, 3, 0},
@@ -271,95 +285,95 @@ static struct among a_6[51] =
 /* 50 */ { 5, s_6_50, -1, 1, 0}
 };
 
-static symbol s_7_0[4] = { 'i', 's', 'c', 'a' };
-static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' };
-static symbol s_7_2[3] = { 'a', 't', 'a' };
-static symbol s_7_3[3] = { 'i', 't', 'a' };
-static symbol s_7_4[3] = { 'u', 't', 'a' };
-static symbol s_7_5[3] = { 'a', 'v', 'a' };
-static symbol s_7_6[3] = { 'e', 'v', 'a' };
-static symbol s_7_7[3] = { 'i', 'v', 'a' };
-static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' };
-static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' };
-static symbol s_7_10[4] = { 'i', 's', 'c', 'e' };
-static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' };
-static symbol s_7_12[3] = { 'a', 'r', 'e' };
-static symbol s_7_13[3] = { 'e', 'r', 'e' };
-static symbol s_7_14[3] = { 'i', 'r', 'e' };
-static symbol s_7_15[4] = { 'a', 's', 's', 'e' };
-static symbol s_7_16[3] = { 'a', 't', 'e' };
-static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' };
-static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' };
-static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' };
-static symbol s_7_20[3] = { 'e', 't', 'e' };
-static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' };
-static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' };
-static symbol s_7_23[3] = { 'i', 't', 'e' };
-static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' };
-static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' };
-static symbol s_7_26[3] = { 'u', 't', 'e' };
-static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' };
-static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' };
-static symbol s_7_29[4] = { 'i', 's', 'c', 'i' };
-static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' };
-static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' };
-static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' };
-static symbol s_7_33[4] = { 'a', 's', 's', 'i' };
-static symbol s_7_34[3] = { 'a', 't', 'i' };
-static symbol s_7_35[3] = { 'i', 't', 'i' };
-static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' };
-static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' };
-static symbol s_7_38[3] = { 'u', 't', 'i' };
-static symbol s_7_39[3] = { 'a', 'v', 'i' };
-static symbol s_7_40[3] = { 'e', 'v', 'i' };
-static symbol s_7_41[3] = { 'i', 'v', 'i' };
-static symbol s_7_42[4] = { 'i', 's', 'c', 'o' };
-static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' };
-static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' };
-static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' };
-static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' };
-static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' };
-static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' };
-static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' };
-static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' };
-static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' };
-static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' };
-static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' };
-static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' };
-static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' };
-static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' };
-static symbol s_7_58[3] = { 'a', 'n', 'o' };
-static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' };
-static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' };
-static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' };
-static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' };
-static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' };
-static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' };
-static symbol s_7_65[3] = { 'o', 'n', 'o' };
-static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' };
-static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' };
-static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' };
-static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' };
-static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
-static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
-static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' };
-static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' };
-static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' };
-static symbol s_7_75[3] = { 'a', 't', 'o' };
-static symbol s_7_76[3] = { 'i', 't', 'o' };
-static symbol s_7_77[3] = { 'u', 't', 'o' };
-static symbol s_7_78[3] = { 'a', 'v', 'o' };
-static symbol s_7_79[3] = { 'e', 'v', 'o' };
-static symbol s_7_80[3] = { 'i', 'v', 'o' };
-static symbol s_7_81[2] = { 'a', 'r' };
-static symbol s_7_82[2] = { 'i', 'r' };
-static symbol s_7_83[4] = { 'e', 'r', 0xC3, 0xA0 };
-static symbol s_7_84[4] = { 'i', 'r', 0xC3, 0xA0 };
-static symbol s_7_85[4] = { 'e', 'r', 0xC3, 0xB2 };
-static symbol s_7_86[4] = { 'i', 'r', 0xC3, 0xB2 };
+static const symbol s_7_0[4] = { 'i', 's', 'c', 'a' };
+static const symbol s_7_1[4] = { 'e', 'n', 'd', 'a' };
+static const symbol s_7_2[3] = { 'a', 't', 'a' };
+static const symbol s_7_3[3] = { 'i', 't', 'a' };
+static const symbol s_7_4[3] = { 'u', 't', 'a' };
+static const symbol s_7_5[3] = { 'a', 'v', 'a' };
+static const symbol s_7_6[3] = { 'e', 'v', 'a' };
+static const symbol s_7_7[3] = { 'i', 'v', 'a' };
+static const symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' };
+static const symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' };
+static const symbol s_7_10[4] = { 'i', 's', 'c', 'e' };
+static const symbol s_7_11[4] = { 'e', 'n', 'd', 'e' };
+static const symbol s_7_12[3] = { 'a', 'r', 'e' };
+static const symbol s_7_13[3] = { 'e', 'r', 'e' };
+static const symbol s_7_14[3] = { 'i', 'r', 'e' };
+static const symbol s_7_15[4] = { 'a', 's', 's', 'e' };
+static const symbol s_7_16[3] = { 'a', 't', 'e' };
+static const symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' };
+static const symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' };
+static const symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' };
+static const symbol s_7_20[3] = { 'e', 't', 'e' };
+static const symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' };
+static const symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' };
+static const symbol s_7_23[3] = { 'i', 't', 'e' };
+static const symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' };
+static const symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' };
+static const symbol s_7_26[3] = { 'u', 't', 'e' };
+static const symbol s_7_27[4] = { 'e', 'r', 'a', 'i' };
+static const symbol s_7_28[4] = { 'i', 'r', 'a', 'i' };
+static const symbol s_7_29[4] = { 'i', 's', 'c', 'i' };
+static const symbol s_7_30[4] = { 'e', 'n', 'd', 'i' };
+static const symbol s_7_31[4] = { 'e', 'r', 'e', 'i' };
+static const symbol s_7_32[4] = { 'i', 'r', 'e', 'i' };
+static const symbol s_7_33[4] = { 'a', 's', 's', 'i' };
+static const symbol s_7_34[3] = { 'a', 't', 'i' };
+static const symbol s_7_35[3] = { 'i', 't', 'i' };
+static const symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' };
+static const symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' };
+static const symbol s_7_38[3] = { 'u', 't', 'i' };
+static const symbol s_7_39[3] = { 'a', 'v', 'i' };
+static const symbol s_7_40[3] = { 'e', 'v', 'i' };
+static const symbol s_7_41[3] = { 'i', 'v', 'i' };
+static const symbol s_7_42[4] = { 'i', 's', 'c', 'o' };
+static const symbol s_7_43[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_7_44[4] = { 'e', 'n', 'd', 'o' };
+static const symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' };
+static const symbol s_7_46[4] = { 'i', 'a', 'm', 'o' };
+static const symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' };
+static const symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' };
+static const symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' };
+static const symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' };
+static const symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' };
+static const symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' };
+static const symbol s_7_53[4] = { 'a', 'm', 'm', 'o' };
+static const symbol s_7_54[4] = { 'e', 'm', 'm', 'o' };
+static const symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' };
+static const symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' };
+static const symbol s_7_57[4] = { 'i', 'm', 'm', 'o' };
+static const symbol s_7_58[3] = { 'a', 'n', 'o' };
+static const symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' };
+static const symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' };
+static const symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' };
+static const symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' };
+static const symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' };
+static const symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' };
+static const symbol s_7_65[3] = { 'o', 'n', 'o' };
+static const symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' };
+static const symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' };
+static const symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' };
+static const symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' };
+static const symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
+static const symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' };
+static const symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' };
+static const symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' };
+static const symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' };
+static const symbol s_7_75[3] = { 'a', 't', 'o' };
+static const symbol s_7_76[3] = { 'i', 't', 'o' };
+static const symbol s_7_77[3] = { 'u', 't', 'o' };
+static const symbol s_7_78[3] = { 'a', 'v', 'o' };
+static const symbol s_7_79[3] = { 'e', 'v', 'o' };
+static const symbol s_7_80[3] = { 'i', 'v', 'o' };
+static const symbol s_7_81[2] = { 'a', 'r' };
+static const symbol s_7_82[2] = { 'i', 'r' };
+static const symbol s_7_83[4] = { 'e', 'r', 0xC3, 0xA0 };
+static const symbol s_7_84[4] = { 'i', 'r', 0xC3, 0xA0 };
+static const symbol s_7_85[4] = { 'e', 'r', 0xC3, 0xB2 };
+static const symbol s_7_86[4] = { 'i', 'r', 0xC3, 0xB2 };
 
-static struct among a_7[87] =
+static const struct among a_7[87] =
 {
 /*  0 */ { 4, s_7_0, -1, 1, 0},
 /*  1 */ { 4, s_7_1, -1, 1, 0},
@@ -450,40 +464,40 @@ static struct among a_7[87] =
 /* 86 */ { 4, s_7_86, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 };
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 };
 
-static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 };
+static const unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 };
 
-static unsigned char g_CG[] = { 17 };
+static const unsigned char g_CG[] = { 17 };
 
-static symbol s_0[] = { 0xC3, 0xA0 };
-static symbol s_1[] = { 0xC3, 0xA8 };
-static symbol s_2[] = { 0xC3, 0xAC };
-static symbol s_3[] = { 0xC3, 0xB2 };
-static symbol s_4[] = { 0xC3, 0xB9 };
-static symbol s_5[] = { 'q', 'U' };
-static symbol s_6[] = { 'u' };
-static symbol s_7[] = { 'U' };
-static symbol s_8[] = { 'i' };
-static symbol s_9[] = { 'I' };
-static symbol s_10[] = { 'i' };
-static symbol s_11[] = { 'u' };
-static symbol s_12[] = { 'e' };
-static symbol s_13[] = { 'i', 'c' };
-static symbol s_14[] = { 'l', 'o', 'g' };
-static symbol s_15[] = { 'u' };
-static symbol s_16[] = { 'e', 'n', 't', 'e' };
-static symbol s_17[] = { 'a', 't' };
-static symbol s_18[] = { 'a', 't' };
-static symbol s_19[] = { 'i', 'c' };
-static symbol s_20[] = { 'i' };
-static symbol s_21[] = { 'h' };
+static const symbol s_0[] = { 0xC3, 0xA0 };
+static const symbol s_1[] = { 0xC3, 0xA8 };
+static const symbol s_2[] = { 0xC3, 0xAC };
+static const symbol s_3[] = { 0xC3, 0xB2 };
+static const symbol s_4[] = { 0xC3, 0xB9 };
+static const symbol s_5[] = { 'q', 'U' };
+static const symbol s_6[] = { 'u' };
+static const symbol s_7[] = { 'U' };
+static const symbol s_8[] = { 'i' };
+static const symbol s_9[] = { 'I' };
+static const symbol s_10[] = { 'i' };
+static const symbol s_11[] = { 'u' };
+static const symbol s_12[] = { 'e' };
+static const symbol s_13[] = { 'i', 'c' };
+static const symbol s_14[] = { 'l', 'o', 'g' };
+static const symbol s_15[] = { 'u' };
+static const symbol s_16[] = { 'e', 'n', 't', 'e' };
+static const symbol s_17[] = { 'a', 't' };
+static const symbol s_18[] = { 'a', 't' };
+static const symbol s_19[] = { 'i', 'c' };
+static const symbol s_20[] = { 'i' };
+static const symbol s_21[] = { 'h' };
 
 static int r_prelude(struct SN_env * z) {
     int among_var;
     {   int c_test = z->c; /* test, line 35 */
         while(1) { /* repeat, line 35 */
-            int c = z->c;
+            int c1 = z->c;
             z->bra = z->c; /* [, line 36 */
             among_var = find_among(z, a_0, 7); /* substring, line 36 */
             if (!(among_var)) goto lab0;
@@ -491,93 +505,85 @@ static int r_prelude(struct SN_env * z) {
             switch(among_var) {
                 case 0: goto lab0;
                 case 1:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_0); /* <-, line 37 */
+                    {   int ret = slice_from_s(z, 2, s_0); /* <-, line 37 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_1); /* <-, line 38 */
+                    {   int ret = slice_from_s(z, 2, s_1); /* <-, line 38 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 3:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_2); /* <-, line 39 */
+                    {   int ret = slice_from_s(z, 2, s_2); /* <-, line 39 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 4:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_3); /* <-, line 40 */
+                    {   int ret = slice_from_s(z, 2, s_3); /* <-, line 40 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 5:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_4); /* <-, line 41 */
+                    {   int ret = slice_from_s(z, 2, s_4); /* <-, line 41 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 6:
-                    {   int ret;
-                        ret = slice_from_s(z, 2, s_5); /* <-, line 42 */
+                    {   int ret = slice_from_s(z, 2, s_5); /* <-, line 42 */
                         if (ret < 0) return ret;
                     }
                     break;
                 case 7:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab0;
-                        z->c = c; /* next, line 43 */
+                    {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                        if (ret < 0) goto lab0;
+                        z->c = ret; /* next, line 43 */
                     }
                     break;
             }
             continue;
         lab0:
-            z->c = c;
+            z->c = c1;
             break;
         }
         z->c = c_test;
     }
     while(1) { /* repeat, line 46 */
-        int c = z->c;
+        int c2 = z->c;
         while(1) { /* goto, line 46 */
-            int c = z->c;
-            if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2;
+            int c3 = z->c;
+            if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2;
             z->bra = z->c; /* [, line 47 */
-            {   int c = z->c; /* or, line 47 */
+            {   int c4 = z->c; /* or, line 47 */
                 if (!(eq_s(z, 1, s_6))) goto lab4;
                 z->ket = z->c; /* ], line 47 */
-                if (!(in_grouping_U(z, g_v, 97, 249))) goto lab4;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_7); /* <-, line 47 */
+                if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab4;
+                {   int ret = slice_from_s(z, 1, s_7); /* <-, line 47 */
                     if (ret < 0) return ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
+                z->c = c4;
                 if (!(eq_s(z, 1, s_8))) goto lab2;
                 z->ket = z->c; /* ], line 48 */
-                if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2;
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_9); /* <-, line 48 */
+                if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2;
+                {   int ret = slice_from_s(z, 1, s_9); /* <-, line 48 */
                     if (ret < 0) return ret;
                 }
             }
         lab3:
-            z->c = c;
+            z->c = c3;
             break;
         lab2:
-            z->c = c;
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab1;
-                z->c = c; /* goto, line 46 */
+            z->c = c3;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab1;
+                z->c = ret; /* goto, line 46 */
             }
         }
         continue;
     lab1:
-        z->c = c;
+        z->c = c2;
         break;
     }
     return 1;
@@ -587,108 +593,80 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 58 */
-        {   int c = z->c; /* or, line 60 */
-            if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2;
-            {   int c = z->c; /* or, line 59 */
-                if (!(out_grouping_U(z, g_v, 97, 249))) goto lab4;
-                while(1) { /* gopast, line 59 */
-                    if (!(in_grouping_U(z, g_v, 97, 249))) goto lab5;
-                    break;
-                lab5:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab4;
-                        z->c = c; /* gopast, line 59 */
-                    }
+    {   int c1 = z->c; /* do, line 58 */
+        {   int c2 = z->c; /* or, line 60 */
+            if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 59 */
+                if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 59 */
+                    int ret = out_grouping_U(z, g_v, 97, 249, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
-                if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2;
-                while(1) { /* gopast, line 59 */
-                    if (!(out_grouping_U(z, g_v, 97, 249))) goto lab6;
-                    break;
-                lab6:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab2;
-                        z->c = c; /* gopast, line 59 */
-                    }
+                z->c = c3;
+                if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 59 */
+                    int ret = in_grouping_U(z, g_v, 97, 249, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
                 }
             }
         lab3:
             goto lab1;
         lab2:
-            z->c = c;
-            if (!(out_grouping_U(z, g_v, 97, 249))) goto lab0;
-            {   int c = z->c; /* or, line 61 */
-                if (!(out_grouping_U(z, g_v, 97, 249))) goto lab8;
-                while(1) { /* gopast, line 61 */
-                    if (!(in_grouping_U(z, g_v, 97, 249))) goto lab9;
-                    break;
-                lab9:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab8;
-                        z->c = c; /* gopast, line 61 */
-                    }
+            z->c = c2;
+            if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 61 */
+                if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 61 */
+                    int ret = out_grouping_U(z, g_v, 97, 249, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
                 }
-                goto lab7;
-            lab8:
-                z->c = c;
-                if (!(in_grouping_U(z, g_v, 97, 249))) goto lab0;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 61 */
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab0;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 61 */
                 }
             }
-        lab7:
+        lab5:
             ;
         }
     lab1:
         z->I[0] = z->c; /* setmark pV, line 62 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 64 */
-        while(1) { /* gopast, line 65 */
-            if (!(in_grouping_U(z, g_v, 97, 249))) goto lab11;
-            break;
-        lab11:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 65 */
-            }
+    {   int c5 = z->c; /* do, line 64 */
+        {    /* gopast */ /* grouping v, line 65 */
+            int ret = out_grouping_U(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 65 */
-            if (!(out_grouping_U(z, g_v, 97, 249))) goto lab12;
-            break;
-        lab12:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 65 */
-            }
+        {    /* gopast */ /* non v, line 65 */
+            int ret = in_grouping_U(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p1, line 65 */
-        while(1) { /* gopast, line 66 */
-            if (!(in_grouping_U(z, g_v, 97, 249))) goto lab13;
-            break;
-        lab13:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 66 */
-            }
+        {    /* gopast */ /* grouping v, line 66 */
+            int ret = out_grouping_U(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 66 */
-            if (!(out_grouping_U(z, g_v, 97, 249))) goto lab14;
-            break;
-        lab14:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 66 */
-            }
+        {    /* gopast */ /* non v, line 66 */
+            int ret = in_grouping_U(z, g_v, 97, 249, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[2] = z->c; /* setmark p2, line 66 */
-    lab10:
-        z->c = c;
+    lab7:
+        z->c = c5;
     }
     return 1;
 }
@@ -696,35 +674,34 @@ static int r_mark_regions(struct SN_env * z) {
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 70 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 72 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else
         among_var = find_among(z, a_1, 3); /* substring, line 72 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 72 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_10); /* <-, line 73 */
+                {   int ret = slice_from_s(z, 1, s_10); /* <-, line 73 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_11); /* <-, line 74 */
+                {   int ret = slice_from_s(z, 1, s_11); /* <-, line 74 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 75 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 75 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -748,8 +725,10 @@ static int r_R2(struct SN_env * z) {
 static int r_attached_pronoun(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 87 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33314 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */
     z->bra = z->c; /* ], line 87 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0;
     among_var = find_among_b(z, a_3, 5); /* among, line 97 */
     if (!(among_var)) return 0;
     {   int ret = r_RV(z);
@@ -759,14 +738,12 @@ static int r_attached_pronoun(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 98 */
+            {   int ret = slice_del(z); /* delete, line 98 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_12); /* <-, line 99 */
+            {   int ret = slice_from_s(z, 1, s_12); /* <-, line 99 */
                 if (ret < 0) return ret;
             }
             break;
@@ -787,8 +764,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 111 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 111 */
+            {   int ret = slice_del(z); /* delete, line 111 */
                 if (ret < 0) return ret;
             }
             break;
@@ -797,20 +773,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 113 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 113 */
+            {   int ret = slice_del(z); /* delete, line 113 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 114 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 114 */
                 z->ket = z->c; /* [, line 114 */
-                if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; }
+                if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 114 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 114 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 114 */
+                {   int ret = slice_del(z); /* delete, line 114 */
                     if (ret < 0) return ret;
                 }
             lab0:
@@ -822,8 +796,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 117 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_14); /* <-, line 117 */
+            {   int ret = slice_from_s(z, 3, s_14); /* <-, line 117 */
                 if (ret < 0) return ret;
             }
             break;
@@ -832,8 +805,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 119 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_15); /* <-, line 119 */
+            {   int ret = slice_from_s(z, 1, s_15); /* <-, line 119 */
                 if (ret < 0) return ret;
             }
             break;
@@ -842,8 +814,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 121 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 4, s_16); /* <-, line 121 */
+            {   int ret = slice_from_s(z, 4, s_16); /* <-, line 121 */
                 if (ret < 0) return ret;
             }
             break;
@@ -852,8 +823,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 123 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 123 */
+            {   int ret = slice_del(z); /* delete, line 123 */
                 if (ret < 0) return ret;
             }
             break;
@@ -862,35 +832,33 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 125 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 125 */
+            {   int ret = slice_del(z); /* delete, line 125 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 126 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 126 */
                 z->ket = z->c; /* [, line 127 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4722696 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab1; }
                 among_var = find_among_b(z, a_4, 4); /* substring, line 127 */
-                if (!(among_var)) { z->c = z->l - m; goto lab1; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab1; }
                 z->bra = z->c; /* ], line 127 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 127 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 127 */
+                {   int ret = slice_del(z); /* delete, line 127 */
                     if (ret < 0) return ret;
                 }
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab1; }
+                    case 0: { z->c = z->l - m_keep; goto lab1; }
                     case 1:
                         z->ket = z->c; /* [, line 128 */
-                        if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; }
+                        if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m_keep; goto lab1; }
                         z->bra = z->c; /* ], line 128 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 128 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 128 */
+                        {   int ret = slice_del(z); /* delete, line 128 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -904,24 +872,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 134 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 135 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 135 */
                 z->ket = z->c; /* [, line 136 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab2; }
                 among_var = find_among_b(z, a_5, 3); /* substring, line 136 */
-                if (!(among_var)) { z->c = z->l - m; goto lab2; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab2; }
                 z->bra = z->c; /* ], line 136 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab2; }
+                    case 0: { z->c = z->l - m_keep; goto lab2; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call R2, line 137 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 137 */
+                        {   int ret = slice_del(z); /* delete, line 137 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -935,31 +902,28 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 142 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 142 */
+            {   int ret = slice_del(z); /* delete, line 142 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 143 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 143 */
                 z->ket = z->c; /* [, line 143 */
-                if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; }
+                if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 143 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 143 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 143 */
+                {   int ret = slice_del(z); /* delete, line 143 */
                     if (ret < 0) return ret;
                 }
                 z->ket = z->c; /* [, line 143 */
-                if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; }
+                if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 143 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 143 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 143 */
+                {   int ret = slice_del(z); /* delete, line 143 */
                     if (ret < 0) return ret;
                 }
             lab3:
@@ -972,68 +936,64 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 148 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 148 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 148 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 149 */
         among_var = find_among_b(z, a_7, 87); /* substring, line 149 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 149 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 163 */
+                {   int ret = slice_del(z); /* delete, line 163 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_vowel_suffix(struct SN_env * z) {
-    {   int m = z->l - z->c; (void) m; /* try, line 171 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 171 */
         z->ket = z->c; /* [, line 172 */
-        if (!(in_grouping_b_U(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; }
+        if (in_grouping_b_U(z, g_AEIO, 97, 242, 0)) { z->c = z->l - m_keep; goto lab0; }
         z->bra = z->c; /* ], line 172 */
         {   int ret = r_RV(z);
-            if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */
+            if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call RV, line 172 */
             if (ret < 0) return ret;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 172 */
+        {   int ret = slice_del(z); /* delete, line 172 */
             if (ret < 0) return ret;
         }
         z->ket = z->c; /* [, line 173 */
-        if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; }
+        if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m_keep; goto lab0; }
         z->bra = z->c; /* ], line 173 */
         {   int ret = r_RV(z);
-            if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */
+            if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call RV, line 173 */
             if (ret < 0) return ret;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 173 */
+        {   int ret = slice_del(z); /* delete, line 173 */
             if (ret < 0) return ret;
         }
     lab0:
         ;
     }
-    {   int m = z->l - z->c; (void) m; /* try, line 175 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 175 */
         z->ket = z->c; /* [, line 176 */
-        if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; }
+        if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m_keep; goto lab1; }
         z->bra = z->c; /* ], line 176 */
-        if (!(in_grouping_b_U(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; }
+        if (in_grouping_b_U(z, g_CG, 99, 103, 0)) { z->c = z->l - m_keep; goto lab1; }
         {   int ret = r_RV(z);
-            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */
+            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call RV, line 176 */
             if (ret < 0) return ret;
         }
-        {   int ret;
-            ret = slice_del(z); /* delete, line 176 */
+        {   int ret = slice_del(z); /* delete, line 176 */
             if (ret < 0) return ret;
         }
     lab1:
@@ -1043,41 +1003,41 @@ static int r_vowel_suffix(struct SN_env * z) {
 }
 
 extern int italian_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 182 */
+    {   int c1 = z->c; /* do, line 182 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 182 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 183 */
+    {   int c2 = z->c; /* do, line 183 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 183 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 184 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 185 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 185 */
         {   int ret = r_attached_pronoun(z);
             if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 186 */
-        {   int m = z->l - z->c; (void) m; /* or, line 186 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 186 */
+        {   int m5 = z->l - z->c; (void)m5; /* or, line 186 */
             {   int ret = r_standard_suffix(z);
                 if (ret == 0) goto lab5; /* call standard_suffix, line 186 */
                 if (ret < 0) return ret;
             }
             goto lab4;
         lab5:
-            z->c = z->l - m;
+            z->c = z->l - m5;
             {   int ret = r_verb_suffix(z);
                 if (ret == 0) goto lab3; /* call verb_suffix, line 186 */
                 if (ret < 0) return ret;
@@ -1085,29 +1045,29 @@ extern int italian_UTF_8_stem(struct SN_env * z) {
         }
     lab4:
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 187 */
+    {   int m6 = z->l - z->c; (void)m6; /* do, line 187 */
         {   int ret = r_vowel_suffix(z);
             if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */
             if (ret < 0) return ret;
         }
     lab6:
-        z->c = z->l - m;
+        z->c = z->l - m6;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 189 */
+    {   int c7 = z->c; /* do, line 189 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab7; /* call postlude, line 189 */
             if (ret < 0) return ret;
         }
     lab7:
-        z->c = c;
+        z->c = c7;
     }
     return 1;
 }
 
 extern struct SN_env * italian_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void italian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void italian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_norwegian.c b/libstemmer_c/src_c/stem_UTF_8_norwegian.c
index 6a5ea99..6a7b5f4 100644
--- a/libstemmer_c/src_c/stem_UTF_8_norwegian.c
+++ b/libstemmer_c/src_c/stem_UTF_8_norwegian.c
@@ -3,46 +3,60 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int norwegian_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_other_suffix(struct SN_env * z);
 static int r_consonant_pair(struct SN_env * z);
 static int r_main_suffix(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * norwegian_UTF_8_create_env(void);
 extern void norwegian_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[1] = { 'a' };
-static symbol s_0_1[1] = { 'e' };
-static symbol s_0_2[3] = { 'e', 'd', 'e' };
-static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' };
-static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' };
-static symbol s_0_5[3] = { 'a', 'n', 'e' };
-static symbol s_0_6[3] = { 'e', 'n', 'e' };
-static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' };
-static symbol s_0_8[4] = { 'e', 'r', 't', 'e' };
-static symbol s_0_9[2] = { 'e', 'n' };
-static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' };
-static symbol s_0_11[2] = { 'a', 'r' };
-static symbol s_0_12[2] = { 'e', 'r' };
-static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' };
-static symbol s_0_14[1] = { 's' };
-static symbol s_0_15[2] = { 'a', 's' };
-static symbol s_0_16[2] = { 'e', 's' };
-static symbol s_0_17[4] = { 'e', 'd', 'e', 's' };
-static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' };
-static symbol s_0_19[4] = { 'e', 'n', 'e', 's' };
-static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' };
-static symbol s_0_21[3] = { 'e', 'n', 's' };
-static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' };
-static symbol s_0_23[3] = { 'e', 'r', 's' };
-static symbol s_0_24[3] = { 'e', 't', 's' };
-static symbol s_0_25[2] = { 'e', 't' };
-static symbol s_0_26[3] = { 'h', 'e', 't' };
-static symbol s_0_27[3] = { 'e', 'r', 't' };
-static symbol s_0_28[3] = { 'a', 's', 't' };
 
-static struct among a_0[29] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 'a' };
+static const symbol s_0_1[1] = { 'e' };
+static const symbol s_0_2[3] = { 'e', 'd', 'e' };
+static const symbol s_0_3[4] = { 'a', 'n', 'd', 'e' };
+static const symbol s_0_4[4] = { 'e', 'n', 'd', 'e' };
+static const symbol s_0_5[3] = { 'a', 'n', 'e' };
+static const symbol s_0_6[3] = { 'e', 'n', 'e' };
+static const symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' };
+static const symbol s_0_8[4] = { 'e', 'r', 't', 'e' };
+static const symbol s_0_9[2] = { 'e', 'n' };
+static const symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' };
+static const symbol s_0_11[2] = { 'a', 'r' };
+static const symbol s_0_12[2] = { 'e', 'r' };
+static const symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' };
+static const symbol s_0_14[1] = { 's' };
+static const symbol s_0_15[2] = { 'a', 's' };
+static const symbol s_0_16[2] = { 'e', 's' };
+static const symbol s_0_17[4] = { 'e', 'd', 'e', 's' };
+static const symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' };
+static const symbol s_0_19[4] = { 'e', 'n', 'e', 's' };
+static const symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' };
+static const symbol s_0_21[3] = { 'e', 'n', 's' };
+static const symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' };
+static const symbol s_0_23[3] = { 'e', 'r', 's' };
+static const symbol s_0_24[3] = { 'e', 't', 's' };
+static const symbol s_0_25[2] = { 'e', 't' };
+static const symbol s_0_26[3] = { 'h', 'e', 't' };
+static const symbol s_0_27[3] = { 'e', 'r', 't' };
+static const symbol s_0_28[3] = { 'a', 's', 't' };
+
+static const struct among a_0[29] =
 {
 /*  0 */ { 1, s_0_0, -1, 1, 0},
 /*  1 */ { 1, s_0_1, -1, 1, 0},
@@ -75,28 +89,28 @@ static struct among a_0[29] =
 /* 28 */ { 3, s_0_28, -1, 1, 0}
 };
 
-static symbol s_1_0[2] = { 'd', 't' };
-static symbol s_1_1[2] = { 'v', 't' };
+static const symbol s_1_0[2] = { 'd', 't' };
+static const symbol s_1_1[2] = { 'v', 't' };
 
-static struct among a_1[2] =
+static const struct among a_1[2] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0}
 };
 
-static symbol s_2_0[3] = { 'l', 'e', 'g' };
-static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' };
-static symbol s_2_2[2] = { 'i', 'g' };
-static symbol s_2_3[3] = { 'e', 'i', 'g' };
-static symbol s_2_4[3] = { 'l', 'i', 'g' };
-static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' };
-static symbol s_2_6[3] = { 'e', 'l', 's' };
-static symbol s_2_7[3] = { 'l', 'o', 'v' };
-static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' };
-static symbol s_2_9[4] = { 's', 'l', 'o', 'v' };
-static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' };
+static const symbol s_2_0[3] = { 'l', 'e', 'g' };
+static const symbol s_2_1[4] = { 'e', 'l', 'e', 'g' };
+static const symbol s_2_2[2] = { 'i', 'g' };
+static const symbol s_2_3[3] = { 'e', 'i', 'g' };
+static const symbol s_2_4[3] = { 'l', 'i', 'g' };
+static const symbol s_2_5[4] = { 'e', 'l', 'i', 'g' };
+static const symbol s_2_6[3] = { 'e', 'l', 's' };
+static const symbol s_2_7[3] = { 'l', 'o', 'v' };
+static const symbol s_2_8[4] = { 'e', 'l', 'o', 'v' };
+static const symbol s_2_9[4] = { 's', 'l', 'o', 'v' };
+static const symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' };
 
-static struct among a_2[11] =
+static const struct among a_2[11] =
 {
 /*  0 */ { 3, s_2_0, -1, 1, 0},
 /*  1 */ { 4, s_2_1, 0, 1, 0},
@@ -111,92 +125,75 @@ static struct among a_2[11] =
 /* 10 */ { 7, s_2_10, 9, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
 
-static unsigned char g_s_ending[] = { 119, 125, 149, 1 };
+static const unsigned char g_s_ending[] = { 119, 125, 149, 1 };
 
-static symbol s_0[] = { 'k' };
-static symbol s_1[] = { 'e', 'r' };
+static const symbol s_0[] = { 'k' };
+static const symbol s_1[] = { 'e', 'r' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     {   int c_test = z->c; /* test, line 30 */
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, + 3);
-            if (c < 0) return 0;
-            z->c = c; /* hop, line 30 */
+        {   int ret = skip_utf8(z->p, z->c, 0, z->l, + 3);
+            if (ret < 0) return 0;
+            z->c = ret; /* hop, line 30 */
         }
         z->I[1] = z->c; /* setmark x, line 30 */
         z->c = c_test;
     }
-    while(1) { /* goto, line 31 */
-        int c = z->c;
-        if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* goto, line 31 */
-        }
-    }
-    while(1) { /* gopast, line 31 */
-        if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1;
-        break;
-    lab1:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 31 */
-        }
+    if (out_grouping_U(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 31 */
+    {    /* gopast */ /* non v, line 31 */
+        int ret = in_grouping_U(z, g_v, 97, 248, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 31 */
      /* try, line 32 */
-    if (!(z->I[0] < z->I[1])) goto lab2;
+    if (!(z->I[0] < z->I[1])) goto lab0;
     z->I[0] = z->I[1];
-lab2:
+lab0:
     return 1;
 }
 
 static int r_main_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 38 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 38 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 38 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 38 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851426 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_0, 29); /* substring, line 38 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 38 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 44 */
+            {   int ret = slice_del(z); /* delete, line 44 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 46 */
-                if (!(in_grouping_b_U(z, g_s_ending, 98, 122))) goto lab1;
+            {   int m2 = z->l - z->c; (void)m2; /* or, line 46 */
+                if (in_grouping_b_U(z, g_s_ending, 98, 122, 0)) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m2;
                 if (!(eq_s_b(z, 1, s_0))) return 0;
-                if (!(out_grouping_b_U(z, g_v, 97, 248))) return 0;
+                if (out_grouping_b_U(z, g_v, 97, 248, 0)) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 46 */
+            {   int ret = slice_del(z); /* delete, line 46 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_1); /* <-, line 48 */
+            {   int ret = slice_from_s(z, 2, s_1); /* <-, line 48 */
                 if (ret < 0) return ret;
             }
             break;
@@ -206,26 +203,26 @@ static int r_main_suffix(struct SN_env * z) {
 
 static int r_consonant_pair(struct SN_env * z) {
     {   int m_test = z->l - z->c; /* test, line 53 */
-        {   int m3; /* setlimit, line 54 */
-            int m = z->l - z->c; (void) m;
+        {   int mlimit; /* setlimit, line 54 */
+            int m1 = z->l - z->c; (void)m1;
             if (z->c < z->I[0]) return 0;
             z->c = z->I[0]; /* tomark, line 54 */
-            m3 = z->lb; z->lb = z->c;
-            z->c = z->l - m;
+            mlimit = z->lb; z->lb = z->c;
+            z->c = z->l - m1;
             z->ket = z->c; /* [, line 54 */
-            if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] != 116) { z->lb = mlimit; return 0; }
+            if (!(find_among_b(z, a_1, 2))) { z->lb = mlimit; return 0; } /* substring, line 54 */
             z->bra = z->c; /* ], line 54 */
-            z->lb = m3;
+            z->lb = mlimit;
         }
         z->c = z->l - m_test;
     }
-    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-        if (c < 0) return 0;
-        z->c = c; /* next, line 59 */
+    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+        if (ret < 0) return 0;
+        z->c = ret; /* next, line 59 */
     }
     z->bra = z->c; /* ], line 59 */
-    {   int ret;
-        ret = slice_del(z); /* delete, line 59 */
+    {   int ret = slice_del(z); /* delete, line 59 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -233,23 +230,23 @@ static int r_consonant_pair(struct SN_env * z) {
 
 static int r_other_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 63 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 63 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 63 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 63 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718720 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_2, 11); /* substring, line 63 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 63 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 67 */
+            {   int ret = slice_del(z); /* delete, line 67 */
                 if (ret < 0) return ret;
             }
             break;
@@ -258,39 +255,39 @@ static int r_other_suffix(struct SN_env * z) {
 }
 
 extern int norwegian_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 74 */
+    {   int c1 = z->c; /* do, line 74 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 74 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 75 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 76 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 76 */
         {   int ret = r_main_suffix(z);
             if (ret == 0) goto lab1; /* call main_suffix, line 76 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 77 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 77 */
         {   int ret = r_consonant_pair(z);
             if (ret == 0) goto lab2; /* call consonant_pair, line 77 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 78 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 78 */
         {   int ret = r_other_suffix(z);
             if (ret == 0) goto lab3; /* call other_suffix, line 78 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
     z->c = z->lb;
     return 1;
@@ -298,5 +295,5 @@ extern int norwegian_UTF_8_stem(struct SN_env * z) {
 
 extern struct SN_env * norwegian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); }
 
-extern void norwegian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void norwegian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_porter.c b/libstemmer_c/src_c/stem_UTF_8_porter.c
index 1d22e71..0c4813f 100644
--- a/libstemmer_c/src_c/stem_UTF_8_porter.c
+++ b/libstemmer_c/src_c/stem_UTF_8_porter.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int porter_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_Step_5b(struct SN_env * z);
 static int r_Step_5a(struct SN_env * z);
 static int r_Step_4(struct SN_env * z);
@@ -15,16 +21,24 @@ static int r_Step_1a(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_R1(struct SN_env * z);
 static int r_shortv(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * porter_UTF_8_create_env(void);
 extern void porter_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[1] = { 's' };
-static symbol s_0_1[3] = { 'i', 'e', 's' };
-static symbol s_0_2[4] = { 's', 's', 'e', 's' };
-static symbol s_0_3[2] = { 's', 's' };
 
-static struct among a_0[4] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 's' };
+static const symbol s_0_1[3] = { 'i', 'e', 's' };
+static const symbol s_0_2[4] = { 's', 's', 'e', 's' };
+static const symbol s_0_3[2] = { 's', 's' };
+
+static const struct among a_0[4] =
 {
 /*  0 */ { 1, s_0_0, -1, 3, 0},
 /*  1 */ { 3, s_0_1, 0, 2, 0},
@@ -32,20 +46,20 @@ static struct among a_0[4] =
 /*  3 */ { 2, s_0_3, 0, -1, 0}
 };
 
-static symbol s_1_1[2] = { 'b', 'b' };
-static symbol s_1_2[2] = { 'd', 'd' };
-static symbol s_1_3[2] = { 'f', 'f' };
-static symbol s_1_4[2] = { 'g', 'g' };
-static symbol s_1_5[2] = { 'b', 'l' };
-static symbol s_1_6[2] = { 'm', 'm' };
-static symbol s_1_7[2] = { 'n', 'n' };
-static symbol s_1_8[2] = { 'p', 'p' };
-static symbol s_1_9[2] = { 'r', 'r' };
-static symbol s_1_10[2] = { 'a', 't' };
-static symbol s_1_11[2] = { 't', 't' };
-static symbol s_1_12[2] = { 'i', 'z' };
-
-static struct among a_1[13] =
+static const symbol s_1_1[2] = { 'b', 'b' };
+static const symbol s_1_2[2] = { 'd', 'd' };
+static const symbol s_1_3[2] = { 'f', 'f' };
+static const symbol s_1_4[2] = { 'g', 'g' };
+static const symbol s_1_5[2] = { 'b', 'l' };
+static const symbol s_1_6[2] = { 'm', 'm' };
+static const symbol s_1_7[2] = { 'n', 'n' };
+static const symbol s_1_8[2] = { 'p', 'p' };
+static const symbol s_1_9[2] = { 'r', 'r' };
+static const symbol s_1_10[2] = { 'a', 't' };
+static const symbol s_1_11[2] = { 't', 't' };
+static const symbol s_1_12[2] = { 'i', 'z' };
+
+static const struct among a_1[13] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_1_1, 0, 2, 0},
@@ -62,39 +76,39 @@ static struct among a_1[13] =
 /* 12 */ { 2, s_1_12, 0, 1, 0}
 };
 
-static symbol s_2_0[2] = { 'e', 'd' };
-static symbol s_2_1[3] = { 'e', 'e', 'd' };
-static symbol s_2_2[3] = { 'i', 'n', 'g' };
+static const symbol s_2_0[2] = { 'e', 'd' };
+static const symbol s_2_1[3] = { 'e', 'e', 'd' };
+static const symbol s_2_2[3] = { 'i', 'n', 'g' };
 
-static struct among a_2[3] =
+static const struct among a_2[3] =
 {
 /*  0 */ { 2, s_2_0, -1, 2, 0},
 /*  1 */ { 3, s_2_1, 0, 1, 0},
 /*  2 */ { 3, s_2_2, -1, 2, 0}
 };
 
-static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' };
-static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' };
-static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' };
-static symbol s_3_3[3] = { 'e', 'l', 'i' };
-static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' };
-static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' };
-static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' };
-static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' };
-static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
-static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' };
-static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
-static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' };
-static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' };
-static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
-static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' };
-static symbol s_3_16[4] = { 'a', 't', 'o', 'r' };
-static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
-static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
-static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
-
-static struct among a_3[20] =
+static const symbol s_3_0[4] = { 'a', 'n', 'c', 'i' };
+static const symbol s_3_1[4] = { 'e', 'n', 'c', 'i' };
+static const symbol s_3_2[4] = { 'a', 'b', 'l', 'i' };
+static const symbol s_3_3[3] = { 'e', 'l', 'i' };
+static const symbol s_3_4[4] = { 'a', 'l', 'l', 'i' };
+static const symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' };
+static const symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' };
+static const symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' };
+static const symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' };
+static const symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' };
+static const symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' };
+static const symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' };
+static const symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' };
+static const symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' };
+static const symbol s_3_15[4] = { 'i', 'z', 'e', 'r' };
+static const symbol s_3_16[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' };
+static const symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' };
+static const symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' };
+
+static const struct among a_3[20] =
 {
 /*  0 */ { 4, s_3_0, -1, 3, 0},
 /*  1 */ { 4, s_3_1, -1, 2, 0},
@@ -118,15 +132,15 @@ static struct among a_3[20] =
 /* 19 */ { 7, s_3_19, -1, 12, 0}
 };
 
-static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' };
-static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' };
-static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' };
-static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' };
-static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' };
-static symbol s_4_5[3] = { 'f', 'u', 'l' };
-static symbol s_4_6[4] = { 'n', 'e', 's', 's' };
+static const symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' };
+static const symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' };
+static const symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' };
+static const symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' };
+static const symbol s_4_4[4] = { 'i', 'c', 'a', 'l' };
+static const symbol s_4_5[3] = { 'f', 'u', 'l' };
+static const symbol s_4_6[4] = { 'n', 'e', 's', 's' };
 
-static struct among a_4[7] =
+static const struct among a_4[7] =
 {
 /*  0 */ { 5, s_4_0, -1, 2, 0},
 /*  1 */ { 5, s_4_1, -1, 3, 0},
@@ -137,27 +151,27 @@ static struct among a_4[7] =
 /*  6 */ { 4, s_4_6, -1, 3, 0}
 };
 
-static symbol s_5_0[2] = { 'i', 'c' };
-static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' };
-static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' };
-static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_5_5[3] = { 'a', 't', 'e' };
-static symbol s_5_6[3] = { 'i', 'v', 'e' };
-static symbol s_5_7[3] = { 'i', 'z', 'e' };
-static symbol s_5_8[3] = { 'i', 't', 'i' };
-static symbol s_5_9[2] = { 'a', 'l' };
-static symbol s_5_10[3] = { 'i', 's', 'm' };
-static symbol s_5_11[3] = { 'i', 'o', 'n' };
-static symbol s_5_12[2] = { 'e', 'r' };
-static symbol s_5_13[3] = { 'o', 'u', 's' };
-static symbol s_5_14[3] = { 'a', 'n', 't' };
-static symbol s_5_15[3] = { 'e', 'n', 't' };
-static symbol s_5_16[4] = { 'm', 'e', 'n', 't' };
-static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' };
-static symbol s_5_18[2] = { 'o', 'u' };
-
-static struct among a_5[19] =
+static const symbol s_5_0[2] = { 'i', 'c' };
+static const symbol s_5_1[4] = { 'a', 'n', 'c', 'e' };
+static const symbol s_5_2[4] = { 'e', 'n', 'c', 'e' };
+static const symbol s_5_3[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_5_4[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_5_5[3] = { 'a', 't', 'e' };
+static const symbol s_5_6[3] = { 'i', 'v', 'e' };
+static const symbol s_5_7[3] = { 'i', 'z', 'e' };
+static const symbol s_5_8[3] = { 'i', 't', 'i' };
+static const symbol s_5_9[2] = { 'a', 'l' };
+static const symbol s_5_10[3] = { 'i', 's', 'm' };
+static const symbol s_5_11[3] = { 'i', 'o', 'n' };
+static const symbol s_5_12[2] = { 'e', 'r' };
+static const symbol s_5_13[3] = { 'o', 'u', 's' };
+static const symbol s_5_14[3] = { 'a', 'n', 't' };
+static const symbol s_5_15[3] = { 'e', 'n', 't' };
+static const symbol s_5_16[4] = { 'm', 'e', 'n', 't' };
+static const symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' };
+static const symbol s_5_18[2] = { 'o', 'u' };
+
+static const struct among a_5[19] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
@@ -180,50 +194,50 @@ static struct among a_5[19] =
 /* 18 */ { 2, s_5_18, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1 };
-
-static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
-
-static symbol s_0[] = { 's', 's' };
-static symbol s_1[] = { 'i' };
-static symbol s_2[] = { 'e', 'e' };
-static symbol s_3[] = { 'e' };
-static symbol s_4[] = { 'e' };
-static symbol s_5[] = { 'y' };
-static symbol s_6[] = { 'Y' };
-static symbol s_7[] = { 'i' };
-static symbol s_8[] = { 't', 'i', 'o', 'n' };
-static symbol s_9[] = { 'e', 'n', 'c', 'e' };
-static symbol s_10[] = { 'a', 'n', 'c', 'e' };
-static symbol s_11[] = { 'a', 'b', 'l', 'e' };
-static symbol s_12[] = { 'e', 'n', 't' };
-static symbol s_13[] = { 'e' };
-static symbol s_14[] = { 'i', 'z', 'e' };
-static symbol s_15[] = { 'a', 't', 'e' };
-static symbol s_16[] = { 'a', 'l' };
-static symbol s_17[] = { 'a', 'l' };
-static symbol s_18[] = { 'f', 'u', 'l' };
-static symbol s_19[] = { 'o', 'u', 's' };
-static symbol s_20[] = { 'i', 'v', 'e' };
-static symbol s_21[] = { 'b', 'l', 'e' };
-static symbol s_22[] = { 'a', 'l' };
-static symbol s_23[] = { 'i', 'c' };
-static symbol s_24[] = { 's' };
-static symbol s_25[] = { 't' };
-static symbol s_26[] = { 'e' };
-static symbol s_27[] = { 'l' };
-static symbol s_28[] = { 'l' };
-static symbol s_29[] = { 'y' };
-static symbol s_30[] = { 'Y' };
-static symbol s_31[] = { 'y' };
-static symbol s_32[] = { 'Y' };
-static symbol s_33[] = { 'Y' };
-static symbol s_34[] = { 'y' };
+static const unsigned char g_v[] = { 17, 65, 16, 1 };
+
+static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
+
+static const symbol s_0[] = { 's', 's' };
+static const symbol s_1[] = { 'i' };
+static const symbol s_2[] = { 'e', 'e' };
+static const symbol s_3[] = { 'e' };
+static const symbol s_4[] = { 'e' };
+static const symbol s_5[] = { 'y' };
+static const symbol s_6[] = { 'Y' };
+static const symbol s_7[] = { 'i' };
+static const symbol s_8[] = { 't', 'i', 'o', 'n' };
+static const symbol s_9[] = { 'e', 'n', 'c', 'e' };
+static const symbol s_10[] = { 'a', 'n', 'c', 'e' };
+static const symbol s_11[] = { 'a', 'b', 'l', 'e' };
+static const symbol s_12[] = { 'e', 'n', 't' };
+static const symbol s_13[] = { 'e' };
+static const symbol s_14[] = { 'i', 'z', 'e' };
+static const symbol s_15[] = { 'a', 't', 'e' };
+static const symbol s_16[] = { 'a', 'l' };
+static const symbol s_17[] = { 'a', 'l' };
+static const symbol s_18[] = { 'f', 'u', 'l' };
+static const symbol s_19[] = { 'o', 'u', 's' };
+static const symbol s_20[] = { 'i', 'v', 'e' };
+static const symbol s_21[] = { 'b', 'l', 'e' };
+static const symbol s_22[] = { 'a', 'l' };
+static const symbol s_23[] = { 'i', 'c' };
+static const symbol s_24[] = { 's' };
+static const symbol s_25[] = { 't' };
+static const symbol s_26[] = { 'e' };
+static const symbol s_27[] = { 'l' };
+static const symbol s_28[] = { 'l' };
+static const symbol s_29[] = { 'y' };
+static const symbol s_30[] = { 'Y' };
+static const symbol s_31[] = { 'y' };
+static const symbol s_32[] = { 'Y' };
+static const symbol s_33[] = { 'Y' };
+static const symbol s_34[] = { 'y' };
 
 static int r_shortv(struct SN_env * z) {
-    if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) return 0;
-    if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0;
-    if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0;
+    if (out_grouping_b_U(z, g_v_WXY, 89, 121, 0)) return 0;
+    if (in_grouping_b_U(z, g_v, 97, 121, 0)) return 0;
+    if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0;
     return 1;
 }
 
@@ -240,26 +254,24 @@ static int r_R2(struct SN_env * z) {
 static int r_Step_1a(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 25 */
+    if (z->c <= z->lb || z->p[z->c - 1] != 115) return 0;
     among_var = find_among_b(z, a_0, 4); /* substring, line 25 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 25 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_0); /* <-, line 26 */
+            {   int ret = slice_from_s(z, 2, s_0); /* <-, line 26 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_1); /* <-, line 27 */
+            {   int ret = slice_from_s(z, 1, s_1); /* <-, line 27 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 29 */
+            {   int ret = slice_del(z); /* delete, line 29 */
                 if (ret < 0) return ret;
             }
             break;
@@ -270,6 +282,7 @@ static int r_Step_1a(struct SN_env * z) {
 static int r_Step_1b(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 34 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0;
     among_var = find_among_b(z, a_2, 3); /* substring, line 34 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 34 */
@@ -280,29 +293,24 @@ static int r_Step_1b(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 35 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 2, s_2); /* <-, line 35 */
+            {   int ret = slice_from_s(z, 2, s_2); /* <-, line 35 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             {   int m_test = z->l - z->c; /* test, line 38 */
-                while(1) { /* gopast, line 38 */
-                    if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0;
-                    break;
-                lab0:
-                    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                        if (c < 0) return 0;
-                        z->c = c; /* gopast, line 38 */
-                    }
+                {    /* gopast */ /* grouping v, line 38 */
+                    int ret = out_grouping_b_U(z, g_v, 97, 121, 1);
+                    if (ret < 0) return 0;
+                    z->c -= ret;
                 }
                 z->c = z->l - m_test;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 38 */
+            {   int ret = slice_del(z); /* delete, line 38 */
                 if (ret < 0) return ret;
             }
             {   int m_test = z->l - z->c; /* test, line 39 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else
                 among_var = find_among_b(z, a_1, 13); /* substring, line 39 */
                 if (!(among_var)) return 0;
                 z->c = z->l - m_test;
@@ -310,23 +318,20 @@ static int r_Step_1b(struct SN_env * z) {
             switch(among_var) {
                 case 0: return 0;
                 case 1:
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
                 case 2:
                     z->ket = z->c; /* [, line 44 */
-                    {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                        if (c < 0) return 0;
-                        z->c = c; /* next, line 44 */
+                    {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                        if (ret < 0) return 0;
+                        z->c = ret; /* next, line 44 */
                     }
                     z->bra = z->c; /* ], line 44 */
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 44 */
+                    {   int ret = slice_del(z); /* delete, line 44 */
                         if (ret < 0) return ret;
                     }
                     break;
@@ -339,11 +344,9 @@ static int r_Step_1b(struct SN_env * z) {
                         }
                         z->c = z->l - m_test;
                     }
-                    {   int ret;
-                        {   int c = z->c;
-                            ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */
-                            z->c = c;
-                        }
+                    {   int c_keep = z->c;
+                        int ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */
+                        z->c = c_keep;
                         if (ret < 0) return ret;
                     }
                     break;
@@ -355,26 +358,21 @@ static int r_Step_1b(struct SN_env * z) {
 
 static int r_Step_1c(struct SN_env * z) {
     z->ket = z->c; /* [, line 52 */
-    {   int m = z->l - z->c; (void) m; /* or, line 52 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 52 */
         if (!(eq_s_b(z, 1, s_5))) goto lab1;
         goto lab0;
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         if (!(eq_s_b(z, 1, s_6))) return 0;
     }
 lab0:
     z->bra = z->c; /* ], line 52 */
-    while(1) { /* gopast, line 53 */
-        if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab2;
-        break;
-    lab2:
-        {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 53 */
-        }
+    {    /* gopast */ /* grouping v, line 53 */
+        int ret = out_grouping_b_U(z, g_v, 97, 121, 1);
+        if (ret < 0) return 0;
+        z->c -= ret;
     }
-    {   int ret;
-        ret = slice_from_s(z, 1, s_7); /* <-, line 54 */
+    {   int ret = slice_from_s(z, 1, s_7); /* <-, line 54 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -383,6 +381,7 @@ lab0:
 static int r_Step_2(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 58 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_3, 20); /* substring, line 58 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 58 */
@@ -393,86 +392,72 @@ static int r_Step_2(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_8); /* <-, line 59 */
+            {   int ret = slice_from_s(z, 4, s_8); /* <-, line 59 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_9); /* <-, line 60 */
+            {   int ret = slice_from_s(z, 4, s_9); /* <-, line 60 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_10); /* <-, line 61 */
+            {   int ret = slice_from_s(z, 4, s_10); /* <-, line 61 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
-            {   int ret;
-                ret = slice_from_s(z, 4, s_11); /* <-, line 62 */
+            {   int ret = slice_from_s(z, 4, s_11); /* <-, line 62 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_12); /* <-, line 63 */
+            {   int ret = slice_from_s(z, 3, s_12); /* <-, line 63 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_13); /* <-, line 64 */
+            {   int ret = slice_from_s(z, 1, s_13); /* <-, line 64 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_14); /* <-, line 66 */
+            {   int ret = slice_from_s(z, 3, s_14); /* <-, line 66 */
                 if (ret < 0) return ret;
             }
             break;
         case 8:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_15); /* <-, line 68 */
+            {   int ret = slice_from_s(z, 3, s_15); /* <-, line 68 */
                 if (ret < 0) return ret;
             }
             break;
         case 9:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_16); /* <-, line 69 */
+            {   int ret = slice_from_s(z, 2, s_16); /* <-, line 69 */
                 if (ret < 0) return ret;
             }
             break;
         case 10:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_17); /* <-, line 71 */
+            {   int ret = slice_from_s(z, 2, s_17); /* <-, line 71 */
                 if (ret < 0) return ret;
             }
             break;
         case 11:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_18); /* <-, line 72 */
+            {   int ret = slice_from_s(z, 3, s_18); /* <-, line 72 */
                 if (ret < 0) return ret;
             }
             break;
         case 12:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_19); /* <-, line 74 */
+            {   int ret = slice_from_s(z, 3, s_19); /* <-, line 74 */
                 if (ret < 0) return ret;
             }
             break;
         case 13:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_20); /* <-, line 76 */
+            {   int ret = slice_from_s(z, 3, s_20); /* <-, line 76 */
                 if (ret < 0) return ret;
             }
             break;
         case 14:
-            {   int ret;
-                ret = slice_from_s(z, 3, s_21); /* <-, line 77 */
+            {   int ret = slice_from_s(z, 3, s_21); /* <-, line 77 */
                 if (ret < 0) return ret;
             }
             break;
@@ -483,6 +468,7 @@ static int r_Step_2(struct SN_env * z) {
 static int r_Step_3(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 82 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_4, 7); /* substring, line 82 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 82 */
@@ -493,20 +479,17 @@ static int r_Step_3(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_22); /* <-, line 83 */
+            {   int ret = slice_from_s(z, 2, s_22); /* <-, line 83 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 2, s_23); /* <-, line 85 */
+            {   int ret = slice_from_s(z, 2, s_23); /* <-, line 85 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 87 */
+            {   int ret = slice_del(z); /* delete, line 87 */
                 if (ret < 0) return ret;
             }
             break;
@@ -517,6 +500,7 @@ static int r_Step_3(struct SN_env * z) {
 static int r_Step_4(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 92 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((3961384 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_5, 19); /* substring, line 92 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 92 */
@@ -527,22 +511,20 @@ static int r_Step_4(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 95 */
+            {   int ret = slice_del(z); /* delete, line 95 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int m = z->l - z->c; (void) m; /* or, line 96 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 96 */
                 if (!(eq_s_b(z, 1, s_24))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_25))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 96 */
+            {   int ret = slice_del(z); /* delete, line 96 */
                 if (ret < 0) return ret;
             }
             break;
@@ -554,31 +536,30 @@ static int r_Step_5a(struct SN_env * z) {
     z->ket = z->c; /* [, line 101 */
     if (!(eq_s_b(z, 1, s_26))) return 0;
     z->bra = z->c; /* ], line 101 */
-    {   int m = z->l - z->c; (void) m; /* or, line 102 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 102 */
         {   int ret = r_R2(z);
             if (ret == 0) goto lab1; /* call R2, line 102 */
             if (ret < 0) return ret;
         }
         goto lab0;
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m1;
         {   int ret = r_R1(z);
             if (ret == 0) return 0; /* call R1, line 102 */
             if (ret < 0) return ret;
         }
-        {   int m = z->l - z->c; (void) m; /* not, line 102 */
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 102 */
             {   int ret = r_shortv(z);
                 if (ret == 0) goto lab2; /* call shortv, line 102 */
                 if (ret < 0) return ret;
             }
             return 0;
         lab2:
-            z->c = z->l - m;
+            z->c = z->l - m2;
         }
     }
 lab0:
-    {   int ret;
-        ret = slice_del(z); /* delete, line 103 */
+    {   int ret = slice_del(z); /* delete, line 103 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -593,8 +574,7 @@ static int r_Step_5b(struct SN_env * z) {
         if (ret < 0) return ret;
     }
     if (!(eq_s_b(z, 1, s_28))) return 0;
-    {   int ret;
-        ret = slice_del(z); /* delete, line 109 */
+    {   int ret = slice_del(z); /* delete, line 109 */
         if (ret < 0) return ret;
     }
     return 1;
@@ -602,193 +582,174 @@ static int r_Step_5b(struct SN_env * z) {
 
 extern int porter_UTF_8_stem(struct SN_env * z) {
     z->B[0] = 0; /* unset Y_found, line 115 */
-    {   int c = z->c; /* do, line 116 */
+    {   int c1 = z->c; /* do, line 116 */
         z->bra = z->c; /* [, line 116 */
         if (!(eq_s(z, 1, s_29))) goto lab0;
         z->ket = z->c; /* ], line 116 */
-        {   int ret;
-            ret = slice_from_s(z, 1, s_30); /* <-, line 116 */
+        {   int ret = slice_from_s(z, 1, s_30); /* <-, line 116 */
             if (ret < 0) return ret;
         }
         z->B[0] = 1; /* set Y_found, line 116 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 117 */
+    {   int c2 = z->c; /* do, line 117 */
         while(1) { /* repeat, line 117 */
-            int c = z->c;
+            int c3 = z->c;
             while(1) { /* goto, line 117 */
-                int c = z->c;
-                if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3;
+                int c4 = z->c;
+                if (in_grouping_U(z, g_v, 97, 121, 0)) goto lab3;
                 z->bra = z->c; /* [, line 117 */
                 if (!(eq_s(z, 1, s_31))) goto lab3;
                 z->ket = z->c; /* ], line 117 */
-                z->c = c;
+                z->c = c4;
                 break;
             lab3:
-                z->c = c;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab2;
-                    z->c = c; /* goto, line 117 */
+                z->c = c4;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab2;
+                    z->c = ret; /* goto, line 117 */
                 }
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_32); /* <-, line 117 */
+            {   int ret = slice_from_s(z, 1, s_32); /* <-, line 117 */
                 if (ret < 0) return ret;
             }
             z->B[0] = 1; /* set Y_found, line 117 */
             continue;
         lab2:
-            z->c = c;
+            z->c = c3;
             break;
         }
-        z->c = c;
+        z->c = c2;
     }
     z->I[0] = z->l;
     z->I[1] = z->l;
-    {   int c = z->c; /* do, line 121 */
-        while(1) { /* gopast, line 122 */
-            if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5;
-            break;
-        lab5:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 122 */
-            }
+    {   int c5 = z->c; /* do, line 121 */
+        {    /* gopast */ /* grouping v, line 122 */
+            int ret = out_grouping_U(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 122 */
-            if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6;
-            break;
-        lab6:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 122 */
-            }
+        {    /* gopast */ /* non v, line 122 */
+            int ret = in_grouping_U(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
         z->I[0] = z->c; /* setmark p1, line 122 */
-        while(1) { /* gopast, line 123 */
-            if (!(in_grouping_U(z, g_v, 97, 121))) goto lab7;
-            break;
-        lab7:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 123 */
-            }
+        {    /* gopast */ /* grouping v, line 123 */
+            int ret = out_grouping_U(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 123 */
-            if (!(out_grouping_U(z, g_v, 97, 121))) goto lab8;
-            break;
-        lab8:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab4;
-                z->c = c; /* gopast, line 123 */
-            }
+        {    /* gopast */ /* non v, line 123 */
+            int ret = in_grouping_U(z, g_v, 97, 121, 1);
+            if (ret < 0) goto lab4;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p2, line 123 */
     lab4:
-        z->c = c;
+        z->c = c5;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 126 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 127 */
+    {   int m6 = z->l - z->c; (void)m6; /* do, line 127 */
         {   int ret = r_Step_1a(z);
-            if (ret == 0) goto lab9; /* call Step_1a, line 127 */
+            if (ret == 0) goto lab5; /* call Step_1a, line 127 */
             if (ret < 0) return ret;
         }
-    lab9:
-        z->c = z->l - m;
+    lab5:
+        z->c = z->l - m6;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 128 */
+    {   int m7 = z->l - z->c; (void)m7; /* do, line 128 */
         {   int ret = r_Step_1b(z);
-            if (ret == 0) goto lab10; /* call Step_1b, line 128 */
+            if (ret == 0) goto lab6; /* call Step_1b, line 128 */
             if (ret < 0) return ret;
         }
-    lab10:
-        z->c = z->l - m;
+    lab6:
+        z->c = z->l - m7;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 129 */
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 129 */
         {   int ret = r_Step_1c(z);
-            if (ret == 0) goto lab11; /* call Step_1c, line 129 */
+            if (ret == 0) goto lab7; /* call Step_1c, line 129 */
             if (ret < 0) return ret;
         }
-    lab11:
-        z->c = z->l - m;
+    lab7:
+        z->c = z->l - m8;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 130 */
+    {   int m9 = z->l - z->c; (void)m9; /* do, line 130 */
         {   int ret = r_Step_2(z);
-            if (ret == 0) goto lab12; /* call Step_2, line 130 */
+            if (ret == 0) goto lab8; /* call Step_2, line 130 */
             if (ret < 0) return ret;
         }
-    lab12:
-        z->c = z->l - m;
+    lab8:
+        z->c = z->l - m9;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 131 */
+    {   int m10 = z->l - z->c; (void)m10; /* do, line 131 */
         {   int ret = r_Step_3(z);
-            if (ret == 0) goto lab13; /* call Step_3, line 131 */
+            if (ret == 0) goto lab9; /* call Step_3, line 131 */
             if (ret < 0) return ret;
         }
-    lab13:
-        z->c = z->l - m;
+    lab9:
+        z->c = z->l - m10;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 132 */
+    {   int m11 = z->l - z->c; (void)m11; /* do, line 132 */
         {   int ret = r_Step_4(z);
-            if (ret == 0) goto lab14; /* call Step_4, line 132 */
+            if (ret == 0) goto lab10; /* call Step_4, line 132 */
             if (ret < 0) return ret;
         }
-    lab14:
-        z->c = z->l - m;
+    lab10:
+        z->c = z->l - m11;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 133 */
+    {   int m12 = z->l - z->c; (void)m12; /* do, line 133 */
         {   int ret = r_Step_5a(z);
-            if (ret == 0) goto lab15; /* call Step_5a, line 133 */
+            if (ret == 0) goto lab11; /* call Step_5a, line 133 */
             if (ret < 0) return ret;
         }
-    lab15:
-        z->c = z->l - m;
+    lab11:
+        z->c = z->l - m12;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 134 */
+    {   int m13 = z->l - z->c; (void)m13; /* do, line 134 */
         {   int ret = r_Step_5b(z);
-            if (ret == 0) goto lab16; /* call Step_5b, line 134 */
+            if (ret == 0) goto lab12; /* call Step_5b, line 134 */
             if (ret < 0) return ret;
         }
-    lab16:
-        z->c = z->l - m;
+    lab12:
+        z->c = z->l - m13;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 137 */
-        if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */
+    {   int c14 = z->c; /* do, line 137 */
+        if (!(z->B[0])) goto lab13; /* Boolean test Y_found, line 137 */
         while(1) { /* repeat, line 137 */
-            int c = z->c;
+            int c15 = z->c;
             while(1) { /* goto, line 137 */
-                int c = z->c;
+                int c16 = z->c;
                 z->bra = z->c; /* [, line 137 */
-                if (!(eq_s(z, 1, s_33))) goto lab19;
+                if (!(eq_s(z, 1, s_33))) goto lab15;
                 z->ket = z->c; /* ], line 137 */
-                z->c = c;
+                z->c = c16;
                 break;
-            lab19:
-                z->c = c;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab18;
-                    z->c = c; /* goto, line 137 */
+            lab15:
+                z->c = c16;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab14;
+                    z->c = ret; /* goto, line 137 */
                 }
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_34); /* <-, line 137 */
+            {   int ret = slice_from_s(z, 1, s_34); /* <-, line 137 */
                 if (ret < 0) return ret;
             }
             continue;
-        lab18:
-            z->c = c;
+        lab14:
+            z->c = c15;
             break;
         }
-    lab17:
-        z->c = c;
+    lab13:
+        z->c = c14;
     }
     return 1;
 }
 
 extern struct SN_env * porter_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); }
 
-extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_portuguese.c b/libstemmer_c/src_c/stem_UTF_8_portuguese.c
index e288544..282dbb7 100644
--- a/libstemmer_c/src_c/stem_UTF_8_portuguese.c
+++ b/libstemmer_c/src_c/stem_UTF_8_portuguese.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int portuguese_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_residual_form(struct SN_env * z);
 static int r_residual_suffix(struct SN_env * z);
 static int r_verb_suffix(struct SN_env * z);
@@ -14,36 +20,44 @@ static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
 static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * portuguese_UTF_8_create_env(void);
 extern void portuguese_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_1[2] = { 0xC3, 0xA3 };
-static symbol s_0_2[2] = { 0xC3, 0xB5 };
 
-static struct among a_0[3] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[2] = { 0xC3, 0xA3 };
+static const symbol s_0_2[2] = { 0xC3, 0xB5 };
+
+static const struct among a_0[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_0_1, 0, 1, 0},
 /*  2 */ { 2, s_0_2, 0, 2, 0}
 };
 
-static symbol s_1_1[2] = { 'a', '~' };
-static symbol s_1_2[2] = { 'o', '~' };
+static const symbol s_1_1[2] = { 'a', '~' };
+static const symbol s_1_2[2] = { 'o', '~' };
 
-static struct among a_1[3] =
+static const struct among a_1[3] =
 {
 /*  0 */ { 0, 0, -1, 3, 0},
 /*  1 */ { 2, s_1_1, 0, 1, 0},
 /*  2 */ { 2, s_1_2, 0, 2, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'c' };
-static symbol s_2_1[2] = { 'a', 'd' };
-static symbol s_2_2[2] = { 'o', 's' };
-static symbol s_2_3[2] = { 'i', 'v' };
+static const symbol s_2_0[2] = { 'i', 'c' };
+static const symbol s_2_1[2] = { 'a', 'd' };
+static const symbol s_2_2[2] = { 'o', 's' };
+static const symbol s_2_3[2] = { 'i', 'v' };
 
-static struct among a_2[4] =
+static const struct among a_2[4] =
 {
 /*  0 */ { 2, s_2_0, -1, -1, 0},
 /*  1 */ { 2, s_2_1, -1, -1, 0},
@@ -51,75 +65,75 @@ static struct among a_2[4] =
 /*  3 */ { 2, s_2_3, -1, 1, 0}
 };
 
-static symbol s_3_0[4] = { 'a', 'n', 't', 'e' };
-static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' };
-static symbol s_3_2[5] = { 0xC3, 0xAD, 'v', 'e', 'l' };
+static const symbol s_3_0[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_3_1[4] = { 'a', 'v', 'e', 'l' };
+static const symbol s_3_2[5] = { 0xC3, 0xAD, 'v', 'e', 'l' };
 
-static struct among a_3[3] =
+static const struct among a_3[3] =
 {
 /*  0 */ { 4, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0},
 /*  2 */ { 5, s_3_2, -1, 1, 0}
 };
 
-static symbol s_4_0[2] = { 'i', 'c' };
-static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_4_2[2] = { 'i', 'v' };
+static const symbol s_4_0[2] = { 'i', 'c' };
+static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_4_2[2] = { 'i', 'v' };
 
-static struct among a_4[3] =
+static const struct among a_4[3] =
 {
 /*  0 */ { 2, s_4_0, -1, 1, 0},
 /*  1 */ { 4, s_4_1, -1, 1, 0},
 /*  2 */ { 2, s_4_2, -1, 1, 0}
 };
 
-static symbol s_5_0[3] = { 'i', 'c', 'a' };
-static symbol s_5_1[6] = { 0xC3, 0xA2, 'n', 'c', 'i', 'a' };
-static symbol s_5_2[6] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a' };
-static symbol s_5_3[3] = { 'i', 'r', 'a' };
-static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' };
-static symbol s_5_5[3] = { 'o', 's', 'a' };
-static symbol s_5_6[4] = { 'i', 's', 't', 'a' };
-static symbol s_5_7[3] = { 'i', 'v', 'a' };
-static symbol s_5_8[3] = { 'e', 'z', 'a' };
-static symbol s_5_9[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' };
-static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' };
-static symbol s_5_11[4] = { 'a', 'n', 't', 'e' };
-static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' };
-static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
-static symbol s_5_14[5] = { 0xC3, 0xA1, 'v', 'e', 'l' };
-static symbol s_5_15[5] = { 0xC3, 0xAD, 'v', 'e', 'l' };
-static symbol s_5_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' };
-static symbol s_5_17[3] = { 'i', 'c', 'o' };
-static symbol s_5_18[4] = { 'i', 's', 'm', 'o' };
-static symbol s_5_19[3] = { 'o', 's', 'o' };
-static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
-static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
-static symbol s_5_22[3] = { 'i', 'v', 'o' };
-static symbol s_5_23[6] = { 'a', 0xC3, 0xA7, 'a', '~', 'o' };
-static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' };
-static symbol s_5_25[4] = { 'i', 'c', 'a', 's' };
-static symbol s_5_26[7] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a', 's' };
-static symbol s_5_27[4] = { 'i', 'r', 'a', 's' };
-static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
-static symbol s_5_29[4] = { 'o', 's', 'a', 's' };
-static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' };
-static symbol s_5_31[4] = { 'i', 'v', 'a', 's' };
-static symbol s_5_32[4] = { 'e', 'z', 'a', 's' };
-static symbol s_5_33[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' };
-static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
-static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
-static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
-static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' };
-static symbol s_5_38[7] = { 'a', 0xC3, 0xA7, 'o', '~', 'e', 's' };
-static symbol s_5_39[4] = { 'i', 'c', 'o', 's' };
-static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' };
-static symbol s_5_41[4] = { 'o', 's', 'o', 's' };
-static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' };
-static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' };
-static symbol s_5_44[4] = { 'i', 'v', 'o', 's' };
-
-static struct among a_5[45] =
+static const symbol s_5_0[3] = { 'i', 'c', 'a' };
+static const symbol s_5_1[6] = { 0xC3, 0xA2, 'n', 'c', 'i', 'a' };
+static const symbol s_5_2[6] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a' };
+static const symbol s_5_3[3] = { 'i', 'r', 'a' };
+static const symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' };
+static const symbol s_5_5[3] = { 'o', 's', 'a' };
+static const symbol s_5_6[4] = { 'i', 's', 't', 'a' };
+static const symbol s_5_7[3] = { 'i', 'v', 'a' };
+static const symbol s_5_8[3] = { 'e', 'z', 'a' };
+static const symbol s_5_9[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' };
+static const symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' };
+static const symbol s_5_11[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' };
+static const symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
+static const symbol s_5_14[5] = { 0xC3, 0xA1, 'v', 'e', 'l' };
+static const symbol s_5_15[5] = { 0xC3, 0xAD, 'v', 'e', 'l' };
+static const symbol s_5_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' };
+static const symbol s_5_17[3] = { 'i', 'c', 'o' };
+static const symbol s_5_18[4] = { 'i', 's', 'm', 'o' };
+static const symbol s_5_19[3] = { 'o', 's', 'o' };
+static const symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' };
+static const symbol s_5_22[3] = { 'i', 'v', 'o' };
+static const symbol s_5_23[6] = { 'a', 0xC3, 0xA7, 'a', '~', 'o' };
+static const symbol s_5_24[4] = { 'a', 'd', 'o', 'r' };
+static const symbol s_5_25[4] = { 'i', 'c', 'a', 's' };
+static const symbol s_5_26[7] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a', 's' };
+static const symbol s_5_27[4] = { 'i', 'r', 'a', 's' };
+static const symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
+static const symbol s_5_29[4] = { 'o', 's', 'a', 's' };
+static const symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' };
+static const symbol s_5_31[4] = { 'i', 'v', 'a', 's' };
+static const symbol s_5_32[4] = { 'e', 'z', 'a', 's' };
+static const symbol s_5_33[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' };
+static const symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
+static const symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
+static const symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
+static const symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' };
+static const symbol s_5_38[7] = { 'a', 0xC3, 0xA7, 'o', '~', 'e', 's' };
+static const symbol s_5_39[4] = { 'i', 'c', 'o', 's' };
+static const symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' };
+static const symbol s_5_41[4] = { 'o', 's', 'o', 's' };
+static const symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' };
+static const symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' };
+static const symbol s_5_44[4] = { 'i', 'v', 'o', 's' };
+
+static const struct among a_5[45] =
 {
 /*  0 */ { 3, s_5_0, -1, 1, 0},
 /*  1 */ { 6, s_5_1, -1, 1, 0},
@@ -168,128 +182,128 @@ static struct among a_5[45] =
 /* 44 */ { 4, s_5_44, -1, 8, 0}
 };
 
-static symbol s_6_0[3] = { 'a', 'd', 'a' };
-static symbol s_6_1[3] = { 'i', 'd', 'a' };
-static symbol s_6_2[2] = { 'i', 'a' };
-static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' };
-static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' };
-static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' };
-static symbol s_6_6[3] = { 'a', 'r', 'a' };
-static symbol s_6_7[3] = { 'e', 'r', 'a' };
-static symbol s_6_8[3] = { 'i', 'r', 'a' };
-static symbol s_6_9[3] = { 'a', 'v', 'a' };
-static symbol s_6_10[4] = { 'a', 's', 's', 'e' };
-static symbol s_6_11[4] = { 'e', 's', 's', 'e' };
-static symbol s_6_12[4] = { 'i', 's', 's', 'e' };
-static symbol s_6_13[4] = { 'a', 's', 't', 'e' };
-static symbol s_6_14[4] = { 'e', 's', 't', 'e' };
-static symbol s_6_15[4] = { 'i', 's', 't', 'e' };
-static symbol s_6_16[2] = { 'e', 'i' };
-static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' };
-static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' };
-static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' };
-static symbol s_6_20[2] = { 'a', 'm' };
-static symbol s_6_21[3] = { 'i', 'a', 'm' };
-static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' };
-static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' };
-static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' };
-static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' };
-static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' };
-static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' };
-static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' };
-static symbol s_6_29[2] = { 'e', 'm' };
-static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' };
-static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' };
-static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' };
-static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' };
-static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' };
-static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' };
-static symbol s_6_36[3] = { 'a', 'd', 'o' };
-static symbol s_6_37[3] = { 'i', 'd', 'o' };
-static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' };
-static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' };
-static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' };
-static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' };
-static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' };
-static symbol s_6_44[2] = { 'a', 'r' };
-static symbol s_6_45[2] = { 'e', 'r' };
-static symbol s_6_46[2] = { 'i', 'r' };
-static symbol s_6_47[2] = { 'a', 's' };
-static symbol s_6_48[4] = { 'a', 'd', 'a', 's' };
-static symbol s_6_49[4] = { 'i', 'd', 'a', 's' };
-static symbol s_6_50[3] = { 'i', 'a', 's' };
-static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' };
-static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' };
-static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' };
-static symbol s_6_54[4] = { 'a', 'r', 'a', 's' };
-static symbol s_6_55[4] = { 'e', 'r', 'a', 's' };
-static symbol s_6_56[4] = { 'i', 'r', 'a', 's' };
-static symbol s_6_57[4] = { 'a', 'v', 'a', 's' };
-static symbol s_6_58[2] = { 'e', 's' };
-static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' };
-static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' };
-static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' };
-static symbol s_6_62[4] = { 'a', 'r', 'e', 's' };
-static symbol s_6_63[4] = { 'e', 'r', 'e', 's' };
-static symbol s_6_64[4] = { 'i', 'r', 'e', 's' };
-static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' };
-static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' };
-static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' };
-static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' };
-static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' };
-static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' };
-static symbol s_6_71[2] = { 'i', 's' };
-static symbol s_6_72[3] = { 'a', 'i', 's' };
-static symbol s_6_73[3] = { 'e', 'i', 's' };
-static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' };
-static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' };
-static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' };
-static symbol s_6_77[6] = { 0xC3, 0xA1, 'r', 'e', 'i', 's' };
-static symbol s_6_78[6] = { 0xC3, 0xA9, 'r', 'e', 'i', 's' };
-static symbol s_6_79[6] = { 0xC3, 0xAD, 'r', 'e', 'i', 's' };
-static symbol s_6_80[7] = { 0xC3, 0xA1, 's', 's', 'e', 'i', 's' };
-static symbol s_6_81[7] = { 0xC3, 0xA9, 's', 's', 'e', 'i', 's' };
-static symbol s_6_82[7] = { 0xC3, 0xAD, 's', 's', 'e', 'i', 's' };
-static symbol s_6_83[6] = { 0xC3, 0xA1, 'v', 'e', 'i', 's' };
-static symbol s_6_84[5] = { 0xC3, 0xAD, 'e', 'i', 's' };
-static symbol s_6_85[7] = { 'a', 'r', 0xC3, 0xAD, 'e', 'i', 's' };
-static symbol s_6_86[7] = { 'e', 'r', 0xC3, 0xAD, 'e', 'i', 's' };
-static symbol s_6_87[7] = { 'i', 'r', 0xC3, 0xAD, 'e', 'i', 's' };
-static symbol s_6_88[4] = { 'a', 'd', 'o', 's' };
-static symbol s_6_89[4] = { 'i', 'd', 'o', 's' };
-static symbol s_6_90[4] = { 'a', 'm', 'o', 's' };
-static symbol s_6_91[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' };
-static symbol s_6_92[7] = { 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' };
-static symbol s_6_93[7] = { 0xC3, 0xAD, 'r', 'a', 'm', 'o', 's' };
-static symbol s_6_94[7] = { 0xC3, 0xA1, 'v', 'a', 'm', 'o', 's' };
-static symbol s_6_95[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_6_96[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_6_97[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_6_98[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_6_99[4] = { 'e', 'm', 'o', 's' };
-static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
-static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
-static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
-static symbol s_6_103[8] = { 0xC3, 0xA1, 's', 's', 'e', 'm', 'o', 's' };
-static symbol s_6_104[8] = { 0xC3, 0xAA, 's', 's', 'e', 'm', 'o', 's' };
-static symbol s_6_105[8] = { 0xC3, 0xAD, 's', 's', 'e', 'm', 'o', 's' };
-static symbol s_6_106[4] = { 'i', 'm', 'o', 's' };
-static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' };
-static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' };
-static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' };
-static symbol s_6_110[5] = { 0xC3, 0xA1, 'm', 'o', 's' };
-static symbol s_6_111[5] = { 'a', 'r', 0xC3, 0xA1, 's' };
-static symbol s_6_112[5] = { 'e', 'r', 0xC3, 0xA1, 's' };
-static symbol s_6_113[5] = { 'i', 'r', 0xC3, 0xA1, 's' };
-static symbol s_6_114[2] = { 'e', 'u' };
-static symbol s_6_115[2] = { 'i', 'u' };
-static symbol s_6_116[2] = { 'o', 'u' };
-static symbol s_6_117[4] = { 'a', 'r', 0xC3, 0xA1 };
-static symbol s_6_118[4] = { 'e', 'r', 0xC3, 0xA1 };
-static symbol s_6_119[4] = { 'i', 'r', 0xC3, 0xA1 };
-
-static struct among a_6[120] =
+static const symbol s_6_0[3] = { 'a', 'd', 'a' };
+static const symbol s_6_1[3] = { 'i', 'd', 'a' };
+static const symbol s_6_2[2] = { 'i', 'a' };
+static const symbol s_6_3[4] = { 'a', 'r', 'i', 'a' };
+static const symbol s_6_4[4] = { 'e', 'r', 'i', 'a' };
+static const symbol s_6_5[4] = { 'i', 'r', 'i', 'a' };
+static const symbol s_6_6[3] = { 'a', 'r', 'a' };
+static const symbol s_6_7[3] = { 'e', 'r', 'a' };
+static const symbol s_6_8[3] = { 'i', 'r', 'a' };
+static const symbol s_6_9[3] = { 'a', 'v', 'a' };
+static const symbol s_6_10[4] = { 'a', 's', 's', 'e' };
+static const symbol s_6_11[4] = { 'e', 's', 's', 'e' };
+static const symbol s_6_12[4] = { 'i', 's', 's', 'e' };
+static const symbol s_6_13[4] = { 'a', 's', 't', 'e' };
+static const symbol s_6_14[4] = { 'e', 's', 't', 'e' };
+static const symbol s_6_15[4] = { 'i', 's', 't', 'e' };
+static const symbol s_6_16[2] = { 'e', 'i' };
+static const symbol s_6_17[4] = { 'a', 'r', 'e', 'i' };
+static const symbol s_6_18[4] = { 'e', 'r', 'e', 'i' };
+static const symbol s_6_19[4] = { 'i', 'r', 'e', 'i' };
+static const symbol s_6_20[2] = { 'a', 'm' };
+static const symbol s_6_21[3] = { 'i', 'a', 'm' };
+static const symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' };
+static const symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' };
+static const symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' };
+static const symbol s_6_25[4] = { 'a', 'r', 'a', 'm' };
+static const symbol s_6_26[4] = { 'e', 'r', 'a', 'm' };
+static const symbol s_6_27[4] = { 'i', 'r', 'a', 'm' };
+static const symbol s_6_28[4] = { 'a', 'v', 'a', 'm' };
+static const symbol s_6_29[2] = { 'e', 'm' };
+static const symbol s_6_30[4] = { 'a', 'r', 'e', 'm' };
+static const symbol s_6_31[4] = { 'e', 'r', 'e', 'm' };
+static const symbol s_6_32[4] = { 'i', 'r', 'e', 'm' };
+static const symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' };
+static const symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' };
+static const symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' };
+static const symbol s_6_36[3] = { 'a', 'd', 'o' };
+static const symbol s_6_37[3] = { 'i', 'd', 'o' };
+static const symbol s_6_38[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_6_39[4] = { 'e', 'n', 'd', 'o' };
+static const symbol s_6_40[4] = { 'i', 'n', 'd', 'o' };
+static const symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' };
+static const symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' };
+static const symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' };
+static const symbol s_6_44[2] = { 'a', 'r' };
+static const symbol s_6_45[2] = { 'e', 'r' };
+static const symbol s_6_46[2] = { 'i', 'r' };
+static const symbol s_6_47[2] = { 'a', 's' };
+static const symbol s_6_48[4] = { 'a', 'd', 'a', 's' };
+static const symbol s_6_49[4] = { 'i', 'd', 'a', 's' };
+static const symbol s_6_50[3] = { 'i', 'a', 's' };
+static const symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' };
+static const symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' };
+static const symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' };
+static const symbol s_6_54[4] = { 'a', 'r', 'a', 's' };
+static const symbol s_6_55[4] = { 'e', 'r', 'a', 's' };
+static const symbol s_6_56[4] = { 'i', 'r', 'a', 's' };
+static const symbol s_6_57[4] = { 'a', 'v', 'a', 's' };
+static const symbol s_6_58[2] = { 'e', 's' };
+static const symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' };
+static const symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' };
+static const symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' };
+static const symbol s_6_62[4] = { 'a', 'r', 'e', 's' };
+static const symbol s_6_63[4] = { 'e', 'r', 'e', 's' };
+static const symbol s_6_64[4] = { 'i', 'r', 'e', 's' };
+static const symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' };
+static const symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' };
+static const symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' };
+static const symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' };
+static const symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' };
+static const symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' };
+static const symbol s_6_71[2] = { 'i', 's' };
+static const symbol s_6_72[3] = { 'a', 'i', 's' };
+static const symbol s_6_73[3] = { 'e', 'i', 's' };
+static const symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' };
+static const symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' };
+static const symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' };
+static const symbol s_6_77[6] = { 0xC3, 0xA1, 'r', 'e', 'i', 's' };
+static const symbol s_6_78[6] = { 0xC3, 0xA9, 'r', 'e', 'i', 's' };
+static const symbol s_6_79[6] = { 0xC3, 0xAD, 'r', 'e', 'i', 's' };
+static const symbol s_6_80[7] = { 0xC3, 0xA1, 's', 's', 'e', 'i', 's' };
+static const symbol s_6_81[7] = { 0xC3, 0xA9, 's', 's', 'e', 'i', 's' };
+static const symbol s_6_82[7] = { 0xC3, 0xAD, 's', 's', 'e', 'i', 's' };
+static const symbol s_6_83[6] = { 0xC3, 0xA1, 'v', 'e', 'i', 's' };
+static const symbol s_6_84[5] = { 0xC3, 0xAD, 'e', 'i', 's' };
+static const symbol s_6_85[7] = { 'a', 'r', 0xC3, 0xAD, 'e', 'i', 's' };
+static const symbol s_6_86[7] = { 'e', 'r', 0xC3, 0xAD, 'e', 'i', 's' };
+static const symbol s_6_87[7] = { 'i', 'r', 0xC3, 0xAD, 'e', 'i', 's' };
+static const symbol s_6_88[4] = { 'a', 'd', 'o', 's' };
+static const symbol s_6_89[4] = { 'i', 'd', 'o', 's' };
+static const symbol s_6_90[4] = { 'a', 'm', 'o', 's' };
+static const symbol s_6_91[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_6_92[7] = { 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_6_93[7] = { 0xC3, 0xAD, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_6_94[7] = { 0xC3, 0xA1, 'v', 'a', 'm', 'o', 's' };
+static const symbol s_6_95[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_6_96[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_6_97[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_6_98[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_6_99[4] = { 'e', 'm', 'o', 's' };
+static const symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_6_103[8] = { 0xC3, 0xA1, 's', 's', 'e', 'm', 'o', 's' };
+static const symbol s_6_104[8] = { 0xC3, 0xAA, 's', 's', 'e', 'm', 'o', 's' };
+static const symbol s_6_105[8] = { 0xC3, 0xAD, 's', 's', 'e', 'm', 'o', 's' };
+static const symbol s_6_106[4] = { 'i', 'm', 'o', 's' };
+static const symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' };
+static const symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' };
+static const symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' };
+static const symbol s_6_110[5] = { 0xC3, 0xA1, 'm', 'o', 's' };
+static const symbol s_6_111[5] = { 'a', 'r', 0xC3, 0xA1, 's' };
+static const symbol s_6_112[5] = { 'e', 'r', 0xC3, 0xA1, 's' };
+static const symbol s_6_113[5] = { 'i', 'r', 0xC3, 0xA1, 's' };
+static const symbol s_6_114[2] = { 'e', 'u' };
+static const symbol s_6_115[2] = { 'i', 'u' };
+static const symbol s_6_116[2] = { 'o', 'u' };
+static const symbol s_6_117[4] = { 'a', 'r', 0xC3, 0xA1 };
+static const symbol s_6_118[4] = { 'e', 'r', 0xC3, 0xA1 };
+static const symbol s_6_119[4] = { 'i', 'r', 0xC3, 0xA1 };
+
+static const struct among a_6[120] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 3, s_6_1, -1, 1, 0},
@@ -413,15 +427,15 @@ static struct among a_6[120] =
 /*119 */ { 4, s_6_119, -1, 1, 0}
 };
 
-static symbol s_7_0[1] = { 'a' };
-static symbol s_7_1[1] = { 'i' };
-static symbol s_7_2[1] = { 'o' };
-static symbol s_7_3[2] = { 'o', 's' };
-static symbol s_7_4[2] = { 0xC3, 0xA1 };
-static symbol s_7_5[2] = { 0xC3, 0xAD };
-static symbol s_7_6[2] = { 0xC3, 0xB3 };
+static const symbol s_7_0[1] = { 'a' };
+static const symbol s_7_1[1] = { 'i' };
+static const symbol s_7_2[1] = { 'o' };
+static const symbol s_7_3[2] = { 'o', 's' };
+static const symbol s_7_4[2] = { 0xC3, 0xA1 };
+static const symbol s_7_5[2] = { 0xC3, 0xAD };
+static const symbol s_7_6[2] = { 0xC3, 0xB3 };
 
-static struct among a_7[7] =
+static const struct among a_7[7] =
 {
 /*  0 */ { 1, s_7_0, -1, 1, 0},
 /*  1 */ { 1, s_7_1, -1, 1, 0},
@@ -432,12 +446,12 @@ static struct among a_7[7] =
 /*  6 */ { 2, s_7_6, -1, 1, 0}
 };
 
-static symbol s_8_0[1] = { 'e' };
-static symbol s_8_1[2] = { 0xC3, 0xA7 };
-static symbol s_8_2[2] = { 0xC3, 0xA9 };
-static symbol s_8_3[2] = { 0xC3, 0xAA };
+static const symbol s_8_0[1] = { 'e' };
+static const symbol s_8_1[2] = { 0xC3, 0xA7 };
+static const symbol s_8_2[2] = { 0xC3, 0xA9 };
+static const symbol s_8_3[2] = { 0xC3, 0xAA };
 
-static struct among a_8[4] =
+static const struct among a_8[4] =
 {
 /*  0 */ { 1, s_8_0, -1, 1, 0},
 /*  1 */ { 2, s_8_1, -1, 2, 0},
@@ -445,59 +459,58 @@ static struct among a_8[4] =
 /*  3 */ { 2, s_8_3, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 };
-
-static symbol s_0[] = { 'a', '~' };
-static symbol s_1[] = { 'o', '~' };
-static symbol s_2[] = { 0xC3, 0xA3 };
-static symbol s_3[] = { 0xC3, 0xB5 };
-static symbol s_4[] = { 'l', 'o', 'g' };
-static symbol s_5[] = { 'u' };
-static symbol s_6[] = { 'e', 'n', 't', 'e' };
-static symbol s_7[] = { 'a', 't' };
-static symbol s_8[] = { 'a', 't' };
-static symbol s_9[] = { 'e' };
-static symbol s_10[] = { 'i', 'r' };
-static symbol s_11[] = { 'u' };
-static symbol s_12[] = { 'g' };
-static symbol s_13[] = { 'i' };
-static symbol s_14[] = { 'c' };
-static symbol s_15[] = { 'c' };
-static symbol s_16[] = { 'i' };
-static symbol s_17[] = { 'c' };
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 };
+
+static const symbol s_0[] = { 'a', '~' };
+static const symbol s_1[] = { 'o', '~' };
+static const symbol s_2[] = { 0xC3, 0xA3 };
+static const symbol s_3[] = { 0xC3, 0xB5 };
+static const symbol s_4[] = { 'l', 'o', 'g' };
+static const symbol s_5[] = { 'u' };
+static const symbol s_6[] = { 'e', 'n', 't', 'e' };
+static const symbol s_7[] = { 'a', 't' };
+static const symbol s_8[] = { 'a', 't' };
+static const symbol s_9[] = { 'e' };
+static const symbol s_10[] = { 'i', 'r' };
+static const symbol s_11[] = { 'u' };
+static const symbol s_12[] = { 'g' };
+static const symbol s_13[] = { 'i' };
+static const symbol s_14[] = { 'c' };
+static const symbol s_15[] = { 'c' };
+static const symbol s_16[] = { 'i' };
+static const symbol s_17[] = { 'c' };
 
 static int r_prelude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 36 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 37 */
+        if (z->c + 1 >= z->l || (z->p[z->c + 1] != 163 && z->p[z->c + 1] != 181)) among_var = 3; else
         among_var = find_among(z, a_0, 3); /* substring, line 37 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 37 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_0); /* <-, line 38 */
+                {   int ret = slice_from_s(z, 2, s_0); /* <-, line 38 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_1); /* <-, line 39 */
+                {   int ret = slice_from_s(z, 2, s_1); /* <-, line 39 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 40 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 40 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -507,108 +520,80 @@ static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 50 */
-        {   int c = z->c; /* or, line 52 */
-            if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2;
-            {   int c = z->c; /* or, line 51 */
-                if (!(out_grouping_U(z, g_v, 97, 250))) goto lab4;
-                while(1) { /* gopast, line 51 */
-                    if (!(in_grouping_U(z, g_v, 97, 250))) goto lab5;
-                    break;
-                lab5:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab4;
-                        z->c = c; /* gopast, line 51 */
-                    }
+    {   int c1 = z->c; /* do, line 50 */
+        {   int c2 = z->c; /* or, line 52 */
+            if (in_grouping_U(z, g_v, 97, 250, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 51 */
+                if (out_grouping_U(z, g_v, 97, 250, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 51 */
+                    int ret = out_grouping_U(z, g_v, 97, 250, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
-                if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2;
-                while(1) { /* gopast, line 51 */
-                    if (!(out_grouping_U(z, g_v, 97, 250))) goto lab6;
-                    break;
-                lab6:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab2;
-                        z->c = c; /* gopast, line 51 */
-                    }
+                z->c = c3;
+                if (in_grouping_U(z, g_v, 97, 250, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 51 */
+                    int ret = in_grouping_U(z, g_v, 97, 250, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
                 }
             }
         lab3:
             goto lab1;
         lab2:
-            z->c = c;
-            if (!(out_grouping_U(z, g_v, 97, 250))) goto lab0;
-            {   int c = z->c; /* or, line 53 */
-                if (!(out_grouping_U(z, g_v, 97, 250))) goto lab8;
-                while(1) { /* gopast, line 53 */
-                    if (!(in_grouping_U(z, g_v, 97, 250))) goto lab9;
-                    break;
-                lab9:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab8;
-                        z->c = c; /* gopast, line 53 */
-                    }
+            z->c = c2;
+            if (out_grouping_U(z, g_v, 97, 250, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 53 */
+                if (out_grouping_U(z, g_v, 97, 250, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 53 */
+                    int ret = out_grouping_U(z, g_v, 97, 250, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
                 }
-                goto lab7;
-            lab8:
-                z->c = c;
-                if (!(in_grouping_U(z, g_v, 97, 250))) goto lab0;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 53 */
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping_U(z, g_v, 97, 250, 0)) goto lab0;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 53 */
                 }
             }
-        lab7:
+        lab5:
             ;
         }
     lab1:
         z->I[0] = z->c; /* setmark pV, line 54 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 56 */
-        while(1) { /* gopast, line 57 */
-            if (!(in_grouping_U(z, g_v, 97, 250))) goto lab11;
-            break;
-        lab11:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 57 */
-            }
+    {   int c5 = z->c; /* do, line 56 */
+        {    /* gopast */ /* grouping v, line 57 */
+            int ret = out_grouping_U(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 57 */
-            if (!(out_grouping_U(z, g_v, 97, 250))) goto lab12;
-            break;
-        lab12:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 57 */
-            }
+        {    /* gopast */ /* non v, line 57 */
+            int ret = in_grouping_U(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p1, line 57 */
-        while(1) { /* gopast, line 58 */
-            if (!(in_grouping_U(z, g_v, 97, 250))) goto lab13;
-            break;
-        lab13:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 58 */
-            }
+        {    /* gopast */ /* grouping v, line 58 */
+            int ret = out_grouping_U(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 58 */
-            if (!(out_grouping_U(z, g_v, 97, 250))) goto lab14;
-            break;
-        lab14:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 58 */
-            }
+        {    /* gopast */ /* non v, line 58 */
+            int ret = in_grouping_U(z, g_v, 97, 250, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[2] = z->c; /* setmark p2, line 58 */
-    lab10:
-        z->c = c;
+    lab7:
+        z->c = c5;
     }
     return 1;
 }
@@ -616,35 +601,34 @@ static int r_mark_regions(struct SN_env * z) {
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 62 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 63 */
+        if (z->c + 1 >= z->l || z->p[z->c + 1] != 126) among_var = 3; else
         among_var = find_among(z, a_1, 3); /* substring, line 63 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 63 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_2); /* <-, line 64 */
+                {   int ret = slice_from_s(z, 2, s_2); /* <-, line 64 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 2, s_3); /* <-, line 65 */
+                {   int ret = slice_from_s(z, 2, s_3); /* <-, line 65 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 66 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 66 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -668,6 +652,7 @@ static int r_R2(struct SN_env * z) {
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 77 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((839714 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_5, 45); /* substring, line 77 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 77 */
@@ -678,8 +663,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 93 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 93 */
+            {   int ret = slice_del(z); /* delete, line 93 */
                 if (ret < 0) return ret;
             }
             break;
@@ -688,8 +672,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 98 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_4); /* <-, line 98 */
+            {   int ret = slice_from_s(z, 3, s_4); /* <-, line 98 */
                 if (ret < 0) return ret;
             }
             break;
@@ -698,8 +681,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 102 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_5); /* <-, line 102 */
+            {   int ret = slice_from_s(z, 1, s_5); /* <-, line 102 */
                 if (ret < 0) return ret;
             }
             break;
@@ -708,8 +690,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 106 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 4, s_6); /* <-, line 106 */
+            {   int ret = slice_from_s(z, 4, s_6); /* <-, line 106 */
                 if (ret < 0) return ret;
             }
             break;
@@ -718,35 +699,33 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 110 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 110 */
+            {   int ret = slice_del(z); /* delete, line 110 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 111 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 111 */
                 z->ket = z->c; /* [, line 112 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab0; }
                 among_var = find_among_b(z, a_2, 4); /* substring, line 112 */
-                if (!(among_var)) { z->c = z->l - m; goto lab0; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 112 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 112 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 112 */
+                {   int ret = slice_del(z); /* delete, line 112 */
                     if (ret < 0) return ret;
                 }
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab0; }
+                    case 0: { z->c = z->l - m_keep; goto lab0; }
                     case 1:
                         z->ket = z->c; /* [, line 113 */
-                        if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; }
+                        if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m_keep; goto lab0; }
                         z->bra = z->c; /* ], line 113 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 113 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 113 */
+                        {   int ret = slice_del(z); /* delete, line 113 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -760,24 +739,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 122 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 122 */
+            {   int ret = slice_del(z); /* delete, line 122 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 123 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 123 */
                 z->ket = z->c; /* [, line 124 */
+                if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) { z->c = z->l - m_keep; goto lab1; }
                 among_var = find_among_b(z, a_3, 3); /* substring, line 124 */
-                if (!(among_var)) { z->c = z->l - m; goto lab1; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab1; }
                 z->bra = z->c; /* ], line 124 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab1; }
+                    case 0: { z->c = z->l - m_keep; goto lab1; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 127 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 127 */
+                        {   int ret = slice_del(z); /* delete, line 127 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -791,24 +769,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 134 */
+            {   int ret = slice_del(z); /* delete, line 134 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 135 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 135 */
                 z->ket = z->c; /* [, line 136 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab2; }
                 among_var = find_among_b(z, a_4, 3); /* substring, line 136 */
-                if (!(among_var)) { z->c = z->l - m; goto lab2; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab2; }
                 z->bra = z->c; /* ], line 136 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab2; }
+                    case 0: { z->c = z->l - m_keep; goto lab2; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call R2, line 139 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 139 */
+                        {   int ret = slice_del(z); /* delete, line 139 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -822,20 +799,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 146 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 146 */
+            {   int ret = slice_del(z); /* delete, line 146 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 147 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 147 */
                 z->ket = z->c; /* [, line 148 */
-                if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; }
+                if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 148 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 148 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 148 */
+                {   int ret = slice_del(z); /* delete, line 148 */
                     if (ret < 0) return ret;
                 }
             lab3:
@@ -848,8 +823,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret < 0) return ret;
             }
             if (!(eq_s_b(z, 1, s_9))) return 0;
-            {   int ret;
-                ret = slice_from_s(z, 2, s_10); /* <-, line 154 */
+            {   int ret = slice_from_s(z, 2, s_10); /* <-, line 154 */
                 if (ret < 0) return ret;
             }
             break;
@@ -859,26 +833,25 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 159 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 159 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 159 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 160 */
         among_var = find_among_b(z, a_6, 120); /* substring, line 160 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 160 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 179 */
+                {   int ret = slice_del(z); /* delete, line 179 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
@@ -896,8 +869,7 @@ static int r_residual_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 187 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 187 */
+            {   int ret = slice_del(z); /* delete, line 187 */
                 if (ret < 0) return ret;
             }
             break;
@@ -918,12 +890,11 @@ static int r_residual_form(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 194 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 194 */
+            {   int ret = slice_del(z); /* delete, line 194 */
                 if (ret < 0) return ret;
             }
             z->ket = z->c; /* [, line 194 */
-            {   int m = z->l - z->c; (void) m; /* or, line 194 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 194 */
                 if (!(eq_s_b(z, 1, s_11))) goto lab1;
                 z->bra = z->c; /* ], line 194 */
                 {   int m_test = z->l - z->c; /* test, line 194 */
@@ -932,7 +903,7 @@ static int r_residual_form(struct SN_env * z) {
                 }
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 1, s_13))) return 0;
                 z->bra = z->c; /* ], line 195 */
                 {   int m_test = z->l - z->c; /* test, line 195 */
@@ -945,14 +916,12 @@ static int r_residual_form(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 195 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 195 */
+            {   int ret = slice_del(z); /* delete, line 195 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_from_s(z, 1, s_15); /* <-, line 196 */
+            {   int ret = slice_from_s(z, 1, s_15); /* <-, line 196 */
                 if (ret < 0) return ret;
             }
             break;
@@ -961,43 +930,43 @@ static int r_residual_form(struct SN_env * z) {
 }
 
 extern int portuguese_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 202 */
+    {   int c1 = z->c; /* do, line 202 */
         {   int ret = r_prelude(z);
             if (ret == 0) goto lab0; /* call prelude, line 202 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 203 */
+    {   int c2 = z->c; /* do, line 203 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab1; /* call mark_regions, line 203 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = c;
+        z->c = c2;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 204 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 205 */
-        {   int m = z->l - z->c; (void) m; /* or, line 209 */
-            {   int m = z->l - z->c; (void) m; /* and, line 207 */
-                {   int m = z->l - z->c; (void) m; /* or, line 206 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 205 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 209 */
+            {   int m5 = z->l - z->c; (void)m5; /* and, line 207 */
+                {   int m6 = z->l - z->c; (void)m6; /* or, line 206 */
                     {   int ret = r_standard_suffix(z);
                         if (ret == 0) goto lab6; /* call standard_suffix, line 206 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m6;
                     {   int ret = r_verb_suffix(z);
                         if (ret == 0) goto lab4; /* call verb_suffix, line 206 */
                         if (ret < 0) return ret;
                     }
                 }
             lab5:
-                z->c = z->l - m;
-                {   int m = z->l - z->c; (void) m; /* do, line 207 */
+                z->c = z->l - m5;
+                {   int m7 = z->l - z->c; (void)m7; /* do, line 207 */
                     z->ket = z->c; /* [, line 207 */
                     if (!(eq_s_b(z, 1, s_16))) goto lab7;
                     z->bra = z->c; /* ], line 207 */
@@ -1009,17 +978,16 @@ extern int portuguese_UTF_8_stem(struct SN_env * z) {
                         if (ret == 0) goto lab7; /* call RV, line 207 */
                         if (ret < 0) return ret;
                     }
-                    {   int ret;
-                        ret = slice_del(z); /* delete, line 207 */
+                    {   int ret = slice_del(z); /* delete, line 207 */
                         if (ret < 0) return ret;
                     }
                 lab7:
-                    z->c = z->l - m;
+                    z->c = z->l - m7;
                 }
             }
             goto lab3;
         lab4:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_residual_suffix(z);
                 if (ret == 0) goto lab2; /* call residual_suffix, line 209 */
                 if (ret < 0) return ret;
@@ -1027,29 +995,29 @@ extern int portuguese_UTF_8_stem(struct SN_env * z) {
         }
     lab3:
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 211 */
+    {   int m8 = z->l - z->c; (void)m8; /* do, line 211 */
         {   int ret = r_residual_form(z);
             if (ret == 0) goto lab8; /* call residual_form, line 211 */
             if (ret < 0) return ret;
         }
     lab8:
-        z->c = z->l - m;
+        z->c = z->l - m8;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 213 */
+    {   int c9 = z->c; /* do, line 213 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab9; /* call postlude, line 213 */
             if (ret < 0) return ret;
         }
     lab9:
-        z->c = c;
+        z->c = c9;
     }
     return 1;
 }
 
 extern struct SN_env * portuguese_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void portuguese_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void portuguese_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_romanian.c b/libstemmer_c/src_c/stem_UTF_8_romanian.c
new file mode 100644
index 0000000..5ca94d5
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_romanian.c
@@ -0,0 +1,1004 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int romanian_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
+static int r_vowel_suffix(struct SN_env * z);
+static int r_verb_suffix(struct SN_env * z);
+static int r_combo_suffix(struct SN_env * z);
+static int r_standard_suffix(struct SN_env * z);
+static int r_step_0(struct SN_env * z);
+static int r_R2(struct SN_env * z);
+static int r_R1(struct SN_env * z);
+static int r_RV(struct SN_env * z);
+static int r_mark_regions(struct SN_env * z);
+static int r_postlude(struct SN_env * z);
+static int r_prelude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern struct SN_env * romanian_UTF_8_create_env(void);
+extern void romanian_UTF_8_close_env(struct SN_env * z);
+
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[1] = { 'I' };
+static const symbol s_0_2[1] = { 'U' };
+
+static const struct among a_0[3] =
+{
+/*  0 */ { 0, 0, -1, 3, 0},
+/*  1 */ { 1, s_0_1, 0, 1, 0},
+/*  2 */ { 1, s_0_2, 0, 2, 0}
+};
+
+static const symbol s_1_0[2] = { 'e', 'a' };
+static const symbol s_1_1[5] = { 'a', 0xC5, 0xA3, 'i', 'a' };
+static const symbol s_1_2[3] = { 'a', 'u', 'a' };
+static const symbol s_1_3[3] = { 'i', 'u', 'a' };
+static const symbol s_1_4[5] = { 'a', 0xC5, 0xA3, 'i', 'e' };
+static const symbol s_1_5[3] = { 'e', 'l', 'e' };
+static const symbol s_1_6[3] = { 'i', 'l', 'e' };
+static const symbol s_1_7[4] = { 'i', 'i', 'l', 'e' };
+static const symbol s_1_8[3] = { 'i', 'e', 'i' };
+static const symbol s_1_9[4] = { 'a', 't', 'e', 'i' };
+static const symbol s_1_10[2] = { 'i', 'i' };
+static const symbol s_1_11[4] = { 'u', 'l', 'u', 'i' };
+static const symbol s_1_12[2] = { 'u', 'l' };
+static const symbol s_1_13[4] = { 'e', 'l', 'o', 'r' };
+static const symbol s_1_14[4] = { 'i', 'l', 'o', 'r' };
+static const symbol s_1_15[5] = { 'i', 'i', 'l', 'o', 'r' };
+
+static const struct among a_1[16] =
+{
+/*  0 */ { 2, s_1_0, -1, 3, 0},
+/*  1 */ { 5, s_1_1, -1, 7, 0},
+/*  2 */ { 3, s_1_2, -1, 2, 0},
+/*  3 */ { 3, s_1_3, -1, 4, 0},
+/*  4 */ { 5, s_1_4, -1, 7, 0},
+/*  5 */ { 3, s_1_5, -1, 3, 0},
+/*  6 */ { 3, s_1_6, -1, 5, 0},
+/*  7 */ { 4, s_1_7, 6, 4, 0},
+/*  8 */ { 3, s_1_8, -1, 4, 0},
+/*  9 */ { 4, s_1_9, -1, 6, 0},
+/* 10 */ { 2, s_1_10, -1, 4, 0},
+/* 11 */ { 4, s_1_11, -1, 1, 0},
+/* 12 */ { 2, s_1_12, -1, 1, 0},
+/* 13 */ { 4, s_1_13, -1, 3, 0},
+/* 14 */ { 4, s_1_14, -1, 4, 0},
+/* 15 */ { 5, s_1_15, 14, 4, 0}
+};
+
+static const symbol s_2_0[5] = { 'i', 'c', 'a', 'l', 'a' };
+static const symbol s_2_1[5] = { 'i', 'c', 'i', 'v', 'a' };
+static const symbol s_2_2[5] = { 'a', 't', 'i', 'v', 'a' };
+static const symbol s_2_3[5] = { 'i', 't', 'i', 'v', 'a' };
+static const symbol s_2_4[5] = { 'i', 'c', 'a', 'l', 'e' };
+static const symbol s_2_5[7] = { 'a', 0xC5, 0xA3, 'i', 'u', 'n', 'e' };
+static const symbol s_2_6[7] = { 'i', 0xC5, 0xA3, 'i', 'u', 'n', 'e' };
+static const symbol s_2_7[6] = { 'a', 't', 'o', 'a', 'r', 'e' };
+static const symbol s_2_8[6] = { 'i', 't', 'o', 'a', 'r', 'e' };
+static const symbol s_2_9[7] = { 0xC4, 0x83, 't', 'o', 'a', 'r', 'e' };
+static const symbol s_2_10[7] = { 'i', 'c', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_11[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_12[9] = { 'i', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_13[7] = { 'i', 'v', 'i', 't', 'a', 't', 'e' };
+static const symbol s_2_14[5] = { 'i', 'c', 'i', 'v', 'e' };
+static const symbol s_2_15[5] = { 'a', 't', 'i', 'v', 'e' };
+static const symbol s_2_16[5] = { 'i', 't', 'i', 'v', 'e' };
+static const symbol s_2_17[5] = { 'i', 'c', 'a', 'l', 'i' };
+static const symbol s_2_18[5] = { 'a', 't', 'o', 'r', 'i' };
+static const symbol s_2_19[7] = { 'i', 'c', 'a', 't', 'o', 'r', 'i' };
+static const symbol s_2_20[5] = { 'i', 't', 'o', 'r', 'i' };
+static const symbol s_2_21[6] = { 0xC4, 0x83, 't', 'o', 'r', 'i' };
+static const symbol s_2_22[7] = { 'i', 'c', 'i', 't', 'a', 't', 'i' };
+static const symbol s_2_23[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'i' };
+static const symbol s_2_24[7] = { 'i', 'v', 'i', 't', 'a', 't', 'i' };
+static const symbol s_2_25[5] = { 'i', 'c', 'i', 'v', 'i' };
+static const symbol s_2_26[5] = { 'a', 't', 'i', 'v', 'i' };
+static const symbol s_2_27[5] = { 'i', 't', 'i', 'v', 'i' };
+static const symbol s_2_28[7] = { 'i', 'c', 'i', 't', 0xC4, 0x83, 'i' };
+static const symbol s_2_29[9] = { 'a', 'b', 'i', 'l', 'i', 't', 0xC4, 0x83, 'i' };
+static const symbol s_2_30[7] = { 'i', 'v', 'i', 't', 0xC4, 0x83, 'i' };
+static const symbol s_2_31[9] = { 'i', 'c', 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_2_32[11] = { 'a', 'b', 'i', 'l', 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_2_33[9] = { 'i', 'v', 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_2_34[4] = { 'i', 'c', 'a', 'l' };
+static const symbol s_2_35[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_2_36[6] = { 'i', 'c', 'a', 't', 'o', 'r' };
+static const symbol s_2_37[4] = { 'i', 't', 'o', 'r' };
+static const symbol s_2_38[5] = { 0xC4, 0x83, 't', 'o', 'r' };
+static const symbol s_2_39[4] = { 'i', 'c', 'i', 'v' };
+static const symbol s_2_40[4] = { 'a', 't', 'i', 'v' };
+static const symbol s_2_41[4] = { 'i', 't', 'i', 'v' };
+static const symbol s_2_42[6] = { 'i', 'c', 'a', 'l', 0xC4, 0x83 };
+static const symbol s_2_43[6] = { 'i', 'c', 'i', 'v', 0xC4, 0x83 };
+static const symbol s_2_44[6] = { 'a', 't', 'i', 'v', 0xC4, 0x83 };
+static const symbol s_2_45[6] = { 'i', 't', 'i', 'v', 0xC4, 0x83 };
+
+static const struct among a_2[46] =
+{
+/*  0 */ { 5, s_2_0, -1, 4, 0},
+/*  1 */ { 5, s_2_1, -1, 4, 0},
+/*  2 */ { 5, s_2_2, -1, 5, 0},
+/*  3 */ { 5, s_2_3, -1, 6, 0},
+/*  4 */ { 5, s_2_4, -1, 4, 0},
+/*  5 */ { 7, s_2_5, -1, 5, 0},
+/*  6 */ { 7, s_2_6, -1, 6, 0},
+/*  7 */ { 6, s_2_7, -1, 5, 0},
+/*  8 */ { 6, s_2_8, -1, 6, 0},
+/*  9 */ { 7, s_2_9, -1, 5, 0},
+/* 10 */ { 7, s_2_10, -1, 4, 0},
+/* 11 */ { 9, s_2_11, -1, 1, 0},
+/* 12 */ { 9, s_2_12, -1, 2, 0},
+/* 13 */ { 7, s_2_13, -1, 3, 0},
+/* 14 */ { 5, s_2_14, -1, 4, 0},
+/* 15 */ { 5, s_2_15, -1, 5, 0},
+/* 16 */ { 5, s_2_16, -1, 6, 0},
+/* 17 */ { 5, s_2_17, -1, 4, 0},
+/* 18 */ { 5, s_2_18, -1, 5, 0},
+/* 19 */ { 7, s_2_19, 18, 4, 0},
+/* 20 */ { 5, s_2_20, -1, 6, 0},
+/* 21 */ { 6, s_2_21, -1, 5, 0},
+/* 22 */ { 7, s_2_22, -1, 4, 0},
+/* 23 */ { 9, s_2_23, -1, 1, 0},
+/* 24 */ { 7, s_2_24, -1, 3, 0},
+/* 25 */ { 5, s_2_25, -1, 4, 0},
+/* 26 */ { 5, s_2_26, -1, 5, 0},
+/* 27 */ { 5, s_2_27, -1, 6, 0},
+/* 28 */ { 7, s_2_28, -1, 4, 0},
+/* 29 */ { 9, s_2_29, -1, 1, 0},
+/* 30 */ { 7, s_2_30, -1, 3, 0},
+/* 31 */ { 9, s_2_31, -1, 4, 0},
+/* 32 */ { 11, s_2_32, -1, 1, 0},
+/* 33 */ { 9, s_2_33, -1, 3, 0},
+/* 34 */ { 4, s_2_34, -1, 4, 0},
+/* 35 */ { 4, s_2_35, -1, 5, 0},
+/* 36 */ { 6, s_2_36, 35, 4, 0},
+/* 37 */ { 4, s_2_37, -1, 6, 0},
+/* 38 */ { 5, s_2_38, -1, 5, 0},
+/* 39 */ { 4, s_2_39, -1, 4, 0},
+/* 40 */ { 4, s_2_40, -1, 5, 0},
+/* 41 */ { 4, s_2_41, -1, 6, 0},
+/* 42 */ { 6, s_2_42, -1, 4, 0},
+/* 43 */ { 6, s_2_43, -1, 4, 0},
+/* 44 */ { 6, s_2_44, -1, 5, 0},
+/* 45 */ { 6, s_2_45, -1, 6, 0}
+};
+
+static const symbol s_3_0[3] = { 'i', 'c', 'a' };
+static const symbol s_3_1[5] = { 'a', 'b', 'i', 'l', 'a' };
+static const symbol s_3_2[5] = { 'i', 'b', 'i', 'l', 'a' };
+static const symbol s_3_3[4] = { 'o', 'a', 's', 'a' };
+static const symbol s_3_4[3] = { 'a', 't', 'a' };
+static const symbol s_3_5[3] = { 'i', 't', 'a' };
+static const symbol s_3_6[4] = { 'a', 'n', 't', 'a' };
+static const symbol s_3_7[4] = { 'i', 's', 't', 'a' };
+static const symbol s_3_8[3] = { 'u', 't', 'a' };
+static const symbol s_3_9[3] = { 'i', 'v', 'a' };
+static const symbol s_3_10[2] = { 'i', 'c' };
+static const symbol s_3_11[3] = { 'i', 'c', 'e' };
+static const symbol s_3_12[5] = { 'a', 'b', 'i', 'l', 'e' };
+static const symbol s_3_13[5] = { 'i', 'b', 'i', 'l', 'e' };
+static const symbol s_3_14[4] = { 'i', 's', 'm', 'e' };
+static const symbol s_3_15[4] = { 'i', 'u', 'n', 'e' };
+static const symbol s_3_16[4] = { 'o', 'a', 's', 'e' };
+static const symbol s_3_17[3] = { 'a', 't', 'e' };
+static const symbol s_3_18[5] = { 'i', 't', 'a', 't', 'e' };
+static const symbol s_3_19[3] = { 'i', 't', 'e' };
+static const symbol s_3_20[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_3_21[4] = { 'i', 's', 't', 'e' };
+static const symbol s_3_22[3] = { 'u', 't', 'e' };
+static const symbol s_3_23[3] = { 'i', 'v', 'e' };
+static const symbol s_3_24[3] = { 'i', 'c', 'i' };
+static const symbol s_3_25[5] = { 'a', 'b', 'i', 'l', 'i' };
+static const symbol s_3_26[5] = { 'i', 'b', 'i', 'l', 'i' };
+static const symbol s_3_27[4] = { 'i', 'u', 'n', 'i' };
+static const symbol s_3_28[5] = { 'a', 't', 'o', 'r', 'i' };
+static const symbol s_3_29[3] = { 'o', 's', 'i' };
+static const symbol s_3_30[3] = { 'a', 't', 'i' };
+static const symbol s_3_31[5] = { 'i', 't', 'a', 't', 'i' };
+static const symbol s_3_32[3] = { 'i', 't', 'i' };
+static const symbol s_3_33[4] = { 'a', 'n', 't', 'i' };
+static const symbol s_3_34[4] = { 'i', 's', 't', 'i' };
+static const symbol s_3_35[3] = { 'u', 't', 'i' };
+static const symbol s_3_36[5] = { 'i', 0xC5, 0x9F, 't', 'i' };
+static const symbol s_3_37[3] = { 'i', 'v', 'i' };
+static const symbol s_3_38[5] = { 'i', 't', 0xC4, 0x83, 'i' };
+static const symbol s_3_39[4] = { 'o', 0xC5, 0x9F, 'i' };
+static const symbol s_3_40[7] = { 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_3_41[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_3_42[4] = { 'i', 'b', 'i', 'l' };
+static const symbol s_3_43[3] = { 'i', 's', 'm' };
+static const symbol s_3_44[4] = { 'a', 't', 'o', 'r' };
+static const symbol s_3_45[2] = { 'o', 's' };
+static const symbol s_3_46[2] = { 'a', 't' };
+static const symbol s_3_47[2] = { 'i', 't' };
+static const symbol s_3_48[3] = { 'a', 'n', 't' };
+static const symbol s_3_49[3] = { 'i', 's', 't' };
+static const symbol s_3_50[2] = { 'u', 't' };
+static const symbol s_3_51[2] = { 'i', 'v' };
+static const symbol s_3_52[4] = { 'i', 'c', 0xC4, 0x83 };
+static const symbol s_3_53[6] = { 'a', 'b', 'i', 'l', 0xC4, 0x83 };
+static const symbol s_3_54[6] = { 'i', 'b', 'i', 'l', 0xC4, 0x83 };
+static const symbol s_3_55[5] = { 'o', 'a', 's', 0xC4, 0x83 };
+static const symbol s_3_56[4] = { 'a', 't', 0xC4, 0x83 };
+static const symbol s_3_57[4] = { 'i', 't', 0xC4, 0x83 };
+static const symbol s_3_58[5] = { 'a', 'n', 't', 0xC4, 0x83 };
+static const symbol s_3_59[5] = { 'i', 's', 't', 0xC4, 0x83 };
+static const symbol s_3_60[4] = { 'u', 't', 0xC4, 0x83 };
+static const symbol s_3_61[4] = { 'i', 'v', 0xC4, 0x83 };
+
+static const struct among a_3[62] =
+{
+/*  0 */ { 3, s_3_0, -1, 1, 0},
+/*  1 */ { 5, s_3_1, -1, 1, 0},
+/*  2 */ { 5, s_3_2, -1, 1, 0},
+/*  3 */ { 4, s_3_3, -1, 1, 0},
+/*  4 */ { 3, s_3_4, -1, 1, 0},
+/*  5 */ { 3, s_3_5, -1, 1, 0},
+/*  6 */ { 4, s_3_6, -1, 1, 0},
+/*  7 */ { 4, s_3_7, -1, 3, 0},
+/*  8 */ { 3, s_3_8, -1, 1, 0},
+/*  9 */ { 3, s_3_9, -1, 1, 0},
+/* 10 */ { 2, s_3_10, -1, 1, 0},
+/* 11 */ { 3, s_3_11, -1, 1, 0},
+/* 12 */ { 5, s_3_12, -1, 1, 0},
+/* 13 */ { 5, s_3_13, -1, 1, 0},
+/* 14 */ { 4, s_3_14, -1, 3, 0},
+/* 15 */ { 4, s_3_15, -1, 2, 0},
+/* 16 */ { 4, s_3_16, -1, 1, 0},
+/* 17 */ { 3, s_3_17, -1, 1, 0},
+/* 18 */ { 5, s_3_18, 17, 1, 0},
+/* 19 */ { 3, s_3_19, -1, 1, 0},
+/* 20 */ { 4, s_3_20, -1, 1, 0},
+/* 21 */ { 4, s_3_21, -1, 3, 0},
+/* 22 */ { 3, s_3_22, -1, 1, 0},
+/* 23 */ { 3, s_3_23, -1, 1, 0},
+/* 24 */ { 3, s_3_24, -1, 1, 0},
+/* 25 */ { 5, s_3_25, -1, 1, 0},
+/* 26 */ { 5, s_3_26, -1, 1, 0},
+/* 27 */ { 4, s_3_27, -1, 2, 0},
+/* 28 */ { 5, s_3_28, -1, 1, 0},
+/* 29 */ { 3, s_3_29, -1, 1, 0},
+/* 30 */ { 3, s_3_30, -1, 1, 0},
+/* 31 */ { 5, s_3_31, 30, 1, 0},
+/* 32 */ { 3, s_3_32, -1, 1, 0},
+/* 33 */ { 4, s_3_33, -1, 1, 0},
+/* 34 */ { 4, s_3_34, -1, 3, 0},
+/* 35 */ { 3, s_3_35, -1, 1, 0},
+/* 36 */ { 5, s_3_36, -1, 3, 0},
+/* 37 */ { 3, s_3_37, -1, 1, 0},
+/* 38 */ { 5, s_3_38, -1, 1, 0},
+/* 39 */ { 4, s_3_39, -1, 1, 0},
+/* 40 */ { 7, s_3_40, -1, 1, 0},
+/* 41 */ { 4, s_3_41, -1, 1, 0},
+/* 42 */ { 4, s_3_42, -1, 1, 0},
+/* 43 */ { 3, s_3_43, -1, 3, 0},
+/* 44 */ { 4, s_3_44, -1, 1, 0},
+/* 45 */ { 2, s_3_45, -1, 1, 0},
+/* 46 */ { 2, s_3_46, -1, 1, 0},
+/* 47 */ { 2, s_3_47, -1, 1, 0},
+/* 48 */ { 3, s_3_48, -1, 1, 0},
+/* 49 */ { 3, s_3_49, -1, 3, 0},
+/* 50 */ { 2, s_3_50, -1, 1, 0},
+/* 51 */ { 2, s_3_51, -1, 1, 0},
+/* 52 */ { 4, s_3_52, -1, 1, 0},
+/* 53 */ { 6, s_3_53, -1, 1, 0},
+/* 54 */ { 6, s_3_54, -1, 1, 0},
+/* 55 */ { 5, s_3_55, -1, 1, 0},
+/* 56 */ { 4, s_3_56, -1, 1, 0},
+/* 57 */ { 4, s_3_57, -1, 1, 0},
+/* 58 */ { 5, s_3_58, -1, 1, 0},
+/* 59 */ { 5, s_3_59, -1, 3, 0},
+/* 60 */ { 4, s_3_60, -1, 1, 0},
+/* 61 */ { 4, s_3_61, -1, 1, 0}
+};
+
+static const symbol s_4_0[2] = { 'e', 'a' };
+static const symbol s_4_1[2] = { 'i', 'a' };
+static const symbol s_4_2[3] = { 'e', 's', 'c' };
+static const symbol s_4_3[4] = { 0xC4, 0x83, 's', 'c' };
+static const symbol s_4_4[3] = { 'i', 'n', 'd' };
+static const symbol s_4_5[4] = { 0xC3, 0xA2, 'n', 'd' };
+static const symbol s_4_6[3] = { 'a', 'r', 'e' };
+static const symbol s_4_7[3] = { 'e', 'r', 'e' };
+static const symbol s_4_8[3] = { 'i', 'r', 'e' };
+static const symbol s_4_9[4] = { 0xC3, 0xA2, 'r', 'e' };
+static const symbol s_4_10[2] = { 's', 'e' };
+static const symbol s_4_11[3] = { 'a', 's', 'e' };
+static const symbol s_4_12[4] = { 's', 'e', 's', 'e' };
+static const symbol s_4_13[3] = { 'i', 's', 'e' };
+static const symbol s_4_14[3] = { 'u', 's', 'e' };
+static const symbol s_4_15[4] = { 0xC3, 0xA2, 's', 'e' };
+static const symbol s_4_16[5] = { 'e', 0xC5, 0x9F, 't', 'e' };
+static const symbol s_4_17[6] = { 0xC4, 0x83, 0xC5, 0x9F, 't', 'e' };
+static const symbol s_4_18[3] = { 'e', 'z', 'e' };
+static const symbol s_4_19[2] = { 'a', 'i' };
+static const symbol s_4_20[3] = { 'e', 'a', 'i' };
+static const symbol s_4_21[3] = { 'i', 'a', 'i' };
+static const symbol s_4_22[3] = { 's', 'e', 'i' };
+static const symbol s_4_23[5] = { 'e', 0xC5, 0x9F, 't', 'i' };
+static const symbol s_4_24[6] = { 0xC4, 0x83, 0xC5, 0x9F, 't', 'i' };
+static const symbol s_4_25[2] = { 'u', 'i' };
+static const symbol s_4_26[3] = { 'e', 'z', 'i' };
+static const symbol s_4_27[4] = { 'a', 0xC5, 0x9F, 'i' };
+static const symbol s_4_28[5] = { 's', 'e', 0xC5, 0x9F, 'i' };
+static const symbol s_4_29[6] = { 'a', 's', 'e', 0xC5, 0x9F, 'i' };
+static const symbol s_4_30[7] = { 's', 'e', 's', 'e', 0xC5, 0x9F, 'i' };
+static const symbol s_4_31[6] = { 'i', 's', 'e', 0xC5, 0x9F, 'i' };
+static const symbol s_4_32[6] = { 'u', 's', 'e', 0xC5, 0x9F, 'i' };
+static const symbol s_4_33[7] = { 0xC3, 0xA2, 's', 'e', 0xC5, 0x9F, 'i' };
+static const symbol s_4_34[4] = { 'i', 0xC5, 0x9F, 'i' };
+static const symbol s_4_35[4] = { 'u', 0xC5, 0x9F, 'i' };
+static const symbol s_4_36[5] = { 0xC3, 0xA2, 0xC5, 0x9F, 'i' };
+static const symbol s_4_37[3] = { 0xC3, 0xA2, 'i' };
+static const symbol s_4_38[4] = { 'a', 0xC5, 0xA3, 'i' };
+static const symbol s_4_39[5] = { 'e', 'a', 0xC5, 0xA3, 'i' };
+static const symbol s_4_40[5] = { 'i', 'a', 0xC5, 0xA3, 'i' };
+static const symbol s_4_41[4] = { 'e', 0xC5, 0xA3, 'i' };
+static const symbol s_4_42[4] = { 'i', 0xC5, 0xA3, 'i' };
+static const symbol s_4_43[7] = { 'a', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_44[8] = { 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_45[9] = { 'a', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_46[10] = { 's', 'e', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_47[9] = { 'i', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_48[9] = { 'u', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_49[10] = { 0xC3, 0xA2, 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_50[7] = { 'i', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_51[7] = { 'u', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_52[8] = { 0xC3, 0xA2, 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' };
+static const symbol s_4_53[5] = { 0xC3, 0xA2, 0xC5, 0xA3, 'i' };
+static const symbol s_4_54[2] = { 'a', 'm' };
+static const symbol s_4_55[3] = { 'e', 'a', 'm' };
+static const symbol s_4_56[3] = { 'i', 'a', 'm' };
+static const symbol s_4_57[2] = { 'e', 'm' };
+static const symbol s_4_58[4] = { 'a', 's', 'e', 'm' };
+static const symbol s_4_59[5] = { 's', 'e', 's', 'e', 'm' };
+static const symbol s_4_60[4] = { 'i', 's', 'e', 'm' };
+static const symbol s_4_61[4] = { 'u', 's', 'e', 'm' };
+static const symbol s_4_62[5] = { 0xC3, 0xA2, 's', 'e', 'm' };
+static const symbol s_4_63[2] = { 'i', 'm' };
+static const symbol s_4_64[3] = { 0xC4, 0x83, 'm' };
+static const symbol s_4_65[5] = { 'a', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_66[6] = { 's', 'e', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_67[7] = { 'a', 's', 'e', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_68[8] = { 's', 'e', 's', 'e', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_69[7] = { 'i', 's', 'e', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_70[7] = { 'u', 's', 'e', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_71[8] = { 0xC3, 0xA2, 's', 'e', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_72[5] = { 'i', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_73[5] = { 'u', 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_74[6] = { 0xC3, 0xA2, 'r', 0xC4, 0x83, 'm' };
+static const symbol s_4_75[3] = { 0xC3, 0xA2, 'm' };
+static const symbol s_4_76[2] = { 'a', 'u' };
+static const symbol s_4_77[3] = { 'e', 'a', 'u' };
+static const symbol s_4_78[3] = { 'i', 'a', 'u' };
+static const symbol s_4_79[4] = { 'i', 'n', 'd', 'u' };
+static const symbol s_4_80[5] = { 0xC3, 0xA2, 'n', 'd', 'u' };
+static const symbol s_4_81[2] = { 'e', 'z' };
+static const symbol s_4_82[6] = { 'e', 'a', 's', 'c', 0xC4, 0x83 };
+static const symbol s_4_83[4] = { 'a', 'r', 0xC4, 0x83 };
+static const symbol s_4_84[5] = { 's', 'e', 'r', 0xC4, 0x83 };
+static const symbol s_4_85[6] = { 'a', 's', 'e', 'r', 0xC4, 0x83 };
+static const symbol s_4_86[7] = { 's', 'e', 's', 'e', 'r', 0xC4, 0x83 };
+static const symbol s_4_87[6] = { 'i', 's', 'e', 'r', 0xC4, 0x83 };
+static const symbol s_4_88[6] = { 'u', 's', 'e', 'r', 0xC4, 0x83 };
+static const symbol s_4_89[7] = { 0xC3, 0xA2, 's', 'e', 'r', 0xC4, 0x83 };
+static const symbol s_4_90[4] = { 'i', 'r', 0xC4, 0x83 };
+static const symbol s_4_91[4] = { 'u', 'r', 0xC4, 0x83 };
+static const symbol s_4_92[5] = { 0xC3, 0xA2, 'r', 0xC4, 0x83 };
+static const symbol s_4_93[5] = { 'e', 'a', 'z', 0xC4, 0x83 };
+
+static const struct among a_4[94] =
+{
+/*  0 */ { 2, s_4_0, -1, 1, 0},
+/*  1 */ { 2, s_4_1, -1, 1, 0},
+/*  2 */ { 3, s_4_2, -1, 1, 0},
+/*  3 */ { 4, s_4_3, -1, 1, 0},
+/*  4 */ { 3, s_4_4, -1, 1, 0},
+/*  5 */ { 4, s_4_5, -1, 1, 0},
+/*  6 */ { 3, s_4_6, -1, 1, 0},
+/*  7 */ { 3, s_4_7, -1, 1, 0},
+/*  8 */ { 3, s_4_8, -1, 1, 0},
+/*  9 */ { 4, s_4_9, -1, 1, 0},
+/* 10 */ { 2, s_4_10, -1, 2, 0},
+/* 11 */ { 3, s_4_11, 10, 1, 0},
+/* 12 */ { 4, s_4_12, 10, 2, 0},
+/* 13 */ { 3, s_4_13, 10, 1, 0},
+/* 14 */ { 3, s_4_14, 10, 1, 0},
+/* 15 */ { 4, s_4_15, 10, 1, 0},
+/* 16 */ { 5, s_4_16, -1, 1, 0},
+/* 17 */ { 6, s_4_17, -1, 1, 0},
+/* 18 */ { 3, s_4_18, -1, 1, 0},
+/* 19 */ { 2, s_4_19, -1, 1, 0},
+/* 20 */ { 3, s_4_20, 19, 1, 0},
+/* 21 */ { 3, s_4_21, 19, 1, 0},
+/* 22 */ { 3, s_4_22, -1, 2, 0},
+/* 23 */ { 5, s_4_23, -1, 1, 0},
+/* 24 */ { 6, s_4_24, -1, 1, 0},
+/* 25 */ { 2, s_4_25, -1, 1, 0},
+/* 26 */ { 3, s_4_26, -1, 1, 0},
+/* 27 */ { 4, s_4_27, -1, 1, 0},
+/* 28 */ { 5, s_4_28, -1, 2, 0},
+/* 29 */ { 6, s_4_29, 28, 1, 0},
+/* 30 */ { 7, s_4_30, 28, 2, 0},
+/* 31 */ { 6, s_4_31, 28, 1, 0},
+/* 32 */ { 6, s_4_32, 28, 1, 0},
+/* 33 */ { 7, s_4_33, 28, 1, 0},
+/* 34 */ { 4, s_4_34, -1, 1, 0},
+/* 35 */ { 4, s_4_35, -1, 1, 0},
+/* 36 */ { 5, s_4_36, -1, 1, 0},
+/* 37 */ { 3, s_4_37, -1, 1, 0},
+/* 38 */ { 4, s_4_38, -1, 2, 0},
+/* 39 */ { 5, s_4_39, 38, 1, 0},
+/* 40 */ { 5, s_4_40, 38, 1, 0},
+/* 41 */ { 4, s_4_41, -1, 2, 0},
+/* 42 */ { 4, s_4_42, -1, 2, 0},
+/* 43 */ { 7, s_4_43, -1, 1, 0},
+/* 44 */ { 8, s_4_44, -1, 2, 0},
+/* 45 */ { 9, s_4_45, 44, 1, 0},
+/* 46 */ { 10, s_4_46, 44, 2, 0},
+/* 47 */ { 9, s_4_47, 44, 1, 0},
+/* 48 */ { 9, s_4_48, 44, 1, 0},
+/* 49 */ { 10, s_4_49, 44, 1, 0},
+/* 50 */ { 7, s_4_50, -1, 1, 0},
+/* 51 */ { 7, s_4_51, -1, 1, 0},
+/* 52 */ { 8, s_4_52, -1, 1, 0},
+/* 53 */ { 5, s_4_53, -1, 2, 0},
+/* 54 */ { 2, s_4_54, -1, 1, 0},
+/* 55 */ { 3, s_4_55, 54, 1, 0},
+/* 56 */ { 3, s_4_56, 54, 1, 0},
+/* 57 */ { 2, s_4_57, -1, 2, 0},
+/* 58 */ { 4, s_4_58, 57, 1, 0},
+/* 59 */ { 5, s_4_59, 57, 2, 0},
+/* 60 */ { 4, s_4_60, 57, 1, 0},
+/* 61 */ { 4, s_4_61, 57, 1, 0},
+/* 62 */ { 5, s_4_62, 57, 1, 0},
+/* 63 */ { 2, s_4_63, -1, 2, 0},
+/* 64 */ { 3, s_4_64, -1, 2, 0},
+/* 65 */ { 5, s_4_65, 64, 1, 0},
+/* 66 */ { 6, s_4_66, 64, 2, 0},
+/* 67 */ { 7, s_4_67, 66, 1, 0},
+/* 68 */ { 8, s_4_68, 66, 2, 0},
+/* 69 */ { 7, s_4_69, 66, 1, 0},
+/* 70 */ { 7, s_4_70, 66, 1, 0},
+/* 71 */ { 8, s_4_71, 66, 1, 0},
+/* 72 */ { 5, s_4_72, 64, 1, 0},
+/* 73 */ { 5, s_4_73, 64, 1, 0},
+/* 74 */ { 6, s_4_74, 64, 1, 0},
+/* 75 */ { 3, s_4_75, -1, 2, 0},
+/* 76 */ { 2, s_4_76, -1, 1, 0},
+/* 77 */ { 3, s_4_77, 76, 1, 0},
+/* 78 */ { 3, s_4_78, 76, 1, 0},
+/* 79 */ { 4, s_4_79, -1, 1, 0},
+/* 80 */ { 5, s_4_80, -1, 1, 0},
+/* 81 */ { 2, s_4_81, -1, 1, 0},
+/* 82 */ { 6, s_4_82, -1, 1, 0},
+/* 83 */ { 4, s_4_83, -1, 1, 0},
+/* 84 */ { 5, s_4_84, -1, 2, 0},
+/* 85 */ { 6, s_4_85, 84, 1, 0},
+/* 86 */ { 7, s_4_86, 84, 2, 0},
+/* 87 */ { 6, s_4_87, 84, 1, 0},
+/* 88 */ { 6, s_4_88, 84, 1, 0},
+/* 89 */ { 7, s_4_89, 84, 1, 0},
+/* 90 */ { 4, s_4_90, -1, 1, 0},
+/* 91 */ { 4, s_4_91, -1, 1, 0},
+/* 92 */ { 5, s_4_92, -1, 1, 0},
+/* 93 */ { 5, s_4_93, -1, 1, 0}
+};
+
+static const symbol s_5_0[1] = { 'a' };
+static const symbol s_5_1[1] = { 'e' };
+static const symbol s_5_2[2] = { 'i', 'e' };
+static const symbol s_5_3[1] = { 'i' };
+static const symbol s_5_4[2] = { 0xC4, 0x83 };
+
+static const struct among a_5[5] =
+{
+/*  0 */ { 1, s_5_0, -1, 1, 0},
+/*  1 */ { 1, s_5_1, -1, 1, 0},
+/*  2 */ { 2, s_5_2, 1, 1, 0},
+/*  3 */ { 1, s_5_3, -1, 1, 0},
+/*  4 */ { 2, s_5_4, -1, 1, 0}
+};
+
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 4 };
+
+static const symbol s_0[] = { 'u' };
+static const symbol s_1[] = { 'U' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'I' };
+static const symbol s_4[] = { 'i' };
+static const symbol s_5[] = { 'u' };
+static const symbol s_6[] = { 'a' };
+static const symbol s_7[] = { 'e' };
+static const symbol s_8[] = { 'i' };
+static const symbol s_9[] = { 'a', 'b' };
+static const symbol s_10[] = { 'i' };
+static const symbol s_11[] = { 'a', 't' };
+static const symbol s_12[] = { 'a', 0xC5, 0xA3, 'i' };
+static const symbol s_13[] = { 'a', 'b', 'i', 'l' };
+static const symbol s_14[] = { 'i', 'b', 'i', 'l' };
+static const symbol s_15[] = { 'i', 'v' };
+static const symbol s_16[] = { 'i', 'c' };
+static const symbol s_17[] = { 'a', 't' };
+static const symbol s_18[] = { 'i', 't' };
+static const symbol s_19[] = { 0xC5, 0xA3 };
+static const symbol s_20[] = { 't' };
+static const symbol s_21[] = { 'i', 's', 't' };
+static const symbol s_22[] = { 'u' };
+
+static int r_prelude(struct SN_env * z) {
+    while(1) { /* repeat, line 32 */
+        int c1 = z->c;
+        while(1) { /* goto, line 32 */
+            int c2 = z->c;
+            if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab1;
+            z->bra = z->c; /* [, line 33 */
+            {   int c3 = z->c; /* or, line 33 */
+                if (!(eq_s(z, 1, s_0))) goto lab3;
+                z->ket = z->c; /* ], line 33 */
+                if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab3;
+                {   int ret = slice_from_s(z, 1, s_1); /* <-, line 33 */
+                    if (ret < 0) return ret;
+                }
+                goto lab2;
+            lab3:
+                z->c = c3;
+                if (!(eq_s(z, 1, s_2))) goto lab1;
+                z->ket = z->c; /* ], line 34 */
+                if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab1;
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 34 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab2:
+            z->c = c2;
+            break;
+        lab1:
+            z->c = c2;
+            {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                if (ret < 0) goto lab0;
+                z->c = ret; /* goto, line 32 */
+            }
+        }
+        continue;
+    lab0:
+        z->c = c1;
+        break;
+    }
+    return 1;
+}
+
+static int r_mark_regions(struct SN_env * z) {
+    z->I[0] = z->l;
+    z->I[1] = z->l;
+    z->I[2] = z->l;
+    {   int c1 = z->c; /* do, line 44 */
+        {   int c2 = z->c; /* or, line 46 */
+            if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 45 */
+                if (out_grouping_U(z, g_v, 97, 259, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 45 */
+                    int ret = out_grouping_U(z, g_v, 97, 259, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
+                }
+                goto lab3;
+            lab4:
+                z->c = c3;
+                if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 45 */
+                    int ret = in_grouping_U(z, g_v, 97, 259, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
+                }
+            }
+        lab3:
+            goto lab1;
+        lab2:
+            z->c = c2;
+            if (out_grouping_U(z, g_v, 97, 259, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 47 */
+                if (out_grouping_U(z, g_v, 97, 259, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 47 */
+                    int ret = out_grouping_U(z, g_v, 97, 259, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
+                }
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab0;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 47 */
+                }
+            }
+        lab5:
+            ;
+        }
+    lab1:
+        z->I[0] = z->c; /* setmark pV, line 48 */
+    lab0:
+        z->c = c1;
+    }
+    {   int c5 = z->c; /* do, line 50 */
+        {    /* gopast */ /* grouping v, line 51 */
+            int ret = out_grouping_U(z, g_v, 97, 259, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        {    /* gopast */ /* non v, line 51 */
+            int ret = in_grouping_U(z, g_v, 97, 259, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        z->I[1] = z->c; /* setmark p1, line 51 */
+        {    /* gopast */ /* grouping v, line 52 */
+            int ret = out_grouping_U(z, g_v, 97, 259, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        {    /* gopast */ /* non v, line 52 */
+            int ret = in_grouping_U(z, g_v, 97, 259, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
+        }
+        z->I[2] = z->c; /* setmark p2, line 52 */
+    lab7:
+        z->c = c5;
+    }
+    return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+    int among_var;
+    while(1) { /* repeat, line 56 */
+        int c1 = z->c;
+        z->bra = z->c; /* [, line 58 */
+        if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else
+        among_var = find_among(z, a_0, 3); /* substring, line 58 */
+        if (!(among_var)) goto lab0;
+        z->ket = z->c; /* ], line 58 */
+        switch(among_var) {
+            case 0: goto lab0;
+            case 1:
+                {   int ret = slice_from_s(z, 1, s_4); /* <-, line 59 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 2:
+                {   int ret = slice_from_s(z, 1, s_5); /* <-, line 60 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 3:
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 61 */
+                }
+                break;
+        }
+        continue;
+    lab0:
+        z->c = c1;
+        break;
+    }
+    return 1;
+}
+
+static int r_RV(struct SN_env * z) {
+    if (!(z->I[0] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+    if (!(z->I[1] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+    if (!(z->I[2] <= z->c)) return 0;
+    return 1;
+}
+
+static int r_step_0(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 73 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((266786 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    among_var = find_among_b(z, a_1, 16); /* substring, line 73 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 73 */
+    {   int ret = r_R1(z);
+        if (ret == 0) return 0; /* call R1, line 73 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 75 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 1, s_6); /* <-, line 77 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_7); /* <-, line 79 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_from_s(z, 1, s_8); /* <-, line 81 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 5:
+            {   int m1 = z->l - z->c; (void)m1; /* not, line 83 */
+                if (!(eq_s_b(z, 2, s_9))) goto lab0;
+                return 0;
+            lab0:
+                z->c = z->l - m1;
+            }
+            {   int ret = slice_from_s(z, 1, s_10); /* <-, line 83 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 6:
+            {   int ret = slice_from_s(z, 2, s_11); /* <-, line 85 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 7:
+            {   int ret = slice_from_s(z, 4, s_12); /* <-, line 87 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_combo_suffix(struct SN_env * z) {
+    int among_var;
+    {   int m_test = z->l - z->c; /* test, line 91 */
+        z->ket = z->c; /* [, line 92 */
+        among_var = find_among_b(z, a_2, 46); /* substring, line 92 */
+        if (!(among_var)) return 0;
+        z->bra = z->c; /* ], line 92 */
+        {   int ret = r_R1(z);
+            if (ret == 0) return 0; /* call R1, line 92 */
+            if (ret < 0) return ret;
+        }
+        switch(among_var) {
+            case 0: return 0;
+            case 1:
+                {   int ret = slice_from_s(z, 4, s_13); /* <-, line 101 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 2:
+                {   int ret = slice_from_s(z, 4, s_14); /* <-, line 104 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 3:
+                {   int ret = slice_from_s(z, 2, s_15); /* <-, line 107 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 4:
+                {   int ret = slice_from_s(z, 2, s_16); /* <-, line 113 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 5:
+                {   int ret = slice_from_s(z, 2, s_17); /* <-, line 118 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 6:
+                {   int ret = slice_from_s(z, 2, s_18); /* <-, line 122 */
+                    if (ret < 0) return ret;
+                }
+                break;
+        }
+        z->B[0] = 1; /* set standard_suffix_removed, line 125 */
+        z->c = z->l - m_test;
+    }
+    return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+    int among_var;
+    z->B[0] = 0; /* unset standard_suffix_removed, line 130 */
+    while(1) { /* repeat, line 131 */
+        int m1 = z->l - z->c; (void)m1;
+        {   int ret = r_combo_suffix(z);
+            if (ret == 0) goto lab0; /* call combo_suffix, line 131 */
+            if (ret < 0) return ret;
+        }
+        continue;
+    lab0:
+        z->c = z->l - m1;
+        break;
+    }
+    z->ket = z->c; /* [, line 132 */
+    among_var = find_among_b(z, a_3, 62); /* substring, line 132 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 132 */
+    {   int ret = r_R2(z);
+        if (ret == 0) return 0; /* call R2, line 132 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 149 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            if (!(eq_s_b(z, 2, s_19))) return 0;
+            z->bra = z->c; /* ], line 152 */
+            {   int ret = slice_from_s(z, 1, s_20); /* <-, line 152 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 3, s_21); /* <-, line 156 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    z->B[0] = 1; /* set standard_suffix_removed, line 160 */
+    return 1;
+}
+
+static int r_verb_suffix(struct SN_env * z) {
+    int among_var;
+    {   int mlimit; /* setlimit, line 164 */
+        int m1 = z->l - z->c; (void)m1;
+        if (z->c < z->I[0]) return 0;
+        z->c = z->I[0]; /* tomark, line 164 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 165 */
+        among_var = find_among_b(z, a_4, 94); /* substring, line 165 */
+        if (!(among_var)) { z->lb = mlimit; return 0; }
+        z->bra = z->c; /* ], line 165 */
+        switch(among_var) {
+            case 0: { z->lb = mlimit; return 0; }
+            case 1:
+                {   int m2 = z->l - z->c; (void)m2; /* or, line 200 */
+                    if (out_grouping_b_U(z, g_v, 97, 259, 0)) goto lab1;
+                    goto lab0;
+                lab1:
+                    z->c = z->l - m2;
+                    if (!(eq_s_b(z, 1, s_22))) { z->lb = mlimit; return 0; }
+                }
+            lab0:
+                {   int ret = slice_del(z); /* delete, line 200 */
+                    if (ret < 0) return ret;
+                }
+                break;
+            case 2:
+                {   int ret = slice_del(z); /* delete, line 214 */
+                    if (ret < 0) return ret;
+                }
+                break;
+        }
+        z->lb = mlimit;
+    }
+    return 1;
+}
+
+static int r_vowel_suffix(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 219 */
+    among_var = find_among_b(z, a_5, 5); /* substring, line 219 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 219 */
+    {   int ret = r_RV(z);
+        if (ret == 0) return 0; /* call RV, line 219 */
+        if (ret < 0) return ret;
+    }
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_del(z); /* delete, line 220 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+extern int romanian_UTF_8_stem(struct SN_env * z) {
+    {   int c1 = z->c; /* do, line 226 */
+        {   int ret = r_prelude(z);
+            if (ret == 0) goto lab0; /* call prelude, line 226 */
+            if (ret < 0) return ret;
+        }
+    lab0:
+        z->c = c1;
+    }
+    {   int c2 = z->c; /* do, line 227 */
+        {   int ret = r_mark_regions(z);
+            if (ret == 0) goto lab1; /* call mark_regions, line 227 */
+            if (ret < 0) return ret;
+        }
+    lab1:
+        z->c = c2;
+    }
+    z->lb = z->c; z->c = z->l; /* backwards, line 228 */
+
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 229 */
+        {   int ret = r_step_0(z);
+            if (ret == 0) goto lab2; /* call step_0, line 229 */
+            if (ret < 0) return ret;
+        }
+    lab2:
+        z->c = z->l - m3;
+    }
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 230 */
+        {   int ret = r_standard_suffix(z);
+            if (ret == 0) goto lab3; /* call standard_suffix, line 230 */
+            if (ret < 0) return ret;
+        }
+    lab3:
+        z->c = z->l - m4;
+    }
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 231 */
+        {   int m6 = z->l - z->c; (void)m6; /* or, line 231 */
+            if (!(z->B[0])) goto lab6; /* Boolean test standard_suffix_removed, line 231 */
+            goto lab5;
+        lab6:
+            z->c = z->l - m6;
+            {   int ret = r_verb_suffix(z);
+                if (ret == 0) goto lab4; /* call verb_suffix, line 231 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab5:
+    lab4:
+        z->c = z->l - m5;
+    }
+    {   int m7 = z->l - z->c; (void)m7; /* do, line 232 */
+        {   int ret = r_vowel_suffix(z);
+            if (ret == 0) goto lab7; /* call vowel_suffix, line 232 */
+            if (ret < 0) return ret;
+        }
+    lab7:
+        z->c = z->l - m7;
+    }
+    z->c = z->lb;
+    {   int c8 = z->c; /* do, line 234 */
+        {   int ret = r_postlude(z);
+            if (ret == 0) goto lab8; /* call postlude, line 234 */
+            if (ret < 0) return ret;
+        }
+    lab8:
+        z->c = c8;
+    }
+    return 1;
+}
+
+extern struct SN_env * romanian_UTF_8_create_env(void) { return SN_create_env(0, 3, 1); }
+
+extern void romanian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_romanian.h b/libstemmer_c/src_c/stem_UTF_8_romanian.h
new file mode 100644
index 0000000..d01e813
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_romanian.h
@@ -0,0 +1,16 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct SN_env * romanian_UTF_8_create_env(void);
+extern void romanian_UTF_8_close_env(struct SN_env * z);
+
+extern int romanian_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_russian.c b/libstemmer_c/src_c/stem_UTF_8_russian.c
index 19581dd..6f0a964 100644
--- a/libstemmer_c/src_c/stem_UTF_8_russian.c
+++ b/libstemmer_c/src_c/stem_UTF_8_russian.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int russian_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_tidy_up(struct SN_env * z);
 static int r_derivational(struct SN_env * z);
 static int r_noun(struct SN_env * z);
@@ -14,21 +20,29 @@ static int r_adjective(struct SN_env * z);
 static int r_perfective_gerund(struct SN_env * z);
 static int r_R2(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * russian_UTF_8_create_env(void);
 extern void russian_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
-static symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
-static symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
-static symbol s_0_3[2] = { 0xD0, 0xB2 };
-static symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 };
-static symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 };
-static symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
-static symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
-static symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
-
-static struct among a_0[9] =
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
+static const symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
+static const symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C };
+static const symbol s_0_3[2] = { 0xD0, 0xB2 };
+static const symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 };
+static const symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 };
+static const symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
+static const symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
+static const symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 };
+
+static const struct among a_0[9] =
 {
 /*  0 */ { 10, s_0_0, -1, 1, 0},
 /*  1 */ { 12, s_0_1, 0, 2, 0},
@@ -41,34 +55,34 @@ static struct among a_0[9] =
 /*  8 */ { 8, s_0_8, 6, 2, 0}
 };
 
-static symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 };
-static symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 };
-static symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 };
-static symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 };
-static symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E };
-static symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E };
-static symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E };
-static symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E };
-static symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F };
-static symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F };
-static symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 };
-static symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 };
-static symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 };
-static symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 };
-static symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 };
-static symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 };
-static symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 };
-static symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
-static symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 };
-static symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 };
-static symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC };
-static symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
-static symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC };
-static symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC };
-static symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE };
-static symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE };
-
-static struct among a_1[26] =
+static const symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 };
+static const symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 };
+static const symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 };
+static const symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 };
+static const symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E };
+static const symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E };
+static const symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E };
+static const symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E };
+static const symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F };
+static const symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F };
+static const symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 };
+static const symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 };
+static const symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 };
+static const symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 };
+static const symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 };
+static const symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 };
+static const symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 };
+static const symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
+static const symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 };
+static const symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 };
+static const symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC };
+static const symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
+static const symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC };
+static const symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC };
+static const symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE };
+static const symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE };
+
+static const struct among a_1[26] =
 {
 /*  0 */ { 6, s_1_0, -1, 1, 0},
 /*  1 */ { 6, s_1_1, -1, 1, 0},
@@ -98,16 +112,16 @@ static struct among a_1[26] =
 /* 25 */ { 6, s_1_25, -1, 1, 0}
 };
 
-static symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 };
-static symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 };
-static symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 };
-static symbol s_2_3[2] = { 0xD1, 0x89 };
-static symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 };
-static symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 };
-static symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
-static symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD };
+static const symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 };
+static const symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 };
+static const symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 };
+static const symbol s_2_3[2] = { 0xD1, 0x89 };
+static const symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 };
+static const symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 };
+static const symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
+static const symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD };
 
-static struct among a_2[8] =
+static const struct among a_2[8] =
 {
 /*  0 */ { 4, s_2_0, -1, 1, 0},
 /*  1 */ { 6, s_2_1, 0, 2, 0},
@@ -119,63 +133,63 @@ static struct among a_2[8] =
 /*  7 */ { 4, s_2_7, -1, 1, 0}
 };
 
-static symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C };
-static symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F };
+static const symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C };
+static const symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F };
 
-static struct among a_3[2] =
+static const struct among a_3[2] =
 {
 /*  0 */ { 4, s_3_0, -1, 1, 0},
 /*  1 */ { 4, s_3_1, -1, 1, 0}
 };
 
-static symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 };
-static symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 };
-static symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 };
-static symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 };
-static symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 };
-static symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 };
-static symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 };
-static symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B };
-static symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B };
-static symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C };
-static symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C };
-static symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C };
-static symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C };
-static symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C };
-static symbol s_4_14[2] = { 0xD1, 0x8E };
-static symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E };
-static symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 };
-static symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 };
-static symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 };
-static symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 };
-static symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 };
-static symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 };
-static symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 };
-static symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
-static symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
-static symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
-static symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 };
-static symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 };
-static symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 };
-static symbol s_4_29[2] = { 0xD0, 0xB9 };
-static symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 };
-static symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
-static symbol s_4_32[2] = { 0xD0, 0xBB };
-static symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB };
-static symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB };
-static symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC };
-static symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
-static symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC };
-static symbol s_4_38[2] = { 0xD0, 0xBD };
-static symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD };
-static symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE };
-static symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE };
-static symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE };
-static symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE };
-static symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE };
-static symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE };
-
-static struct among a_4[46] =
+static const symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 };
+static const symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 };
+static const symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 };
+static const symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 };
+static const symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 };
+static const symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 };
+static const symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 };
+static const symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B };
+static const symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B };
+static const symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C };
+static const symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C };
+static const symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C };
+static const symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C };
+static const symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C };
+static const symbol s_4_14[2] = { 0xD1, 0x8E };
+static const symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E };
+static const symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 };
+static const symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 };
+static const symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 };
+static const symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 };
+static const symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 };
+static const symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 };
+static const symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 };
+static const symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
+static const symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
+static const symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 };
+static const symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 };
+static const symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 };
+static const symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 };
+static const symbol s_4_29[2] = { 0xD0, 0xB9 };
+static const symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 };
+static const symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
+static const symbol s_4_32[2] = { 0xD0, 0xBB };
+static const symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB };
+static const symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB };
+static const symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC };
+static const symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
+static const symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC };
+static const symbol s_4_38[2] = { 0xD0, 0xBD };
+static const symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD };
+static const symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE };
+static const symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE };
+static const symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE };
+static const symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE };
+static const symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE };
+static const symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE };
+
+static const struct among a_4[46] =
 {
 /*  0 */ { 4, s_4_0, -1, 2, 0},
 /*  1 */ { 4, s_4_1, -1, 1, 0},
@@ -225,44 +239,44 @@ static struct among a_4[46] =
 /* 45 */ { 6, s_4_45, 43, 1, 0}
 };
 
-static symbol s_5_0[2] = { 0xD1, 0x83 };
-static symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 };
-static symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 };
-static symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 };
-static symbol s_5_4[2] = { 0xD1, 0x8B };
-static symbol s_5_5[2] = { 0xD1, 0x8C };
-static symbol s_5_6[2] = { 0xD1, 0x8E };
-static symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E };
-static symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E };
-static symbol s_5_9[2] = { 0xD1, 0x8F };
-static symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F };
-static symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F };
-static symbol s_5_12[2] = { 0xD0, 0xB0 };
-static symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 };
-static symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 };
-static symbol s_5_15[2] = { 0xD0, 0xB5 };
-static symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 };
-static symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 };
-static symbol s_5_18[2] = { 0xD0, 0xB8 };
-static symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 };
-static symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 };
-static symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 };
-static symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 };
-static symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 };
-static symbol s_5_24[2] = { 0xD0, 0xB9 };
-static symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
-static symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 };
-static symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 };
-static symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 };
-static symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC };
-static symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC };
-static symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC };
-static symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
-static symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC };
-static symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC };
-static symbol s_5_35[2] = { 0xD0, 0xBE };
-
-static struct among a_5[36] =
+static const symbol s_5_0[2] = { 0xD1, 0x83 };
+static const symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 };
+static const symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 };
+static const symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 };
+static const symbol s_5_4[2] = { 0xD1, 0x8B };
+static const symbol s_5_5[2] = { 0xD1, 0x8C };
+static const symbol s_5_6[2] = { 0xD1, 0x8E };
+static const symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E };
+static const symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E };
+static const symbol s_5_9[2] = { 0xD1, 0x8F };
+static const symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F };
+static const symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F };
+static const symbol s_5_12[2] = { 0xD0, 0xB0 };
+static const symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 };
+static const symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 };
+static const symbol s_5_15[2] = { 0xD0, 0xB5 };
+static const symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 };
+static const symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 };
+static const symbol s_5_18[2] = { 0xD0, 0xB8 };
+static const symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 };
+static const symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 };
+static const symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 };
+static const symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 };
+static const symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 };
+static const symbol s_5_24[2] = { 0xD0, 0xB9 };
+static const symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 };
+static const symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 };
+static const symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 };
+static const symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 };
+static const symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC };
+static const symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC };
+static const symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC };
+static const symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC };
+static const symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC };
+static const symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC };
+static const symbol s_5_35[2] = { 0xD0, 0xBE };
+
+static const struct among a_5[36] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
@@ -302,21 +316,21 @@ static struct among a_5[36] =
 /* 35 */ { 2, s_5_35, -1, 1, 0}
 };
 
-static symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 };
-static symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C };
+static const symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 };
+static const symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C };
 
-static struct among a_6[2] =
+static const struct among a_6[2] =
 {
 /*  0 */ { 6, s_6_0, -1, 1, 0},
 /*  1 */ { 8, s_6_1, -1, 1, 0}
 };
 
-static symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 };
-static symbol s_7_1[2] = { 0xD1, 0x8C };
-static symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 };
-static symbol s_7_3[2] = { 0xD0, 0xBD };
+static const symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 };
+static const symbol s_7_1[2] = { 0xD1, 0x8C };
+static const symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 };
+static const symbol s_7_3[2] = { 0xD0, 0xBD };
 
-static struct among a_7[4] =
+static const struct among a_7[4] =
 {
 /*  0 */ { 6, s_7_0, -1, 1, 0},
 /*  1 */ { 2, s_7_1, -1, 3, 0},
@@ -324,63 +338,47 @@ static struct among a_7[4] =
 /*  3 */ { 2, s_7_3, -1, 2, 0}
 };
 
-static unsigned char g_v[] = { 33, 65, 8, 232 };
+static const unsigned char g_v[] = { 33, 65, 8, 232 };
 
-static symbol s_0[] = { 0xD0, 0xB0 };
-static symbol s_1[] = { 0xD1, 0x8F };
-static symbol s_2[] = { 0xD0, 0xB0 };
-static symbol s_3[] = { 0xD1, 0x8F };
-static symbol s_4[] = { 0xD0, 0xB0 };
-static symbol s_5[] = { 0xD1, 0x8F };
-static symbol s_6[] = { 0xD0, 0xBD };
-static symbol s_7[] = { 0xD0, 0xBD };
-static symbol s_8[] = { 0xD0, 0xBD };
-static symbol s_9[] = { 0xD0, 0xB8 };
+static const symbol s_0[] = { 0xD0, 0xB0 };
+static const symbol s_1[] = { 0xD1, 0x8F };
+static const symbol s_2[] = { 0xD0, 0xB0 };
+static const symbol s_3[] = { 0xD1, 0x8F };
+static const symbol s_4[] = { 0xD0, 0xB0 };
+static const symbol s_5[] = { 0xD1, 0x8F };
+static const symbol s_6[] = { 0xD0, 0xBD };
+static const symbol s_7[] = { 0xD0, 0xBD };
+static const symbol s_8[] = { 0xD0, 0xBD };
+static const symbol s_9[] = { 0xD0, 0xB8 };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
-    {   int c = z->c; /* do, line 61 */
-        while(1) { /* gopast, line 62 */
-            if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab1;
-            break;
-        lab1:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* gopast, line 62 */
-            }
+    {   int c1 = z->c; /* do, line 61 */
+        {    /* gopast */ /* grouping v, line 62 */
+            int ret = out_grouping_U(z, g_v, 1072, 1103, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
         z->I[0] = z->c; /* setmark pV, line 62 */
-        while(1) { /* gopast, line 62 */
-            if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab2;
-            break;
-        lab2:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* gopast, line 62 */
-            }
+        {    /* gopast */ /* non v, line 62 */
+            int ret = in_grouping_U(z, g_v, 1072, 1103, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 63 */
-            if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab3;
-            break;
-        lab3:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* gopast, line 63 */
-            }
+        {    /* gopast */ /* grouping v, line 63 */
+            int ret = out_grouping_U(z, g_v, 1072, 1103, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 63 */
-            if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab4;
-            break;
-        lab4:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab0;
-                z->c = c; /* gopast, line 63 */
-            }
+        {    /* gopast */ /* non v, line 63 */
+            int ret = in_grouping_U(z, g_v, 1072, 1103, 1);
+            if (ret < 0) goto lab0;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p2, line 63 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     return 1;
 }
@@ -399,22 +397,20 @@ static int r_perfective_gerund(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* or, line 76 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 76 */
                 if (!(eq_s_b(z, 2, s_0))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 2, s_1))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 76 */
+            {   int ret = slice_del(z); /* delete, line 76 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 83 */
+            {   int ret = slice_del(z); /* delete, line 83 */
                 if (ret < 0) return ret;
             }
             break;
@@ -431,8 +427,7 @@ static int r_adjective(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 97 */
+            {   int ret = slice_del(z); /* delete, line 97 */
                 if (ret < 0) return ret;
             }
             break;
@@ -446,30 +441,28 @@ static int r_adjectival(struct SN_env * z) {
         if (ret == 0) return 0; /* call adjective, line 102 */
         if (ret < 0) return ret;
     }
-    {   int m = z->l - z->c; (void) m; /* try, line 109 */
+    {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 109 */
         z->ket = z->c; /* [, line 110 */
         among_var = find_among_b(z, a_2, 8); /* substring, line 110 */
-        if (!(among_var)) { z->c = z->l - m; goto lab0; }
+        if (!(among_var)) { z->c = z->l - m_keep; goto lab0; }
         z->bra = z->c; /* ], line 110 */
         switch(among_var) {
-            case 0: { z->c = z->l - m; goto lab0; }
+            case 0: { z->c = z->l - m_keep; goto lab0; }
             case 1:
-                {   int m = z->l - z->c; (void) m; /* or, line 115 */
+                {   int m1 = z->l - z->c; (void)m1; /* or, line 115 */
                     if (!(eq_s_b(z, 2, s_2))) goto lab2;
                     goto lab1;
                 lab2:
-                    z->c = z->l - m;
-                    if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m; goto lab0; }
+                    z->c = z->l - m1;
+                    if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m_keep; goto lab0; }
                 }
             lab1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 115 */
+                {   int ret = slice_del(z); /* delete, line 115 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 122 */
+                {   int ret = slice_del(z); /* delete, line 122 */
                     if (ret < 0) return ret;
                 }
                 break;
@@ -483,14 +476,14 @@ static int r_adjectival(struct SN_env * z) {
 static int r_reflexive(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 129 */
+    if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 140 && z->p[z->c - 1] != 143)) return 0;
     among_var = find_among_b(z, a_3, 2); /* substring, line 129 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 129 */
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 132 */
+            {   int ret = slice_del(z); /* delete, line 132 */
                 if (ret < 0) return ret;
             }
             break;
@@ -507,22 +500,20 @@ static int r_verb(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* or, line 143 */
+            {   int m1 = z->l - z->c; (void)m1; /* or, line 143 */
                 if (!(eq_s_b(z, 2, s_4))) goto lab1;
                 goto lab0;
             lab1:
-                z->c = z->l - m;
+                z->c = z->l - m1;
                 if (!(eq_s_b(z, 2, s_5))) return 0;
             }
         lab0:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 143 */
+            {   int ret = slice_del(z); /* delete, line 143 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 151 */
+            {   int ret = slice_del(z); /* delete, line 151 */
                 if (ret < 0) return ret;
             }
             break;
@@ -539,8 +530,7 @@ static int r_noun(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 167 */
+            {   int ret = slice_del(z); /* delete, line 167 */
                 if (ret < 0) return ret;
             }
             break;
@@ -551,6 +541,7 @@ static int r_noun(struct SN_env * z) {
 static int r_derivational(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 176 */
+    if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 130 && z->p[z->c - 1] != 140)) return 0;
     among_var = find_among_b(z, a_6, 2); /* substring, line 176 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 176 */
@@ -561,8 +552,7 @@ static int r_derivational(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 179 */
+            {   int ret = slice_del(z); /* delete, line 179 */
                 if (ret < 0) return ret;
             }
             break;
@@ -579,29 +569,25 @@ static int r_tidy_up(struct SN_env * z) {
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 188 */
+            {   int ret = slice_del(z); /* delete, line 188 */
                 if (ret < 0) return ret;
             }
             z->ket = z->c; /* [, line 189 */
             if (!(eq_s_b(z, 2, s_6))) return 0;
             z->bra = z->c; /* ], line 189 */
             if (!(eq_s_b(z, 2, s_7))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 189 */
+            {   int ret = slice_del(z); /* delete, line 189 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             if (!(eq_s_b(z, 2, s_8))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 192 */
+            {   int ret = slice_del(z); /* delete, line 192 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 194 */
+            {   int ret = slice_del(z); /* delete, line 194 */
                 if (ret < 0) return ret;
             }
             break;
@@ -610,54 +596,54 @@ static int r_tidy_up(struct SN_env * z) {
 }
 
 extern int russian_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 201 */
+    {   int c1 = z->c; /* do, line 201 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 201 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 202 */
 
-    {   int m3; /* setlimit, line 202 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 202 */
+        int m2 = z->l - z->c; (void)m2;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 202 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* do, line 203 */
-            {   int m = z->l - z->c; (void) m; /* or, line 204 */
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m2;
+        {   int m3 = z->l - z->c; (void)m3; /* do, line 203 */
+            {   int m4 = z->l - z->c; (void)m4; /* or, line 204 */
                 {   int ret = r_perfective_gerund(z);
                     if (ret == 0) goto lab3; /* call perfective_gerund, line 204 */
                     if (ret < 0) return ret;
                 }
                 goto lab2;
             lab3:
-                z->c = z->l - m;
-                {   int m = z->l - z->c; (void) m; /* try, line 205 */
+                z->c = z->l - m4;
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 205 */
                     {   int ret = r_reflexive(z);
-                        if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 205 */
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab4; } /* call reflexive, line 205 */
                         if (ret < 0) return ret;
                     }
                 lab4:
                     ;
                 }
-                {   int m = z->l - z->c; (void) m; /* or, line 206 */
+                {   int m5 = z->l - z->c; (void)m5; /* or, line 206 */
                     {   int ret = r_adjectival(z);
                         if (ret == 0) goto lab6; /* call adjectival, line 206 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab6:
-                    z->c = z->l - m;
+                    z->c = z->l - m5;
                     {   int ret = r_verb(z);
                         if (ret == 0) goto lab7; /* call verb, line 206 */
                         if (ret < 0) return ret;
                     }
                     goto lab5;
                 lab7:
-                    z->c = z->l - m;
+                    z->c = z->l - m5;
                     {   int ret = r_noun(z);
                         if (ret == 0) goto lab1; /* call noun, line 206 */
                         if (ret < 0) return ret;
@@ -668,36 +654,35 @@ extern int russian_UTF_8_stem(struct SN_env * z) {
             }
         lab2:
         lab1:
-            z->c = z->l - m;
+            z->c = z->l - m3;
         }
-        {   int m = z->l - z->c; (void) m; /* try, line 209 */
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 209 */
             z->ket = z->c; /* [, line 209 */
-            if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m; goto lab8; }
+            if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m_keep; goto lab8; }
             z->bra = z->c; /* ], line 209 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 209 */
+            {   int ret = slice_del(z); /* delete, line 209 */
                 if (ret < 0) return ret;
             }
         lab8:
             ;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 212 */
+        {   int m6 = z->l - z->c; (void)m6; /* do, line 212 */
             {   int ret = r_derivational(z);
                 if (ret == 0) goto lab9; /* call derivational, line 212 */
                 if (ret < 0) return ret;
             }
         lab9:
-            z->c = z->l - m;
+            z->c = z->l - m6;
         }
-        {   int m = z->l - z->c; (void) m; /* do, line 213 */
+        {   int m7 = z->l - z->c; (void)m7; /* do, line 213 */
             {   int ret = r_tidy_up(z);
                 if (ret == 0) goto lab10; /* call tidy_up, line 213 */
                 if (ret < 0) return ret;
             }
         lab10:
-            z->c = z->l - m;
+            z->c = z->l - m7;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     z->c = z->lb;
     return 1;
@@ -705,5 +690,5 @@ extern int russian_UTF_8_stem(struct SN_env * z) {
 
 extern struct SN_env * russian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); }
 
-extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_spanish.c b/libstemmer_c/src_c/stem_UTF_8_spanish.c
index 77771ba..9550d67 100644
--- a/libstemmer_c/src_c/stem_UTF_8_spanish.c
+++ b/libstemmer_c/src_c/stem_UTF_8_spanish.c
@@ -3,7 +3,13 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int spanish_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_residual_suffix(struct SN_env * z);
 static int r_verb_suffix(struct SN_env * z);
 static int r_y_verb_suffix(struct SN_env * z);
@@ -14,17 +20,25 @@ static int r_R1(struct SN_env * z);
 static int r_RV(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
 static int r_postlude(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * spanish_UTF_8_create_env(void);
 extern void spanish_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_1[2] = { 0xC3, 0xA1 };
-static symbol s_0_2[2] = { 0xC3, 0xA9 };
-static symbol s_0_3[2] = { 0xC3, 0xAD };
-static symbol s_0_4[2] = { 0xC3, 0xB3 };
-static symbol s_0_5[2] = { 0xC3, 0xBA };
 
-static struct among a_0[6] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_1[2] = { 0xC3, 0xA1 };
+static const symbol s_0_2[2] = { 0xC3, 0xA9 };
+static const symbol s_0_3[2] = { 0xC3, 0xAD };
+static const symbol s_0_4[2] = { 0xC3, 0xB3 };
+static const symbol s_0_5[2] = { 0xC3, 0xBA };
+
+static const struct among a_0[6] =
 {
 /*  0 */ { 0, 0, -1, 6, 0},
 /*  1 */ { 2, s_0_1, 0, 1, 0},
@@ -34,21 +48,21 @@ static struct among a_0[6] =
 /*  5 */ { 2, s_0_5, 0, 5, 0}
 };
 
-static symbol s_1_0[2] = { 'l', 'a' };
-static symbol s_1_1[4] = { 's', 'e', 'l', 'a' };
-static symbol s_1_2[2] = { 'l', 'e' };
-static symbol s_1_3[2] = { 'm', 'e' };
-static symbol s_1_4[2] = { 's', 'e' };
-static symbol s_1_5[2] = { 'l', 'o' };
-static symbol s_1_6[4] = { 's', 'e', 'l', 'o' };
-static symbol s_1_7[3] = { 'l', 'a', 's' };
-static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' };
-static symbol s_1_9[3] = { 'l', 'e', 's' };
-static symbol s_1_10[3] = { 'l', 'o', 's' };
-static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' };
-static symbol s_1_12[3] = { 'n', 'o', 's' };
+static const symbol s_1_0[2] = { 'l', 'a' };
+static const symbol s_1_1[4] = { 's', 'e', 'l', 'a' };
+static const symbol s_1_2[2] = { 'l', 'e' };
+static const symbol s_1_3[2] = { 'm', 'e' };
+static const symbol s_1_4[2] = { 's', 'e' };
+static const symbol s_1_5[2] = { 'l', 'o' };
+static const symbol s_1_6[4] = { 's', 'e', 'l', 'o' };
+static const symbol s_1_7[3] = { 'l', 'a', 's' };
+static const symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' };
+static const symbol s_1_9[3] = { 'l', 'e', 's' };
+static const symbol s_1_10[3] = { 'l', 'o', 's' };
+static const symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' };
+static const symbol s_1_12[3] = { 'n', 'o', 's' };
 
-static struct among a_1[13] =
+static const struct among a_1[13] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 4, s_1_1, 0, -1, 0},
@@ -65,19 +79,19 @@ static struct among a_1[13] =
 /* 12 */ { 3, s_1_12, -1, -1, 0}
 };
 
-static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' };
-static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' };
-static symbol s_2_3[5] = { 0xC3, 0xA1, 'n', 'd', 'o' };
-static symbol s_2_4[6] = { 'i', 0xC3, 0xA9, 'n', 'd', 'o' };
-static symbol s_2_5[2] = { 'a', 'r' };
-static symbol s_2_6[2] = { 'e', 'r' };
-static symbol s_2_7[2] = { 'i', 'r' };
-static symbol s_2_8[3] = { 0xC3, 0xA1, 'r' };
-static symbol s_2_9[3] = { 0xC3, 0xA9, 'r' };
-static symbol s_2_10[3] = { 0xC3, 0xAD, 'r' };
+static const symbol s_2_0[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' };
+static const symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' };
+static const symbol s_2_3[5] = { 0xC3, 0xA1, 'n', 'd', 'o' };
+static const symbol s_2_4[6] = { 'i', 0xC3, 0xA9, 'n', 'd', 'o' };
+static const symbol s_2_5[2] = { 'a', 'r' };
+static const symbol s_2_6[2] = { 'e', 'r' };
+static const symbol s_2_7[2] = { 'i', 'r' };
+static const symbol s_2_8[3] = { 0xC3, 0xA1, 'r' };
+static const symbol s_2_9[3] = { 0xC3, 0xA9, 'r' };
+static const symbol s_2_10[3] = { 0xC3, 0xAD, 'r' };
 
-static struct among a_2[11] =
+static const struct among a_2[11] =
 {
 /*  0 */ { 4, s_2_0, -1, 6, 0},
 /*  1 */ { 5, s_2_1, -1, 6, 0},
@@ -92,12 +106,12 @@ static struct among a_2[11] =
 /* 10 */ { 3, s_2_10, -1, 5, 0}
 };
 
-static symbol s_3_0[2] = { 'i', 'c' };
-static symbol s_3_1[2] = { 'a', 'd' };
-static symbol s_3_2[2] = { 'o', 's' };
-static symbol s_3_3[2] = { 'i', 'v' };
+static const symbol s_3_0[2] = { 'i', 'c' };
+static const symbol s_3_1[2] = { 'a', 'd' };
+static const symbol s_3_2[2] = { 'o', 's' };
+static const symbol s_3_3[2] = { 'i', 'v' };
 
-static struct among a_3[4] =
+static const struct among a_3[4] =
 {
 /*  0 */ { 2, s_3_0, -1, -1, 0},
 /*  1 */ { 2, s_3_1, -1, -1, 0},
@@ -105,76 +119,76 @@ static struct among a_3[4] =
 /*  3 */ { 2, s_3_3, -1, 1, 0}
 };
 
-static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_4_2[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_4_0[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_4_1[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_4_2[4] = { 'a', 'n', 't', 'e' };
 
-static struct among a_4[3] =
+static const struct among a_4[3] =
 {
 /*  0 */ { 4, s_4_0, -1, 1, 0},
 /*  1 */ { 4, s_4_1, -1, 1, 0},
 /*  2 */ { 4, s_4_2, -1, 1, 0}
 };
 
-static symbol s_5_0[2] = { 'i', 'c' };
-static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
-static symbol s_5_2[2] = { 'i', 'v' };
+static const symbol s_5_0[2] = { 'i', 'c' };
+static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' };
+static const symbol s_5_2[2] = { 'i', 'v' };
 
-static struct among a_5[3] =
+static const struct among a_5[3] =
 {
 /*  0 */ { 2, s_5_0, -1, 1, 0},
 /*  1 */ { 4, s_5_1, -1, 1, 0},
 /*  2 */ { 2, s_5_2, -1, 1, 0}
 };
 
-static symbol s_6_0[3] = { 'i', 'c', 'a' };
-static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' };
-static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' };
-static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' };
-static symbol s_6_4[3] = { 'o', 's', 'a' };
-static symbol s_6_5[4] = { 'i', 's', 't', 'a' };
-static symbol s_6_6[3] = { 'i', 'v', 'a' };
-static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' };
-static symbol s_6_8[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' };
-static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' };
-static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' };
-static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' };
-static symbol s_6_12[4] = { 'a', 'n', 't', 'e' };
-static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
-static symbol s_6_15[6] = { 'a', 'c', 'i', 0xC3, 0xB3, 'n' };
-static symbol s_6_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' };
-static symbol s_6_17[3] = { 'i', 'c', 'o' };
-static symbol s_6_18[4] = { 'i', 's', 'm', 'o' };
-static symbol s_6_19[3] = { 'o', 's', 'o' };
-static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' };
-static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' };
-static symbol s_6_22[3] = { 'i', 'v', 'o' };
-static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' };
-static symbol s_6_24[4] = { 'i', 'c', 'a', 's' };
-static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' };
-static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' };
-static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
-static symbol s_6_28[4] = { 'o', 's', 'a', 's' };
-static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' };
-static symbol s_6_30[4] = { 'i', 'v', 'a', 's' };
-static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' };
-static symbol s_6_32[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' };
-static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
-static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' };
-static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' };
-static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' };
-static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
-static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
-static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' };
-static symbol s_6_40[4] = { 'i', 'c', 'o', 's' };
-static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' };
-static symbol s_6_42[4] = { 'o', 's', 'o', 's' };
-static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' };
-static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' };
-static symbol s_6_45[4] = { 'i', 'v', 'o', 's' };
+static const symbol s_6_0[3] = { 'i', 'c', 'a' };
+static const symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' };
+static const symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' };
+static const symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' };
+static const symbol s_6_4[3] = { 'o', 's', 'a' };
+static const symbol s_6_5[4] = { 'i', 's', 't', 'a' };
+static const symbol s_6_6[3] = { 'i', 'v', 'a' };
+static const symbol s_6_7[4] = { 'a', 'n', 'z', 'a' };
+static const symbol s_6_8[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' };
+static const symbol s_6_9[4] = { 'i', 'd', 'a', 'd' };
+static const symbol s_6_10[4] = { 'a', 'b', 'l', 'e' };
+static const symbol s_6_11[4] = { 'i', 'b', 'l', 'e' };
+static const symbol s_6_12[4] = { 'a', 'n', 't', 'e' };
+static const symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' };
+static const symbol s_6_15[6] = { 'a', 'c', 'i', 0xC3, 0xB3, 'n' };
+static const symbol s_6_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' };
+static const symbol s_6_17[3] = { 'i', 'c', 'o' };
+static const symbol s_6_18[4] = { 'i', 's', 'm', 'o' };
+static const symbol s_6_19[3] = { 'o', 's', 'o' };
+static const symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' };
+static const symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' };
+static const symbol s_6_22[3] = { 'i', 'v', 'o' };
+static const symbol s_6_23[4] = { 'a', 'd', 'o', 'r' };
+static const symbol s_6_24[4] = { 'i', 'c', 'a', 's' };
+static const symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' };
+static const symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' };
+static const symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' };
+static const symbol s_6_28[4] = { 'o', 's', 'a', 's' };
+static const symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' };
+static const symbol s_6_30[4] = { 'i', 'v', 'a', 's' };
+static const symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' };
+static const symbol s_6_32[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' };
+static const symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' };
+static const symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' };
+static const symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' };
+static const symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' };
+static const symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' };
+static const symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' };
+static const symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' };
+static const symbol s_6_40[4] = { 'i', 'c', 'o', 's' };
+static const symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' };
+static const symbol s_6_42[4] = { 'o', 's', 'o', 's' };
+static const symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' };
+static const symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' };
+static const symbol s_6_45[4] = { 'i', 'v', 'o', 's' };
 
-static struct among a_6[46] =
+static const struct among a_6[46] =
 {
 /*  0 */ { 3, s_6_0, -1, 1, 0},
 /*  1 */ { 5, s_6_1, -1, 2, 0},
@@ -224,20 +238,20 @@ static struct among a_6[46] =
 /* 45 */ { 4, s_6_45, -1, 9, 0}
 };
 
-static symbol s_7_0[2] = { 'y', 'a' };
-static symbol s_7_1[2] = { 'y', 'e' };
-static symbol s_7_2[3] = { 'y', 'a', 'n' };
-static symbol s_7_3[3] = { 'y', 'e', 'n' };
-static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' };
-static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' };
-static symbol s_7_6[2] = { 'y', 'o' };
-static symbol s_7_7[3] = { 'y', 'a', 's' };
-static symbol s_7_8[3] = { 'y', 'e', 's' };
-static symbol s_7_9[4] = { 'y', 'a', 'i', 's' };
-static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' };
-static symbol s_7_11[3] = { 'y', 0xC3, 0xB3 };
+static const symbol s_7_0[2] = { 'y', 'a' };
+static const symbol s_7_1[2] = { 'y', 'e' };
+static const symbol s_7_2[3] = { 'y', 'a', 'n' };
+static const symbol s_7_3[3] = { 'y', 'e', 'n' };
+static const symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' };
+static const symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' };
+static const symbol s_7_6[2] = { 'y', 'o' };
+static const symbol s_7_7[3] = { 'y', 'a', 's' };
+static const symbol s_7_8[3] = { 'y', 'e', 's' };
+static const symbol s_7_9[4] = { 'y', 'a', 'i', 's' };
+static const symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' };
+static const symbol s_7_11[3] = { 'y', 0xC3, 0xB3 };
 
-static struct among a_7[12] =
+static const struct among a_7[12] =
 {
 /*  0 */ { 2, s_7_0, -1, 1, 0},
 /*  1 */ { 2, s_7_1, -1, 1, 0},
@@ -253,104 +267,104 @@ static struct among a_7[12] =
 /* 11 */ { 3, s_7_11, -1, 1, 0}
 };
 
-static symbol s_8_0[3] = { 'a', 'b', 'a' };
-static symbol s_8_1[3] = { 'a', 'd', 'a' };
-static symbol s_8_2[3] = { 'i', 'd', 'a' };
-static symbol s_8_3[3] = { 'a', 'r', 'a' };
-static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' };
-static symbol s_8_5[3] = { 0xC3, 0xAD, 'a' };
-static symbol s_8_6[5] = { 'a', 'r', 0xC3, 0xAD, 'a' };
-static symbol s_8_7[5] = { 'e', 'r', 0xC3, 0xAD, 'a' };
-static symbol s_8_8[5] = { 'i', 'r', 0xC3, 0xAD, 'a' };
-static symbol s_8_9[2] = { 'a', 'd' };
-static symbol s_8_10[2] = { 'e', 'd' };
-static symbol s_8_11[2] = { 'i', 'd' };
-static symbol s_8_12[3] = { 'a', 's', 'e' };
-static symbol s_8_13[4] = { 'i', 'e', 's', 'e' };
-static symbol s_8_14[4] = { 'a', 's', 't', 'e' };
-static symbol s_8_15[4] = { 'i', 's', 't', 'e' };
-static symbol s_8_16[2] = { 'a', 'n' };
-static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' };
-static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' };
-static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' };
-static symbol s_8_20[4] = { 0xC3, 0xAD, 'a', 'n' };
-static symbol s_8_21[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 'n' };
-static symbol s_8_22[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 'n' };
-static symbol s_8_23[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 'n' };
-static symbol s_8_24[2] = { 'e', 'n' };
-static symbol s_8_25[4] = { 'a', 's', 'e', 'n' };
-static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' };
-static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' };
-static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' };
-static symbol s_8_29[5] = { 'a', 'r', 0xC3, 0xA1, 'n' };
-static symbol s_8_30[5] = { 'e', 'r', 0xC3, 0xA1, 'n' };
-static symbol s_8_31[5] = { 'i', 'r', 0xC3, 0xA1, 'n' };
-static symbol s_8_32[3] = { 'a', 'd', 'o' };
-static symbol s_8_33[3] = { 'i', 'd', 'o' };
-static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' };
-static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' };
-static symbol s_8_36[2] = { 'a', 'r' };
-static symbol s_8_37[2] = { 'e', 'r' };
-static symbol s_8_38[2] = { 'i', 'r' };
-static symbol s_8_39[2] = { 'a', 's' };
-static symbol s_8_40[4] = { 'a', 'b', 'a', 's' };
-static symbol s_8_41[4] = { 'a', 'd', 'a', 's' };
-static symbol s_8_42[4] = { 'i', 'd', 'a', 's' };
-static symbol s_8_43[4] = { 'a', 'r', 'a', 's' };
-static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' };
-static symbol s_8_45[4] = { 0xC3, 0xAD, 'a', 's' };
-static symbol s_8_46[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 's' };
-static symbol s_8_47[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 's' };
-static symbol s_8_48[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 's' };
-static symbol s_8_49[2] = { 'e', 's' };
-static symbol s_8_50[4] = { 'a', 's', 'e', 's' };
-static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' };
-static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' };
-static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' };
-static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' };
-static symbol s_8_55[5] = { 0xC3, 0xAD, 'a', 'i', 's' };
-static symbol s_8_56[7] = { 'a', 'r', 0xC3, 0xAD, 'a', 'i', 's' };
-static symbol s_8_57[7] = { 'e', 'r', 0xC3, 0xAD, 'a', 'i', 's' };
-static symbol s_8_58[7] = { 'i', 'r', 0xC3, 0xAD, 'a', 'i', 's' };
-static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' };
-static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' };
-static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' };
-static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' };
-static symbol s_8_63[4] = { 0xC3, 0xA1, 'i', 's' };
-static symbol s_8_64[4] = { 0xC3, 0xA9, 'i', 's' };
-static symbol s_8_65[6] = { 'a', 'r', 0xC3, 0xA9, 'i', 's' };
-static symbol s_8_66[6] = { 'e', 'r', 0xC3, 0xA9, 'i', 's' };
-static symbol s_8_67[6] = { 'i', 'r', 0xC3, 0xA9, 'i', 's' };
-static symbol s_8_68[4] = { 'a', 'd', 'o', 's' };
-static symbol s_8_69[4] = { 'i', 'd', 'o', 's' };
-static symbol s_8_70[4] = { 'a', 'm', 'o', 's' };
-static symbol s_8_71[7] = { 0xC3, 0xA1, 'b', 'a', 'm', 'o', 's' };
-static symbol s_8_72[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' };
-static symbol s_8_73[8] = { 'i', 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' };
-static symbol s_8_74[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_8_75[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_8_76[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_8_77[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
-static symbol s_8_78[4] = { 'e', 'm', 'o', 's' };
-static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
-static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
-static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
-static symbol s_8_82[7] = { 0xC3, 0xA1, 's', 'e', 'm', 'o', 's' };
-static symbol s_8_83[8] = { 'i', 0xC3, 0xA9, 's', 'e', 'm', 'o', 's' };
-static symbol s_8_84[4] = { 'i', 'm', 'o', 's' };
-static symbol s_8_85[5] = { 'a', 'r', 0xC3, 0xA1, 's' };
-static symbol s_8_86[5] = { 'e', 'r', 0xC3, 0xA1, 's' };
-static symbol s_8_87[5] = { 'i', 'r', 0xC3, 0xA1, 's' };
-static symbol s_8_88[3] = { 0xC3, 0xAD, 's' };
-static symbol s_8_89[4] = { 'a', 'r', 0xC3, 0xA1 };
-static symbol s_8_90[4] = { 'e', 'r', 0xC3, 0xA1 };
-static symbol s_8_91[4] = { 'i', 'r', 0xC3, 0xA1 };
-static symbol s_8_92[4] = { 'a', 'r', 0xC3, 0xA9 };
-static symbol s_8_93[4] = { 'e', 'r', 0xC3, 0xA9 };
-static symbol s_8_94[4] = { 'i', 'r', 0xC3, 0xA9 };
-static symbol s_8_95[3] = { 'i', 0xC3, 0xB3 };
+static const symbol s_8_0[3] = { 'a', 'b', 'a' };
+static const symbol s_8_1[3] = { 'a', 'd', 'a' };
+static const symbol s_8_2[3] = { 'i', 'd', 'a' };
+static const symbol s_8_3[3] = { 'a', 'r', 'a' };
+static const symbol s_8_4[4] = { 'i', 'e', 'r', 'a' };
+static const symbol s_8_5[3] = { 0xC3, 0xAD, 'a' };
+static const symbol s_8_6[5] = { 'a', 'r', 0xC3, 0xAD, 'a' };
+static const symbol s_8_7[5] = { 'e', 'r', 0xC3, 0xAD, 'a' };
+static const symbol s_8_8[5] = { 'i', 'r', 0xC3, 0xAD, 'a' };
+static const symbol s_8_9[2] = { 'a', 'd' };
+static const symbol s_8_10[2] = { 'e', 'd' };
+static const symbol s_8_11[2] = { 'i', 'd' };
+static const symbol s_8_12[3] = { 'a', 's', 'e' };
+static const symbol s_8_13[4] = { 'i', 'e', 's', 'e' };
+static const symbol s_8_14[4] = { 'a', 's', 't', 'e' };
+static const symbol s_8_15[4] = { 'i', 's', 't', 'e' };
+static const symbol s_8_16[2] = { 'a', 'n' };
+static const symbol s_8_17[4] = { 'a', 'b', 'a', 'n' };
+static const symbol s_8_18[4] = { 'a', 'r', 'a', 'n' };
+static const symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' };
+static const symbol s_8_20[4] = { 0xC3, 0xAD, 'a', 'n' };
+static const symbol s_8_21[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 'n' };
+static const symbol s_8_22[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 'n' };
+static const symbol s_8_23[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 'n' };
+static const symbol s_8_24[2] = { 'e', 'n' };
+static const symbol s_8_25[4] = { 'a', 's', 'e', 'n' };
+static const symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' };
+static const symbol s_8_27[4] = { 'a', 'r', 'o', 'n' };
+static const symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' };
+static const symbol s_8_29[5] = { 'a', 'r', 0xC3, 0xA1, 'n' };
+static const symbol s_8_30[5] = { 'e', 'r', 0xC3, 0xA1, 'n' };
+static const symbol s_8_31[5] = { 'i', 'r', 0xC3, 0xA1, 'n' };
+static const symbol s_8_32[3] = { 'a', 'd', 'o' };
+static const symbol s_8_33[3] = { 'i', 'd', 'o' };
+static const symbol s_8_34[4] = { 'a', 'n', 'd', 'o' };
+static const symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' };
+static const symbol s_8_36[2] = { 'a', 'r' };
+static const symbol s_8_37[2] = { 'e', 'r' };
+static const symbol s_8_38[2] = { 'i', 'r' };
+static const symbol s_8_39[2] = { 'a', 's' };
+static const symbol s_8_40[4] = { 'a', 'b', 'a', 's' };
+static const symbol s_8_41[4] = { 'a', 'd', 'a', 's' };
+static const symbol s_8_42[4] = { 'i', 'd', 'a', 's' };
+static const symbol s_8_43[4] = { 'a', 'r', 'a', 's' };
+static const symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' };
+static const symbol s_8_45[4] = { 0xC3, 0xAD, 'a', 's' };
+static const symbol s_8_46[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 's' };
+static const symbol s_8_47[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 's' };
+static const symbol s_8_48[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 's' };
+static const symbol s_8_49[2] = { 'e', 's' };
+static const symbol s_8_50[4] = { 'a', 's', 'e', 's' };
+static const symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' };
+static const symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' };
+static const symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' };
+static const symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' };
+static const symbol s_8_55[5] = { 0xC3, 0xAD, 'a', 'i', 's' };
+static const symbol s_8_56[7] = { 'a', 'r', 0xC3, 0xAD, 'a', 'i', 's' };
+static const symbol s_8_57[7] = { 'e', 'r', 0xC3, 0xAD, 'a', 'i', 's' };
+static const symbol s_8_58[7] = { 'i', 'r', 0xC3, 0xAD, 'a', 'i', 's' };
+static const symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' };
+static const symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' };
+static const symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' };
+static const symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' };
+static const symbol s_8_63[4] = { 0xC3, 0xA1, 'i', 's' };
+static const symbol s_8_64[4] = { 0xC3, 0xA9, 'i', 's' };
+static const symbol s_8_65[6] = { 'a', 'r', 0xC3, 0xA9, 'i', 's' };
+static const symbol s_8_66[6] = { 'e', 'r', 0xC3, 0xA9, 'i', 's' };
+static const symbol s_8_67[6] = { 'i', 'r', 0xC3, 0xA9, 'i', 's' };
+static const symbol s_8_68[4] = { 'a', 'd', 'o', 's' };
+static const symbol s_8_69[4] = { 'i', 'd', 'o', 's' };
+static const symbol s_8_70[4] = { 'a', 'm', 'o', 's' };
+static const symbol s_8_71[7] = { 0xC3, 0xA1, 'b', 'a', 'm', 'o', 's' };
+static const symbol s_8_72[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_8_73[8] = { 'i', 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' };
+static const symbol s_8_74[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_8_75[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_8_76[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_8_77[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' };
+static const symbol s_8_78[4] = { 'e', 'm', 'o', 's' };
+static const symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' };
+static const symbol s_8_82[7] = { 0xC3, 0xA1, 's', 'e', 'm', 'o', 's' };
+static const symbol s_8_83[8] = { 'i', 0xC3, 0xA9, 's', 'e', 'm', 'o', 's' };
+static const symbol s_8_84[4] = { 'i', 'm', 'o', 's' };
+static const symbol s_8_85[5] = { 'a', 'r', 0xC3, 0xA1, 's' };
+static const symbol s_8_86[5] = { 'e', 'r', 0xC3, 0xA1, 's' };
+static const symbol s_8_87[5] = { 'i', 'r', 0xC3, 0xA1, 's' };
+static const symbol s_8_88[3] = { 0xC3, 0xAD, 's' };
+static const symbol s_8_89[4] = { 'a', 'r', 0xC3, 0xA1 };
+static const symbol s_8_90[4] = { 'e', 'r', 0xC3, 0xA1 };
+static const symbol s_8_91[4] = { 'i', 'r', 0xC3, 0xA1 };
+static const symbol s_8_92[4] = { 'a', 'r', 0xC3, 0xA9 };
+static const symbol s_8_93[4] = { 'e', 'r', 0xC3, 0xA9 };
+static const symbol s_8_94[4] = { 'i', 'r', 0xC3, 0xA9 };
+static const symbol s_8_95[3] = { 'i', 0xC3, 0xB3 };
 
-static struct among a_8[96] =
+static const struct among a_8[96] =
 {
 /*  0 */ { 3, s_8_0, -1, 2, 0},
 /*  1 */ { 3, s_8_1, -1, 2, 0},
@@ -450,16 +464,16 @@ static struct among a_8[96] =
 /* 95 */ { 3, s_8_95, -1, 2, 0}
 };
 
-static symbol s_9_0[1] = { 'a' };
-static symbol s_9_1[1] = { 'e' };
-static symbol s_9_2[1] = { 'o' };
-static symbol s_9_3[2] = { 'o', 's' };
-static symbol s_9_4[2] = { 0xC3, 0xA1 };
-static symbol s_9_5[2] = { 0xC3, 0xA9 };
-static symbol s_9_6[2] = { 0xC3, 0xAD };
-static symbol s_9_7[2] = { 0xC3, 0xB3 };
+static const symbol s_9_0[1] = { 'a' };
+static const symbol s_9_1[1] = { 'e' };
+static const symbol s_9_2[1] = { 'o' };
+static const symbol s_9_3[2] = { 'o', 's' };
+static const symbol s_9_4[2] = { 0xC3, 0xA1 };
+static const symbol s_9_5[2] = { 0xC3, 0xA9 };
+static const symbol s_9_6[2] = { 0xC3, 0xAD };
+static const symbol s_9_7[2] = { 0xC3, 0xB3 };
 
-static struct among a_9[8] =
+static const struct among a_9[8] =
 {
 /*  0 */ { 1, s_9_0, -1, 1, 0},
 /*  1 */ { 1, s_9_1, -1, 2, 0},
@@ -471,137 +485,109 @@ static struct among a_9[8] =
 /*  7 */ { 2, s_9_7, -1, 1, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 };
+static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 };
 
-static symbol s_0[] = { 'a' };
-static symbol s_1[] = { 'e' };
-static symbol s_2[] = { 'i' };
-static symbol s_3[] = { 'o' };
-static symbol s_4[] = { 'u' };
-static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' };
-static symbol s_6[] = { 'a', 'n', 'd', 'o' };
-static symbol s_7[] = { 'a', 'r' };
-static symbol s_8[] = { 'e', 'r' };
-static symbol s_9[] = { 'i', 'r' };
-static symbol s_10[] = { 'u' };
-static symbol s_11[] = { 'i', 'c' };
-static symbol s_12[] = { 'l', 'o', 'g' };
-static symbol s_13[] = { 'u' };
-static symbol s_14[] = { 'e', 'n', 't', 'e' };
-static symbol s_15[] = { 'a', 't' };
-static symbol s_16[] = { 'a', 't' };
-static symbol s_17[] = { 'u' };
-static symbol s_18[] = { 'u' };
-static symbol s_19[] = { 'g' };
-static symbol s_20[] = { 'u' };
-static symbol s_21[] = { 'g' };
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 'i' };
+static const symbol s_3[] = { 'o' };
+static const symbol s_4[] = { 'u' };
+static const symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' };
+static const symbol s_6[] = { 'a', 'n', 'd', 'o' };
+static const symbol s_7[] = { 'a', 'r' };
+static const symbol s_8[] = { 'e', 'r' };
+static const symbol s_9[] = { 'i', 'r' };
+static const symbol s_10[] = { 'u' };
+static const symbol s_11[] = { 'i', 'c' };
+static const symbol s_12[] = { 'l', 'o', 'g' };
+static const symbol s_13[] = { 'u' };
+static const symbol s_14[] = { 'e', 'n', 't', 'e' };
+static const symbol s_15[] = { 'a', 't' };
+static const symbol s_16[] = { 'a', 't' };
+static const symbol s_17[] = { 'u' };
+static const symbol s_18[] = { 'u' };
+static const symbol s_19[] = { 'g' };
+static const symbol s_20[] = { 'u' };
+static const symbol s_21[] = { 'g' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     z->I[1] = z->l;
     z->I[2] = z->l;
-    {   int c = z->c; /* do, line 37 */
-        {   int c = z->c; /* or, line 39 */
-            if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2;
-            {   int c = z->c; /* or, line 38 */
-                if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4;
-                while(1) { /* gopast, line 38 */
-                    if (!(in_grouping_U(z, g_v, 97, 252))) goto lab5;
-                    break;
-                lab5:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab4;
-                        z->c = c; /* gopast, line 38 */
-                    }
+    {   int c1 = z->c; /* do, line 37 */
+        {   int c2 = z->c; /* or, line 39 */
+            if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab2;
+            {   int c3 = z->c; /* or, line 38 */
+                if (out_grouping_U(z, g_v, 97, 252, 0)) goto lab4;
+                {    /* gopast */ /* grouping v, line 38 */
+                    int ret = out_grouping_U(z, g_v, 97, 252, 1);
+                    if (ret < 0) goto lab4;
+                    z->c += ret;
                 }
                 goto lab3;
             lab4:
-                z->c = c;
-                if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2;
-                while(1) { /* gopast, line 38 */
-                    if (!(out_grouping_U(z, g_v, 97, 252))) goto lab6;
-                    break;
-                lab6:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab2;
-                        z->c = c; /* gopast, line 38 */
-                    }
+                z->c = c3;
+                if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab2;
+                {    /* gopast */ /* non v, line 38 */
+                    int ret = in_grouping_U(z, g_v, 97, 252, 1);
+                    if (ret < 0) goto lab2;
+                    z->c += ret;
                 }
             }
         lab3:
             goto lab1;
         lab2:
-            z->c = c;
-            if (!(out_grouping_U(z, g_v, 97, 252))) goto lab0;
-            {   int c = z->c; /* or, line 40 */
-                if (!(out_grouping_U(z, g_v, 97, 252))) goto lab8;
-                while(1) { /* gopast, line 40 */
-                    if (!(in_grouping_U(z, g_v, 97, 252))) goto lab9;
-                    break;
-                lab9:
-                    {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                        if (c < 0) goto lab8;
-                        z->c = c; /* gopast, line 40 */
-                    }
+            z->c = c2;
+            if (out_grouping_U(z, g_v, 97, 252, 0)) goto lab0;
+            {   int c4 = z->c; /* or, line 40 */
+                if (out_grouping_U(z, g_v, 97, 252, 0)) goto lab6;
+                {    /* gopast */ /* grouping v, line 40 */
+                    int ret = out_grouping_U(z, g_v, 97, 252, 1);
+                    if (ret < 0) goto lab6;
+                    z->c += ret;
                 }
-                goto lab7;
-            lab8:
-                z->c = c;
-                if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0;
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 40 */
+                goto lab5;
+            lab6:
+                z->c = c4;
+                if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab0;
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 40 */
                 }
             }
-        lab7:
+        lab5:
             ;
         }
     lab1:
         z->I[0] = z->c; /* setmark pV, line 41 */
     lab0:
-        z->c = c;
+        z->c = c1;
     }
-    {   int c = z->c; /* do, line 43 */
-        while(1) { /* gopast, line 44 */
-            if (!(in_grouping_U(z, g_v, 97, 252))) goto lab11;
-            break;
-        lab11:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 44 */
-            }
+    {   int c5 = z->c; /* do, line 43 */
+        {    /* gopast */ /* grouping v, line 44 */
+            int ret = out_grouping_U(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 44 */
-            if (!(out_grouping_U(z, g_v, 97, 252))) goto lab12;
-            break;
-        lab12:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 44 */
-            }
+        {    /* gopast */ /* non v, line 44 */
+            int ret = in_grouping_U(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[1] = z->c; /* setmark p1, line 44 */
-        while(1) { /* gopast, line 45 */
-            if (!(in_grouping_U(z, g_v, 97, 252))) goto lab13;
-            break;
-        lab13:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 45 */
-            }
+        {    /* gopast */ /* grouping v, line 45 */
+            int ret = out_grouping_U(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
-        while(1) { /* gopast, line 45 */
-            if (!(out_grouping_U(z, g_v, 97, 252))) goto lab14;
-            break;
-        lab14:
-            {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                if (c < 0) goto lab10;
-                z->c = c; /* gopast, line 45 */
-            }
+        {    /* gopast */ /* non v, line 45 */
+            int ret = in_grouping_U(z, g_v, 97, 252, 1);
+            if (ret < 0) goto lab7;
+            z->c += ret;
         }
         z->I[2] = z->c; /* setmark p2, line 45 */
-    lab10:
-        z->c = c;
+    lab7:
+        z->c = c5;
     }
     return 1;
 }
@@ -609,53 +595,49 @@ static int r_mark_regions(struct SN_env * z) {
 static int r_postlude(struct SN_env * z) {
     int among_var;
     while(1) { /* repeat, line 49 */
-        int c = z->c;
+        int c1 = z->c;
         z->bra = z->c; /* [, line 50 */
+        if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((67641858 >> (z->p[z->c + 1] & 0x1f)) & 1)) among_var = 6; else
         among_var = find_among(z, a_0, 6); /* substring, line 50 */
         if (!(among_var)) goto lab0;
         z->ket = z->c; /* ], line 50 */
         switch(among_var) {
             case 0: goto lab0;
             case 1:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_0); /* <-, line 51 */
+                {   int ret = slice_from_s(z, 1, s_0); /* <-, line 51 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_1); /* <-, line 52 */
+                {   int ret = slice_from_s(z, 1, s_1); /* <-, line 52 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_2); /* <-, line 53 */
+                {   int ret = slice_from_s(z, 1, s_2); /* <-, line 53 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 4:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_3); /* <-, line 54 */
+                {   int ret = slice_from_s(z, 1, s_3); /* <-, line 54 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 5:
-                {   int ret;
-                    ret = slice_from_s(z, 1, s_4); /* <-, line 55 */
+                {   int ret = slice_from_s(z, 1, s_4); /* <-, line 55 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 6:
-                {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-                    if (c < 0) goto lab0;
-                    z->c = c; /* next, line 57 */
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab0;
+                    z->c = ret; /* next, line 57 */
                 }
                 break;
         }
         continue;
     lab0:
-        z->c = c;
+        z->c = c1;
         break;
     }
     return 1;
@@ -679,8 +661,10 @@ static int r_R2(struct SN_env * z) {
 static int r_attached_pronoun(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 68 */
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((557090 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */
     z->bra = z->c; /* ], line 68 */
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0;
     among_var = find_among_b(z, a_2, 11); /* substring, line 72 */
     if (!(among_var)) return 0;
     {   int ret = r_RV(z);
@@ -691,49 +675,42 @@ static int r_attached_pronoun(struct SN_env * z) {
         case 0: return 0;
         case 1:
             z->bra = z->c; /* ], line 73 */
-            {   int ret;
-                ret = slice_from_s(z, 5, s_5); /* <-, line 73 */
+            {   int ret = slice_from_s(z, 5, s_5); /* <-, line 73 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
             z->bra = z->c; /* ], line 74 */
-            {   int ret;
-                ret = slice_from_s(z, 4, s_6); /* <-, line 74 */
+            {   int ret = slice_from_s(z, 4, s_6); /* <-, line 74 */
                 if (ret < 0) return ret;
             }
             break;
         case 3:
             z->bra = z->c; /* ], line 75 */
-            {   int ret;
-                ret = slice_from_s(z, 2, s_7); /* <-, line 75 */
+            {   int ret = slice_from_s(z, 2, s_7); /* <-, line 75 */
                 if (ret < 0) return ret;
             }
             break;
         case 4:
             z->bra = z->c; /* ], line 76 */
-            {   int ret;
-                ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
+            {   int ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
                 if (ret < 0) return ret;
             }
             break;
         case 5:
             z->bra = z->c; /* ], line 77 */
-            {   int ret;
-                ret = slice_from_s(z, 2, s_9); /* <-, line 77 */
+            {   int ret = slice_from_s(z, 2, s_9); /* <-, line 77 */
                 if (ret < 0) return ret;
             }
             break;
         case 6:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 81 */
+            {   int ret = slice_del(z); /* delete, line 81 */
                 if (ret < 0) return ret;
             }
             break;
         case 7:
             if (!(eq_s_b(z, 1, s_10))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 82 */
+            {   int ret = slice_del(z); /* delete, line 82 */
                 if (ret < 0) return ret;
             }
             break;
@@ -744,6 +721,7 @@ static int r_attached_pronoun(struct SN_env * z) {
 static int r_standard_suffix(struct SN_env * z) {
     int among_var;
     z->ket = z->c; /* [, line 87 */
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((835634 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
     among_var = find_among_b(z, a_6, 46); /* substring, line 87 */
     if (!(among_var)) return 0;
     z->bra = z->c; /* ], line 87 */
@@ -754,8 +732,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 99 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 99 */
+            {   int ret = slice_del(z); /* delete, line 99 */
                 if (ret < 0) return ret;
             }
             break;
@@ -764,20 +741,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 105 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 105 */
+            {   int ret = slice_del(z); /* delete, line 105 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 106 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 106 */
                 z->ket = z->c; /* [, line 106 */
-                if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; }
+                if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 106 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call R2, line 106 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 106 */
+                {   int ret = slice_del(z); /* delete, line 106 */
                     if (ret < 0) return ret;
                 }
             lab0:
@@ -789,8 +764,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 111 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 3, s_12); /* <-, line 111 */
+            {   int ret = slice_from_s(z, 3, s_12); /* <-, line 111 */
                 if (ret < 0) return ret;
             }
             break;
@@ -799,8 +773,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 115 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 1, s_13); /* <-, line 115 */
+            {   int ret = slice_from_s(z, 1, s_13); /* <-, line 115 */
                 if (ret < 0) return ret;
             }
             break;
@@ -809,8 +782,7 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 119 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_from_s(z, 4, s_14); /* <-, line 119 */
+            {   int ret = slice_from_s(z, 4, s_14); /* <-, line 119 */
                 if (ret < 0) return ret;
             }
             break;
@@ -819,35 +791,33 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R1, line 123 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 123 */
+            {   int ret = slice_del(z); /* delete, line 123 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 124 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 124 */
                 z->ket = z->c; /* [, line 125 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab1; }
                 among_var = find_among_b(z, a_3, 4); /* substring, line 125 */
-                if (!(among_var)) { z->c = z->l - m; goto lab1; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab1; }
                 z->bra = z->c; /* ], line 125 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 125 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 125 */
+                {   int ret = slice_del(z); /* delete, line 125 */
                     if (ret < 0) return ret;
                 }
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab1; }
+                    case 0: { z->c = z->l - m_keep; goto lab1; }
                     case 1:
                         z->ket = z->c; /* [, line 126 */
-                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; }
+                        if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m_keep; goto lab1; }
                         z->bra = z->c; /* ], line 126 */
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab1; } /* call R2, line 126 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 126 */
+                        {   int ret = slice_del(z); /* delete, line 126 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -861,24 +831,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 135 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 135 */
+            {   int ret = slice_del(z); /* delete, line 135 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 136 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 136 */
                 z->ket = z->c; /* [, line 137 */
+                if (z->c - 3 <= z->lb || z->p[z->c - 1] != 101) { z->c = z->l - m_keep; goto lab2; }
                 among_var = find_among_b(z, a_4, 3); /* substring, line 137 */
-                if (!(among_var)) { z->c = z->l - m; goto lab2; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab2; }
                 z->bra = z->c; /* ], line 137 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab2; }
+                    case 0: { z->c = z->l - m_keep; goto lab2; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call R2, line 140 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 140 */
+                        {   int ret = slice_del(z); /* delete, line 140 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -892,24 +861,23 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 147 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 147 */
+            {   int ret = slice_del(z); /* delete, line 147 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 148 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 148 */
                 z->ket = z->c; /* [, line 149 */
+                if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m_keep; goto lab3; }
                 among_var = find_among_b(z, a_5, 3); /* substring, line 149 */
-                if (!(among_var)) { z->c = z->l - m; goto lab3; }
+                if (!(among_var)) { z->c = z->l - m_keep; goto lab3; }
                 z->bra = z->c; /* ], line 149 */
                 switch(among_var) {
-                    case 0: { z->c = z->l - m; goto lab3; }
+                    case 0: { z->c = z->l - m_keep; goto lab3; }
                     case 1:
                         {   int ret = r_R2(z);
-                            if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */
+                            if (ret == 0) { z->c = z->l - m_keep; goto lab3; } /* call R2, line 152 */
                             if (ret < 0) return ret;
                         }
-                        {   int ret;
-                            ret = slice_del(z); /* delete, line 152 */
+                        {   int ret = slice_del(z); /* delete, line 152 */
                             if (ret < 0) return ret;
                         }
                         break;
@@ -923,20 +891,18 @@ static int r_standard_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call R2, line 159 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 159 */
+            {   int ret = slice_del(z); /* delete, line 159 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 160 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 160 */
                 z->ket = z->c; /* [, line 161 */
-                if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; }
+                if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m_keep; goto lab4; }
                 z->bra = z->c; /* ], line 161 */
                 {   int ret = r_R2(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab4; } /* call R2, line 161 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 161 */
+                {   int ret = slice_del(z); /* delete, line 161 */
                     if (ret < 0) return ret;
                 }
             lab4:
@@ -949,24 +915,23 @@ static int r_standard_suffix(struct SN_env * z) {
 
 static int r_y_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 168 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 168 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 168 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 168 */
         among_var = find_among_b(z, a_7, 12); /* substring, line 168 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 168 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
             if (!(eq_s_b(z, 1, s_17))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 171 */
+            {   int ret = slice_del(z); /* delete, line 171 */
                 if (ret < 0) return ret;
             }
             break;
@@ -976,39 +941,37 @@ static int r_y_verb_suffix(struct SN_env * z) {
 
 static int r_verb_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 176 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 176 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 176 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 176 */
         among_var = find_among_b(z, a_8, 96); /* substring, line 176 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 176 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int m = z->l - z->c; (void) m; /* try, line 179 */
-                if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; }
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 179 */
+                if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m_keep; goto lab0; }
                 {   int m_test = z->l - z->c; /* test, line 179 */
-                    if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; }
+                    if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m_keep; goto lab0; }
                     z->c = z->l - m_test;
                 }
             lab0:
                 ;
             }
             z->bra = z->c; /* ], line 179 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 179 */
+            {   int ret = slice_del(z); /* delete, line 179 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 200 */
+            {   int ret = slice_del(z); /* delete, line 200 */
                 if (ret < 0) return ret;
             }
             break;
@@ -1029,8 +992,7 @@ static int r_residual_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 208 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 208 */
+            {   int ret = slice_del(z); /* delete, line 208 */
                 if (ret < 0) return ret;
             }
             break;
@@ -1039,24 +1001,22 @@ static int r_residual_suffix(struct SN_env * z) {
                 if (ret == 0) return 0; /* call RV, line 210 */
                 if (ret < 0) return ret;
             }
-            {   int ret;
-                ret = slice_del(z); /* delete, line 210 */
+            {   int ret = slice_del(z); /* delete, line 210 */
                 if (ret < 0) return ret;
             }
-            {   int m = z->l - z->c; (void) m; /* try, line 210 */
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 210 */
                 z->ket = z->c; /* [, line 210 */
-                if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; }
+                if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m_keep; goto lab0; }
                 z->bra = z->c; /* ], line 210 */
                 {   int m_test = z->l - z->c; /* test, line 210 */
-                    if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; }
+                    if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m_keep; goto lab0; }
                     z->c = z->l - m_test;
                 }
                 {   int ret = r_RV(z);
-                    if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab0; } /* call RV, line 210 */
                     if (ret < 0) return ret;
                 }
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 210 */
+                {   int ret = slice_del(z); /* delete, line 210 */
                     if (ret < 0) return ret;
                 }
             lab0:
@@ -1068,40 +1028,40 @@ static int r_residual_suffix(struct SN_env * z) {
 }
 
 extern int spanish_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 216 */
+    {   int c1 = z->c; /* do, line 216 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 216 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 217 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 218 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 218 */
         {   int ret = r_attached_pronoun(z);
             if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 219 */
-        {   int m = z->l - z->c; (void) m; /* or, line 219 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 219 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 219 */
             {   int ret = r_standard_suffix(z);
                 if (ret == 0) goto lab4; /* call standard_suffix, line 219 */
                 if (ret < 0) return ret;
             }
             goto lab3;
         lab4:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_y_verb_suffix(z);
                 if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */
                 if (ret < 0) return ret;
             }
             goto lab3;
         lab5:
-            z->c = z->l - m;
+            z->c = z->l - m4;
             {   int ret = r_verb_suffix(z);
                 if (ret == 0) goto lab2; /* call verb_suffix, line 221 */
                 if (ret < 0) return ret;
@@ -1109,29 +1069,29 @@ extern int spanish_UTF_8_stem(struct SN_env * z) {
         }
     lab3:
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 223 */
+    {   int m5 = z->l - z->c; (void)m5; /* do, line 223 */
         {   int ret = r_residual_suffix(z);
             if (ret == 0) goto lab6; /* call residual_suffix, line 223 */
             if (ret < 0) return ret;
         }
     lab6:
-        z->c = z->l - m;
+        z->c = z->l - m5;
     }
     z->c = z->lb;
-    {   int c = z->c; /* do, line 225 */
+    {   int c6 = z->c; /* do, line 225 */
         {   int ret = r_postlude(z);
             if (ret == 0) goto lab7; /* call postlude, line 225 */
             if (ret < 0) return ret;
         }
     lab7:
-        z->c = c;
+        z->c = c6;
     }
     return 1;
 }
 
 extern struct SN_env * spanish_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); }
 
-extern void spanish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void spanish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_swedish.c b/libstemmer_c/src_c/stem_UTF_8_swedish.c
index af75551..21a2353 100644
--- a/libstemmer_c/src_c/stem_UTF_8_swedish.c
+++ b/libstemmer_c/src_c/stem_UTF_8_swedish.c
@@ -3,54 +3,68 @@
 
 #include "../runtime/header.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 extern int swedish_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
 static int r_other_suffix(struct SN_env * z);
 static int r_consonant_pair(struct SN_env * z);
 static int r_main_suffix(struct SN_env * z);
 static int r_mark_regions(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 
 extern struct SN_env * swedish_UTF_8_create_env(void);
 extern void swedish_UTF_8_close_env(struct SN_env * z);
 
-static symbol s_0_0[1] = { 'a' };
-static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' };
-static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' };
-static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' };
-static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' };
-static symbol s_0_5[2] = { 'a', 'd' };
-static symbol s_0_6[1] = { 'e' };
-static symbol s_0_7[3] = { 'a', 'd', 'e' };
-static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' };
-static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' };
-static symbol s_0_10[3] = { 'a', 'r', 'e' };
-static symbol s_0_11[4] = { 'a', 's', 't', 'e' };
-static symbol s_0_12[2] = { 'e', 'n' };
-static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' };
-static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' };
-static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' };
-static symbol s_0_16[3] = { 'e', 'r', 'n' };
-static symbol s_0_17[2] = { 'a', 'r' };
-static symbol s_0_18[2] = { 'e', 'r' };
-static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' };
-static symbol s_0_20[2] = { 'o', 'r' };
-static symbol s_0_21[1] = { 's' };
-static symbol s_0_22[2] = { 'a', 's' };
-static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' };
-static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' };
-static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' };
-static symbol s_0_26[2] = { 'e', 's' };
-static symbol s_0_27[4] = { 'a', 'd', 'e', 's' };
-static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' };
-static symbol s_0_29[3] = { 'e', 'n', 's' };
-static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' };
-static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' };
-static symbol s_0_32[4] = { 'e', 'r', 'n', 's' };
-static symbol s_0_33[2] = { 'a', 't' };
-static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' };
-static symbol s_0_35[3] = { 'h', 'e', 't' };
-static symbol s_0_36[3] = { 'a', 's', 't' };
 
-static struct among a_0[37] =
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 'a' };
+static const symbol s_0_1[4] = { 'a', 'r', 'n', 'a' };
+static const symbol s_0_2[4] = { 'e', 'r', 'n', 'a' };
+static const symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' };
+static const symbol s_0_4[4] = { 'o', 'r', 'n', 'a' };
+static const symbol s_0_5[2] = { 'a', 'd' };
+static const symbol s_0_6[1] = { 'e' };
+static const symbol s_0_7[3] = { 'a', 'd', 'e' };
+static const symbol s_0_8[4] = { 'a', 'n', 'd', 'e' };
+static const symbol s_0_9[4] = { 'a', 'r', 'n', 'e' };
+static const symbol s_0_10[3] = { 'a', 'r', 'e' };
+static const symbol s_0_11[4] = { 'a', 's', 't', 'e' };
+static const symbol s_0_12[2] = { 'e', 'n' };
+static const symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' };
+static const symbol s_0_14[4] = { 'a', 'r', 'e', 'n' };
+static const symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' };
+static const symbol s_0_16[3] = { 'e', 'r', 'n' };
+static const symbol s_0_17[2] = { 'a', 'r' };
+static const symbol s_0_18[2] = { 'e', 'r' };
+static const symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' };
+static const symbol s_0_20[2] = { 'o', 'r' };
+static const symbol s_0_21[1] = { 's' };
+static const symbol s_0_22[2] = { 'a', 's' };
+static const symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' };
+static const symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' };
+static const symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' };
+static const symbol s_0_26[2] = { 'e', 's' };
+static const symbol s_0_27[4] = { 'a', 'd', 'e', 's' };
+static const symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' };
+static const symbol s_0_29[3] = { 'e', 'n', 's' };
+static const symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' };
+static const symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' };
+static const symbol s_0_32[4] = { 'e', 'r', 'n', 's' };
+static const symbol s_0_33[2] = { 'a', 't' };
+static const symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' };
+static const symbol s_0_35[3] = { 'h', 'e', 't' };
+static const symbol s_0_36[3] = { 'a', 's', 't' };
+
+static const struct among a_0[37] =
 {
 /*  0 */ { 1, s_0_0, -1, 1, 0},
 /*  1 */ { 4, s_0_1, 0, 1, 0},
@@ -91,15 +105,15 @@ static struct among a_0[37] =
 /* 36 */ { 3, s_0_36, -1, 1, 0}
 };
 
-static symbol s_1_0[2] = { 'd', 'd' };
-static symbol s_1_1[2] = { 'g', 'd' };
-static symbol s_1_2[2] = { 'n', 'n' };
-static symbol s_1_3[2] = { 'd', 't' };
-static symbol s_1_4[2] = { 'g', 't' };
-static symbol s_1_5[2] = { 'k', 't' };
-static symbol s_1_6[2] = { 't', 't' };
+static const symbol s_1_0[2] = { 'd', 'd' };
+static const symbol s_1_1[2] = { 'g', 'd' };
+static const symbol s_1_2[2] = { 'n', 'n' };
+static const symbol s_1_3[2] = { 'd', 't' };
+static const symbol s_1_4[2] = { 'g', 't' };
+static const symbol s_1_5[2] = { 'k', 't' };
+static const symbol s_1_6[2] = { 't', 't' };
 
-static struct among a_1[7] =
+static const struct among a_1[7] =
 {
 /*  0 */ { 2, s_1_0, -1, -1, 0},
 /*  1 */ { 2, s_1_1, -1, -1, 0},
@@ -110,13 +124,13 @@ static struct among a_1[7] =
 /*  6 */ { 2, s_1_6, -1, -1, 0}
 };
 
-static symbol s_2_0[2] = { 'i', 'g' };
-static symbol s_2_1[3] = { 'l', 'i', 'g' };
-static symbol s_2_2[3] = { 'e', 'l', 's' };
-static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' };
-static symbol s_2_4[5] = { 'l', 0xC3, 0xB6, 's', 't' };
+static const symbol s_2_0[2] = { 'i', 'g' };
+static const symbol s_2_1[3] = { 'l', 'i', 'g' };
+static const symbol s_2_2[3] = { 'e', 'l', 's' };
+static const symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' };
+static const symbol s_2_4[5] = { 'l', 0xC3, 0xB6, 's', 't' };
 
-static struct among a_2[5] =
+static const struct among a_2[5] =
 {
 /*  0 */ { 2, s_2_0, -1, 1, 0},
 /*  1 */ { 3, s_2_1, 0, 1, 0},
@@ -125,78 +139,62 @@ static struct among a_2[5] =
 /*  4 */ { 5, s_2_4, -1, 2, 0}
 };
 
-static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 };
+static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 };
 
-static unsigned char g_s_ending[] = { 119, 127, 149 };
+static const unsigned char g_s_ending[] = { 119, 127, 149 };
 
-static symbol s_0[] = { 'l', 0xC3, 0xB6, 's' };
-static symbol s_1[] = { 'f', 'u', 'l', 'l' };
+static const symbol s_0[] = { 'l', 0xC3, 0xB6, 's' };
+static const symbol s_1[] = { 'f', 'u', 'l', 'l' };
 
 static int r_mark_regions(struct SN_env * z) {
     z->I[0] = z->l;
     {   int c_test = z->c; /* test, line 29 */
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, + 3);
-            if (c < 0) return 0;
-            z->c = c; /* hop, line 29 */
+        {   int ret = skip_utf8(z->p, z->c, 0, z->l, + 3);
+            if (ret < 0) return 0;
+            z->c = ret; /* hop, line 29 */
         }
         z->I[1] = z->c; /* setmark x, line 29 */
         z->c = c_test;
     }
-    while(1) { /* goto, line 30 */
-        int c = z->c;
-        if (!(in_grouping_U(z, g_v, 97, 246))) goto lab0;
-        z->c = c;
-        break;
-    lab0:
-        z->c = c;
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* goto, line 30 */
-        }
-    }
-    while(1) { /* gopast, line 30 */
-        if (!(out_grouping_U(z, g_v, 97, 246))) goto lab1;
-        break;
-    lab1:
-        {   int c = skip_utf8(z->p, z->c, 0, z->l, 1);
-            if (c < 0) return 0;
-            z->c = c; /* gopast, line 30 */
-        }
+    if (out_grouping_U(z, g_v, 97, 246, 1) < 0) return 0; /* goto */ /* grouping v, line 30 */
+    {    /* gopast */ /* non v, line 30 */
+        int ret = in_grouping_U(z, g_v, 97, 246, 1);
+        if (ret < 0) return 0;
+        z->c += ret;
     }
     z->I[0] = z->c; /* setmark p1, line 30 */
      /* try, line 31 */
-    if (!(z->I[0] < z->I[1])) goto lab2;
+    if (!(z->I[0] < z->I[1])) goto lab0;
     z->I[0] = z->I[1];
-lab2:
+lab0:
     return 1;
 }
 
 static int r_main_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 37 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 37 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 37 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 37 */
+        if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851442 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_0, 37); /* substring, line 37 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 37 */
-        z->lb = m3;
+        z->lb = mlimit;
     }
     switch(among_var) {
         case 0: return 0;
         case 1:
-            {   int ret;
-                ret = slice_del(z); /* delete, line 44 */
+            {   int ret = slice_del(z); /* delete, line 44 */
                 if (ret < 0) return ret;
             }
             break;
         case 2:
-            if (!(in_grouping_b_U(z, g_s_ending, 98, 121))) return 0;
-            {   int ret;
-                ret = slice_del(z); /* delete, line 46 */
+            if (in_grouping_b_U(z, g_s_ending, 98, 121, 0)) return 0;
+            {   int ret = slice_del(z); /* delete, line 46 */
                 if (ret < 0) return ret;
             }
             break;
@@ -205,103 +203,101 @@ static int r_main_suffix(struct SN_env * z) {
 }
 
 static int r_consonant_pair(struct SN_env * z) {
-    {   int m3; /* setlimit, line 50 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 50 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 50 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
-        {   int m = z->l - z->c; (void) m; /* and, line 52 */
-            if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */
-            z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* and, line 52 */
+            if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1064976 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
+            if (!(find_among_b(z, a_1, 7))) { z->lb = mlimit; return 0; } /* among, line 51 */
+            z->c = z->l - m2;
             z->ket = z->c; /* [, line 52 */
-            {   int c = skip_utf8(z->p, z->c, z->lb, 0, -1);
-                if (c < 0) { z->lb = m3; return 0; }
-                z->c = c; /* next, line 52 */
+            {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                if (ret < 0) { z->lb = mlimit; return 0; }
+                z->c = ret; /* next, line 52 */
             }
             z->bra = z->c; /* ], line 52 */
-            {   int ret;
-                ret = slice_del(z); /* delete, line 52 */
+            {   int ret = slice_del(z); /* delete, line 52 */
                 if (ret < 0) return ret;
             }
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 static int r_other_suffix(struct SN_env * z) {
     int among_var;
-    {   int m3; /* setlimit, line 55 */
-        int m = z->l - z->c; (void) m;
+    {   int mlimit; /* setlimit, line 55 */
+        int m1 = z->l - z->c; (void)m1;
         if (z->c < z->I[0]) return 0;
         z->c = z->I[0]; /* tomark, line 55 */
-        m3 = z->lb; z->lb = z->c;
-        z->c = z->l - m;
+        mlimit = z->lb; z->lb = z->c;
+        z->c = z->l - m1;
         z->ket = z->c; /* [, line 56 */
+        if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit; return 0; }
         among_var = find_among_b(z, a_2, 5); /* substring, line 56 */
-        if (!(among_var)) { z->lb = m3; return 0; }
+        if (!(among_var)) { z->lb = mlimit; return 0; }
         z->bra = z->c; /* ], line 56 */
         switch(among_var) {
-            case 0: { z->lb = m3; return 0; }
+            case 0: { z->lb = mlimit; return 0; }
             case 1:
-                {   int ret;
-                    ret = slice_del(z); /* delete, line 57 */
+                {   int ret = slice_del(z); /* delete, line 57 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 2:
-                {   int ret;
-                    ret = slice_from_s(z, 4, s_0); /* <-, line 58 */
+                {   int ret = slice_from_s(z, 4, s_0); /* <-, line 58 */
                     if (ret < 0) return ret;
                 }
                 break;
             case 3:
-                {   int ret;
-                    ret = slice_from_s(z, 4, s_1); /* <-, line 59 */
+                {   int ret = slice_from_s(z, 4, s_1); /* <-, line 59 */
                     if (ret < 0) return ret;
                 }
                 break;
         }
-        z->lb = m3;
+        z->lb = mlimit;
     }
     return 1;
 }
 
 extern int swedish_UTF_8_stem(struct SN_env * z) {
-    {   int c = z->c; /* do, line 66 */
+    {   int c1 = z->c; /* do, line 66 */
         {   int ret = r_mark_regions(z);
             if (ret == 0) goto lab0; /* call mark_regions, line 66 */
             if (ret < 0) return ret;
         }
     lab0:
-        z->c = c;
+        z->c = c1;
     }
     z->lb = z->c; z->c = z->l; /* backwards, line 67 */
 
-    {   int m = z->l - z->c; (void) m; /* do, line 68 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 68 */
         {   int ret = r_main_suffix(z);
             if (ret == 0) goto lab1; /* call main_suffix, line 68 */
             if (ret < 0) return ret;
         }
     lab1:
-        z->c = z->l - m;
+        z->c = z->l - m2;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 69 */
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 69 */
         {   int ret = r_consonant_pair(z);
             if (ret == 0) goto lab2; /* call consonant_pair, line 69 */
             if (ret < 0) return ret;
         }
     lab2:
-        z->c = z->l - m;
+        z->c = z->l - m3;
     }
-    {   int m = z->l - z->c; (void) m; /* do, line 70 */
+    {   int m4 = z->l - z->c; (void)m4; /* do, line 70 */
         {   int ret = r_other_suffix(z);
             if (ret == 0) goto lab3; /* call other_suffix, line 70 */
             if (ret < 0) return ret;
         }
     lab3:
-        z->c = z->l - m;
+        z->c = z->l - m4;
     }
     z->c = z->lb;
     return 1;
@@ -309,5 +305,5 @@ extern int swedish_UTF_8_stem(struct SN_env * z) {
 
 extern struct SN_env * swedish_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); }
 
-extern void swedish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); }
+extern void swedish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
 
diff --git a/libstemmer_c/src_c/stem_UTF_8_turkish.c b/libstemmer_c/src_c/stem_UTF_8_turkish.c
new file mode 100644
index 0000000..ae3cc76
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_turkish.c
@@ -0,0 +1,2205 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int turkish_UTF_8_stem(struct SN_env * z);
+#ifdef __cplusplus
+}
+#endif
+static int r_stem_suffix_chain_before_ki(struct SN_env * z);
+static int r_stem_noun_suffixes(struct SN_env * z);
+static int r_stem_nominal_verb_suffixes(struct SN_env * z);
+static int r_postlude(struct SN_env * z);
+static int r_post_process_last_consonants(struct SN_env * z);
+static int r_more_than_one_syllable_word(struct SN_env * z);
+static int r_mark_suffix_with_optional_s_consonant(struct SN_env * z);
+static int r_mark_suffix_with_optional_n_consonant(struct SN_env * z);
+static int r_mark_suffix_with_optional_U_vowel(struct SN_env * z);
+static int r_mark_suffix_with_optional_y_consonant(struct SN_env * z);
+static int r_mark_ysA(struct SN_env * z);
+static int r_mark_ymUs_(struct SN_env * z);
+static int r_mark_yken(struct SN_env * z);
+static int r_mark_yDU(struct SN_env * z);
+static int r_mark_yUz(struct SN_env * z);
+static int r_mark_yUm(struct SN_env * z);
+static int r_mark_yU(struct SN_env * z);
+static int r_mark_ylA(struct SN_env * z);
+static int r_mark_yA(struct SN_env * z);
+static int r_mark_possessives(struct SN_env * z);
+static int r_mark_sUnUz(struct SN_env * z);
+static int r_mark_sUn(struct SN_env * z);
+static int r_mark_sU(struct SN_env * z);
+static int r_mark_nUz(struct SN_env * z);
+static int r_mark_nUn(struct SN_env * z);
+static int r_mark_nU(struct SN_env * z);
+static int r_mark_ndAn(struct SN_env * z);
+static int r_mark_ndA(struct SN_env * z);
+static int r_mark_ncA(struct SN_env * z);
+static int r_mark_nA(struct SN_env * z);
+static int r_mark_lArI(struct SN_env * z);
+static int r_mark_lAr(struct SN_env * z);
+static int r_mark_ki(struct SN_env * z);
+static int r_mark_DUr(struct SN_env * z);
+static int r_mark_DAn(struct SN_env * z);
+static int r_mark_DA(struct SN_env * z);
+static int r_mark_cAsInA(struct SN_env * z);
+static int r_is_reserved_word(struct SN_env * z);
+static int r_check_vowel_harmony(struct SN_env * z);
+static int r_append_U_to_stems_ending_with_d_or_g(struct SN_env * z);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern struct SN_env * turkish_UTF_8_create_env(void);
+extern void turkish_UTF_8_close_env(struct SN_env * z);
+
+
+#ifdef __cplusplus
+}
+#endif
+static const symbol s_0_0[1] = { 'm' };
+static const symbol s_0_1[1] = { 'n' };
+static const symbol s_0_2[3] = { 'm', 'i', 'z' };
+static const symbol s_0_3[3] = { 'n', 'i', 'z' };
+static const symbol s_0_4[3] = { 'm', 'u', 'z' };
+static const symbol s_0_5[3] = { 'n', 'u', 'z' };
+static const symbol s_0_6[4] = { 'm', 0xC4, 0xB1, 'z' };
+static const symbol s_0_7[4] = { 'n', 0xC4, 0xB1, 'z' };
+static const symbol s_0_8[4] = { 'm', 0xC3, 0xBC, 'z' };
+static const symbol s_0_9[4] = { 'n', 0xC3, 0xBC, 'z' };
+
+static const struct among a_0[10] =
+{
+/*  0 */ { 1, s_0_0, -1, -1, 0},
+/*  1 */ { 1, s_0_1, -1, -1, 0},
+/*  2 */ { 3, s_0_2, -1, -1, 0},
+/*  3 */ { 3, s_0_3, -1, -1, 0},
+/*  4 */ { 3, s_0_4, -1, -1, 0},
+/*  5 */ { 3, s_0_5, -1, -1, 0},
+/*  6 */ { 4, s_0_6, -1, -1, 0},
+/*  7 */ { 4, s_0_7, -1, -1, 0},
+/*  8 */ { 4, s_0_8, -1, -1, 0},
+/*  9 */ { 4, s_0_9, -1, -1, 0}
+};
+
+static const symbol s_1_0[4] = { 'l', 'e', 'r', 'i' };
+static const symbol s_1_1[5] = { 'l', 'a', 'r', 0xC4, 0xB1 };
+
+static const struct among a_1[2] =
+{
+/*  0 */ { 4, s_1_0, -1, -1, 0},
+/*  1 */ { 5, s_1_1, -1, -1, 0}
+};
+
+static const symbol s_2_0[2] = { 'n', 'i' };
+static const symbol s_2_1[2] = { 'n', 'u' };
+static const symbol s_2_2[3] = { 'n', 0xC4, 0xB1 };
+static const symbol s_2_3[3] = { 'n', 0xC3, 0xBC };
+
+static const struct among a_2[4] =
+{
+/*  0 */ { 2, s_2_0, -1, -1, 0},
+/*  1 */ { 2, s_2_1, -1, -1, 0},
+/*  2 */ { 3, s_2_2, -1, -1, 0},
+/*  3 */ { 3, s_2_3, -1, -1, 0}
+};
+
+static const symbol s_3_0[2] = { 'i', 'n' };
+static const symbol s_3_1[2] = { 'u', 'n' };
+static const symbol s_3_2[3] = { 0xC4, 0xB1, 'n' };
+static const symbol s_3_3[3] = { 0xC3, 0xBC, 'n' };
+
+static const struct among a_3[4] =
+{
+/*  0 */ { 2, s_3_0, -1, -1, 0},
+/*  1 */ { 2, s_3_1, -1, -1, 0},
+/*  2 */ { 3, s_3_2, -1, -1, 0},
+/*  3 */ { 3, s_3_3, -1, -1, 0}
+};
+
+static const symbol s_4_0[1] = { 'a' };
+static const symbol s_4_1[1] = { 'e' };
+
+static const struct among a_4[2] =
+{
+/*  0 */ { 1, s_4_0, -1, -1, 0},
+/*  1 */ { 1, s_4_1, -1, -1, 0}
+};
+
+static const symbol s_5_0[2] = { 'n', 'a' };
+static const symbol s_5_1[2] = { 'n', 'e' };
+
+static const struct among a_5[2] =
+{
+/*  0 */ { 2, s_5_0, -1, -1, 0},
+/*  1 */ { 2, s_5_1, -1, -1, 0}
+};
+
+static const symbol s_6_0[2] = { 'd', 'a' };
+static const symbol s_6_1[2] = { 't', 'a' };
+static const symbol s_6_2[2] = { 'd', 'e' };
+static const symbol s_6_3[2] = { 't', 'e' };
+
+static const struct among a_6[4] =
+{
+/*  0 */ { 2, s_6_0, -1, -1, 0},
+/*  1 */ { 2, s_6_1, -1, -1, 0},
+/*  2 */ { 2, s_6_2, -1, -1, 0},
+/*  3 */ { 2, s_6_3, -1, -1, 0}
+};
+
+static const symbol s_7_0[3] = { 'n', 'd', 'a' };
+static const symbol s_7_1[3] = { 'n', 'd', 'e' };
+
+static const struct among a_7[2] =
+{
+/*  0 */ { 3, s_7_0, -1, -1, 0},
+/*  1 */ { 3, s_7_1, -1, -1, 0}
+};
+
+static const symbol s_8_0[3] = { 'd', 'a', 'n' };
+static const symbol s_8_1[3] = { 't', 'a', 'n' };
+static const symbol s_8_2[3] = { 'd', 'e', 'n' };
+static const symbol s_8_3[3] = { 't', 'e', 'n' };
+
+static const struct among a_8[4] =
+{
+/*  0 */ { 3, s_8_0, -1, -1, 0},
+/*  1 */ { 3, s_8_1, -1, -1, 0},
+/*  2 */ { 3, s_8_2, -1, -1, 0},
+/*  3 */ { 3, s_8_3, -1, -1, 0}
+};
+
+static const symbol s_9_0[4] = { 'n', 'd', 'a', 'n' };
+static const symbol s_9_1[4] = { 'n', 'd', 'e', 'n' };
+
+static const struct among a_9[2] =
+{
+/*  0 */ { 4, s_9_0, -1, -1, 0},
+/*  1 */ { 4, s_9_1, -1, -1, 0}
+};
+
+static const symbol s_10_0[2] = { 'l', 'a' };
+static const symbol s_10_1[2] = { 'l', 'e' };
+
+static const struct among a_10[2] =
+{
+/*  0 */ { 2, s_10_0, -1, -1, 0},
+/*  1 */ { 2, s_10_1, -1, -1, 0}
+};
+
+static const symbol s_11_0[2] = { 'c', 'a' };
+static const symbol s_11_1[2] = { 'c', 'e' };
+
+static const struct among a_11[2] =
+{
+/*  0 */ { 2, s_11_0, -1, -1, 0},
+/*  1 */ { 2, s_11_1, -1, -1, 0}
+};
+
+static const symbol s_12_0[2] = { 'i', 'm' };
+static const symbol s_12_1[2] = { 'u', 'm' };
+static const symbol s_12_2[3] = { 0xC4, 0xB1, 'm' };
+static const symbol s_12_3[3] = { 0xC3, 0xBC, 'm' };
+
+static const struct among a_12[4] =
+{
+/*  0 */ { 2, s_12_0, -1, -1, 0},
+/*  1 */ { 2, s_12_1, -1, -1, 0},
+/*  2 */ { 3, s_12_2, -1, -1, 0},
+/*  3 */ { 3, s_12_3, -1, -1, 0}
+};
+
+static const symbol s_13_0[3] = { 's', 'i', 'n' };
+static const symbol s_13_1[3] = { 's', 'u', 'n' };
+static const symbol s_13_2[4] = { 's', 0xC4, 0xB1, 'n' };
+static const symbol s_13_3[4] = { 's', 0xC3, 0xBC, 'n' };
+
+static const struct among a_13[4] =
+{
+/*  0 */ { 3, s_13_0, -1, -1, 0},
+/*  1 */ { 3, s_13_1, -1, -1, 0},
+/*  2 */ { 4, s_13_2, -1, -1, 0},
+/*  3 */ { 4, s_13_3, -1, -1, 0}
+};
+
+static const symbol s_14_0[2] = { 'i', 'z' };
+static const symbol s_14_1[2] = { 'u', 'z' };
+static const symbol s_14_2[3] = { 0xC4, 0xB1, 'z' };
+static const symbol s_14_3[3] = { 0xC3, 0xBC, 'z' };
+
+static const struct among a_14[4] =
+{
+/*  0 */ { 2, s_14_0, -1, -1, 0},
+/*  1 */ { 2, s_14_1, -1, -1, 0},
+/*  2 */ { 3, s_14_2, -1, -1, 0},
+/*  3 */ { 3, s_14_3, -1, -1, 0}
+};
+
+static const symbol s_15_0[5] = { 's', 'i', 'n', 'i', 'z' };
+static const symbol s_15_1[5] = { 's', 'u', 'n', 'u', 'z' };
+static const symbol s_15_2[7] = { 's', 0xC4, 0xB1, 'n', 0xC4, 0xB1, 'z' };
+static const symbol s_15_3[7] = { 's', 0xC3, 0xBC, 'n', 0xC3, 0xBC, 'z' };
+
+static const struct among a_15[4] =
+{
+/*  0 */ { 5, s_15_0, -1, -1, 0},
+/*  1 */ { 5, s_15_1, -1, -1, 0},
+/*  2 */ { 7, s_15_2, -1, -1, 0},
+/*  3 */ { 7, s_15_3, -1, -1, 0}
+};
+
+static const symbol s_16_0[3] = { 'l', 'a', 'r' };
+static const symbol s_16_1[3] = { 'l', 'e', 'r' };
+
+static const struct among a_16[2] =
+{
+/*  0 */ { 3, s_16_0, -1, -1, 0},
+/*  1 */ { 3, s_16_1, -1, -1, 0}
+};
+
+static const symbol s_17_0[3] = { 'n', 'i', 'z' };
+static const symbol s_17_1[3] = { 'n', 'u', 'z' };
+static const symbol s_17_2[4] = { 'n', 0xC4, 0xB1, 'z' };
+static const symbol s_17_3[4] = { 'n', 0xC3, 0xBC, 'z' };
+
+static const struct among a_17[4] =
+{
+/*  0 */ { 3, s_17_0, -1, -1, 0},
+/*  1 */ { 3, s_17_1, -1, -1, 0},
+/*  2 */ { 4, s_17_2, -1, -1, 0},
+/*  3 */ { 4, s_17_3, -1, -1, 0}
+};
+
+static const symbol s_18_0[3] = { 'd', 'i', 'r' };
+static const symbol s_18_1[3] = { 't', 'i', 'r' };
+static const symbol s_18_2[3] = { 'd', 'u', 'r' };
+static const symbol s_18_3[3] = { 't', 'u', 'r' };
+static const symbol s_18_4[4] = { 'd', 0xC4, 0xB1, 'r' };
+static const symbol s_18_5[4] = { 't', 0xC4, 0xB1, 'r' };
+static const symbol s_18_6[4] = { 'd', 0xC3, 0xBC, 'r' };
+static const symbol s_18_7[4] = { 't', 0xC3, 0xBC, 'r' };
+
+static const struct among a_18[8] =
+{
+/*  0 */ { 3, s_18_0, -1, -1, 0},
+/*  1 */ { 3, s_18_1, -1, -1, 0},
+/*  2 */ { 3, s_18_2, -1, -1, 0},
+/*  3 */ { 3, s_18_3, -1, -1, 0},
+/*  4 */ { 4, s_18_4, -1, -1, 0},
+/*  5 */ { 4, s_18_5, -1, -1, 0},
+/*  6 */ { 4, s_18_6, -1, -1, 0},
+/*  7 */ { 4, s_18_7, -1, -1, 0}
+};
+
+static const symbol s_19_0[7] = { 'c', 'a', 's', 0xC4, 0xB1, 'n', 'a' };
+static const symbol s_19_1[6] = { 'c', 'e', 's', 'i', 'n', 'e' };
+
+static const struct among a_19[2] =
+{
+/*  0 */ { 7, s_19_0, -1, -1, 0},
+/*  1 */ { 6, s_19_1, -1, -1, 0}
+};
+
+static const symbol s_20_0[2] = { 'd', 'i' };
+static const symbol s_20_1[2] = { 't', 'i' };
+static const symbol s_20_2[3] = { 'd', 'i', 'k' };
+static const symbol s_20_3[3] = { 't', 'i', 'k' };
+static const symbol s_20_4[3] = { 'd', 'u', 'k' };
+static const symbol s_20_5[3] = { 't', 'u', 'k' };
+static const symbol s_20_6[4] = { 'd', 0xC4, 0xB1, 'k' };
+static const symbol s_20_7[4] = { 't', 0xC4, 0xB1, 'k' };
+static const symbol s_20_8[4] = { 'd', 0xC3, 0xBC, 'k' };
+static const symbol s_20_9[4] = { 't', 0xC3, 0xBC, 'k' };
+static const symbol s_20_10[3] = { 'd', 'i', 'm' };
+static const symbol s_20_11[3] = { 't', 'i', 'm' };
+static const symbol s_20_12[3] = { 'd', 'u', 'm' };
+static const symbol s_20_13[3] = { 't', 'u', 'm' };
+static const symbol s_20_14[4] = { 'd', 0xC4, 0xB1, 'm' };
+static const symbol s_20_15[4] = { 't', 0xC4, 0xB1, 'm' };
+static const symbol s_20_16[4] = { 'd', 0xC3, 0xBC, 'm' };
+static const symbol s_20_17[4] = { 't', 0xC3, 0xBC, 'm' };
+static const symbol s_20_18[3] = { 'd', 'i', 'n' };
+static const symbol s_20_19[3] = { 't', 'i', 'n' };
+static const symbol s_20_20[3] = { 'd', 'u', 'n' };
+static const symbol s_20_21[3] = { 't', 'u', 'n' };
+static const symbol s_20_22[4] = { 'd', 0xC4, 0xB1, 'n' };
+static const symbol s_20_23[4] = { 't', 0xC4, 0xB1, 'n' };
+static const symbol s_20_24[4] = { 'd', 0xC3, 0xBC, 'n' };
+static const symbol s_20_25[4] = { 't', 0xC3, 0xBC, 'n' };
+static const symbol s_20_26[2] = { 'd', 'u' };
+static const symbol s_20_27[2] = { 't', 'u' };
+static const symbol s_20_28[3] = { 'd', 0xC4, 0xB1 };
+static const symbol s_20_29[3] = { 't', 0xC4, 0xB1 };
+static const symbol s_20_30[3] = { 'd', 0xC3, 0xBC };
+static const symbol s_20_31[3] = { 't', 0xC3, 0xBC };
+
+static const struct among a_20[32] =
+{
+/*  0 */ { 2, s_20_0, -1, -1, 0},
+/*  1 */ { 2, s_20_1, -1, -1, 0},
+/*  2 */ { 3, s_20_2, -1, -1, 0},
+/*  3 */ { 3, s_20_3, -1, -1, 0},
+/*  4 */ { 3, s_20_4, -1, -1, 0},
+/*  5 */ { 3, s_20_5, -1, -1, 0},
+/*  6 */ { 4, s_20_6, -1, -1, 0},
+/*  7 */ { 4, s_20_7, -1, -1, 0},
+/*  8 */ { 4, s_20_8, -1, -1, 0},
+/*  9 */ { 4, s_20_9, -1, -1, 0},
+/* 10 */ { 3, s_20_10, -1, -1, 0},
+/* 11 */ { 3, s_20_11, -1, -1, 0},
+/* 12 */ { 3, s_20_12, -1, -1, 0},
+/* 13 */ { 3, s_20_13, -1, -1, 0},
+/* 14 */ { 4, s_20_14, -1, -1, 0},
+/* 15 */ { 4, s_20_15, -1, -1, 0},
+/* 16 */ { 4, s_20_16, -1, -1, 0},
+/* 17 */ { 4, s_20_17, -1, -1, 0},
+/* 18 */ { 3, s_20_18, -1, -1, 0},
+/* 19 */ { 3, s_20_19, -1, -1, 0},
+/* 20 */ { 3, s_20_20, -1, -1, 0},
+/* 21 */ { 3, s_20_21, -1, -1, 0},
+/* 22 */ { 4, s_20_22, -1, -1, 0},
+/* 23 */ { 4, s_20_23, -1, -1, 0},
+/* 24 */ { 4, s_20_24, -1, -1, 0},
+/* 25 */ { 4, s_20_25, -1, -1, 0},
+/* 26 */ { 2, s_20_26, -1, -1, 0},
+/* 27 */ { 2, s_20_27, -1, -1, 0},
+/* 28 */ { 3, s_20_28, -1, -1, 0},
+/* 29 */ { 3, s_20_29, -1, -1, 0},
+/* 30 */ { 3, s_20_30, -1, -1, 0},
+/* 31 */ { 3, s_20_31, -1, -1, 0}
+};
+
+static const symbol s_21_0[2] = { 's', 'a' };
+static const symbol s_21_1[2] = { 's', 'e' };
+static const symbol s_21_2[3] = { 's', 'a', 'k' };
+static const symbol s_21_3[3] = { 's', 'e', 'k' };
+static const symbol s_21_4[3] = { 's', 'a', 'm' };
+static const symbol s_21_5[3] = { 's', 'e', 'm' };
+static const symbol s_21_6[3] = { 's', 'a', 'n' };
+static const symbol s_21_7[3] = { 's', 'e', 'n' };
+
+static const struct among a_21[8] =
+{
+/*  0 */ { 2, s_21_0, -1, -1, 0},
+/*  1 */ { 2, s_21_1, -1, -1, 0},
+/*  2 */ { 3, s_21_2, -1, -1, 0},
+/*  3 */ { 3, s_21_3, -1, -1, 0},
+/*  4 */ { 3, s_21_4, -1, -1, 0},
+/*  5 */ { 3, s_21_5, -1, -1, 0},
+/*  6 */ { 3, s_21_6, -1, -1, 0},
+/*  7 */ { 3, s_21_7, -1, -1, 0}
+};
+
+static const symbol s_22_0[4] = { 'm', 'i', 0xC5, 0x9F };
+static const symbol s_22_1[4] = { 'm', 'u', 0xC5, 0x9F };
+static const symbol s_22_2[5] = { 'm', 0xC4, 0xB1, 0xC5, 0x9F };
+static const symbol s_22_3[5] = { 'm', 0xC3, 0xBC, 0xC5, 0x9F };
+
+static const struct among a_22[4] =
+{
+/*  0 */ { 4, s_22_0, -1, -1, 0},
+/*  1 */ { 4, s_22_1, -1, -1, 0},
+/*  2 */ { 5, s_22_2, -1, -1, 0},
+/*  3 */ { 5, s_22_3, -1, -1, 0}
+};
+
+static const symbol s_23_0[1] = { 'b' };
+static const symbol s_23_1[1] = { 'c' };
+static const symbol s_23_2[1] = { 'd' };
+static const symbol s_23_3[2] = { 0xC4, 0x9F };
+
+static const struct among a_23[4] =
+{
+/*  0 */ { 1, s_23_0, -1, 1, 0},
+/*  1 */ { 1, s_23_1, -1, 2, 0},
+/*  2 */ { 1, s_23_2, -1, 3, 0},
+/*  3 */ { 2, s_23_3, -1, 4, 0}
+};
+
+static const unsigned char g_vowel[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 1 };
+
+static const unsigned char g_U[] = { 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1 };
+
+static const unsigned char g_vowel1[] = { 1, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+
+static const unsigned char g_vowel2[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130 };
+
+static const unsigned char g_vowel3[] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+
+static const unsigned char g_vowel4[] = { 17 };
+
+static const unsigned char g_vowel5[] = { 65 };
+
+static const unsigned char g_vowel6[] = { 65 };
+
+static const symbol s_0[] = { 'a' };
+static const symbol s_1[] = { 'e' };
+static const symbol s_2[] = { 0xC4, 0xB1 };
+static const symbol s_3[] = { 'i' };
+static const symbol s_4[] = { 'o' };
+static const symbol s_5[] = { 0xC3, 0xB6 };
+static const symbol s_6[] = { 'u' };
+static const symbol s_7[] = { 0xC3, 0xBC };
+static const symbol s_8[] = { 'n' };
+static const symbol s_9[] = { 'n' };
+static const symbol s_10[] = { 's' };
+static const symbol s_11[] = { 's' };
+static const symbol s_12[] = { 'y' };
+static const symbol s_13[] = { 'y' };
+static const symbol s_14[] = { 'k', 'i' };
+static const symbol s_15[] = { 'k', 'e', 'n' };
+static const symbol s_16[] = { 'p' };
+static const symbol s_17[] = { 0xC3, 0xA7 };
+static const symbol s_18[] = { 't' };
+static const symbol s_19[] = { 'k' };
+static const symbol s_20[] = { 'd' };
+static const symbol s_21[] = { 'g' };
+static const symbol s_22[] = { 'a' };
+static const symbol s_23[] = { 0xC4, 0xB1 };
+static const symbol s_24[] = { 0xC4, 0xB1 };
+static const symbol s_25[] = { 'e' };
+static const symbol s_26[] = { 'i' };
+static const symbol s_27[] = { 'i' };
+static const symbol s_28[] = { 'o' };
+static const symbol s_29[] = { 'u' };
+static const symbol s_30[] = { 'u' };
+static const symbol s_31[] = { 0xC3, 0xB6 };
+static const symbol s_32[] = { 0xC3, 0xBC };
+static const symbol s_33[] = { 0xC3, 0xBC };
+static const symbol s_34[] = { 'a', 'd' };
+static const symbol s_35[] = { 's', 'o', 'y', 'a', 'd' };
+
+static int r_check_vowel_harmony(struct SN_env * z) {
+    {   int m_test = z->l - z->c; /* test, line 112 */
+        if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) return 0; /* goto */ /* grouping vowel, line 114 */
+        {   int m1 = z->l - z->c; (void)m1; /* or, line 116 */
+            if (!(eq_s_b(z, 1, s_0))) goto lab1;
+            if (out_grouping_b_U(z, g_vowel1, 97, 305, 1) < 0) goto lab1; /* goto */ /* grouping vowel1, line 116 */
+            goto lab0;
+        lab1:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 1, s_1))) goto lab2;
+            if (out_grouping_b_U(z, g_vowel2, 101, 252, 1) < 0) goto lab2; /* goto */ /* grouping vowel2, line 117 */
+            goto lab0;
+        lab2:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 2, s_2))) goto lab3;
+            if (out_grouping_b_U(z, g_vowel3, 97, 305, 1) < 0) goto lab3; /* goto */ /* grouping vowel3, line 118 */
+            goto lab0;
+        lab3:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 1, s_3))) goto lab4;
+            if (out_grouping_b_U(z, g_vowel4, 101, 105, 1) < 0) goto lab4; /* goto */ /* grouping vowel4, line 119 */
+            goto lab0;
+        lab4:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 1, s_4))) goto lab5;
+            if (out_grouping_b_U(z, g_vowel5, 111, 117, 1) < 0) goto lab5; /* goto */ /* grouping vowel5, line 120 */
+            goto lab0;
+        lab5:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 2, s_5))) goto lab6;
+            if (out_grouping_b_U(z, g_vowel6, 246, 252, 1) < 0) goto lab6; /* goto */ /* grouping vowel6, line 121 */
+            goto lab0;
+        lab6:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 1, s_6))) goto lab7;
+            if (out_grouping_b_U(z, g_vowel5, 111, 117, 1) < 0) goto lab7; /* goto */ /* grouping vowel5, line 122 */
+            goto lab0;
+        lab7:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 2, s_7))) return 0;
+            if (out_grouping_b_U(z, g_vowel6, 246, 252, 1) < 0) return 0; /* goto */ /* grouping vowel6, line 123 */
+        }
+    lab0:
+        z->c = z->l - m_test;
+    }
+    return 1;
+}
+
+static int r_mark_suffix_with_optional_n_consonant(struct SN_env * z) {
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 134 */
+        {   int m_test = z->l - z->c; /* test, line 133 */
+            if (!(eq_s_b(z, 1, s_8))) goto lab1;
+            z->c = z->l - m_test;
+        }
+        {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+            if (ret < 0) goto lab1;
+            z->c = ret; /* next, line 133 */
+        }
+        {   int m_test = z->l - z->c; /* test, line 133 */
+            if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1;
+            z->c = z->l - m_test;
+        }
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 135 */
+            {   int m_test = z->l - z->c; /* test, line 135 */
+                if (!(eq_s_b(z, 1, s_9))) goto lab2;
+                z->c = z->l - m_test;
+            }
+            return 0;
+        lab2:
+            z->c = z->l - m2;
+        }
+        {   int m_test = z->l - z->c; /* test, line 135 */
+            {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                if (ret < 0) return 0;
+                z->c = ret; /* next, line 135 */
+            }
+            {   int m_test = z->l - z->c; /* test, line 135 */
+                if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0;
+                z->c = z->l - m_test;
+            }
+            z->c = z->l - m_test;
+        }
+    }
+lab0:
+    return 1;
+}
+
+static int r_mark_suffix_with_optional_s_consonant(struct SN_env * z) {
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 145 */
+        {   int m_test = z->l - z->c; /* test, line 144 */
+            if (!(eq_s_b(z, 1, s_10))) goto lab1;
+            z->c = z->l - m_test;
+        }
+        {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+            if (ret < 0) goto lab1;
+            z->c = ret; /* next, line 144 */
+        }
+        {   int m_test = z->l - z->c; /* test, line 144 */
+            if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1;
+            z->c = z->l - m_test;
+        }
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 146 */
+            {   int m_test = z->l - z->c; /* test, line 146 */
+                if (!(eq_s_b(z, 1, s_11))) goto lab2;
+                z->c = z->l - m_test;
+            }
+            return 0;
+        lab2:
+            z->c = z->l - m2;
+        }
+        {   int m_test = z->l - z->c; /* test, line 146 */
+            {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                if (ret < 0) return 0;
+                z->c = ret; /* next, line 146 */
+            }
+            {   int m_test = z->l - z->c; /* test, line 146 */
+                if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0;
+                z->c = z->l - m_test;
+            }
+            z->c = z->l - m_test;
+        }
+    }
+lab0:
+    return 1;
+}
+
+static int r_mark_suffix_with_optional_y_consonant(struct SN_env * z) {
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 155 */
+        {   int m_test = z->l - z->c; /* test, line 154 */
+            if (!(eq_s_b(z, 1, s_12))) goto lab1;
+            z->c = z->l - m_test;
+        }
+        {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+            if (ret < 0) goto lab1;
+            z->c = ret; /* next, line 154 */
+        }
+        {   int m_test = z->l - z->c; /* test, line 154 */
+            if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1;
+            z->c = z->l - m_test;
+        }
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 156 */
+            {   int m_test = z->l - z->c; /* test, line 156 */
+                if (!(eq_s_b(z, 1, s_13))) goto lab2;
+                z->c = z->l - m_test;
+            }
+            return 0;
+        lab2:
+            z->c = z->l - m2;
+        }
+        {   int m_test = z->l - z->c; /* test, line 156 */
+            {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                if (ret < 0) return 0;
+                z->c = ret; /* next, line 156 */
+            }
+            {   int m_test = z->l - z->c; /* test, line 156 */
+                if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0;
+                z->c = z->l - m_test;
+            }
+            z->c = z->l - m_test;
+        }
+    }
+lab0:
+    return 1;
+}
+
+static int r_mark_suffix_with_optional_U_vowel(struct SN_env * z) {
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 161 */
+        {   int m_test = z->l - z->c; /* test, line 160 */
+            if (in_grouping_b_U(z, g_U, 105, 305, 0)) goto lab1;
+            z->c = z->l - m_test;
+        }
+        {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+            if (ret < 0) goto lab1;
+            z->c = ret; /* next, line 160 */
+        }
+        {   int m_test = z->l - z->c; /* test, line 160 */
+            if (out_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1;
+            z->c = z->l - m_test;
+        }
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        {   int m2 = z->l - z->c; (void)m2; /* not, line 162 */
+            {   int m_test = z->l - z->c; /* test, line 162 */
+                if (in_grouping_b_U(z, g_U, 105, 305, 0)) goto lab2;
+                z->c = z->l - m_test;
+            }
+            return 0;
+        lab2:
+            z->c = z->l - m2;
+        }
+        {   int m_test = z->l - z->c; /* test, line 162 */
+            {   int ret = skip_utf8(z->p, z->c, z->lb, 0, -1);
+                if (ret < 0) return 0;
+                z->c = ret; /* next, line 162 */
+            }
+            {   int m_test = z->l - z->c; /* test, line 162 */
+                if (out_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0;
+                z->c = z->l - m_test;
+            }
+            z->c = z->l - m_test;
+        }
+    }
+lab0:
+    return 1;
+}
+
+static int r_mark_possessives(struct SN_env * z) {
+    if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((67133440 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    if (!(find_among_b(z, a_0, 10))) return 0; /* among, line 167 */
+    {   int ret = r_mark_suffix_with_optional_U_vowel(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_U_vowel, line 169 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_sU(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 173 */
+        if (ret < 0) return ret;
+    }
+    if (in_grouping_b_U(z, g_U, 105, 305, 0)) return 0;
+    {   int ret = r_mark_suffix_with_optional_s_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_s_consonant, line 175 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_lArI(struct SN_env * z) {
+    if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 177)) return 0;
+    if (!(find_among_b(z, a_1, 2))) return 0; /* among, line 179 */
+    return 1;
+}
+
+static int r_mark_yU(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 183 */
+        if (ret < 0) return ret;
+    }
+    if (in_grouping_b_U(z, g_U, 105, 305, 0)) return 0;
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 185 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_nU(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 189 */
+        if (ret < 0) return ret;
+    }
+    if (!(find_among_b(z, a_2, 4))) return 0; /* among, line 190 */
+    return 1;
+}
+
+static int r_mark_nUn(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 194 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] != 110) return 0;
+    if (!(find_among_b(z, a_3, 4))) return 0; /* among, line 195 */
+    {   int ret = r_mark_suffix_with_optional_n_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_n_consonant, line 196 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_yA(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 200 */
+        if (ret < 0) return ret;
+    }
+    if (z->c <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_4, 2))) return 0; /* among, line 201 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 202 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_nA(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 206 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_5, 2))) return 0; /* among, line 207 */
+    return 1;
+}
+
+static int r_mark_DA(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 211 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_6, 4))) return 0; /* among, line 212 */
+    return 1;
+}
+
+static int r_mark_ndA(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 216 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_7, 2))) return 0; /* among, line 217 */
+    return 1;
+}
+
+static int r_mark_DAn(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 221 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] != 110) return 0;
+    if (!(find_among_b(z, a_8, 4))) return 0; /* among, line 222 */
+    return 1;
+}
+
+static int r_mark_ndAn(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 226 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 3 <= z->lb || z->p[z->c - 1] != 110) return 0;
+    if (!(find_among_b(z, a_9, 2))) return 0; /* among, line 227 */
+    return 1;
+}
+
+static int r_mark_ylA(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 231 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_10, 2))) return 0; /* among, line 232 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 233 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_ki(struct SN_env * z) {
+    if (!(eq_s_b(z, 2, s_14))) return 0;
+    return 1;
+}
+
+static int r_mark_ncA(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 241 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_11, 2))) return 0; /* among, line 242 */
+    {   int ret = r_mark_suffix_with_optional_n_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_n_consonant, line 243 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_yUm(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 247 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] != 109) return 0;
+    if (!(find_among_b(z, a_12, 4))) return 0; /* among, line 248 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 249 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_sUn(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 253 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] != 110) return 0;
+    if (!(find_among_b(z, a_13, 4))) return 0; /* among, line 254 */
+    return 1;
+}
+
+static int r_mark_yUz(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 258 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] != 122) return 0;
+    if (!(find_among_b(z, a_14, 4))) return 0; /* among, line 259 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 260 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_sUnUz(struct SN_env * z) {
+    if (z->c - 4 <= z->lb || z->p[z->c - 1] != 122) return 0;
+    if (!(find_among_b(z, a_15, 4))) return 0; /* among, line 264 */
+    return 1;
+}
+
+static int r_mark_lAr(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 268 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] != 114) return 0;
+    if (!(find_among_b(z, a_16, 2))) return 0; /* among, line 269 */
+    return 1;
+}
+
+static int r_mark_nUz(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 273 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] != 122) return 0;
+    if (!(find_among_b(z, a_17, 4))) return 0; /* among, line 274 */
+    return 1;
+}
+
+static int r_mark_DUr(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 278 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 2 <= z->lb || z->p[z->c - 1] != 114) return 0;
+    if (!(find_among_b(z, a_18, 8))) return 0; /* among, line 279 */
+    return 1;
+}
+
+static int r_mark_cAsInA(struct SN_env * z) {
+    if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0;
+    if (!(find_among_b(z, a_19, 2))) return 0; /* among, line 283 */
+    return 1;
+}
+
+static int r_mark_yDU(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 287 */
+        if (ret < 0) return ret;
+    }
+    if (!(find_among_b(z, a_20, 32))) return 0; /* among, line 288 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 292 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_ysA(struct SN_env * z) {
+    if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((26658 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0;
+    if (!(find_among_b(z, a_21, 8))) return 0; /* among, line 297 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 298 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_ymUs_(struct SN_env * z) {
+    {   int ret = r_check_vowel_harmony(z);
+        if (ret == 0) return 0; /* call check_vowel_harmony, line 302 */
+        if (ret < 0) return ret;
+    }
+    if (z->c - 3 <= z->lb || z->p[z->c - 1] != 159) return 0;
+    if (!(find_among_b(z, a_22, 4))) return 0; /* among, line 303 */
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 304 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_mark_yken(struct SN_env * z) {
+    if (!(eq_s_b(z, 3, s_15))) return 0;
+    {   int ret = r_mark_suffix_with_optional_y_consonant(z);
+        if (ret == 0) return 0; /* call mark_suffix_with_optional_y_consonant, line 308 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_stem_nominal_verb_suffixes(struct SN_env * z) {
+    z->ket = z->c; /* [, line 312 */
+    z->B[0] = 1; /* set continue_stemming_noun_suffixes, line 313 */
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 315 */
+        {   int m2 = z->l - z->c; (void)m2; /* or, line 314 */
+            {   int ret = r_mark_ymUs_(z);
+                if (ret == 0) goto lab3; /* call mark_ymUs_, line 314 */
+                if (ret < 0) return ret;
+            }
+            goto lab2;
+        lab3:
+            z->c = z->l - m2;
+            {   int ret = r_mark_yDU(z);
+                if (ret == 0) goto lab4; /* call mark_yDU, line 314 */
+                if (ret < 0) return ret;
+            }
+            goto lab2;
+        lab4:
+            z->c = z->l - m2;
+            {   int ret = r_mark_ysA(z);
+                if (ret == 0) goto lab5; /* call mark_ysA, line 314 */
+                if (ret < 0) return ret;
+            }
+            goto lab2;
+        lab5:
+            z->c = z->l - m2;
+            {   int ret = r_mark_yken(z);
+                if (ret == 0) goto lab1; /* call mark_yken, line 314 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab2:
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        {   int ret = r_mark_cAsInA(z);
+            if (ret == 0) goto lab6; /* call mark_cAsInA, line 316 */
+            if (ret < 0) return ret;
+        }
+        {   int m3 = z->l - z->c; (void)m3; /* or, line 316 */
+            {   int ret = r_mark_sUnUz(z);
+                if (ret == 0) goto lab8; /* call mark_sUnUz, line 316 */
+                if (ret < 0) return ret;
+            }
+            goto lab7;
+        lab8:
+            z->c = z->l - m3;
+            {   int ret = r_mark_lAr(z);
+                if (ret == 0) goto lab9; /* call mark_lAr, line 316 */
+                if (ret < 0) return ret;
+            }
+            goto lab7;
+        lab9:
+            z->c = z->l - m3;
+            {   int ret = r_mark_yUm(z);
+                if (ret == 0) goto lab10; /* call mark_yUm, line 316 */
+                if (ret < 0) return ret;
+            }
+            goto lab7;
+        lab10:
+            z->c = z->l - m3;
+            {   int ret = r_mark_sUn(z);
+                if (ret == 0) goto lab11; /* call mark_sUn, line 316 */
+                if (ret < 0) return ret;
+            }
+            goto lab7;
+        lab11:
+            z->c = z->l - m3;
+            {   int ret = r_mark_yUz(z);
+                if (ret == 0) goto lab12; /* call mark_yUz, line 316 */
+                if (ret < 0) return ret;
+            }
+            goto lab7;
+        lab12:
+            z->c = z->l - m3;
+        }
+    lab7:
+        {   int ret = r_mark_ymUs_(z);
+            if (ret == 0) goto lab6; /* call mark_ymUs_, line 316 */
+            if (ret < 0) return ret;
+        }
+        goto lab0;
+    lab6:
+        z->c = z->l - m1;
+        {   int ret = r_mark_lAr(z);
+            if (ret == 0) goto lab13; /* call mark_lAr, line 319 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 319 */
+        {   int ret = slice_del(z); /* delete, line 319 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 319 */
+            z->ket = z->c; /* [, line 319 */
+            {   int m4 = z->l - z->c; (void)m4; /* or, line 319 */
+                {   int ret = r_mark_DUr(z);
+                    if (ret == 0) goto lab16; /* call mark_DUr, line 319 */
+                    if (ret < 0) return ret;
+                }
+                goto lab15;
+            lab16:
+                z->c = z->l - m4;
+                {   int ret = r_mark_yDU(z);
+                    if (ret == 0) goto lab17; /* call mark_yDU, line 319 */
+                    if (ret < 0) return ret;
+                }
+                goto lab15;
+            lab17:
+                z->c = z->l - m4;
+                {   int ret = r_mark_ysA(z);
+                    if (ret == 0) goto lab18; /* call mark_ysA, line 319 */
+                    if (ret < 0) return ret;
+                }
+                goto lab15;
+            lab18:
+                z->c = z->l - m4;
+                {   int ret = r_mark_ymUs_(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab14; } /* call mark_ymUs_, line 319 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab15:
+        lab14:
+            ;
+        }
+        z->B[0] = 0; /* unset continue_stemming_noun_suffixes, line 320 */
+        goto lab0;
+    lab13:
+        z->c = z->l - m1;
+        {   int ret = r_mark_nUz(z);
+            if (ret == 0) goto lab19; /* call mark_nUz, line 323 */
+            if (ret < 0) return ret;
+        }
+        {   int m5 = z->l - z->c; (void)m5; /* or, line 323 */
+            {   int ret = r_mark_yDU(z);
+                if (ret == 0) goto lab21; /* call mark_yDU, line 323 */
+                if (ret < 0) return ret;
+            }
+            goto lab20;
+        lab21:
+            z->c = z->l - m5;
+            {   int ret = r_mark_ysA(z);
+                if (ret == 0) goto lab19; /* call mark_ysA, line 323 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab20:
+        goto lab0;
+    lab19:
+        z->c = z->l - m1;
+        {   int m6 = z->l - z->c; (void)m6; /* or, line 325 */
+            {   int ret = r_mark_sUnUz(z);
+                if (ret == 0) goto lab24; /* call mark_sUnUz, line 325 */
+                if (ret < 0) return ret;
+            }
+            goto lab23;
+        lab24:
+            z->c = z->l - m6;
+            {   int ret = r_mark_yUz(z);
+                if (ret == 0) goto lab25; /* call mark_yUz, line 325 */
+                if (ret < 0) return ret;
+            }
+            goto lab23;
+        lab25:
+            z->c = z->l - m6;
+            {   int ret = r_mark_sUn(z);
+                if (ret == 0) goto lab26; /* call mark_sUn, line 325 */
+                if (ret < 0) return ret;
+            }
+            goto lab23;
+        lab26:
+            z->c = z->l - m6;
+            {   int ret = r_mark_yUm(z);
+                if (ret == 0) goto lab22; /* call mark_yUm, line 325 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab23:
+        z->bra = z->c; /* ], line 325 */
+        {   int ret = slice_del(z); /* delete, line 325 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 325 */
+            z->ket = z->c; /* [, line 325 */
+            {   int ret = r_mark_ymUs_(z);
+                if (ret == 0) { z->c = z->l - m_keep; goto lab27; } /* call mark_ymUs_, line 325 */
+                if (ret < 0) return ret;
+            }
+        lab27:
+            ;
+        }
+        goto lab0;
+    lab22:
+        z->c = z->l - m1;
+        {   int ret = r_mark_DUr(z);
+            if (ret == 0) return 0; /* call mark_DUr, line 327 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 327 */
+        {   int ret = slice_del(z); /* delete, line 327 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 327 */
+            z->ket = z->c; /* [, line 327 */
+            {   int m7 = z->l - z->c; (void)m7; /* or, line 327 */
+                {   int ret = r_mark_sUnUz(z);
+                    if (ret == 0) goto lab30; /* call mark_sUnUz, line 327 */
+                    if (ret < 0) return ret;
+                }
+                goto lab29;
+            lab30:
+                z->c = z->l - m7;
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) goto lab31; /* call mark_lAr, line 327 */
+                    if (ret < 0) return ret;
+                }
+                goto lab29;
+            lab31:
+                z->c = z->l - m7;
+                {   int ret = r_mark_yUm(z);
+                    if (ret == 0) goto lab32; /* call mark_yUm, line 327 */
+                    if (ret < 0) return ret;
+                }
+                goto lab29;
+            lab32:
+                z->c = z->l - m7;
+                {   int ret = r_mark_sUn(z);
+                    if (ret == 0) goto lab33; /* call mark_sUn, line 327 */
+                    if (ret < 0) return ret;
+                }
+                goto lab29;
+            lab33:
+                z->c = z->l - m7;
+                {   int ret = r_mark_yUz(z);
+                    if (ret == 0) goto lab34; /* call mark_yUz, line 327 */
+                    if (ret < 0) return ret;
+                }
+                goto lab29;
+            lab34:
+                z->c = z->l - m7;
+            }
+        lab29:
+            {   int ret = r_mark_ymUs_(z);
+                if (ret == 0) { z->c = z->l - m_keep; goto lab28; } /* call mark_ymUs_, line 327 */
+                if (ret < 0) return ret;
+            }
+        lab28:
+            ;
+        }
+    }
+lab0:
+    z->bra = z->c; /* ], line 328 */
+    {   int ret = slice_del(z); /* delete, line 328 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+static int r_stem_suffix_chain_before_ki(struct SN_env * z) {
+    z->ket = z->c; /* [, line 333 */
+    {   int ret = r_mark_ki(z);
+        if (ret == 0) return 0; /* call mark_ki, line 334 */
+        if (ret < 0) return ret;
+    }
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 342 */
+        {   int ret = r_mark_DA(z);
+            if (ret == 0) goto lab1; /* call mark_DA, line 336 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 336 */
+        {   int ret = slice_del(z); /* delete, line 336 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 336 */
+            z->ket = z->c; /* [, line 336 */
+            {   int m2 = z->l - z->c; (void)m2; /* or, line 338 */
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) goto lab4; /* call mark_lAr, line 337 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 337 */
+                {   int ret = slice_del(z); /* delete, line 337 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 337 */
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab5; } /* call stem_suffix_chain_before_ki, line 337 */
+                        if (ret < 0) return ret;
+                    }
+                lab5:
+                    ;
+                }
+                goto lab3;
+            lab4:
+                z->c = z->l - m2;
+                {   int ret = r_mark_possessives(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call mark_possessives, line 339 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 339 */
+                {   int ret = slice_del(z); /* delete, line 339 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 339 */
+                    z->ket = z->c; /* [, line 339 */
+                    {   int ret = r_mark_lAr(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab6; } /* call mark_lAr, line 339 */
+                        if (ret < 0) return ret;
+                    }
+                    z->bra = z->c; /* ], line 339 */
+                    {   int ret = slice_del(z); /* delete, line 339 */
+                        if (ret < 0) return ret;
+                    }
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab6; } /* call stem_suffix_chain_before_ki, line 339 */
+                        if (ret < 0) return ret;
+                    }
+                lab6:
+                    ;
+                }
+            }
+        lab3:
+        lab2:
+            ;
+        }
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        {   int ret = r_mark_nUn(z);
+            if (ret == 0) goto lab7; /* call mark_nUn, line 343 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 343 */
+        {   int ret = slice_del(z); /* delete, line 343 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 343 */
+            z->ket = z->c; /* [, line 343 */
+            {   int m3 = z->l - z->c; (void)m3; /* or, line 345 */
+                {   int ret = r_mark_lArI(z);
+                    if (ret == 0) goto lab10; /* call mark_lArI, line 344 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 344 */
+                {   int ret = slice_del(z); /* delete, line 344 */
+                    if (ret < 0) return ret;
+                }
+                goto lab9;
+            lab10:
+                z->c = z->l - m3;
+                z->ket = z->c; /* [, line 346 */
+                {   int m4 = z->l - z->c; (void)m4; /* or, line 346 */
+                    {   int ret = r_mark_possessives(z);
+                        if (ret == 0) goto lab13; /* call mark_possessives, line 346 */
+                        if (ret < 0) return ret;
+                    }
+                    goto lab12;
+                lab13:
+                    z->c = z->l - m4;
+                    {   int ret = r_mark_sU(z);
+                        if (ret == 0) goto lab11; /* call mark_sU, line 346 */
+                        if (ret < 0) return ret;
+                    }
+                }
+            lab12:
+                z->bra = z->c; /* ], line 346 */
+                {   int ret = slice_del(z); /* delete, line 346 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 346 */
+                    z->ket = z->c; /* [, line 346 */
+                    {   int ret = r_mark_lAr(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab14; } /* call mark_lAr, line 346 */
+                        if (ret < 0) return ret;
+                    }
+                    z->bra = z->c; /* ], line 346 */
+                    {   int ret = slice_del(z); /* delete, line 346 */
+                        if (ret < 0) return ret;
+                    }
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab14; } /* call stem_suffix_chain_before_ki, line 346 */
+                        if (ret < 0) return ret;
+                    }
+                lab14:
+                    ;
+                }
+                goto lab9;
+            lab11:
+                z->c = z->l - m3;
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab8; } /* call stem_suffix_chain_before_ki, line 348 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab9:
+        lab8:
+            ;
+        }
+        goto lab0;
+    lab7:
+        z->c = z->l - m1;
+        {   int ret = r_mark_ndA(z);
+            if (ret == 0) return 0; /* call mark_ndA, line 351 */
+            if (ret < 0) return ret;
+        }
+        {   int m5 = z->l - z->c; (void)m5; /* or, line 353 */
+            {   int ret = r_mark_lArI(z);
+                if (ret == 0) goto lab16; /* call mark_lArI, line 352 */
+                if (ret < 0) return ret;
+            }
+            z->bra = z->c; /* ], line 352 */
+            {   int ret = slice_del(z); /* delete, line 352 */
+                if (ret < 0) return ret;
+            }
+            goto lab15;
+        lab16:
+            z->c = z->l - m5;
+            {   int ret = r_mark_sU(z);
+                if (ret == 0) goto lab17; /* call mark_sU, line 354 */
+                if (ret < 0) return ret;
+            }
+            z->bra = z->c; /* ], line 354 */
+            {   int ret = slice_del(z); /* delete, line 354 */
+                if (ret < 0) return ret;
+            }
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 354 */
+                z->ket = z->c; /* [, line 354 */
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab18; } /* call mark_lAr, line 354 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 354 */
+                {   int ret = slice_del(z); /* delete, line 354 */
+                    if (ret < 0) return ret;
+                }
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab18; } /* call stem_suffix_chain_before_ki, line 354 */
+                    if (ret < 0) return ret;
+                }
+            lab18:
+                ;
+            }
+            goto lab15;
+        lab17:
+            z->c = z->l - m5;
+            {   int ret = r_stem_suffix_chain_before_ki(z);
+                if (ret == 0) return 0; /* call stem_suffix_chain_before_ki, line 356 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab15:
+        ;
+    }
+lab0:
+    return 1;
+}
+
+static int r_stem_noun_suffixes(struct SN_env * z) {
+    {   int m1 = z->l - z->c; (void)m1; /* or, line 363 */
+        z->ket = z->c; /* [, line 362 */
+        {   int ret = r_mark_lAr(z);
+            if (ret == 0) goto lab1; /* call mark_lAr, line 362 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 362 */
+        {   int ret = slice_del(z); /* delete, line 362 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 362 */
+            {   int ret = r_stem_suffix_chain_before_ki(z);
+                if (ret == 0) { z->c = z->l - m_keep; goto lab2; } /* call stem_suffix_chain_before_ki, line 362 */
+                if (ret < 0) return ret;
+            }
+        lab2:
+            ;
+        }
+        goto lab0;
+    lab1:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 364 */
+        {   int ret = r_mark_ncA(z);
+            if (ret == 0) goto lab3; /* call mark_ncA, line 364 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 364 */
+        {   int ret = slice_del(z); /* delete, line 364 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 365 */
+            {   int m2 = z->l - z->c; (void)m2; /* or, line 367 */
+                z->ket = z->c; /* [, line 366 */
+                {   int ret = r_mark_lArI(z);
+                    if (ret == 0) goto lab6; /* call mark_lArI, line 366 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 366 */
+                {   int ret = slice_del(z); /* delete, line 366 */
+                    if (ret < 0) return ret;
+                }
+                goto lab5;
+            lab6:
+                z->c = z->l - m2;
+                z->ket = z->c; /* [, line 368 */
+                {   int m3 = z->l - z->c; (void)m3; /* or, line 368 */
+                    {   int ret = r_mark_possessives(z);
+                        if (ret == 0) goto lab9; /* call mark_possessives, line 368 */
+                        if (ret < 0) return ret;
+                    }
+                    goto lab8;
+                lab9:
+                    z->c = z->l - m3;
+                    {   int ret = r_mark_sU(z);
+                        if (ret == 0) goto lab7; /* call mark_sU, line 368 */
+                        if (ret < 0) return ret;
+                    }
+                }
+            lab8:
+                z->bra = z->c; /* ], line 368 */
+                {   int ret = slice_del(z); /* delete, line 368 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 368 */
+                    z->ket = z->c; /* [, line 368 */
+                    {   int ret = r_mark_lAr(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab10; } /* call mark_lAr, line 368 */
+                        if (ret < 0) return ret;
+                    }
+                    z->bra = z->c; /* ], line 368 */
+                    {   int ret = slice_del(z); /* delete, line 368 */
+                        if (ret < 0) return ret;
+                    }
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab10; } /* call stem_suffix_chain_before_ki, line 368 */
+                        if (ret < 0) return ret;
+                    }
+                lab10:
+                    ;
+                }
+                goto lab5;
+            lab7:
+                z->c = z->l - m2;
+                z->ket = z->c; /* [, line 370 */
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab4; } /* call mark_lAr, line 370 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 370 */
+                {   int ret = slice_del(z); /* delete, line 370 */
+                    if (ret < 0) return ret;
+                }
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab4; } /* call stem_suffix_chain_before_ki, line 370 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab5:
+        lab4:
+            ;
+        }
+        goto lab0;
+    lab3:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 374 */
+        {   int m4 = z->l - z->c; (void)m4; /* or, line 374 */
+            {   int ret = r_mark_ndA(z);
+                if (ret == 0) goto lab13; /* call mark_ndA, line 374 */
+                if (ret < 0) return ret;
+            }
+            goto lab12;
+        lab13:
+            z->c = z->l - m4;
+            {   int ret = r_mark_nA(z);
+                if (ret == 0) goto lab11; /* call mark_nA, line 374 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab12:
+        {   int m5 = z->l - z->c; (void)m5; /* or, line 377 */
+            {   int ret = r_mark_lArI(z);
+                if (ret == 0) goto lab15; /* call mark_lArI, line 376 */
+                if (ret < 0) return ret;
+            }
+            z->bra = z->c; /* ], line 376 */
+            {   int ret = slice_del(z); /* delete, line 376 */
+                if (ret < 0) return ret;
+            }
+            goto lab14;
+        lab15:
+            z->c = z->l - m5;
+            {   int ret = r_mark_sU(z);
+                if (ret == 0) goto lab16; /* call mark_sU, line 378 */
+                if (ret < 0) return ret;
+            }
+            z->bra = z->c; /* ], line 378 */
+            {   int ret = slice_del(z); /* delete, line 378 */
+                if (ret < 0) return ret;
+            }
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 378 */
+                z->ket = z->c; /* [, line 378 */
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab17; } /* call mark_lAr, line 378 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 378 */
+                {   int ret = slice_del(z); /* delete, line 378 */
+                    if (ret < 0) return ret;
+                }
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab17; } /* call stem_suffix_chain_before_ki, line 378 */
+                    if (ret < 0) return ret;
+                }
+            lab17:
+                ;
+            }
+            goto lab14;
+        lab16:
+            z->c = z->l - m5;
+            {   int ret = r_stem_suffix_chain_before_ki(z);
+                if (ret == 0) goto lab11; /* call stem_suffix_chain_before_ki, line 380 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab14:
+        goto lab0;
+    lab11:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 384 */
+        {   int m6 = z->l - z->c; (void)m6; /* or, line 384 */
+            {   int ret = r_mark_ndAn(z);
+                if (ret == 0) goto lab20; /* call mark_ndAn, line 384 */
+                if (ret < 0) return ret;
+            }
+            goto lab19;
+        lab20:
+            z->c = z->l - m6;
+            {   int ret = r_mark_nU(z);
+                if (ret == 0) goto lab18; /* call mark_nU, line 384 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab19:
+        {   int m7 = z->l - z->c; (void)m7; /* or, line 384 */
+            {   int ret = r_mark_sU(z);
+                if (ret == 0) goto lab22; /* call mark_sU, line 384 */
+                if (ret < 0) return ret;
+            }
+            z->bra = z->c; /* ], line 384 */
+            {   int ret = slice_del(z); /* delete, line 384 */
+                if (ret < 0) return ret;
+            }
+            {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 384 */
+                z->ket = z->c; /* [, line 384 */
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab23; } /* call mark_lAr, line 384 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 384 */
+                {   int ret = slice_del(z); /* delete, line 384 */
+                    if (ret < 0) return ret;
+                }
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab23; } /* call stem_suffix_chain_before_ki, line 384 */
+                    if (ret < 0) return ret;
+                }
+            lab23:
+                ;
+            }
+            goto lab21;
+        lab22:
+            z->c = z->l - m7;
+            {   int ret = r_mark_lArI(z);
+                if (ret == 0) goto lab18; /* call mark_lArI, line 384 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab21:
+        goto lab0;
+    lab18:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 386 */
+        {   int ret = r_mark_DAn(z);
+            if (ret == 0) goto lab24; /* call mark_DAn, line 386 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 386 */
+        {   int ret = slice_del(z); /* delete, line 386 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 386 */
+            z->ket = z->c; /* [, line 386 */
+            {   int m8 = z->l - z->c; (void)m8; /* or, line 389 */
+                {   int ret = r_mark_possessives(z);
+                    if (ret == 0) goto lab27; /* call mark_possessives, line 388 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 388 */
+                {   int ret = slice_del(z); /* delete, line 388 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 388 */
+                    z->ket = z->c; /* [, line 388 */
+                    {   int ret = r_mark_lAr(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab28; } /* call mark_lAr, line 388 */
+                        if (ret < 0) return ret;
+                    }
+                    z->bra = z->c; /* ], line 388 */
+                    {   int ret = slice_del(z); /* delete, line 388 */
+                        if (ret < 0) return ret;
+                    }
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab28; } /* call stem_suffix_chain_before_ki, line 388 */
+                        if (ret < 0) return ret;
+                    }
+                lab28:
+                    ;
+                }
+                goto lab26;
+            lab27:
+                z->c = z->l - m8;
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) goto lab29; /* call mark_lAr, line 390 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 390 */
+                {   int ret = slice_del(z); /* delete, line 390 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 390 */
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab30; } /* call stem_suffix_chain_before_ki, line 390 */
+                        if (ret < 0) return ret;
+                    }
+                lab30:
+                    ;
+                }
+                goto lab26;
+            lab29:
+                z->c = z->l - m8;
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab25; } /* call stem_suffix_chain_before_ki, line 392 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab26:
+        lab25:
+            ;
+        }
+        goto lab0;
+    lab24:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 396 */
+        {   int m9 = z->l - z->c; (void)m9; /* or, line 396 */
+            {   int ret = r_mark_nUn(z);
+                if (ret == 0) goto lab33; /* call mark_nUn, line 396 */
+                if (ret < 0) return ret;
+            }
+            goto lab32;
+        lab33:
+            z->c = z->l - m9;
+            {   int ret = r_mark_ylA(z);
+                if (ret == 0) goto lab31; /* call mark_ylA, line 396 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab32:
+        z->bra = z->c; /* ], line 396 */
+        {   int ret = slice_del(z); /* delete, line 396 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 397 */
+            {   int m10 = z->l - z->c; (void)m10; /* or, line 399 */
+                z->ket = z->c; /* [, line 398 */
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) goto lab36; /* call mark_lAr, line 398 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 398 */
+                {   int ret = slice_del(z); /* delete, line 398 */
+                    if (ret < 0) return ret;
+                }
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) goto lab36; /* call stem_suffix_chain_before_ki, line 398 */
+                    if (ret < 0) return ret;
+                }
+                goto lab35;
+            lab36:
+                z->c = z->l - m10;
+                z->ket = z->c; /* [, line 400 */
+                {   int m11 = z->l - z->c; (void)m11; /* or, line 400 */
+                    {   int ret = r_mark_possessives(z);
+                        if (ret == 0) goto lab39; /* call mark_possessives, line 400 */
+                        if (ret < 0) return ret;
+                    }
+                    goto lab38;
+                lab39:
+                    z->c = z->l - m11;
+                    {   int ret = r_mark_sU(z);
+                        if (ret == 0) goto lab37; /* call mark_sU, line 400 */
+                        if (ret < 0) return ret;
+                    }
+                }
+            lab38:
+                z->bra = z->c; /* ], line 400 */
+                {   int ret = slice_del(z); /* delete, line 400 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 400 */
+                    z->ket = z->c; /* [, line 400 */
+                    {   int ret = r_mark_lAr(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab40; } /* call mark_lAr, line 400 */
+                        if (ret < 0) return ret;
+                    }
+                    z->bra = z->c; /* ], line 400 */
+                    {   int ret = slice_del(z); /* delete, line 400 */
+                        if (ret < 0) return ret;
+                    }
+                    {   int ret = r_stem_suffix_chain_before_ki(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab40; } /* call stem_suffix_chain_before_ki, line 400 */
+                        if (ret < 0) return ret;
+                    }
+                lab40:
+                    ;
+                }
+                goto lab35;
+            lab37:
+                z->c = z->l - m10;
+                {   int ret = r_stem_suffix_chain_before_ki(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab34; } /* call stem_suffix_chain_before_ki, line 402 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab35:
+        lab34:
+            ;
+        }
+        goto lab0;
+    lab31:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 406 */
+        {   int ret = r_mark_lArI(z);
+            if (ret == 0) goto lab41; /* call mark_lArI, line 406 */
+            if (ret < 0) return ret;
+        }
+        z->bra = z->c; /* ], line 406 */
+        {   int ret = slice_del(z); /* delete, line 406 */
+            if (ret < 0) return ret;
+        }
+        goto lab0;
+    lab41:
+        z->c = z->l - m1;
+        {   int ret = r_stem_suffix_chain_before_ki(z);
+            if (ret == 0) goto lab42; /* call stem_suffix_chain_before_ki, line 408 */
+            if (ret < 0) return ret;
+        }
+        goto lab0;
+    lab42:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 410 */
+        {   int m12 = z->l - z->c; (void)m12; /* or, line 410 */
+            {   int ret = r_mark_DA(z);
+                if (ret == 0) goto lab45; /* call mark_DA, line 410 */
+                if (ret < 0) return ret;
+            }
+            goto lab44;
+        lab45:
+            z->c = z->l - m12;
+            {   int ret = r_mark_yU(z);
+                if (ret == 0) goto lab46; /* call mark_yU, line 410 */
+                if (ret < 0) return ret;
+            }
+            goto lab44;
+        lab46:
+            z->c = z->l - m12;
+            {   int ret = r_mark_yA(z);
+                if (ret == 0) goto lab43; /* call mark_yA, line 410 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab44:
+        z->bra = z->c; /* ], line 410 */
+        {   int ret = slice_del(z); /* delete, line 410 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 410 */
+            z->ket = z->c; /* [, line 410 */
+            {   int m13 = z->l - z->c; (void)m13; /* or, line 410 */
+                {   int ret = r_mark_possessives(z);
+                    if (ret == 0) goto lab49; /* call mark_possessives, line 410 */
+                    if (ret < 0) return ret;
+                }
+                z->bra = z->c; /* ], line 410 */
+                {   int ret = slice_del(z); /* delete, line 410 */
+                    if (ret < 0) return ret;
+                }
+                {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 410 */
+                    z->ket = z->c; /* [, line 410 */
+                    {   int ret = r_mark_lAr(z);
+                        if (ret == 0) { z->c = z->l - m_keep; goto lab50; } /* call mark_lAr, line 410 */
+                        if (ret < 0) return ret;
+                    }
+                lab50:
+                    ;
+                }
+                goto lab48;
+            lab49:
+                z->c = z->l - m13;
+                {   int ret = r_mark_lAr(z);
+                    if (ret == 0) { z->c = z->l - m_keep; goto lab47; } /* call mark_lAr, line 410 */
+                    if (ret < 0) return ret;
+                }
+            }
+        lab48:
+            z->bra = z->c; /* ], line 410 */
+            {   int ret = slice_del(z); /* delete, line 410 */
+                if (ret < 0) return ret;
+            }
+            z->ket = z->c; /* [, line 410 */
+            {   int ret = r_stem_suffix_chain_before_ki(z);
+                if (ret == 0) { z->c = z->l - m_keep; goto lab47; } /* call stem_suffix_chain_before_ki, line 410 */
+                if (ret < 0) return ret;
+            }
+        lab47:
+            ;
+        }
+        goto lab0;
+    lab43:
+        z->c = z->l - m1;
+        z->ket = z->c; /* [, line 412 */
+        {   int m14 = z->l - z->c; (void)m14; /* or, line 412 */
+            {   int ret = r_mark_possessives(z);
+                if (ret == 0) goto lab52; /* call mark_possessives, line 412 */
+                if (ret < 0) return ret;
+            }
+            goto lab51;
+        lab52:
+            z->c = z->l - m14;
+            {   int ret = r_mark_sU(z);
+                if (ret == 0) return 0; /* call mark_sU, line 412 */
+                if (ret < 0) return ret;
+            }
+        }
+    lab51:
+        z->bra = z->c; /* ], line 412 */
+        {   int ret = slice_del(z); /* delete, line 412 */
+            if (ret < 0) return ret;
+        }
+        {   int m_keep = z->l - z->c;/* (void) m_keep;*/ /* try, line 412 */
+            z->ket = z->c; /* [, line 412 */
+            {   int ret = r_mark_lAr(z);
+                if (ret == 0) { z->c = z->l - m_keep; goto lab53; } /* call mark_lAr, line 412 */
+                if (ret < 0) return ret;
+            }
+            z->bra = z->c; /* ], line 412 */
+            {   int ret = slice_del(z); /* delete, line 412 */
+                if (ret < 0) return ret;
+            }
+            {   int ret = r_stem_suffix_chain_before_ki(z);
+                if (ret == 0) { z->c = z->l - m_keep; goto lab53; } /* call stem_suffix_chain_before_ki, line 412 */
+                if (ret < 0) return ret;
+            }
+        lab53:
+            ;
+        }
+    }
+lab0:
+    return 1;
+}
+
+static int r_post_process_last_consonants(struct SN_env * z) {
+    int among_var;
+    z->ket = z->c; /* [, line 416 */
+    among_var = find_among_b(z, a_23, 4); /* substring, line 416 */
+    if (!(among_var)) return 0;
+    z->bra = z->c; /* ], line 416 */
+    switch(among_var) {
+        case 0: return 0;
+        case 1:
+            {   int ret = slice_from_s(z, 1, s_16); /* <-, line 417 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 2:
+            {   int ret = slice_from_s(z, 2, s_17); /* <-, line 418 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 3:
+            {   int ret = slice_from_s(z, 1, s_18); /* <-, line 419 */
+                if (ret < 0) return ret;
+            }
+            break;
+        case 4:
+            {   int ret = slice_from_s(z, 1, s_19); /* <-, line 420 */
+                if (ret < 0) return ret;
+            }
+            break;
+    }
+    return 1;
+}
+
+static int r_append_U_to_stems_ending_with_d_or_g(struct SN_env * z) {
+    {   int m_test = z->l - z->c; /* test, line 431 */
+        {   int m1 = z->l - z->c; (void)m1; /* or, line 431 */
+            if (!(eq_s_b(z, 1, s_20))) goto lab1;
+            goto lab0;
+        lab1:
+            z->c = z->l - m1;
+            if (!(eq_s_b(z, 1, s_21))) return 0;
+        }
+    lab0:
+        z->c = z->l - m_test;
+    }
+    {   int m2 = z->l - z->c; (void)m2; /* or, line 433 */
+        {   int m_test = z->l - z->c; /* test, line 432 */
+            if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) goto lab3; /* goto */ /* grouping vowel, line 432 */
+            {   int m3 = z->l - z->c; (void)m3; /* or, line 432 */
+                if (!(eq_s_b(z, 1, s_22))) goto lab5;
+                goto lab4;
+            lab5:
+                z->c = z->l - m3;
+                if (!(eq_s_b(z, 2, s_23))) goto lab3;
+            }
+        lab4:
+            z->c = z->l - m_test;
+        }
+        {   int c_keep = z->c;
+            int ret = insert_s(z, z->c, z->c, 2, s_24); /* <+, line 432 */
+            z->c = c_keep;
+            if (ret < 0) return ret;
+        }
+        goto lab2;
+    lab3:
+        z->c = z->l - m2;
+        {   int m_test = z->l - z->c; /* test, line 434 */
+            if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) goto lab6; /* goto */ /* grouping vowel, line 434 */
+            {   int m4 = z->l - z->c; (void)m4; /* or, line 434 */
+                if (!(eq_s_b(z, 1, s_25))) goto lab8;
+                goto lab7;
+            lab8:
+                z->c = z->l - m4;
+                if (!(eq_s_b(z, 1, s_26))) goto lab6;
+            }
+        lab7:
+            z->c = z->l - m_test;
+        }
+        {   int c_keep = z->c;
+            int ret = insert_s(z, z->c, z->c, 1, s_27); /* <+, line 434 */
+            z->c = c_keep;
+            if (ret < 0) return ret;
+        }
+        goto lab2;
+    lab6:
+        z->c = z->l - m2;
+        {   int m_test = z->l - z->c; /* test, line 436 */
+            if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) goto lab9; /* goto */ /* grouping vowel, line 436 */
+            {   int m5 = z->l - z->c; (void)m5; /* or, line 436 */
+                if (!(eq_s_b(z, 1, s_28))) goto lab11;
+                goto lab10;
+            lab11:
+                z->c = z->l - m5;
+                if (!(eq_s_b(z, 1, s_29))) goto lab9;
+            }
+        lab10:
+            z->c = z->l - m_test;
+        }
+        {   int c_keep = z->c;
+            int ret = insert_s(z, z->c, z->c, 1, s_30); /* <+, line 436 */
+            z->c = c_keep;
+            if (ret < 0) return ret;
+        }
+        goto lab2;
+    lab9:
+        z->c = z->l - m2;
+        {   int m_test = z->l - z->c; /* test, line 438 */
+            if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) return 0; /* goto */ /* grouping vowel, line 438 */
+            {   int m6 = z->l - z->c; (void)m6; /* or, line 438 */
+                if (!(eq_s_b(z, 2, s_31))) goto lab13;
+                goto lab12;
+            lab13:
+                z->c = z->l - m6;
+                if (!(eq_s_b(z, 2, s_32))) return 0;
+            }
+        lab12:
+            z->c = z->l - m_test;
+        }
+        {   int c_keep = z->c;
+            int ret = insert_s(z, z->c, z->c, 2, s_33); /* <+, line 438 */
+            z->c = c_keep;
+            if (ret < 0) return ret;
+        }
+    }
+lab2:
+    return 1;
+}
+
+static int r_more_than_one_syllable_word(struct SN_env * z) {
+    {   int c_test = z->c; /* test, line 446 */
+        {   int i = 2;
+            while(1) { /* atleast, line 446 */
+                int c1 = z->c;
+                {    /* gopast */ /* grouping vowel, line 446 */
+                    int ret = out_grouping_U(z, g_vowel, 97, 305, 1);
+                    if (ret < 0) goto lab0;
+                    z->c += ret;
+                }
+                i--;
+                continue;
+            lab0:
+                z->c = c1;
+                break;
+            }
+            if (i > 0) return 0;
+        }
+        z->c = c_test;
+    }
+    return 1;
+}
+
+static int r_is_reserved_word(struct SN_env * z) {
+    {   int c1 = z->c; /* or, line 451 */
+        {   int c_test = z->c; /* test, line 450 */
+            while(1) { /* gopast, line 450 */
+                if (!(eq_s(z, 2, s_34))) goto lab2;
+                break;
+            lab2:
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) goto lab1;
+                    z->c = ret; /* gopast, line 450 */
+                }
+            }
+            z->I[0] = 2;
+            if (!(z->I[0] == z->l)) goto lab1;
+            z->c = c_test;
+        }
+        goto lab0;
+    lab1:
+        z->c = c1;
+        {   int c_test = z->c; /* test, line 452 */
+            while(1) { /* gopast, line 452 */
+                if (!(eq_s(z, 5, s_35))) goto lab3;
+                break;
+            lab3:
+                {   int ret = skip_utf8(z->p, z->c, 0, z->l, 1);
+                    if (ret < 0) return 0;
+                    z->c = ret; /* gopast, line 452 */
+                }
+            }
+            z->I[0] = 5;
+            if (!(z->I[0] == z->l)) return 0;
+            z->c = c_test;
+        }
+    }
+lab0:
+    return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+    {   int c1 = z->c; /* not, line 456 */
+        {   int ret = r_is_reserved_word(z);
+            if (ret == 0) goto lab0; /* call is_reserved_word, line 456 */
+            if (ret < 0) return ret;
+        }
+        return 0;
+    lab0:
+        z->c = c1;
+    }
+    z->lb = z->c; z->c = z->l; /* backwards, line 457 */
+
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 458 */
+        {   int ret = r_append_U_to_stems_ending_with_d_or_g(z);
+            if (ret == 0) goto lab1; /* call append_U_to_stems_ending_with_d_or_g, line 458 */
+            if (ret < 0) return ret;
+        }
+    lab1:
+        z->c = z->l - m2;
+    }
+    {   int m3 = z->l - z->c; (void)m3; /* do, line 459 */
+        {   int ret = r_post_process_last_consonants(z);
+            if (ret == 0) goto lab2; /* call post_process_last_consonants, line 459 */
+            if (ret < 0) return ret;
+        }
+    lab2:
+        z->c = z->l - m3;
+    }
+    z->c = z->lb;
+    return 1;
+}
+
+extern int turkish_UTF_8_stem(struct SN_env * z) {
+    {   int ret = r_more_than_one_syllable_word(z);
+        if (ret == 0) return 0; /* call more_than_one_syllable_word, line 465 */
+        if (ret < 0) return ret;
+    }
+    z->lb = z->c; z->c = z->l; /* backwards, line 467 */
+
+    {   int m1 = z->l - z->c; (void)m1; /* do, line 468 */
+        {   int ret = r_stem_nominal_verb_suffixes(z);
+            if (ret == 0) goto lab0; /* call stem_nominal_verb_suffixes, line 468 */
+            if (ret < 0) return ret;
+        }
+    lab0:
+        z->c = z->l - m1;
+    }
+    if (!(z->B[0])) return 0; /* Boolean test continue_stemming_noun_suffixes, line 469 */
+    {   int m2 = z->l - z->c; (void)m2; /* do, line 470 */
+        {   int ret = r_stem_noun_suffixes(z);
+            if (ret == 0) goto lab1; /* call stem_noun_suffixes, line 470 */
+            if (ret < 0) return ret;
+        }
+    lab1:
+        z->c = z->l - m2;
+    }
+    z->c = z->lb;
+    {   int ret = r_postlude(z);
+        if (ret == 0) return 0; /* call postlude, line 473 */
+        if (ret < 0) return ret;
+    }
+    return 1;
+}
+
+extern struct SN_env * turkish_UTF_8_create_env(void) { return SN_create_env(0, 1, 1); }
+
+extern void turkish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_turkish.h b/libstemmer_c/src_c/stem_UTF_8_turkish.h
new file mode 100644
index 0000000..8173a17
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_turkish.h
@@ -0,0 +1,16 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct SN_env * turkish_UTF_8_create_env(void);
+extern void turkish_UTF_8_close_env(struct SN_env * z);
+
+extern int turkish_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/ppport.h b/ppport.h
index dbc1227..f235c4b 100644
--- a/ppport.h
+++ b/ppport.h
@@ -4,9 +4,9 @@
 /*
 ----------------------------------------------------------------------
 
-    ppport.h -- Perl/Pollution/Portability Version 3.10
+    ppport.h -- Perl/Pollution/Portability Version 3.14
 
-    Automatically created by Devel::PPPort running under perl 5.008007.
+    Automatically created by Devel::PPPort running under perl 5.008006.
 
     Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
     includes in parts/inc/ instead.
@@ -21,7 +21,7 @@ SKIP
 
 =head1 NAME
 
-ppport.h - Perl/Pollution/Portability version 3.10
+ppport.h - Perl/Pollution/Portability version 3.14
 
 =head1 SYNOPSIS
 
@@ -56,7 +56,7 @@ ppport.h - Perl/Pollution/Portability version 3.10
 =head1 COMPATIBILITY
 
 This version of F<ppport.h> is designed to support operation with Perl
-installations back to 5.003, and has been tested up to 5.9.4.
+installations back to 5.003, and has been tested up to 5.10.0.
 
 =head1 OPTIONS
 
@@ -78,7 +78,10 @@ to be installed on your system.
 
 If this option is given, a copy of each file will be saved with
 the given suffix that contains the suggested changes. This does
-not require any external programs.
+not require any external programs. Note that this does not
+automagially add a dot between the original filename and the
+suffix. If you want the dot, you have to include it in the option
+argument.
 
 If neither C<--patch> or C<--copy> are given, the default is to
 simply print the diffs for each file. This requires either
@@ -117,7 +120,7 @@ alerts will be printed.
 =head2 --nohints
 
 Don't output any hints. Hints often contain useful portability
-notes.
+notes. Warnings will still be displayed.
 
 =head2 --nochanges
 
@@ -144,7 +147,7 @@ module is installed.
 
 Lists the API elements for which compatibility is provided by
 F<ppport.h>. Also lists if it must be explicitly requested,
-if it has dependencies, and if there are hints for it.
+if it has dependencies, and if there are hints or warnings for it.
 
 =head2 --list-unsupported
 
@@ -221,17 +224,22 @@ same function or variable in your project.
     grok_number()             NEED_grok_number             NEED_grok_number_GLOBAL
     grok_numeric_radix()      NEED_grok_numeric_radix      NEED_grok_numeric_radix_GLOBAL
     grok_oct()                NEED_grok_oct                NEED_grok_oct_GLOBAL
+    load_module()             NEED_load_module             NEED_load_module_GLOBAL
     my_snprintf()             NEED_my_snprintf             NEED_my_snprintf_GLOBAL
     my_strlcat()              NEED_my_strlcat              NEED_my_strlcat_GLOBAL
     my_strlcpy()              NEED_my_strlcpy              NEED_my_strlcpy_GLOBAL
     newCONSTSUB()             NEED_newCONSTSUB             NEED_newCONSTSUB_GLOBAL
     newRV_noinc()             NEED_newRV_noinc             NEED_newRV_noinc_GLOBAL
-    sv_2pv_nolen()            NEED_sv_2pv_nolen            NEED_sv_2pv_nolen_GLOBAL
+    newSVpvn_flags()          NEED_newSVpvn_flags          NEED_newSVpvn_flags_GLOBAL
+    newSVpvn_share()          NEED_newSVpvn_share          NEED_newSVpvn_share_GLOBAL
+    sv_2pv_flags()            NEED_sv_2pv_flags            NEED_sv_2pv_flags_GLOBAL
     sv_2pvbyte()              NEED_sv_2pvbyte              NEED_sv_2pvbyte_GLOBAL
     sv_catpvf_mg()            NEED_sv_catpvf_mg            NEED_sv_catpvf_mg_GLOBAL
     sv_catpvf_mg_nocontext()  NEED_sv_catpvf_mg_nocontext  NEED_sv_catpvf_mg_nocontext_GLOBAL
+    sv_pvn_force_flags()      NEED_sv_pvn_force_flags      NEED_sv_pvn_force_flags_GLOBAL
     sv_setpvf_mg()            NEED_sv_setpvf_mg            NEED_sv_setpvf_mg_GLOBAL
     sv_setpvf_mg_nocontext()  NEED_sv_setpvf_mg_nocontext  NEED_sv_setpvf_mg_nocontext_GLOBAL
+    vload_module()            NEED_vload_module            NEED_vload_module_GLOBAL
     vnewSVpvf()               NEED_vnewSVpvf               NEED_vnewSVpvf_GLOBAL
     warner()                  NEED_warner                  NEED_warner_GLOBAL
 
@@ -282,6 +290,10 @@ the C<--diff> option:
 
 This would output context diffs with 10 lines of context.
 
+If you want to create patched copies of your files instead, use:
+
+    perl ppport.h --copy=.new
+
 To display portability information for the C<newSVpvn> function,
 use:
 
@@ -340,7 +352,7 @@ module from CPAN.
 
 =head1 COPYRIGHT
 
-Version 3.x, Copyright (c) 2004-2006, Marcus Holland-Moritz.
+Version 3.x, Copyright (c) 2004-2008, Marcus Holland-Moritz.
 
 Version 2.x, Copyright (C) 2001, Paul Marquess.
 
@@ -357,7 +369,10 @@ See L<Devel::PPPort>.
 
 use strict;
 
-my $VERSION = 3.10;
+# Disable broken TRIE-optimization
+BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
+
+my $VERSION = 3.14;
 
 my %opt = (
   quiet     => 0,
@@ -374,6 +389,12 @@ my($ppport) = $0 =~ /([\w.]+)$/;
 my $LF = '(?:\r\n|[\r\n])';   # line feed
 my $HS = "[ \t]";             # horizontal whitespace
 
+# Never use C comments in this file!
+my $ccs  = '/'.'*';
+my $cce  = '*'.'/';
+my $rccs = quotemeta $ccs;
+my $rcce = quotemeta $cce;
+
 eval {
   require Getopt::Long;
   Getopt::Long::GetOptions(\%opt, qw(
@@ -409,12 +430,6 @@ else {
   $opt{'compat-version'} = 5;
 }
 
-# Never use C comments in this file!!!!!
-my $ccs  = '/'.'*';
-my $cce  = '*'.'/';
-my $rccs = quotemeta $ccs;
-my $rcce = quotemeta $cce;
-
 my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
                 ? ( $1 => {
                       ($2                  ? ( base     => $2 ) : ()),
@@ -473,6 +488,7 @@ HePV||5.004000|
 HeSVKEY_force||5.004000|
 HeSVKEY_set||5.004000|
 HeSVKEY||5.004000|
+HeUTF8||5.011000|
 HeVAL||5.004000|
 HvNAME|||
 INT2PTR|5.006000||p
@@ -492,7 +508,7 @@ IVdf|5.006000||p
 LEAVE|||
 LVRET|||
 MARK|||
-MULTICALL||5.009004|
+MULTICALL||5.011000|
 MY_CXT_CLONE|5.009002||p
 MY_CXT_INIT|5.007003||p
 MY_CXT|5.007003||p
@@ -530,8 +546,9 @@ PAD_SET_CUR|||
 PAD_SVl|||
 PAD_SV|||
 PERL_ABS|5.008001||p
-PERL_BCDVERSION|5.009004||p
+PERL_BCDVERSION|5.011000||p
 PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
+PERL_HASH|5.004000||p
 PERL_INT_MAX|5.004000||p
 PERL_INT_MIN|5.004000||p
 PERL_LONG_MAX|5.004000||p
@@ -547,10 +564,10 @@ PERL_MAGIC_envelem|5.007002||p
 PERL_MAGIC_env|5.007002||p
 PERL_MAGIC_ext|5.007002||p
 PERL_MAGIC_fm|5.007002||p
-PERL_MAGIC_glob|5.007002||p
+PERL_MAGIC_glob|5.011000||p
 PERL_MAGIC_isaelem|5.007002||p
 PERL_MAGIC_isa|5.007002||p
-PERL_MAGIC_mutex|5.007002||p
+PERL_MAGIC_mutex|5.011000||p
 PERL_MAGIC_nkeys|5.007002||p
 PERL_MAGIC_overload_elem|5.007002||p
 PERL_MAGIC_overload_table|5.007002||p
@@ -602,12 +619,13 @@ PERL_USE_GCC_BRACE_GROUPS|5.009004||p
 PERL_USHORT_MAX|5.004000||p
 PERL_USHORT_MIN|5.004000||p
 PERL_VERSION|5.006000||p
+PL_DBsignal|5.005000||p
 PL_DBsingle|||pn
 PL_DBsub|||pn
-PL_DBtrace|||n
+PL_DBtrace|||pn
 PL_Sv|5.005000||p
 PL_compiling|5.004050||p
-PL_copline|5.005000||p
+PL_copline|5.011000||p
 PL_curcop|5.004050||p
 PL_curstash|5.004050||p
 PL_debstash|5.004050||p
@@ -616,9 +634,11 @@ PL_diehook|5.004050||p
 PL_dirty|5.004050||p
 PL_dowarn|||pn
 PL_errgv|5.004050||p
+PL_expect|5.011000||p
 PL_hexdigit|5.005000||p
 PL_hints|5.005000||p
 PL_last_in_gv|||n
+PL_laststatval|5.005000||p
 PL_modglobal||5.005000|n
 PL_na|5.004050||pn
 PL_no_modify|5.006000||p
@@ -632,6 +652,7 @@ PL_rs|||n
 PL_signals|5.008001||p
 PL_stack_base|5.004050||p
 PL_stack_sp|5.004050||p
+PL_statcache|5.005000||p
 PL_stdingv|5.004050||p
 PL_sv_arenaroot|5.004050||p
 PL_sv_no|5.004050||pn
@@ -639,7 +660,7 @@ PL_sv_undef|5.004050||pn
 PL_sv_yes|5.004050||pn
 PL_tainted|5.004050||p
 PL_tainting|5.004050||p
-POP_MULTICALL||5.009004|
+POP_MULTICALL||5.011000|
 POPi|||n
 POPl|||n
 POPn|||n
@@ -653,7 +674,7 @@ PTR2UV|5.006000||p
 PTR2ul|5.007001||p
 PTRV|5.006000||p
 PUSHMARK|||
-PUSH_MULTICALL||5.009004|
+PUSH_MULTICALL||5.011000|
 PUSHi|||
 PUSHmortal|5.009002||p
 PUSHn|||
@@ -684,8 +705,7 @@ PerlIO_stdout||5.007003|
 PerlIO_tell||5.007003|
 PerlIO_unread||5.007003|
 PerlIO_write||5.007003|
-Perl_warner_nocontext|5.006000||p
-Perl_warner|5.006000||p
+Perl_signbit||5.009005|n
 PoisonFree|5.009004||p
 PoisonNew|5.009004||p
 PoisonWith|5.009004||p
@@ -706,6 +726,17 @@ STMT_END|||p
 STMT_START|||p
 STR_WITH_LEN|5.009003||p
 ST|||
+SV_CONST_RETURN|5.009003||p
+SV_COW_DROP_PV|5.008001||p
+SV_COW_SHARED_HASH_KEYS|5.009005||p
+SV_GMAGIC|5.007002||p
+SV_HAS_TRAILING_NUL|5.009004||p
+SV_IMMEDIATE_UNREF|5.007001||p
+SV_MUTABLE_RETURN|5.009003||p
+SV_NOSTEAL|5.009002||p
+SV_SMAGIC|5.009003||p
+SV_UTF8_NO_ENCODING|5.008001||p
+SVf_UTF8|5.006000||p
 SVf|5.006000||p
 SVt_IV|||
 SVt_NV|||
@@ -717,6 +748,7 @@ SVt_PV|||
 Safefree|||
 Slab_Alloc|||
 Slab_Free|||
+Slab_to_rw|||
 StructCopy|||
 SvCUR_set|||
 SvCUR|||
@@ -766,9 +798,24 @@ SvPOK|||
 SvPVX_const|5.009003||p
 SvPVX_mutable|5.009003||p
 SvPVX|||
+SvPV_const|5.009003||p
+SvPV_flags_const_nolen|5.009003||p
+SvPV_flags_const|5.009003||p
+SvPV_flags_mutable|5.009003||p
+SvPV_flags|5.007002||p
+SvPV_force_flags_mutable|5.009003||p
+SvPV_force_flags_nolen|5.009003||p
+SvPV_force_flags|5.007002||p
+SvPV_force_mutable|5.009003||p
+SvPV_force_nolen|5.009003||p
+SvPV_force_nomg_nolen|5.009003||p
 SvPV_force_nomg|5.007002||p
-SvPV_force|||
+SvPV_force|||p
+SvPV_mutable|5.009003||p
+SvPV_nolen_const|5.009003||p
 SvPV_nolen|5.006000||p
+SvPV_nomg_const_nolen|5.009003||p
+SvPV_nomg_const|5.009003||p
 SvPV_nomg|5.007002||p
 SvPV_set|||
 SvPVbyte_force||5.009002|
@@ -798,7 +845,10 @@ SvROK_on|||
 SvROK|||
 SvRV_set|5.009003||p
 SvRV|||
+SvRXOK||5.009005|
+SvRX||5.009005|
 SvSETMAGIC|||
+SvSHARED_HASH|5.009003||p
 SvSHARE||5.007003|
 SvSTASH_set|5.009003||p
 SvSTASH|||
@@ -813,7 +863,7 @@ SvTAINT|||
 SvTRUE|||
 SvTYPE|||
 SvUNLOCK||5.007003|
-SvUOK||5.007001|
+SvUOK|5.007001|5.006000|p
 SvUPGRADE|||
 SvUTF8_off||5.006000|
 SvUTF8_on||5.006000|
@@ -828,6 +878,7 @@ SvVOK||5.008001|
 SvVSTRING_mg|5.009004||p
 THIS|||n
 UNDERBAR|5.009002||p
+UTF8_MAXBYTES|5.009002||p
 UVSIZE|5.006000||p
 UVTYPE|5.006000||p
 UVXf|5.007001||p
@@ -836,7 +887,7 @@ UVuf|5.006000||p
 UVxf|5.006000||p
 WARN_ALL|5.006000||p
 WARN_AMBIGUOUS|5.006000||p
-WARN_ASSERTIONS|5.009000||p
+WARN_ASSERTIONS|5.011000||p
 WARN_BAREWORD|5.006000||p
 WARN_CLOSED|5.006000||p
 WARN_CLOSURE|5.006000||p
@@ -917,6 +968,8 @@ _aMY_CXT|5.007003||p
 _pMY_CXT|5.007003||p
 aMY_CXT_|5.007003||p
 aMY_CXT|5.007003||p
+aTHXR_|5.011000||p
+aTHXR|5.011000||p
 aTHX_|5.006000||p
 aTHX|5.006000||p
 add_data|||n
@@ -940,12 +993,15 @@ atfork_lock||5.007003|n
 atfork_unlock||5.007003|n
 av_arylen_p||5.009003|
 av_clear|||
+av_create_and_push||5.009005|
+av_create_and_unshift_one||5.009005|
 av_delete||5.006000|
 av_exists||5.006000|
 av_extend|||
 av_fake|||
 av_fetch|||
 av_fill|||
+av_iter_p||5.011000|
 av_len|||
 av_make|||
 av_pop|||
@@ -964,6 +1020,7 @@ block_start|||
 boolSV|5.004000||p
 boot_core_PerlIO|||
 boot_core_UNIVERSAL|||
+boot_core_mro|||
 boot_core_xsutils|||
 bytes_from_utf8||5.007001|
 bytes_to_uni|||n
@@ -991,6 +1048,7 @@ ck_concat|||
 ck_defined|||
 ck_delete|||
 ck_die|||
+ck_each|||
 ck_eof|||
 ck_eval|||
 ck_exec|||
@@ -1009,6 +1067,7 @@ ck_match|||
 ck_method|||
 ck_null|||
 ck_open|||
+ck_readline|||
 ck_repeat|||
 ck_require|||
 ck_retarget|||
@@ -1016,7 +1075,6 @@ ck_return|||
 ck_rfun|||
 ck_rvconst|||
 ck_sassign|||
-ck_say|||
 ck_select|||
 ck_shift|||
 ck_sort|||
@@ -1067,6 +1125,7 @@ dNOOP|5.006000||p
 dORIGMARK|||
 dSP|||
 dTHR|5.004050||p
+dTHXR|5.011000||p
 dTHXa|5.006000||p
 dTHXoa|5.006000||p
 dTHX|5.006000||p
@@ -1128,7 +1187,6 @@ do_op_xmldump|||
 do_open9||5.006000|
 do_openn||5.007001|
 do_open||5.004000|
-do_pipe|||
 do_pmop_dump||5.006000|
 do_pmop_xmldump|||
 do_print|||
@@ -1153,7 +1211,6 @@ do_trans|||
 do_vecget|||
 do_vecset|||
 do_vop|||
-docatch_body|||
 docatch|||
 doeval|||
 dofile|||
@@ -1168,7 +1225,6 @@ dopoptogiven|||
 dopoptolabel|||
 dopoptoloop|||
 dopoptosub_at|||
-dopoptosub|||
 dopoptowhen|||
 doref||5.009003|
 dounwind|||
@@ -1189,7 +1245,7 @@ dump_trie|||
 dump_vindent||5.006000|
 dumpuntil|||
 dup_attrlist|||
-emulate_eaccess|||
+emulate_cop_io|||
 eval_pv|5.006000||p
 eval_sv|5.006000||p
 exec_failed|||
@@ -1202,12 +1258,13 @@ filter_add|||
 filter_del|||
 filter_gets|||
 filter_read|||
+find_and_forget_pmops|||
 find_array_subscript|||
 find_beginning|||
 find_byclass|||
 find_hash_subscript|||
 find_in_my_stash|||
-find_runcv|||
+find_runcv||5.008001|
 find_rundefsvoffset||5.009002|
 find_script|||
 find_uninit_var|||
@@ -1219,6 +1276,7 @@ force_list|||
 force_next|||
 force_version|||
 force_word|||
+forget_pmop|||
 form_nocontext|||vn
 form||5.004000|v
 fp_dup|||
@@ -1228,8 +1286,10 @@ free_tied_hv_pool|||
 free_tmps|||
 gen_constant_list|||
 get_arena|||
+get_aux_mg|||
 get_av|5.006000||p
 get_context||5.006000|n
+get_cvn_flags||5.009005|
 get_cv|5.006000||p
 get_db_sub|||
 get_debug_opts|||
@@ -1242,6 +1302,7 @@ get_op_descs||5.005000|
 get_op_names||5.005000|
 get_opargs|||
 get_ppaddr||5.006000|
+get_re_arg|||
 get_sv|5.006000||p
 get_vtbl||5.005030|
 getcwd_sv||5.007002|
@@ -1271,6 +1332,7 @@ gv_efullname3||5.004000|
 gv_efullname4||5.006001|
 gv_efullname|||
 gv_ename|||
+gv_fetchfile_flags||5.009005|
 gv_fetchfile|||
 gv_fetchmeth_autoload||5.007003|
 gv_fetchmethod_autoload||5.004000|
@@ -1282,6 +1344,7 @@ gv_fetchsv||5.009002|
 gv_fullname3||5.004000|
 gv_fullname4||5.006001|
 gv_fullname|||
+gv_get_super_pkg|||
 gv_handler||5.007001|
 gv_init_sv|||
 gv_init|||
@@ -1294,11 +1357,13 @@ he_dup|||
 hek_dup|||
 hfreeentries|||
 hsplit|||
-hv_assert||5.009001|
+hv_assert||5.011000|
 hv_auxinit|||n
 hv_backreferences_p|||
 hv_clear_placeholders||5.009001|
 hv_clear|||
+hv_common_key_len||5.010000|
+hv_common||5.010000|
 hv_copy_hints_hv|||
 hv_delayfree_ent||5.004000|
 hv_delete_common|||
@@ -1308,7 +1373,6 @@ hv_eiter_p||5.009003|
 hv_eiter_set||5.009003|
 hv_exists_ent||5.004000|
 hv_exists|||
-hv_fetch_common|||
 hv_fetch_ent||5.004000|
 hv_fetchs|5.009003||p
 hv_fetch|||
@@ -1323,7 +1387,6 @@ hv_iterval|||
 hv_kill_backrefs|||
 hv_ksplit||5.004000|
 hv_magic_check|||n
-hv_magic_uvar_xkey|||
 hv_magic|||
 hv_name_set||5.009003|
 hv_notallowed|||
@@ -1341,7 +1404,6 @@ hv_undef|||
 ibcmp_locale||5.004000|
 ibcmp_utf8||5.007003|
 ibcmp|||
-incl_perldb|||
 incline|||
 incpush_if_exists|||
 incpush|||
@@ -1353,7 +1415,6 @@ init_i18nl10n||5.006000|
 init_i18nl14n||5.006000|
 init_ids|||
 init_interp|||
-init_lexer|||
 init_main_stash|||
 init_perllib|||
 init_postdump_symbols|||
@@ -1441,7 +1502,7 @@ linklist|||
 listkids|||
 list|||
 load_module_nocontext|||vn
-load_module||5.006000|v
+load_module|5.006000||pv
 localize|||
 looks_like_bool|||
 looks_like_number|||
@@ -1449,10 +1510,12 @@ lop|||
 mPUSHi|5.009002||p
 mPUSHn|5.009002||p
 mPUSHp|5.009002||p
+mPUSHs|5.011000||p
 mPUSHu|5.009002||p
 mXPUSHi|5.009002||p
 mXPUSHn|5.009002||p
 mXPUSHp|5.009002||p
+mXPUSHs|5.011000||p
 mXPUSHu|5.009002||p
 mad_free|||
 madlex|||
@@ -1466,7 +1529,6 @@ magic_dump||5.006000|
 magic_existspack|||
 magic_freearylen_p|||
 magic_freeovrld|||
-magic_freeregexp|||
 magic_getarylen|||
 magic_getdefelem|||
 magic_getnkeys|||
@@ -1490,13 +1552,10 @@ magic_scalarpack|||
 magic_set_all_env|||
 magic_setamagic|||
 magic_setarylen|||
-magic_setbm|||
 magic_setcollxfrm|||
 magic_setdbline|||
 magic_setdefelem|||
 magic_setenv|||
-magic_setfm|||
-magic_setglob|||
 magic_sethint|||
 magic_setisa|||
 magic_setmglob|||
@@ -1549,6 +1608,13 @@ mod|||
 more_bodies|||
 more_sv|||
 moreswitches|||
+mro_get_linear_isa_c3|||
+mro_get_linear_isa_dfs|||
+mro_get_linear_isa||5.009005|
+mro_isa_changed_in|||
+mro_meta_dup|||
+mro_meta_init|||
+mro_method_changed_in||5.009005|
 mul128|||
 mulexp10|||n
 my_atof2||5.007002|
@@ -1564,7 +1630,9 @@ my_betohs|||n
 my_bzero|||n
 my_chsize|||
 my_clearenv|||
+my_cxt_index|||
 my_cxt_init|||
+my_dirfd||5.009005|
 my_exit_jump|||
 my_exit|||
 my_failure_exit||5.004000|
@@ -1645,7 +1713,7 @@ newMADsv|||
 newMYSUB|||
 newNULLLIST|||
 newOP|||
-newPADOP||5.006000|
+newPADOP|||
 newPMOP|||
 newPROG|||
 newPVOP|||
@@ -1658,13 +1726,17 @@ newSTATEOP|||
 newSUB|||
 newSVOP|||
 newSVREF|||
+newSV_type||5.009005|
 newSVhek||5.009003|
 newSViv|||
 newSVnv|||
 newSVpvf_nocontext|||vn
 newSVpvf||5.004000|v
-newSVpvn_share||5.007001|
+newSVpvn_flags|5.011000||p
+newSVpvn_share|5.007001||p
+newSVpvn_utf8|5.011000||p
 newSVpvn|5.004050||p
+newSVpvs_flags|5.011000||p
 newSVpvs_share||5.009003|
 newSVpvs|5.009003||p
 newSVpv|||
@@ -1710,6 +1782,8 @@ op_free|||
 op_getmad_weak|||
 op_getmad|||
 op_null||5.007002|
+op_refcnt_dec|||
+op_refcnt_inc|||
 op_refcnt_lock||5.009002|
 op_refcnt_unlock||5.009002|
 op_xmldump|||
@@ -1739,15 +1813,17 @@ pad_peg|||n
 pad_push|||
 pad_reset|||
 pad_setsv|||
-pad_sv||5.009004|
+pad_sv||5.011000|
 pad_swipe|||
 pad_tidy|||
 pad_undef|||
 parse_body|||
 parse_unicode_opts|||
+parser_dup|||
+parser_free|||
 path_is_absolute|||n
 peep|||
-pending_ident|||
+pending_Slabs_to_ro|||
 perl_alloc_using|||n
 perl_alloc|||n
 perl_clone_using|||n
@@ -1765,20 +1841,22 @@ pmop_xmldump|||
 pmruntime|||
 pmtrans|||
 pop_scope|||
-pregcomp|||
+pregcomp||5.009005|
 pregexec|||
+pregfree2||5.011000|
 pregfree|||
 prepend_elem|||
 prepend_madprops|||
 printbuf|||
 printf_nocontext|||vn
-ptr_table_clear|||
-ptr_table_fetch|||
+process_special_blocks|||
+ptr_table_clear||5.009005|
+ptr_table_fetch||5.009005|
 ptr_table_find|||n
-ptr_table_free|||
-ptr_table_new|||
-ptr_table_split|||
-ptr_table_store|||
+ptr_table_free||5.009005|
+ptr_table_new||5.009005|
+ptr_table_split||5.009005|
+ptr_table_store||5.009005|
 push_scope|||
 put_byte|||
 pv_display||5.006000|
@@ -1787,10 +1865,12 @@ pv_pretty||5.009004|
 pv_uni_display||5.007003|
 qerror|||
 qsortsvu|||
+re_compile||5.009005|
 re_croak2|||
-re_dup|||
-re_intuit_start||5.006000|
+re_dup_guts|||
+re_intuit_start||5.009005|
 re_intuit_string||5.006000|
+readpipe_override|||
 realloc||5.007002|n
 reentrant_free|||
 reentrant_init|||
@@ -1804,8 +1884,27 @@ refcounted_he_new|||
 refcounted_he_value|||
 refkids|||
 refto|||
-ref||5.009003|
+ref||5.011000|
+reg_check_named_buff_matched|||
+reg_named_buff_all||5.009005|
+reg_named_buff_exists||5.009005|
+reg_named_buff_fetch||5.009005|
+reg_named_buff_firstkey||5.009005|
+reg_named_buff_iter|||
+reg_named_buff_nextkey||5.009005|
+reg_named_buff_scalar||5.009005|
+reg_named_buff|||
+reg_namedseq|||
 reg_node|||
+reg_numbered_buff_fetch|||
+reg_numbered_buff_length|||
+reg_numbered_buff_store|||
+reg_qr_package|||
+reg_recode|||
+reg_scan_name|||
+reg_skipcomment|||
+reg_stringify||5.009005|
+reg_temp_copy|||
 reganode|||
 regatom|||
 regbranch|||
@@ -1814,9 +1913,13 @@ regclass|||
 regcppop|||
 regcppush|||
 regcurly|||n
+regdump_extflags|||
 regdump||5.005000|
+regdupe_internal|||
 regexec_flags||5.005000|
+regfree_internal||5.009005|
 reghop3|||n
+reghop4|||n
 reghopmaybe3|||n
 reginclass|||
 reginitcolors||5.006000|
@@ -1836,8 +1939,8 @@ reg|||
 repeatcpy|||
 report_evil_fh|||
 report_uninit|||
-require_errno|||
 require_pv||5.006000|
+require_tie_mod|||
 restore_magic|||
 rninstr|||
 rsignal_restore|||
@@ -1878,7 +1981,6 @@ save_gp||5.004000|
 save_hash|||
 save_hek_flags|||n
 save_helem||5.004050|
-save_hints||5.005000|
 save_hptr|||
 save_int|||
 save_item|||
@@ -1903,6 +2005,7 @@ save_vptr||5.006000|
 savepvn|||
 savepvs||5.009003|
 savepv|||
+savesharedpvn||5.009005|
 savesharedpv||5.007003|
 savestack_grow_cnt||5.008001|
 savestack_grow|||
@@ -1929,7 +2032,7 @@ scan_str|||
 scan_subst|||
 scan_trans|||
 scan_version||5.009001|
-scan_vstring||5.008001|
+scan_vstring||5.009005|
 scan_word|||
 scope|||
 screaminstr||5.005000|
@@ -1938,7 +2041,6 @@ sequence_num|||
 sequence_tail|||
 sequence|||
 set_context||5.006000|n
-set_csh|||
 set_numeric_local||5.006000|
 set_numeric_radix||5.006000|
 set_numeric_standard||5.006000|
@@ -1953,6 +2055,7 @@ skipspace0|||
 skipspace1|||
 skipspace2|||
 skipspace|||
+softref2xv|||
 sortcv_stacked|||
 sortcv_xsub|||
 sortcv|||
@@ -1964,7 +2067,7 @@ stack_grow|||
 start_force|||
 start_glob|||
 start_subparse||5.004000|
-stashpv_hvname_match||5.009004|
+stashpv_hvname_match||5.011000|
 stdize_locale|||
 strEQ|||
 strGE|||
@@ -1973,7 +2076,6 @@ strLE|||
 strLT|||
 strNE|||
 str_to_version||5.006000|
-stringify_regexp|||
 strip_return|||
 strnEQ|||
 strnNE|||
@@ -1990,10 +2092,11 @@ sv_2iuv_non_preserve|||
 sv_2iv_flags||5.009001|
 sv_2iv|||
 sv_2mortal|||
+sv_2num|||
 sv_2nv|||
-sv_2pv_flags||5.007002|
+sv_2pv_flags|5.007002||p
 sv_2pv_nolen|5.006000||p
-sv_2pvbyte_nolen|||
+sv_2pvbyte_nolen|5.006000||p
 sv_2pvbyte|5.006000||p
 sv_2pvutf8_nolen||5.006000|
 sv_2pvutf8||5.006000|
@@ -2034,6 +2137,7 @@ sv_copypv||5.007003|
 sv_dec|||
 sv_del_backref|||
 sv_derived_from||5.004000|
+sv_destroyable||5.010000|
 sv_does||5.009004|
 sv_dump|||
 sv_dup|||
@@ -2055,6 +2159,7 @@ sv_iv||5.005000|
 sv_kill_backrefs|||
 sv_len_utf8||5.006000|
 sv_len|||
+sv_magic_portable|5.011000|5.004000|p
 sv_magicext||5.007003|
 sv_magic|||
 sv_mortalcopy|||
@@ -2066,7 +2171,6 @@ sv_nosharing||5.007003|
 sv_nounlocking|||
 sv_nv||5.005000|
 sv_peek||5.005000|
-sv_pos_b2u_forwards|||
 sv_pos_b2u_midway|||
 sv_pos_b2u||5.006000|
 sv_pos_u2b_cached|||
@@ -2076,10 +2180,10 @@ sv_pos_u2b||5.006000|
 sv_pvbyten_force||5.006000|
 sv_pvbyten||5.006000|
 sv_pvbyte||5.006000|
-sv_pvn_force_flags||5.007002|
-sv_pvn_force|||p
-sv_pvn_nomg|5.007003||p
-sv_pvn|5.005000||p
+sv_pvn_force_flags|5.007002||p
+sv_pvn_force|||
+sv_pvn_nomg|5.007003|5.005000|p
+sv_pvn||5.005000|
 sv_pvutf8n_force||5.006000|
 sv_pvutf8n||5.006000|
 sv_pvutf8||5.006000|
@@ -2087,7 +2191,6 @@ sv_pv||5.006000|
 sv_recode_to_utf8||5.007003|
 sv_reftype|||
 sv_release_COW|||
-sv_release_IVX|||
 sv_replace|||
 sv_report_used|||
 sv_reset|||
@@ -2147,12 +2250,16 @@ sv_vsetpvf|5.006000|5.004000|p
 sv_xmlpeek|||
 svtype|||
 swallow_bom|||
+swap_match_buff|||
 swash_fetch||5.007002|
 swash_get|||
 swash_init||5.006000|
+sys_init3||5.010000|n
+sys_init||5.010000|n
 sys_intern_clear|||
 sys_intern_dup|||
 sys_intern_init|||
+sys_term||5.010000|n
 taint_env|||
 taint_proper|||
 tmps_grow||5.006000|
@@ -2188,7 +2295,8 @@ unshare_hek_or_pvn|||
 unshare_hek|||
 unsharepvn||5.004000|
 unwind_handler_stack|||
-upg_version||5.009000|
+update_debugger_info|||
+upg_version||5.009005|
 usage|||
 utf16_to_utf8_reversed||5.006001|
 utf16_to_utf8||5.006001|
@@ -2218,7 +2326,7 @@ vform||5.006000|
 visit|||
 vivify_defelem|||
 vivify_ref|||
-vload_module||5.006000|
+vload_module|5.006000||p
 vmess||5.006000|
 vnewSVpvf|5.006000|5.004000|p
 vnormal||5.009002|
@@ -2261,21 +2369,64 @@ if (exists $opt{'list-unsupported'}) {
 
 # Scan for possible replacement candidates
 
-my(%replace, %need, %hints, %depends);
+my(%replace, %need, %hints, %warnings, %depends);
 my $replace = 0;
-my $hint = '';
+my($hint, $define, $function);
+
+sub find_api
+{
+  my $code = shift;
+  $code =~ s{
+    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
+  | "[^"\\]*(?:\\.[^"\\]*)*"
+  | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
+  grep { exists $API{$_} } $code =~ /(\w+)/mg;
+}
 
 while (<DATA>) {
   if ($hint) {
+    my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
     if (m{^\s*\*\s(.*?)\s*$}) {
-      $hints{$hint} ||= '';  # suppress warning with older perls
-      $hints{$hint} .= "$1\n";
+      for (@{$hint->[1]}) {
+        $h->{$_} ||= '';  # suppress warning with older perls
+        $h->{$_} .= "$1\n";
+      }
+    }
+    else { undef $hint }
+  }
+
+  $hint = [$1, [split /,?\s+/, $2]]
+      if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
+
+  if ($define) {
+    if ($define->[1] =~ /\\$/) {
+      $define->[1] .= $_;
+    }
+    else {
+      if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
+        my @n = find_api($define->[1]);
+        push @{$depends{$define->[0]}}, @n if @n
+      }
+      undef $define;
+    }
+  }
+
+  $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
+
+  if ($function) {
+    if (/^}/) {
+      if (exists $API{$function->[0]}) {
+        my @n = find_api($function->[1]);
+        push @{$depends{$function->[0]}}, @n if @n
+      }
+      undef $function;
     }
     else {
-      $hint = '';
+      $function->[1] .= $_;
     }
   }
-  $hint = $1 if m{^\s*$rccs\sHint:\s+(\w+)\s*$};
+
+  $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
 
   $replace     = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
   $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
@@ -2289,6 +2440,11 @@ while (<DATA>) {
   $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
 }
 
+for (values %depends) {
+  my %s;
+  $_ = [sort grep !$s{$_}++, @$_];
+}
+
 if (exists $opt{'api-info'}) {
   my $f;
   my $count = 0;
@@ -2307,20 +2463,15 @@ if (exists $opt{'api-info'}) {
       print "Support by $ppport provided back to perl-$todo.\n";
       print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
       print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
-      print "$hints{$f}" if exists $hints{$f};
+      print "\n$hints{$f}" if exists $hints{$f};
+      print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
       $info++;
     }
-    unless ($info) {
-      print "No portability information available.\n";
-    }
+    print "No portability information available.\n" unless $info;
     $count++;
   }
-  if ($count > 0) {
-    print "\n";
-  }
-  else {
-    print "Found no API matching '$opt{'api-info'}'.\n";
-  }
+  $count or print "Found no API matching '$opt{'api-info'}'.";
+  print "\n";
   exit 0;
 }
 
@@ -2332,6 +2483,7 @@ if (exists $opt{'list-provided'}) {
     push @flags, 'explicit' if exists $need{$f};
     push @flags, 'depend'   if exists $depends{$f};
     push @flags, 'hint'     if exists $hints{$f};
+    push @flags, 'warning'  if exists $warnings{$f};
     my $flags = @flags ? '  ['.join(', ', @flags).']' : '';
     print "$f$flags\n";
   }
@@ -2339,23 +2491,35 @@ if (exists $opt{'list-provided'}) {
 }
 
 my @files;
-my @srcext = qw( xs c h cc cpp );
-my $srcext = join '|', @srcext;
+my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
+my $srcext = join '|', map { quotemeta $_ } @srcext;
 
 if (@ARGV) {
   my %seen;
-  @files = grep { -f && !exists $seen{$_} } map { glob $_ } @ARGV;
+  for (@ARGV) {
+    if (-e) {
+      if (-f) {
+        push @files, $_ unless $seen{$_}++;
+      }
+      else { warn "'$_' is not a file.\n" }
+    }
+    else {
+      my @new = grep { -f } glob $_
+          or warn "'$_' does not exist.\n";
+      push @files, grep { !$seen{$_}++ } @new;
+    }
+  }
 }
 else {
   eval {
     require File::Find;
     File::Find::find(sub {
-      $File::Find::name =~ /\.($srcext)$/i
+      $File::Find::name =~ /($srcext)$/i
           and push @files, $File::Find::name;
     }, '.');
   };
   if ($@) {
-    @files = map { glob "*.$_" } @srcext;
+    @files = map { glob "*$_" } @srcext;
   }
 }
 
@@ -2363,7 +2527,7 @@ if (!@ARGV || $opt{filter}) {
   my(@in, @out);
   my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
   for (@files) {
-    my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/\.($srcext)$/i;
+    my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
     push @{ $out ? \@out : \@in }, $_;
   }
   if (@ARGV && @out) {
@@ -2372,9 +2536,7 @@ if (!@ARGV || $opt{filter}) {
   @files = @in;
 }
 
-unless (@files) {
-  die "No input files given!\n";
-}
+die "No input files given!\n" unless @files;
 
 my(%files, %global, %revreplace);
 %revreplace = reverse %replace;
@@ -2394,30 +2556,22 @@ for $filename (@files) {
 
   my %file = (orig => $c, changes => 0);
 
-  # temporarily remove C comments from the code
+  # Temporarily remove C/XS comments and strings from the code
   my @ccom;
+
   $c =~ s{
-    (
-        [^"'/]+
-      |
-        (?:"[^"\\]*(?:\\.[^"\\]*)*" [^"'/]*)+
-      |
-        (?:'[^'\\]*(?:\\.[^'\\]*)*' [^"'/]*)+
-    )
-  |
-    (/ (?:
-        \*[^*]*\*+(?:[^$ccs][^*]*\*+)* /
-        |
-        /[^\r\n]*
-      ))
-  }{
-    defined $2 and push @ccom, $2;
-    defined $1 ? $1 : "$ccs$#ccom$cce";
-  }egsx;
+    ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
+    | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
+  | ( ^$HS*\#[^\r\n]*
+    | "[^"\\]*(?:\\.[^"\\]*)*"
+    | '[^'\\]*(?:\\.[^'\\]*)*'
+    | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
+  }{ defined $2 and push @ccom, $2;
+     defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
 
   $file{ccom} = \@ccom;
   $file{code} = $c;
-  $file{has_inc_ppport} = ($c =~ /#.*include.*\Q$ppport\E/);
+  $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
 
   my $func;
 
@@ -2428,6 +2582,7 @@ for $filename (@files) {
       $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
       $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
       if (exists $API{$func}{provided}) {
+        $file{uses_provided}{$func}++;
         if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
           $file{uses}{$func}++;
           my @deps = rec_depend($func);
@@ -2438,9 +2593,7 @@ for $filename (@files) {
             }
           }
           for ($func, @deps) {
-            if (exists $need{$_}) {
-              $file{needs}{$_} = 'static';
-            }
+            $file{needs}{$_} = 'static' if exists $need{$_};
           }
         }
       }
@@ -2456,9 +2609,7 @@ for $filename (@files) {
     if (exists $need{$2}) {
       $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
     }
-    else {
-      warning("Possibly wrong #define $1 in $filename");
-    }
+    else { warning("Possibly wrong #define $1 in $filename") }
   }
 
   for (qw(uses needs uses_todo needed_global needed_static)) {
@@ -2495,14 +2646,17 @@ for $filename (@files) {
   my %file = %{$files{$filename}};
   my $func;
   my $c = $file{code};
+  my $warnings = 0;
 
   for $func (sort keys %{$file{uses_Perl}}) {
     if ($API{$func}{varargs}) {
-      my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
-                            { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
-      if ($changes) {
-        warning("Doesn't pass interpreter argument aTHX to Perl_$func");
-        $file{changes} += $changes;
+      unless ($API{$func}{nothxarg}) {
+        my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
+                              { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
+        if ($changes) {
+          warning("Doesn't pass interpreter argument aTHX to Perl_$func");
+          $file{changes} += $changes;
+        }
       }
     }
     else {
@@ -2517,24 +2671,24 @@ for $filename (@files) {
     $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
   }
 
-  for $func (sort keys %{$file{uses}}) {
-    next unless $file{uses}{$func};   # if it's only a dependency
-    if (exists $file{uses_deps}{$func}) {
-      diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
-    }
-    elsif (exists $replace{$func}) {
-      warning("Uses $func instead of $replace{$func}");
-      $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
-    }
-    else {
-      diag("Uses $func");
+  for $func (sort keys %{$file{uses_provided}}) {
+    if ($file{uses}{$func}) {
+      if (exists $file{uses_deps}{$func}) {
+        diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
+      }
+      else {
+        diag("Uses $func");
+      }
     }
-    hint($func);
+    $warnings += hint($func);
   }
 
-  for $func (sort keys %{$file{uses_todo}}) {
-    warning("Uses $func, which may not be portable below perl ",
-            format_version($API{$func}{todo}));
+  unless ($opt{quiet}) {
+    for $func (sort keys %{$file{uses_todo}}) {
+      print "*** WARNING: Uses $func, which may not be portable below perl ",
+            format_version($API{$func}{todo}), ", even with '$ppport'\n";
+      $warnings++;
+    }
   }
 
   for $func (sort keys %{$file{needed_static}}) {
@@ -2633,6 +2787,10 @@ for $filename (@files) {
     warning("Uses $cppc C++ style comment$s, which is not portable");
   }
 
+  my $s = $warnings != 1 ? 's' : '';
+  my $warn = $warnings ? " ($warnings warning$s)" : '';
+  info("Analysis completed$warn");
+
   if ($file{changes}) {
     if (exists $opt{copy}) {
       my $newfile = "$filename$opt{copy}";
@@ -2687,6 +2845,8 @@ close PATCH if $patch_opened;
 exit 0;
 
 
+sub try_use { eval "use @_;"; return $@ eq '' }
+
 sub mydiff
 {
   local *F = shift;
@@ -2697,7 +2857,7 @@ sub mydiff
     $diff = run_diff($opt{diff}, $file, $str);
   }
 
-  if (!defined $diff and can_use('Text::Diff')) {
+  if (!defined $diff and try_use('Text::Diff')) {
     $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
     $diff = <<HEADER . $diff;
 --- $file
@@ -2719,7 +2879,6 @@ HEADER
   }
 
   print F $diff;
-
 }
 
 sub run_diff
@@ -2756,18 +2915,14 @@ sub run_diff
   return undef;
 }
 
-sub can_use
-{
-  eval "use @_;";
-  return $@ eq '';
-}
-
 sub rec_depend
 {
-  my $func = shift;
-  my %seen;
+  my($func, $seen) = @_;
   return () unless exists $depends{$func};
-  grep !$seen{$_}++, map { ($_, rec_depend($_)) } @{$depends{$func}};
+  $seen = {%{$seen||{}}};
+  return () if $seen->{$func}++;
+  my %s;
+  grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
 }
 
 sub parse_version
@@ -2847,16 +3002,24 @@ sub error
 }
 
 my %given_hints;
+my %given_warnings;
 sub hint
 {
   $opt{quiet} and return;
-  $opt{hints} or return;
   my $func = shift;
-  exists $hints{$func} or return;
-  $given_hints{$func}++ and return;
-  my $hint = $hints{$func};
-  $hint =~ s/^/   /mg;
-  print "   --- hint for $func ---\n", $hint;
+  my $rv = 0;
+  if (exists $warnings{$func} && !$given_warnings{$func}++) {
+    my $warn = $warnings{$func};
+    $warn =~ s!^!*** !mg;
+    print "*** WARNING: $func\n", $warn;
+    $rv++;
+  }
+  if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
+    my $hint = $hints{$func};
+    $hint =~ s/^/   /mg;
+    print "   --- hint for $func ---\n", $hint;
+  }
+  $rv;
 }
 
 sub usage
@@ -2906,9 +3069,19 @@ please try to regenerate this file using:
 
 END
 /ms;
+  my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
+  $c =~ s{
+    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
+  | ( "[^"\\]*(?:\\.[^"\\]*)*"
+    | '[^'\\]*(?:\\.[^'\\]*)*' )
+  | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
+  $c =~ s!\s+$!!mg;
+  $c =~ s!^$LF!!mg;
+  $c =~ s!^\s*#\s*!#!mg;
+  $c =~ s!^\s+!!mg;
 
   open OUT, ">$0" or die "cannot strip $0: $!\n";
-  print OUT $self;
+  print OUT "$pl$c\n";
 
   exit 0;
 }
@@ -2944,7 +3117,8 @@ __DATA__
 #  endif
 #endif
 
-#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)
+#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
+#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
 
 /* It is very unlikely that anyone will try to use this with Perl 6
    (or greater), but who knows.
@@ -3329,6 +3503,10 @@ __DATA__
 #ifndef sv_uv
 #  define sv_uv(sv)                      SvUVx(sv)
 #endif
+
+#if !defined(SvUOK) && defined(SvIOK_UV)
+#  define SvUOK(sv) SvIOK_UV(sv)
+#endif
 #ifndef XST_mUV
 #  define XST_mUV(i,v)                   (ST(i) = sv_2mortal(newSVuv(v))  )
 #endif
@@ -3409,42 +3587,6 @@ __DATA__
 #  define Newxz(v,n,t)                   Newz(0,v,n,t)
 #endif
 
-#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)))
-/* Replace: 1 */
-#  define PL_DBsingle               DBsingle
-#  define PL_DBsub                  DBsub
-#  define PL_Sv                     Sv
-#  define PL_compiling              compiling
-#  define PL_copline                copline
-#  define PL_curcop                 curcop
-#  define PL_curstash               curstash
-#  define PL_debstash               debstash
-#  define PL_defgv                  defgv
-#  define PL_diehook                diehook
-#  define PL_dirty                  dirty
-#  define PL_dowarn                 dowarn
-#  define PL_errgv                  errgv
-#  define PL_hexdigit               hexdigit
-#  define PL_hints                  hints
-#  define PL_na	                    na
-#  define PL_no_modify              no_modify
-#  define PL_perl_destruct_level    perl_destruct_level
-#  define PL_perldb                 perldb
-#  define PL_ppaddr                 ppaddr
-#  define PL_rsfp_filters           rsfp_filters
-#  define PL_rsfp                   rsfp
-#  define PL_stack_base             stack_base
-#  define PL_stack_sp               stack_sp
-#  define PL_stdingv                stdingv
-#  define PL_sv_arenaroot           sv_arenaroot
-#  define PL_sv_no                  sv_no
-#  define PL_sv_undef               sv_undef
-#  define PL_sv_yes                 sv_yes
-#  define PL_tainted                tainted
-#  define PL_tainting               tainting
-/* Replace: 0 */
-#endif
-
 #ifndef PERL_UNUSED_DECL
 #  ifdef HASATTRIBUTE
 #    if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
@@ -3580,11 +3722,6 @@ typedef NVTYPE NV;
 #ifndef ERRSV
 #  define ERRSV                          get_sv("@",FALSE)
 #endif
-#ifndef newSVpvn
-#  define newSVpvn(data,len)             ((data)                                              \
-                                    ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
-                                    : newSV(0))
-#endif
 
 /* Hint: gv_stashpvn
  * This function's backport doesn't support the length parameter, but
@@ -3639,7 +3776,7 @@ typedef NVTYPE NV;
 #  define XSprePUSH                      (sp = PL_stack_base + ax - 1)
 #endif
 
-#if ((PERL_VERSION < 5) || ((PERL_VERSION == 5) && (PERL_SUBVERSION < 0)))
+#if (PERL_BCDVERSION < 0x5005000)
 #  undef XSRETURN
 #  define XSRETURN(off)                                   \
       STMT_START {                                        \
@@ -3656,21 +3793,108 @@ typedef NVTYPE NV;
 #ifndef SVf
 #  define SVf                            "_"
 #endif
+#ifndef UTF8_MAXBYTES
+#  define UTF8_MAXBYTES                  UTF8_MAXLEN
+#endif
+#ifndef PERL_HASH
+#  define PERL_HASH(hash,str,len)        \
+     STMT_START	{ \
+	const char *s_PeRlHaSh = str; \
+	I32 i_PeRlHaSh = len; \
+	U32 hash_PeRlHaSh = 0; \
+	while (i_PeRlHaSh--) \
+	    hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
+	(hash) = hash_PeRlHaSh; \
+    } STMT_END
+#endif
 
 #ifndef PERL_SIGNALS_UNSAFE_FLAG
 
 #define PERL_SIGNALS_UNSAFE_FLAG 0x0001
 
+#if (PERL_BCDVERSION < 0x5008000)
+#  define D_PPP_PERL_SIGNALS_INIT   PERL_SIGNALS_UNSAFE_FLAG
+#else
+#  define D_PPP_PERL_SIGNALS_INIT   0
+#endif
+
 #if defined(NEED_PL_signals)
-static U32 DPPP_(my_PL_signals) = PERL_SIGNALS_UNSAFE_FLAG;
+static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
 #elif defined(NEED_PL_signals_GLOBAL)
-U32 DPPP_(my_PL_signals) = PERL_SIGNALS_UNSAFE_FLAG;
+U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
 #else
 extern U32 DPPP_(my_PL_signals);
 #endif
 #define PL_signals DPPP_(my_PL_signals)
 
 #endif
+
+/* Hint: PL_ppaddr
+ * Calling an op via PL_ppaddr requires passing a context argument
+ * for threaded builds. Since the context argument is different for
+ * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
+ * automatically be defined as the correct argument.
+ */
+
+#if (PERL_BCDVERSION <= 0x5005005)
+/* Replace: 1 */
+#  define PL_ppaddr                 ppaddr
+#  define PL_no_modify              no_modify
+/* Replace: 0 */
+#endif
+
+#if (PERL_BCDVERSION <= 0x5004005)
+/* Replace: 1 */
+#  define PL_DBsignal               DBsignal
+#  define PL_DBsingle               DBsingle
+#  define PL_DBsub                  DBsub
+#  define PL_DBtrace                DBtrace
+#  define PL_Sv                     Sv
+#  define PL_compiling              compiling
+#  define PL_copline                copline
+#  define PL_curcop                 curcop
+#  define PL_curstash               curstash
+#  define PL_debstash               debstash
+#  define PL_defgv                  defgv
+#  define PL_diehook                diehook
+#  define PL_dirty                  dirty
+#  define PL_dowarn                 dowarn
+#  define PL_errgv                  errgv
+#  define PL_expect                 expect
+#  define PL_hexdigit               hexdigit
+#  define PL_hints                  hints
+#  define PL_laststatval            laststatval
+#  define PL_na                     na
+#  define PL_perl_destruct_level    perl_destruct_level
+#  define PL_perldb                 perldb
+#  define PL_rsfp_filters           rsfp_filters
+#  define PL_rsfp                   rsfp
+#  define PL_stack_base             stack_base
+#  define PL_stack_sp               stack_sp
+#  define PL_statcache              statcache
+#  define PL_stdingv                stdingv
+#  define PL_sv_arenaroot           sv_arenaroot
+#  define PL_sv_no                  sv_no
+#  define PL_sv_undef               sv_undef
+#  define PL_sv_yes                 sv_yes
+#  define PL_tainted                tainted
+#  define PL_tainting               tainting
+/* Replace: 0 */
+#endif
+
+/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters
+ * Do not use this variable. It is internal to the perl parser
+ * and may change or even be removed in the future. Note that
+ * as of perl 5.9.5 you cannot assign to this variable anymore.
+ */
+
+/* TODO: cannot assign to these vars; is it worth fixing? */
+#if (PERL_BCDVERSION >= 0x5009005)
+#  define PL_expect         (PL_parser ? PL_parser->expect : 0)
+#  define PL_copline        (PL_parser ? PL_parser->copline : 0)
+#  define PL_rsfp           (PL_parser ? PL_parser->rsfp : (PerlIO *) 0)
+#  define PL_rsfp_filters   (PL_parser ? PL_parser->rsfp_filters : (AV *) 0)
+#endif
 #ifndef dTHR
 #  define dTHR                           dNOOP
 #endif
@@ -3696,46 +3920,69 @@ extern U32 DPPP_(my_PL_signals);
 #ifndef aTHX_
 #  define aTHX_
 #endif
+
+#if (PERL_BCDVERSION < 0x5006000)
+#  ifdef USE_THREADS
+#    define aTHXR  thr
+#    define aTHXR_ thr,
+#  else
+#    define aTHXR
+#    define aTHXR_
+#  endif
+#  define dTHXR  dTHR
+#else
+#  define aTHXR  aTHX
+#  define aTHXR_ aTHX_
+#  define dTHXR  dTHX
+#endif
 #ifndef dTHXoa
 #  define dTHXoa(x)                      dTHXa(x)
 #endif
+#ifndef mPUSHs
+#  define mPUSHs(s)                      PUSHs(sv_2mortal(s))
+#endif
+
 #ifndef PUSHmortal
 #  define PUSHmortal                     PUSHs(sv_newmortal())
 #endif
 
 #ifndef mPUSHp
-#  define mPUSHp(p,l)                    sv_setpvn_mg(PUSHmortal, (p), (l))
+#  define mPUSHp(p,l)                    sv_setpvn(PUSHmortal, (p), (l))
 #endif
 
 #ifndef mPUSHn
-#  define mPUSHn(n)                      sv_setnv_mg(PUSHmortal, (NV)(n))
+#  define mPUSHn(n)                      sv_setnv(PUSHmortal, (NV)(n))
 #endif
 
 #ifndef mPUSHi
-#  define mPUSHi(i)                      sv_setiv_mg(PUSHmortal, (IV)(i))
+#  define mPUSHi(i)                      sv_setiv(PUSHmortal, (IV)(i))
 #endif
 
 #ifndef mPUSHu
-#  define mPUSHu(u)                      sv_setuv_mg(PUSHmortal, (UV)(u))
+#  define mPUSHu(u)                      sv_setuv(PUSHmortal, (UV)(u))
+#endif
+#ifndef mXPUSHs
+#  define mXPUSHs(s)                     XPUSHs(sv_2mortal(s))
 #endif
+
 #ifndef XPUSHmortal
 #  define XPUSHmortal                    XPUSHs(sv_newmortal())
 #endif
 
 #ifndef mXPUSHp
-#  define mXPUSHp(p,l)                   STMT_START { EXTEND(sp,1); sv_setpvn_mg(PUSHmortal, (p), (l)); } STMT_END
+#  define mXPUSHp(p,l)                   STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
 #endif
 
 #ifndef mXPUSHn
-#  define mXPUSHn(n)                     STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END
+#  define mXPUSHn(n)                     STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
 #endif
 
 #ifndef mXPUSHi
-#  define mXPUSHi(i)                     STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END
+#  define mXPUSHi(i)                     STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
 #endif
 
 #ifndef mXPUSHu
-#  define mXPUSHu(u)                     STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END
+#  define mXPUSHu(u)                     STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
 #endif
 
 /* Replace: 1 */
@@ -3757,11 +4004,21 @@ extern U32 DPPP_(my_PL_signals);
 #ifndef eval_sv
 #  define eval_sv                        perl_eval_sv
 #endif
+#ifndef PERL_LOADMOD_DENY
+#  define PERL_LOADMOD_DENY              0x1
+#endif
+
+#ifndef PERL_LOADMOD_NOIMPORT
+#  define PERL_LOADMOD_NOIMPORT          0x2
+#endif
+
+#ifndef PERL_LOADMOD_IMPORT_OPS
+#  define PERL_LOADMOD_IMPORT_OPS        0x4
+#endif
 
 /* Replace: 0 */
 
 /* Replace perl_eval_pv with eval_pv */
-/* eval_pv depends on eval_sv */
 
 #ifndef eval_pv
 #if defined(NEED_eval_pv)
@@ -3801,6 +4058,106 @@ DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
 
 #endif
 #endif
+
+#ifndef vload_module
+#if defined(NEED_vload_module)
+static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
+static
+#else
+extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
+#endif
+
+#ifdef vload_module
+#  undef vload_module
+#endif
+#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
+#define Perl_vload_module DPPP_(my_vload_module)
+
+#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
+
+void
+DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
+{
+    dTHR;
+    dVAR;
+    OP *veop, *imop;
+
+    OP * const modname = newSVOP(OP_CONST, 0, name);
+    /* 5.005 has a somewhat hacky force_normal that doesn't croak on
+       SvREADONLY() if PL_compling is true. Current perls take care in
+       ck_require() to correctly turn off SvREADONLY before calling
+       force_normal_flags(). This seems a better fix than fudging PL_compling
+     */
+    SvREADONLY_off(((SVOP*)modname)->op_sv);
+    modname->op_private |= OPpCONST_BARE;
+    if (ver) {
+	veop = newSVOP(OP_CONST, 0, ver);
+    }
+    else
+	veop = NULL;
+    if (flags & PERL_LOADMOD_NOIMPORT) {
+	imop = sawparens(newNULLLIST());
+    }
+    else if (flags & PERL_LOADMOD_IMPORT_OPS) {
+	imop = va_arg(*args, OP*);
+    }
+    else {
+	SV *sv;
+	imop = NULL;
+	sv = va_arg(*args, SV*);
+	while (sv) {
+	    imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
+	    sv = va_arg(*args, SV*);
+	}
+    }
+    {
+	const line_t ocopline = PL_copline;
+	COP * const ocurcop = PL_curcop;
+	const int oexpect = PL_expect;
+
+#if (PERL_BCDVERSION >= 0x5004000)
+	utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
+		veop, modname, imop);
+#else
+	utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
+		modname, imop);
+#endif
+	PL_expect = oexpect;
+	PL_copline = ocopline;
+	PL_curcop = ocurcop;
+    }
+}
+
+#endif
+#endif
+
+#ifndef load_module
+#if defined(NEED_load_module)
+static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
+static
+#else
+extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
+#endif
+
+#ifdef load_module
+#  undef load_module
+#endif
+#define load_module DPPP_(my_load_module)
+#define Perl_load_module DPPP_(my_load_module)
+
+#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
+
+void
+DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
+{
+    va_list args;
+    va_start(args, ver);
+    vload_module(flags, name, ver, &args);
+    va_end(args);
+}
+
+#endif
+#endif
 #ifndef newRV_inc
 #  define newRV_inc(sv)                  newRV(sv)   /* Replace */
 #endif
@@ -3836,12 +4193,12 @@ DPPP_(my_newRV_noinc)(SV *sv)
  */
 
 /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
-#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63))) && ((PERL_VERSION != 4) || (PERL_SUBVERSION != 5))
+#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
 #if defined(NEED_newCONSTSUB)
-static void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
+static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
 static
 #else
-extern void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
+extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
 #endif
 
 #ifdef newCONSTSUB
@@ -3853,7 +4210,7 @@ extern void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
 #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
 
 void
-DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
+DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
 {
 	U32 oldhints = PL_hints;
 	HV *old_cop_stash = PL_curcop->cop_stash;
@@ -3867,15 +4224,15 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
 
 	newSUB(
 
-#if   ((PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)))
+#if   (PERL_BCDVERSION < 0x5003022)
 		start_subparse(),
-#elif ((PERL_VERSION == 3) && (PERL_SUBVERSION == 22))
+#elif (PERL_BCDVERSION == 0x5003022)
      		start_subparse(0),
 #else  /* 5.003_23  onwards */
      		start_subparse(FALSE, 0),
 #endif
 
-		newSVOP(OP_CONST, 0, newSVpv(name,0)),
+		newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
 		newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */
 		newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
 	);
@@ -3917,7 +4274,7 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
  * case below uses it to declare the data as static. */
 #define START_MY_CXT
 
-#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 68)))
+#if (PERL_BCDVERSION < 0x5004068)
 /* Fetches the SV that keeps the per-interpreter data. */
 #define dMY_CXT_SV \
 	SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
@@ -4012,7 +4369,8 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
 
 #ifndef NVef
 #  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
-      defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */
+      defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
+            /* Not very likely, but let's try anyway. */
 #    define NVef          PERL_PRIeldbl
 #    define NVff          PERL_PRIfldbl
 #    define NVgf          PERL_PRIgldbl
@@ -4094,42 +4452,60 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
 #ifndef SvREFCNT_inc_simple_void_NN
 #  define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
 #endif
+#ifndef newSVpvn
+#  define newSVpvn(data,len)             ((data)                                              \
+                                    ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
+                                    : newSV(0))
+#endif
+#ifndef newSVpvn_utf8
+#  define newSVpvn_utf8(s, len, u)       newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
+#endif
+#ifndef SVf_UTF8
+#  define SVf_UTF8                       0
+#endif
 
-#ifndef SvPV_nolen
+#ifndef newSVpvn_flags
 
-#if defined(NEED_sv_2pv_nolen)
-static char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
+#if defined(NEED_newSVpvn_flags)
+static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char * s, STRLEN len, U32 flags);
 static
 #else
-extern char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
+extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char * s, STRLEN len, U32 flags);
 #endif
 
-#ifdef sv_2pv_nolen
-#  undef sv_2pv_nolen
+#ifdef newSVpvn_flags
+#  undef newSVpvn_flags
 #endif
-#define sv_2pv_nolen(a) DPPP_(my_sv_2pv_nolen)(aTHX_ a)
-#define Perl_sv_2pv_nolen DPPP_(my_sv_2pv_nolen)
+#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c)
+#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags)
 
-#if defined(NEED_sv_2pv_nolen) || defined(NEED_sv_2pv_nolen_GLOBAL)
+#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL)
 
-char *
-DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv)
+SV *
+DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags)
 {
-  STRLEN n_a;
-  return sv_2pv(sv, &n_a);
+  SV *sv = newSVpvn(s, len);
+  SvFLAGS(sv) |= (flags & SVf_UTF8);
+  return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
 }
 
 #endif
 
-/* Hint: sv_2pv_nolen
- * Use the SvPV_nolen() macro instead of sv_2pv_nolen().
- */
+#endif
 
-/* SvPV_nolen depends on sv_2pv_nolen */
-#define SvPV_nolen(sv) \
-          ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-           ? SvPVX(sv) : sv_2pv_nolen(sv))
+/* Backwards compatibility stuff... :-( */
+#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
+#  define NEED_sv_2pv_flags
+#endif
+#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
+#  define NEED_sv_2pv_flags_GLOBAL
+#endif
 
+/* Hint: sv_2pv_nolen
+ * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
+ */
+#ifndef sv_2pv_nolen
+#  define sv_2pv_nolen(sv)               SvPV_nolen(sv)
 #endif
 
 #ifdef SvPVbyte
@@ -4139,13 +4515,13 @@ DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv)
  * borrowed from perl-5.7.3.
  */
 
-#if ((PERL_VERSION < 7) || ((PERL_VERSION == 7) && (PERL_SUBVERSION < 0)))
+#if (PERL_BCDVERSION < 0x5007000)
 
 #if defined(NEED_sv_2pvbyte)
-static char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
+static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV * sv, STRLEN * lp);
 static
 #else
-extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
+extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV * sv, STRLEN * lp);
 #endif
 
 #ifdef sv_2pvbyte
@@ -4157,7 +4533,7 @@ extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
 #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
 
 char *
-DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
+DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp)
 {
   sv_utf8_downgrade(sv,0);
   return SvPV(sv,*lp);
@@ -4171,7 +4547,6 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
 
 #undef SvPVbyte
 
-/* SvPVbyte depends on sv_2pvbyte */
 #define SvPVbyte(sv, lp)                                                \
         ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)                \
          ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
@@ -4184,24 +4559,201 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
 #  define sv_2pvbyte        sv_2pv
 
 #endif
-
-/* sv_2pvbyte_nolen depends on sv_2pv_nolen */
 #ifndef sv_2pvbyte_nolen
-#  define sv_2pvbyte_nolen               sv_2pv_nolen
+#  define sv_2pvbyte_nolen(sv)           sv_2pv_nolen(sv)
 #endif
 
 /* Hint: sv_pvn
  * Always use the SvPV() macro instead of sv_pvn().
  */
-#ifndef sv_pvn
-#  define sv_pvn(sv, len)                SvPV(sv, len)
-#endif
 
 /* Hint: sv_pvn_force
  * Always use the SvPV_force() macro instead of sv_pvn_force().
  */
-#ifndef sv_pvn_force
-#  define sv_pvn_force(sv, len)          SvPV_force(sv, len)
+
+/* If these are undefined, they're not handled by the core anyway */
+#ifndef SV_IMMEDIATE_UNREF
+#  define SV_IMMEDIATE_UNREF             0
+#endif
+
+#ifndef SV_GMAGIC
+#  define SV_GMAGIC                      0
+#endif
+
+#ifndef SV_COW_DROP_PV
+#  define SV_COW_DROP_PV                 0
+#endif
+
+#ifndef SV_UTF8_NO_ENCODING
+#  define SV_UTF8_NO_ENCODING            0
+#endif
+
+#ifndef SV_NOSTEAL
+#  define SV_NOSTEAL                     0
+#endif
+
+#ifndef SV_CONST_RETURN
+#  define SV_CONST_RETURN                0
+#endif
+
+#ifndef SV_MUTABLE_RETURN
+#  define SV_MUTABLE_RETURN              0
+#endif
+
+#ifndef SV_SMAGIC
+#  define SV_SMAGIC                      0
+#endif
+
+#ifndef SV_HAS_TRAILING_NUL
+#  define SV_HAS_TRAILING_NUL            0
+#endif
+
+#ifndef SV_COW_SHARED_HASH_KEYS
+#  define SV_COW_SHARED_HASH_KEYS        0
+#endif
+
+#if (PERL_BCDVERSION < 0x5007002)
+
+#if defined(NEED_sv_2pv_flags)
+static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags);
+static
+#else
+extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags);
+#endif
+
+#ifdef sv_2pv_flags
+#  undef sv_2pv_flags
+#endif
+#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c)
+#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags)
+
+#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL)
+
+char *
+DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
+{
+  STRLEN n_a = (STRLEN) flags;
+  return sv_2pv(sv, lp ? lp : &n_a);
+}
+
+#endif
+
+#if defined(NEED_sv_pvn_force_flags)
+static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags);
+static
+#else
+extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags);
+#endif
+
+#ifdef sv_pvn_force_flags
+#  undef sv_pvn_force_flags
+#endif
+#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c)
+#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags)
+
+#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL)
+
+char *
+DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
+{
+  STRLEN n_a = (STRLEN) flags;
+  return sv_pvn_force(sv, lp ? lp : &n_a);
+}
+
+#endif
+
+#endif
+
+#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
+# define DPPP_SVPV_NOLEN_LP_ARG &PL_na
+#else
+# define DPPP_SVPV_NOLEN_LP_ARG 0
+#endif
+#ifndef SvPV_const
+#  define SvPV_const(sv, lp)             SvPV_flags_const(sv, lp, SV_GMAGIC)
+#endif
+
+#ifndef SvPV_mutable
+#  define SvPV_mutable(sv, lp)           SvPV_flags_mutable(sv, lp, SV_GMAGIC)
+#endif
+#ifndef SvPV_flags
+#  define SvPV_flags(sv, lp, flags)      \
+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+                  ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
+#endif
+#ifndef SvPV_flags_const
+#  define SvPV_flags_const(sv, lp, flags) \
+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+                  ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
+                  (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
+#endif
+#ifndef SvPV_flags_const_nolen
+#  define SvPV_flags_const_nolen(sv, flags) \
+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+                  ? SvPVX_const(sv) : \
+                  (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
+#endif
+#ifndef SvPV_flags_mutable
+#  define SvPV_flags_mutable(sv, lp, flags) \
+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+                  ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
+                  sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
+#endif
+#ifndef SvPV_force
+#  define SvPV_force(sv, lp)             SvPV_force_flags(sv, lp, SV_GMAGIC)
+#endif
+
+#ifndef SvPV_force_nolen
+#  define SvPV_force_nolen(sv)           SvPV_force_flags_nolen(sv, SV_GMAGIC)
+#endif
+
+#ifndef SvPV_force_mutable
+#  define SvPV_force_mutable(sv, lp)     SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
+#endif
+
+#ifndef SvPV_force_nomg
+#  define SvPV_force_nomg(sv, lp)        SvPV_force_flags(sv, lp, 0)
+#endif
+
+#ifndef SvPV_force_nomg_nolen
+#  define SvPV_force_nomg_nolen(sv)      SvPV_force_flags_nolen(sv, 0)
+#endif
+#ifndef SvPV_force_flags
+#  define SvPV_force_flags(sv, lp, flags) \
+                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
+                 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
+#endif
+#ifndef SvPV_force_flags_nolen
+#  define SvPV_force_flags_nolen(sv, flags) \
+                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
+                 ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags))
+#endif
+#ifndef SvPV_force_flags_mutable
+#  define SvPV_force_flags_mutable(sv, lp, flags) \
+                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
+                 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
+                  : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
+#endif
+#ifndef SvPV_nolen
+#  define SvPV_nolen(sv)                 \
+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+                  ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
+#endif
+#ifndef SvPV_nolen_const
+#  define SvPV_nolen_const(sv)           \
+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+                  ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
+#endif
+#ifndef SvPV_nomg
+#  define SvPV_nomg(sv, lp)              SvPV_flags(sv, lp, 0)
+#endif
+
+#ifndef SvPV_nomg_const
+#  define SvPV_nomg_const(sv, lp)        SvPV_flags_const(sv, lp, 0)
+#endif
+
+#ifndef SvPV_nomg_const_nolen
+#  define SvPV_nomg_const_nolen(sv)      SvPV_flags_const_nolen(sv, 0)
 #endif
 #ifndef SvMAGIC_set
 #  define SvMAGIC_set(sv, val)           \
@@ -4209,7 +4761,7 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
                 (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
 #endif
 
-#if ((PERL_VERSION < 9) || ((PERL_VERSION == 9) && (PERL_SUBVERSION < 3)))
+#if (PERL_BCDVERSION < 0x5009003)
 #ifndef SvPVX_const
 #  define SvPVX_const(sv)                ((const char*) (0 + SvPVX(sv)))
 #endif
@@ -4244,7 +4796,7 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
                 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
 #endif
 
-#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 0)))
+#if (PERL_BCDVERSION < 0x5004000)
 #ifndef SvUV_set
 #  define SvUV_set(sv, val)              \
                 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
@@ -4260,7 +4812,7 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
 
 #endif
 
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(vnewSVpvf)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
 #if defined(NEED_vnewSVpvf)
 static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args);
 static
@@ -4287,18 +4839,15 @@ DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
 #endif
 #endif
 
-/* sv_vcatpvf depends on sv_vcatpvfn */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vcatpvf)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
 #  define sv_vcatpvf(sv, pat, args)  sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
 #endif
 
-/* sv_vsetpvf depends on sv_vsetpvfn */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vsetpvf)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
 #  define sv_vsetpvf(sv, pat, args)  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
 #endif
 
-/* sv_catpvf_mg depends on sv_vcatpvfn, sv_catpvf_mg_nocontext */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_catpvf_mg)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
 #if defined(NEED_sv_catpvf_mg)
 static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
 static
@@ -4323,9 +4872,8 @@ DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
 #endif
 #endif
 
-/* sv_catpvf_mg_nocontext depends on sv_vcatpvfn */
 #ifdef PERL_IMPLICIT_CONTEXT
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_catpvf_mg_nocontext)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
 #if defined(NEED_sv_catpvf_mg_nocontext)
 static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...);
 static
@@ -4353,6 +4901,7 @@ DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
 #endif
 #endif
 
+/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
 #ifndef sv_catpvf_mg
 #  ifdef PERL_IMPLICIT_CONTEXT
 #    define sv_catpvf_mg   Perl_sv_catpvf_mg_nocontext
@@ -4361,8 +4910,7 @@ DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
 #  endif
 #endif
 
-/* sv_vcatpvf_mg depends on sv_vcatpvfn */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vcatpvf_mg)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
 #  define sv_vcatpvf_mg(sv, pat, args)                                     \
    STMT_START {                                                            \
      sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
@@ -4370,8 +4918,7 @@ DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
    } STMT_END
 #endif
 
-/* sv_setpvf_mg depends on sv_vsetpvfn, sv_setpvf_mg_nocontext */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_setpvf_mg)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
 #if defined(NEED_sv_setpvf_mg)
 static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
 static
@@ -4396,9 +4943,8 @@ DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
 #endif
 #endif
 
-/* sv_setpvf_mg_nocontext depends on sv_vsetpvfn */
 #ifdef PERL_IMPLICIT_CONTEXT
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_setpvf_mg_nocontext)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
 #if defined(NEED_sv_setpvf_mg_nocontext)
 static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...);
 static
@@ -4426,6 +4972,7 @@ DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
 #endif
 #endif
 
+/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
 #ifndef sv_setpvf_mg
 #  ifdef PERL_IMPLICIT_CONTEXT
 #    define sv_setpvf_mg   Perl_sv_setpvf_mg_nocontext
@@ -4434,14 +4981,53 @@ DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
 #  endif
 #endif
 
-/* sv_vsetpvf_mg depends on sv_vsetpvfn */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vsetpvf_mg)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
 #  define sv_vsetpvf_mg(sv, pat, args)                                     \
    STMT_START {                                                            \
      sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
      SvSETMAGIC(sv);                                                       \
    } STMT_END
 #endif
+
+#ifndef newSVpvn_share
+
+#if defined(NEED_newSVpvn_share)
+static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
+static
+#else
+extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
+#endif
+
+#ifdef newSVpvn_share
+#  undef newSVpvn_share
+#endif
+#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
+#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
+
+#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
+
+SV *
+DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash)
+{
+  SV *sv;
+  if (len < 0)
+    len = -len;
+  if (!hash)
+    PERL_HASH(hash, (char*) src, len);
+  sv = newSVpvn((char *) src, len);
+  sv_upgrade(sv, SVt_PVIV);
+  SvIVX(sv) = hash;
+  SvREADONLY_on(sv);
+  SvPOK_on(sv);
+  return sv;
+}
+
+#endif
+
+#endif
+#ifndef SvSHARED_HASH
+#  define SvSHARED_HASH(sv)              (0 + SvUVX(sv))
+#endif
 #ifndef WARN_ALL
 #  define WARN_ALL                       0
 #endif
@@ -4641,8 +5227,7 @@ DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
 #  endif
 #endif
 
-/* warner depends on vnewSVpvf */
-#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(warner)
+#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
 #if defined(NEED_warner)
 static void DPPP_(my_warner)(U32 err, const char *pat, ...);
 static
@@ -4671,7 +5256,6 @@ DPPP_(my_warner)(U32 err, const char *pat, ...)
 
 #define warner  Perl_warner
 
-/* Perl_warner_nocontext depends on warner */
 #define Perl_warner_nocontext  Perl_warner
 
 #endif
@@ -4688,6 +5272,10 @@ DPPP_(my_warner)(U32 err, const char *pat, ...)
 #  define newSVpvs(str)                  newSVpvn(str "", sizeof(str) - 1)
 #endif
 
+#ifndef newSVpvs_flags
+#  define newSVpvs_flags(str, flags)     newSVpvn_flags(str "", sizeof(str) - 1, flags)
+#endif
+
 #ifndef sv_catpvs
 #  define sv_catpvs(sv, str)             sv_catpvn(sv, str "", sizeof(str) - 1)
 #endif
@@ -4863,14 +5451,6 @@ DPPP_(my_warner)(U32 err, const char *pat, ...)
 #endif
 
 /* That's the best we can do... */
-#ifndef SvPV_force_nomg
-#  define SvPV_force_nomg                SvPV_force
-#endif
-
-#ifndef SvPV_nomg
-#  define SvPV_nomg                      SvPV
-#endif
-
 #ifndef sv_catpvn_nomg
 #  define sv_catpvn_nomg                 sv_catpvn
 #endif
@@ -4988,6 +5568,47 @@ DPPP_(my_warner)(U32 err, const char *pat, ...)
 #  define SvVSTRING_mg(sv)               (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
 #endif
 
+/* Hint: sv_magic_portable
+ * This is a compatibility function that is only available with
+ * Devel::PPPort. It is NOT in the perl core.
+ * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
+ * it is being passed a name pointer with namlen == 0. In that
+ * case, perl 5.8.0 and later store the pointer, not a copy of it.
+ * The compatibility can be provided back to perl 5.004. With
+ * earlier versions, the code will not compile.
+ */
+
+#if (PERL_BCDVERSION < 0x5004000)
+
+  /* code that uses sv_magic_portable will not compile */
+
+#elif (PERL_BCDVERSION < 0x5008000)
+
+#  define sv_magic_portable(sv, obj, how, name, namlen)     \
+   STMT_START {                                             \
+     SV *SvMp_sv = (sv);                                    \
+     char *SvMp_name = (char *) (name);                     \
+     I32 SvMp_namlen = (namlen);                            \
+     if (SvMp_name && SvMp_namlen == 0)                     \
+     {                                                      \
+       MAGIC *mg;                                           \
+       sv_magic(SvMp_sv, obj, how, 0, 0);                   \
+       mg = SvMAGIC(SvMp_sv);                               \
+       mg->mg_len = -42; /* XXX: this is the tricky part */ \
+       mg->mg_ptr = SvMp_name;                              \
+     }                                                      \
+     else                                                   \
+     {                                                      \
+       sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
+     }                                                      \
+   } STMT_END
+
+#else
+
+#  define sv_magic_portable(a, b, c, d, e)  sv_magic(a, b, c, d, e)
+
+#endif
+
 #ifdef USE_ITHREADS
 #ifndef CopFILE
 #  define CopFILE(c)                     ((c)->cop_file)
@@ -5115,8 +5736,6 @@ DPPP_(my_warner)(U32 err, const char *pat, ...)
 #ifndef IS_NUMBER_NAN
 #  define IS_NUMBER_NAN                  0x20
 #endif
-
-/* GROK_NUMERIC_RADIX depends on grok_numeric_radix */
 #ifndef GROK_NUMERIC_RADIX
 #  define GROK_NUMERIC_RADIX(sp, send)   grok_numeric_radix(sp, send)
 #endif
@@ -5192,8 +5811,6 @@ DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
 #endif
 #endif
 
-/* grok_number depends on grok_numeric_radix */
-
 #ifndef grok_number
 #if defined(NEED_grok_number)
 static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
@@ -5410,10 +6027,10 @@ DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
 
 #ifndef grok_bin
 #if defined(NEED_grok_bin)
-static UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
 static
 #else
-extern UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
 #endif
 
 #ifdef grok_bin
@@ -5424,7 +6041,7 @@ extern UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *r
 
 #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
 UV
-DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
+DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
 {
     const char *s = start;
     STRLEN len = *len_p;
@@ -5512,10 +6129,10 @@ DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
 
 #ifndef grok_hex
 #if defined(NEED_grok_hex)
-static UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
 static
 #else
-extern UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
 #endif
 
 #ifdef grok_hex
@@ -5526,7 +6143,7 @@ extern UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *r
 
 #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
 UV
-DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
+DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
 {
     const char *s = start;
     STRLEN len = *len_p;
@@ -5614,10 +6231,10 @@ DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
 
 #ifndef grok_oct
 #if defined(NEED_grok_oct)
-static UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
 static
 #else
-extern UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
 #endif
 
 #ifdef grok_oct
@@ -5628,7 +6245,7 @@ extern UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *r
 
 #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
 UV
-DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
+DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
 {
     const char *s = start;
     STRLEN len = *len_p;
diff --git a/t/2-full.t b/t/2-full.t
index 4c82b37..dfd78e8 100644
--- a/t/2-full.t
+++ b/t/2-full.t
@@ -1,44 +1,62 @@
 #!/usr/bin/perl
 
 use strict;
-use Test::More tests => 8484;
+use Test::More tests => 10201;
 use Lingua::Stem::Snowball qw( stem );
 use File::Spec;
 
-my @languages = qw( en da de es fi fr it nl no pt ru sv );
-my $stemmer   = Lingua::Stem::Snowball->new();
-
-for my $iso (@languages) {
+my %languages = (
+    en => 'ISO-8859-1',
+    da => 'ISO-8859-1',
+    de => 'ISO-8859-1',
+    es => 'ISO-8859-1',
+    fi => 'ISO-8859-1',
+    fr => 'ISO-8859-1',
+    hu => 'ISO-8859-1',
+    it => 'ISO-8859-1',
+    nl => 'ISO-8859-1',
+    no => 'ISO-8859-1',
+    pt => 'ISO-8859-1',
+    ro => 'ISO-8859-2',
+    ru => 'KOI8-R',
+    sv => 'ISO-8859-1',
+    tr => undef,
+);
+my $stemmer = Lingua::Stem::Snowball->new();
+
+while ( my ( $iso, $encoding ) = each %languages ) {
     my ( @before, @after );
-    my $encoding;
 
-    # set language
+    # Set language.
     $stemmer->lang($iso);
 
-    # test ISO-8859-1 / KOI8-R vocab
-    $encoding = $iso eq 'ru' ? 'KOI8-R' : 'ISO-8859-1';
-    my $default_enc_voc_path
-        = File::Spec->catfile( 't', 'test_voc', "$iso.default_enc" );
-    open( my $default_enc_voc_fh, '<', $default_enc_voc_path )
-        or die "Couldn't open file '$default_enc_voc_path' for reading: $!";
-    $stemmer->encoding($encoding);
-    while (<$default_enc_voc_fh>) {
-        chomp;
-        my ( $raw, $expected ) = split;
-        push @before, $raw;
-        push @after,  $expected;
-        test_singles( $raw, $expected, $iso, $encoding );
+    # Test 8-bit vocab.
+    if ($encoding) {
+        my $default_enc_voc_path
+            = File::Spec->catfile( 't', 'test_voc', "$iso.default_enc" );
+        open( my $default_enc_voc_fh, '<', $default_enc_voc_path )
+            or die "Can't open '$default_enc_voc_path' for reading: $!";
+        $stemmer->encoding($encoding);
+        while (<$default_enc_voc_fh>) {
+            chomp;
+            my ( $raw, $expected ) = split;
+            push @before, $raw;
+            push @after,  $expected;
+            test_singles( $raw, $expected, $iso, $encoding );
+        }
+        test_arrays( \@before, \@after, $iso, $encoding );
     }
-    test_arrays( \@before, \@after, $iso, $encoding );
 
-    # test UTF-8 vocab
+    # Test UTF-8 vocab.
     $encoding = 'UTF-8';
     @before   = ();
     @after    = ();
     my $utf8_voc_path = File::Spec->catfile( 't', 'test_voc', "$iso.utf8" );
-    open( my $utf8_voc_fh, '<:utf8', $utf8_voc_path )
+    my $open_mode = $] >= 5.8 ? "<:utf8" : "<";
+    open( my $utf8_voc_fh, $open_mode, $utf8_voc_path )
         or die "Couldn't open file '$utf8_voc_path' for reading: $!";
     $stemmer->encoding($encoding);
+
     while (<$utf8_voc_fh>) {
         chomp;
         my ( $raw, $expected ) = split;
@@ -88,4 +106,3 @@ sub test_arrays {
     $stemmer->stem_in_place( \@got );
     is_deeply( \@got, $expected, "$iso \$s->stem_in_place(\@raw)" );
 }
-
diff --git a/t/99-TestPodCoverage.t b/t/99-TestPodCoverage.t
index e5415c2..da4624b 100644
--- a/t/99-TestPodCoverage.t
+++ b/t/99-TestPodCoverage.t
@@ -3,4 +3,6 @@
 use Test::More;
 plan skip_all => "Test::Pod::Coverage required for testing POD"
     unless eval "use Test::Pod::Coverage; 1";
-all_pod_coverage_ok();
+plan tests => 1;
+my $trustme = { trustme => [qr/^dl_load_flags$/] };
+pod_coverage_ok( "Lingua::Stem::Snowball", $trustme );
diff --git a/t/test_voc/hu.default_enc b/t/test_voc/hu.default_enc
new file mode 100644
index 0000000..f3e6329
--- /dev/null
+++ b/t/test_voc/hu.default_enc
@@ -0,0 +1,100 @@
+megtudhatok megtudhat
+be�lt�nk be�lt
+k�sz�l�kgy�rt�kra k�sz�l�kgy�rt�
+becs�sztatta becs�sztatt
+abszurdit�s�n abszurdit�s
+kamatt�mogat�st kamatt�mogat�s
+apja ap
+kocsm�n kocsm
+munkav�llal�-szerz�t munkav�llal�-szerz�
+nagyvil�gba nagyvil�g
+meglep�en meglep�
+alaki al
+b�nas�gba b�nas�g
+bok�mban boka
+kir�lyhoz kir�ly
+megk�l�nb�ztet�seket megk�l�nb�ztet�s
+janu�rig janu�r
+keresettek keresett
+j�vedelemtermel� j�vedelemtermel�
+negyvenre negyven
+kormeghat�roz�sai kormeghat�roz�s
+makroelemz�i makroelemz�
+karambolj�t karambol
+m�k�d�sben m�k�d�s
+lec�vekelni lec�vekeln
+nagys�gban nagys�g
+kiscsirk�ket kiscsirke
+k�rbeutazza k�rbeutazz
+belesodorva belesodorv
+katal�gusv�s�rl�s katal�gusv�s�rl�s
+m�lyebbr�l m�lyebb
+man�kenek man
+bev�s�rl�s bev�s�rl�s
+konstrukci�ja konstrukci�
+kamat kam
+lobog�t lobog�
+bajnoks�gokon bajnoks�g
+kecsegtet� kecsegtet�
+m�sodpercre m�sodperc
+k�vir�zsa k�vir�zs
+m�lym�vel�s� m�lym�vel�s�
+lehajthatom lehajthat
+lefedett lefedet
+l�pteivel l�pt
+koszt�mbe koszt�
+levelezik levelez
+magasba magas
+kamatleolvad�sra kamatleolvad�s
+k�rnyezet�hez k�rnyezet
+k�szp�nzt k�szp�nz
+k�tetk�nt k�tet
+percd�j percd�j
+k�ttethet k�tteth
+m�lattuk m�latt
+b�rmire b�rm
+b�r�s�ggal b�r�s�g
+belv�zelvezet� belv�zelvezet�
+beled�gleni beled�glen
+belesz�d�lt belesz�d�l
+kapaszkodtam kapaszkodt
+b�rbead�s b�rbead�s
+agyamban agy
+megnyugtat megnyugt
+meg�rdemlik meg�rdeml
+j�v�mben j�v�
+adatv�delemr�l adatv�del
+beszedt�k beszedte
+bamb�n bamb
+l�bas l�bas
+j�v�k�p�nek j�v�k�p
+k�sz�ti k�sz�t
+kondi kond
+bevon�s�t bevon�s
+ki�lt� ki�lta
+kil�t� kil�t�
+lep�d�tt lep�d�t
+nagyszab�s� nagyszab�s�
+kiejthet kiejth
+besz�lgethetnek besz�lgethet
+kiker�lik kiker�l
+megalkot�s�t�l megalkot�s
+m�v�szeket m�v�sz
+l�tottakat l�tott
+biztos�t�k biztos�t�
+angolb�l angol
+kib�v�tett kib�v�tet
+b�cs�zni b�cs�zn
+l�togatni l�togatn
+lov�sz�rt lov�sz
+b�cs�level�t b�cs�level
+arisztokrat�nak arisztokrat
+k�pmutat� k�pmutat�
+megn�vekedett megn�vekedet
+k�h�gtem k�h�gt
+len�z len�z
+k�s�ret�ben k�s�ret
+kart�vols�gnyira kart�vols�gny
+bekapcsol�dtunk bekapcsol�dt
+megjegyz�s�re megjegyz�s
+megvetnek megvet
diff --git a/t/test_voc/hu.utf8 b/t/test_voc/hu.utf8
new file mode 100644
index 0000000..5932cd2
--- /dev/null
+++ b/t/test_voc/hu.utf8
@@ -0,0 +1,100 @@
+megtudhatok megtudhat
+beültünk beült
+készülékgyártókra készülékgyártó
+becsúsztatta becsúsztatt
+abszurditásán abszurditás
+kamattámogatást kamattámogatás
+apja ap
+kocsmán kocsm
+munkavállaló-szerzõt munkavállaló-szerzõ
+nagyvilágba nagyvilág
+meglepõen meglepõ
+alaki al
+bénaságba bénaság
+bokámban boka
+királyhoz király
+megkülönböztetéseket megkülönböztetés
+januárig január
+keresettek keresett
+jövedelemtermelõ jövedelemtermelõ
+negyvenre negyven
+kormeghatározásai kormeghatározás
+makroelemzõi makroelemzõ
+karambolját karambol
+mûködésben mûködés
+lecövekelni lecövekeln
+nagyságban nagyság
+kiscsirkéket kiscsirke
+körbeutazza körbeutazz
+belesodorva belesodorv
+katalógusvásárlás katalógusvásárlás
+mélyebbrõl mélyebb
+manökenek man
+bevásárlás bevásárlás
+konstrukciója konstrukció
+kamat kam
+lobogót lobogó
+bajnokságokon bajnokság
+kecsegtetõ kecsegtetõ
+másodpercre másodperc
+kövirózsa kövirózs
+mélymûvelésû mélymûvelésû
+lehajthatom lehajthat
+lefedett lefedet
+lépteivel lépt
+kosztümbe kosztü
+levelezik levelez
+magasba magas
+kamatleolvadásra kamatleolvadás
+környezetéhez környezet
+készpénzt készpénz
+kötetként kötet
+percdíj percdíj
+köttethet kötteth
+múlattuk múlatt
+bármire bárm
+bírósággal bíróság
+belvízelvezetõ belvízelvezetõ
+beledögleni beledöglen
+beleszédült beleszédül
+kapaszkodtam kapaszkodt
+bérbeadás bérbeadás
+agyamban agy
+megnyugtat megnyugt
+megérdemlik megérdeml
+jövõmben jövõ
+adatvédelemrõl adatvédel
+beszedték beszedte
+bambán bamb
+lábas lábas
+jövõképének jövõkép
+készíti készít
+kondi kond
+bevonását bevonás
+kiáltá kiálta
+kilátó kilátó
+lepõdött lepõdöt
+nagyszabású nagyszabású
+kiejthet kiejth
+beszélgethetnek beszélgethet
+kikerülik kikerül
+megalkotásától megalkotás
+mûvészeket mûvész
+látottakat látott
+biztosítók biztosító
+angolból angol
+kibõvített kibõvítet
+búcsúzni búcsúzn
+látogatni látogatn
+lovászért lovász
+búcsúlevelét búcsúlevel
+arisztokratának arisztokrat
+képmutató képmutató
+megnövekedett megnövekedet
+köhögtem köhögt
+lenéz lenéz
+kíséretében kíséret
+kartávolságnyira kartávolságny
+bekapcsolódtunk bekapcsolódt
+megjegyzésére megjegyzés
+megvetnek megvet
diff --git a/t/test_voc/ro.default_enc b/t/test_voc/ro.default_enc
new file mode 100644
index 0000000..da54890
--- /dev/null
+++ b/t/test_voc/ro.default_enc
@@ -0,0 +1,100 @@
+�ntrerup�nd �ntrerup
+tr�snit tr�snit
+ideali�ti idealist
+frumoas� frumoas
+gr�ul gr�ul
+ocolesc ocol
+acuz� acuz
+�ndep�rteaz� �ndep�rt
+ie�iri ie�ir
+por�iune por�iun
+r�sturna�i r�sturn
+moara moar
+egalitare egalit
+insist insist
+pra�tie pra�t
+cranii cran
+nedumerire nedumer
+b�tute b�tut
+recunoa�tem recunoa�t
+�n�elege�i �n�eleg
+crea�ia crea�
+punte punt
+amintesc amint
+must��i must��
+furia furi
+trommelfeuer trommelfeuer
+rareori rareor
+explicativ� explic
+agita�ie agit
+alerg alerg
+fortifica�iile fortific
+veghe vegh
+admirabil admir
+fabrice fabric
+s�rb�toreasc� s�rb�tor
+sublinia sublin
+muncind munc
+s�r�c�cioas� s�r�c�c
+ocupa ocup
+constituiri constituir
+audiat audiat
+actualitatea actual
+profetizat profetiz
+caraghiosul caragh
+cicatricea cicatr
+segmentului segment
+rahitismul rahitist
+l�rge�te l�rg
+barajului baraj
+p�cali�i p�cal
+gustul gust
+recenzeze recenz
+abera�ii aber
+muncile munc
+�nv��a �nv��
+edi�ii edi�
+relativit��ii relat
+imperativul imper
+renovat� renov
+emo�ionat emo�ion
+exploat�rilor exploat�r
+nedreptatea nedrept
+incarnare incarn
+suprapunere suprapun
+argumentului argument
+justa just
+oaste oast
+leg�m leg
+aspira�iilor aspir
+num�rul num�r
+schimbat� schimbat
+cabinet cabinet
+doamnelor doamn
+�nfiora�i �nfior
+feminismului feminist
+zonia zoni
+puritan� puritan
+�njur�turi �njur�tur
+lovirii lovir
+inventeaz� invent
+nefericit neferic
+modelele model
+�nfundaser� �nfund
+moderni�tilor modernist
+fosforescent� fosforescent
+paralizat paraliz
+nesigure nesigur
+�ntrupare �ntrup
+nor nor
+coji�i coj
+�ablonul �ablon
+melancolii melancol
+v�leni v�len
+sleit sleit
+contorizarea contoriz
+nemul�umire nemul�um
+condamnabil� condamn
+floret� floret
+indigna�i indign
+practicat� practic
diff --git a/t/test_voc/ro.utf8 b/t/test_voc/ro.utf8
new file mode 100644
index 0000000..c65e38f
--- /dev/null
+++ b/t/test_voc/ro.utf8
@@ -0,0 +1,100 @@
+întrerupând întrerup
+trăsnit trăsnit
+idealişti idealist
+frumoasă frumoas
+grâul grâul
+ocolesc ocol
+acuză acuz
+îndepărtează îndepărt
+ieşiri ieşir
+porţiune porţiun
+răsturnaţi răsturn
+moara moar
+egalitare egalit
+insist insist
+praştie praşt
+cranii cran
+nedumerire nedumer
+bătute bătut
+recunoaştem recunoaşt
+înţelegeţi înţeleg
+creaţia creaţ
+punte punt
+amintesc amint
+mustăţi mustăţ
+furia furi
+trommelfeuer trommelfeuer
+rareori rareor
+explicativă explic
+agitaţie agit
+alerg alerg
+fortificaţiile fortific
+veghe vegh
+admirabil admir
+fabrice fabric
+sărbătorească sărbător
+sublinia sublin
+muncind munc
+sărăcăcioasă sărăcăc
+ocupa ocup
+constituiri constituir
+audiat audiat
+actualitatea actual
+profetizat profetiz
+caraghiosul caragh
+cicatricea cicatr
+segmentului segment
+rahitismul rahitist
+lărgeşte lărg
+barajului baraj
+păcaliţi păcal
+gustul gust
+recenzeze recenz
+aberaţii aber
+muncile munc
+învăţa învăţ
+ediţii ediţ
+relativităţii relat
+imperativul imper
+renovată renov
+emoţionat emoţion
+exploatărilor exploatăr
+nedreptatea nedrept
+incarnare incarn
+suprapunere suprapun
+argumentului argument
+justa just
+oaste oast
+legăm leg
+aspiraţiilor aspir
+numărul număr
+schimbată schimbat
+cabinet cabinet
+doamnelor doamn
+înfioraţi înfior
+feminismului feminist
+zonia zoni
+puritană puritan
+înjurături înjurătur
+lovirii lovir
+inventează invent
+nefericit neferic
+modelele model
+înfundaseră înfund
+moderniştilor modernist
+fosforescentă fosforescent
+paralizat paraliz
+nesigure nesigur
+întrupare întrup
+nor nor
+cojiţi coj
+şablonul şablon
+melancolii melancol
+văleni vălen
+sleit sleit
+contorizarea contoriz
+nemulţumire nemulţum
+condamnabilă condamn
+floretă floret
+indignaţi indign
+practicată practic
diff --git a/t/test_voc/tr.utf8 b/t/test_voc/tr.utf8
new file mode 100644
index 0000000..36fe4eb
--- /dev/null
+++ b/t/test_voc/tr.utf8
@@ -0,0 +1,100 @@
+masallarının masal
+değilken değil
+formaları forma
+kalkışılsa kalkışıl
+kayıtlar kayıt
+şeflik şeflik
+seçtim seç
+girerek girerek
+bölgesini bölge
+bando bando
+aydınlatmaya aydınlatma
+romina rom
+durmuþ durmuþ
+fıfa'ya fıfa'ya
+akım ak
+görevınde görev
+projesi'nde projesi'n
+kesimlerin kes
+nitelikte nitelik
+pazarlarına pazar
+enstitüsü'nde enstitüsü'n
+dÿnyadaki dÿnya
+mercilere merci
+yaþadýnýz yaþadýnýz
+getirilecek getirilecek
+spektrumun spektr
+açıklarız açık
+shçek'i shçek'i
+s s
+camiası'na camiası'na
+konulması konulmas
+mitolojisinde mitoloji
+partıden partıde
+derecesine derece
+metafiziği metafizik
+kalmaz kalmaz
+geçilmez geçilmez
+uyarıya' uyarıya'
+istihdamıyla istihdam
+başlatmayı başlatma
+bağimsizdir bağimsiz
+sahipseniz sahip
+kazanova kazanov
+akşam akşa
+kıyasladığım kıyasladık
+çevremizdeki çevre
+aklınızı akl
+kalemle kale
+platformların platform
+soluma sol
+gösteriyor' gösteriyor'
+pro pro
+vitesli vitesli
+döktüğü döktük
+laser laser
+pazardadır pazar
+donanması'na donanması'na
+sekreterlik sekreterlik
+aktivitedir aktivi
+uyarısını uyarı
+sözcülüğünü sözcülük
+torunlarınızla torun
+olmamasıdır olmamas
+büronuz büro
+dejenere dejener
+katılacağı katılacak
+güvenlikten güvenlik
+ılgılensenız ılgıle
+şesu'yu şesu'yu
+sasasorunun sasasor
+sahtecilere sahteci
+kullanarak kullanarak
+kurulların kurul
+downforce downforce
+kaymakamlýklar kaymakamlýk
+tarzından tarz
+stajlarının staj
+tüpraş'a tüpraş'a
+international'a international'a
+finlands finlands
+tekvandocular tekvandocu
+ptt'den ptt'den
+adadığı adadık
+evlenip evlenip
+mürüvvetini mürüvvet
+yılmaz'la yılmaz'la
+ormani'na ormani'na
+çizimler çizim
+snipes snipes
+þarký þarký
+zihnin zihn
+göcü göç
+abant'a abant'a
+bulunduğun bulunduk
+katırı katır
+chp'siz chp'siz
+rotalarını rota
+bolca bol
+festivali'ne festivali'ne
+teşkilatlarımızın teşkilat
diff --git a/typemap b/typemap
new file mode 100644
index 0000000..9486533
--- /dev/null
+++ b/typemap
@@ -0,0 +1,23 @@
+AV *            T_AVREF 
+HV *			T_HVREF
+
+#############################################################################
+INPUT
+T_AVREF
+    if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV)
+        $var = (AV*)SvRV($arg);
+    else
+        Perl_croak(aTHX_ \"$var is not an array reference\")
+T_HVREF
+	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV)
+	    $var = (HV*)SvRV($arg);
+	else
+	    Perl_croak(aTHX_ \"$var is not a hash reference\")
+
+#############################################################################
+OUTPUT
+T_AVREF
+    $arg = newRV((SV*)$var);
+T_HVREF
+	$arg = newRV((SV*)$var);
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/liblingua-stem-snowball-perl.git



More information about the Pkg-perl-cvs-commits mailing list