[liblingua-stem-snowball-perl] 01/19: [svn-inject] Installing original source of liblingua-stem-snowball-perl
dom at earth.li
dom at earth.li
Sun Apr 24 10:25:23 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 f5642b65c0484db1cbab9b93f83bd3b660fd2173
Author: Dominic Hargreaves <dom at earth.li>
Date: Tue Aug 5 21:20:35 2008 +0000
[svn-inject] Installing original source of liblingua-stem-snowball-perl
---
Build.PL | 26 +
Changes | 83 +
MANIFEST | 104 +
META.yml | 22 +
Makefile.PL | 31 +
README | 22 +
bin/benchmark_stemmers.plx | 116 +
bin/generate_tests.plx | 63 +
lib/Lingua/Stem/Snowball.pm | 330 ++
lib/Lingua/Stem/Snowball.xs | 251 +
libstemmer_c/Makefile | 9 +
libstemmer_c/README | 82 +
libstemmer_c/examples/stemwords.c.disabled | 191 +
libstemmer_c/include/libstemmer.h | 79 +
libstemmer_c/libstemmer/libstemmer.c | 92 +
libstemmer_c/libstemmer/modules.h | 162 +
libstemmer_c/mkinc.mak | 63 +
libstemmer_c/runtime/api.c | 69 +
libstemmer_c/runtime/api.h | 27 +
libstemmer_c/runtime/header.h | 58 +
libstemmer_c/runtime/utilities.c | 446 ++
libstemmer_c/src_c/stem_ISO_8859_1_danish.c | 338 ++
libstemmer_c/src_c/stem_ISO_8859_1_danish.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_dutch.c | 635 +++
libstemmer_c/src_c/stem_ISO_8859_1_dutch.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_english.c | 1156 +++++
libstemmer_c/src_c/stem_ISO_8859_1_english.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_finnish.c | 792 +++
libstemmer_c/src_c/stem_ISO_8859_1_finnish.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_french.c | 1276 +++++
libstemmer_c/src_c/stem_ISO_8859_1_french.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_german.c | 512 ++
libstemmer_c/src_c/stem_ISO_8859_1_german.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_italian.c | 1091 +++++
libstemmer_c/src_c/stem_ISO_8859_1_italian.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c | 296 ++
libstemmer_c/src_c/stem_ISO_8859_1_norwegian.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_porter.c | 776 +++
libstemmer_c/src_c/stem_ISO_8859_1_porter.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c | 1035 ++++
libstemmer_c/src_c/stem_ISO_8859_1_portuguese.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_spanish.c | 1119 +++++
libstemmer_c/src_c/stem_ISO_8859_1_spanish.h | 16 +
libstemmer_c/src_c/stem_ISO_8859_1_swedish.c | 307 ++
libstemmer_c/src_c/stem_ISO_8859_1_swedish.h | 16 +
libstemmer_c/src_c/stem_KOI8_R_russian.c | 701 +++
libstemmer_c/src_c/stem_KOI8_R_russian.h | 16 +
libstemmer_c/src_c/stem_UTF_8_danish.c | 344 ++
libstemmer_c/src_c/stem_UTF_8_danish.h | 16 +
libstemmer_c/src_c/stem_UTF_8_dutch.c | 653 +++
libstemmer_c/src_c/stem_UTF_8_dutch.h | 16 +
libstemmer_c/src_c/stem_UTF_8_english.c | 1176 +++++
libstemmer_c/src_c/stem_UTF_8_english.h | 16 +
libstemmer_c/src_c/stem_UTF_8_finnish.c | 808 ++++
libstemmer_c/src_c/stem_UTF_8_finnish.h | 16 +
libstemmer_c/src_c/stem_UTF_8_french.c | 1296 +++++
libstemmer_c/src_c/stem_UTF_8_french.h | 16 +
libstemmer_c/src_c/stem_UTF_8_german.c | 526 ++
libstemmer_c/src_c/stem_UTF_8_german.h | 16 +
libstemmer_c/src_c/stem_UTF_8_italian.c | 1113 +++++
libstemmer_c/src_c/stem_UTF_8_italian.h | 16 +
libstemmer_c/src_c/stem_UTF_8_norwegian.c | 302 ++
libstemmer_c/src_c/stem_UTF_8_norwegian.h | 16 +
libstemmer_c/src_c/stem_UTF_8_porter.c | 794 ++++
libstemmer_c/src_c/stem_UTF_8_porter.h | 16 +
libstemmer_c/src_c/stem_UTF_8_portuguese.c | 1055 ++++
libstemmer_c/src_c/stem_UTF_8_portuguese.h | 16 +
libstemmer_c/src_c/stem_UTF_8_russian.c | 709 +++
libstemmer_c/src_c/stem_UTF_8_russian.h | 16 +
libstemmer_c/src_c/stem_UTF_8_spanish.c | 1137 +++++
libstemmer_c/src_c/stem_UTF_8_spanish.h | 16 +
libstemmer_c/src_c/stem_UTF_8_swedish.c | 313 ++
libstemmer_c/src_c/stem_UTF_8_swedish.h | 16 +
ppport.h | 5820 +++++++++++++++++++++++
t/0-load.t | 5 +
t/1-stem.t | 75 +
t/2-full.t | 91 +
t/3-subclass.t | 18 +
t/98-TestPod.t | 7 +
t/99-TestPodCoverage.t | 6 +
t/test_voc/da.default_enc | 100 +
t/test_voc/da.utf8 | 100 +
t/test_voc/de.default_enc | 100 +
t/test_voc/de.utf8 | 100 +
t/test_voc/en.default_enc | 100 +
t/test_voc/en.utf8 | 100 +
t/test_voc/es.default_enc | 100 +
t/test_voc/es.utf8 | 100 +
t/test_voc/fi.default_enc | 100 +
t/test_voc/fi.utf8 | 100 +
t/test_voc/fr.default_enc | 100 +
t/test_voc/fr.utf8 | 100 +
t/test_voc/it.default_enc | 100 +
t/test_voc/it.utf8 | 100 +
t/test_voc/nl.default_enc | 100 +
t/test_voc/nl.utf8 | 100 +
t/test_voc/no.default_enc | 100 +
t/test_voc/no.utf8 | 100 +
t/test_voc/pt.default_enc | 100 +
t/test_voc/pt.utf8 | 100 +
t/test_voc/ru.default_enc | 100 +
t/test_voc/ru.utf8 | 100 +
t/test_voc/sv.default_enc | 100 +
t/test_voc/sv.utf8 | 100 +
104 files changed, 31424 insertions(+)
diff --git a/Build.PL b/Build.PL
new file mode 100644
index 0000000..f8707e8
--- /dev/null
+++ b/Build.PL
@@ -0,0 +1,26 @@
+use strict;
+use warnings;
+use Module::Build;
+
+my $builder = Module::Build->new(
+ module_name => 'Lingua::Stem::Snowball',
+ license => 'perl',
+ dist_author => 'Marvin Humphrey <marvin at rectangular dot com>',
+ dist_version_from => 'lib/Lingua/Stem/Snowball.pm',
+ requires => { 'Test::More' => 0, },
+ build_requires => {
+ 'ExtUtils::CBuilder' => 0,
+ 'ExtUtils::ParseXS' => 0,
+ },
+ add_to_cleanup =>
+ [ 'Lingua-Stem-Snowball-*', 'MANIFEST.bak', 'Makefile' ],
+ create_makefile_pl => 'passthrough',
+ c_source => 'libstemmer_c',
+ #extra_compiler_flags => [
+ # '-Wall', '-Wextra',
+ # '-pedantic', '-ansi',
+ # '-DPERL_GCC_PEDANTIC', '-std=c89',
+ # ],
+);
+
+$builder->create_build_script();
diff --git a/Changes b/Changes
new file mode 100644
index 0000000..1d9282b
--- /dev/null
+++ b/Changes
@@ -0,0 +1,83 @@
+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.
+
+v0.94 2006-02-14
+ * new maintainer Marvin Humphrey
+ * improved speed
+ * new method stem_in_place() added
+ * UTF-8 stemmers added
+ * encoding parameter, plus new method encoding() added
+ * updated to latest version of libstemmer_c from snowball.tartarus.org
+ * many internal changes
+ * change from EUMM to Module::Build
+ * apostrophe stripping is now always on and handled natively for English
+ * strip_apostrophes() method deprecated; now has no impact on stemming
+ behavior (and no longer triggers segfaults)
+ * locale() method and constructor parameter deprecated; locale never had
+ any effect except to influence the automatic lowercasing performed by
+ stem(), and that was only theoretical (none of the test vocab was
+ affected by it).
+ * removed bin/add_stemmer.pl
+ * added bin/benchmark_stemmers.plx
+ * added bin/generate_tests.plx
+ * updated documentation
+
+v0.93 2005-07-28
+ * fix ticket #13900 : cease stripping of empty array elements
+ be careful that this fix may break your scripts
+ * fix ticket #13898 : apostrophe s in English stemmer
+ * new method strip_apostrophes() added
+
+v0.92 2005-05-22
+ * removed deprecated 'snowball' function
+ * added tests for Pod and Pod coverage
+ * moved add_stemmer.pl in bin subdirectory
+ * renamed private function (added _)
+
+v0.91 2005-05-10
+ * don't stem empty words
+
+v0.9 2005-02-07
+ * fix doc ticket #11286 : Error in documentation use of 'english'
+ as valid language descriptor
+ * fix directory mode in CPAN distribution
+ * added 3-subclass.t test file
+ * updated ppport.h
+
+v0.8 2004-08-29
+ * fix ticket #7909 : typo in _get_lang
+ * fix ticket #7910 : Lingua::Stem::Snowball::stem does not allow
+ subclassing
+
+v0.7 2004-07-09
+ * fix ticket #6884 : cp is not portable
+
+v0.6 2004-05-06
+ * fix a bug in the test suite if there is no locale available
+ * fix version numbering due a problem in 0.04 release (0.4 !)
+
+v0.05 2004-04-30
+ * fix a little bug in the test suite
+
+v0.04 2004-04-30
+ * new maintainer fabpot at cpan.org
+ * now include all stemmers from snowball
+ * more tests
+ * fix various bugs and docs
+ * add a benchmark with Lingua::Stem
+ * ...
+
+v0.03.1 2002-09-11
+ * Change URL of snowball site (http://snowball.tartarus.org)
+ * Fix some wordings
+ * Modify testsnowball.pl script
+
+v0.03 2002-03-04
+ * add locale support
+
+v0.02 2002-02-14
+ * little documentation fixes, added test script
+
+v0.01 2002-02-14
+ * Initial release
diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..c55788f
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,104 @@
+bin/benchmark_stemmers.plx
+bin/generate_tests.plx
+Build.PL
+Changes
+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/modules.h
+libstemmer_c/Makefile
+libstemmer_c/mkinc.mak
+libstemmer_c/README
+libstemmer_c/runtime/api.c
+libstemmer_c/runtime/api.h
+libstemmer_c/runtime/header.h
+libstemmer_c/runtime/utilities.c
+libstemmer_c/src_c/stem_ISO_8859_1_danish.c
+libstemmer_c/src_c/stem_ISO_8859_1_danish.h
+libstemmer_c/src_c/stem_ISO_8859_1_dutch.c
+libstemmer_c/src_c/stem_ISO_8859_1_dutch.h
+libstemmer_c/src_c/stem_ISO_8859_1_english.c
+libstemmer_c/src_c/stem_ISO_8859_1_english.h
+libstemmer_c/src_c/stem_ISO_8859_1_finnish.c
+libstemmer_c/src_c/stem_ISO_8859_1_finnish.h
+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_italian.c
+libstemmer_c/src_c/stem_ISO_8859_1_italian.h
+libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
+libstemmer_c/src_c/stem_ISO_8859_1_norwegian.h
+libstemmer_c/src_c/stem_ISO_8859_1_porter.c
+libstemmer_c/src_c/stem_ISO_8859_1_porter.h
+libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c
+libstemmer_c/src_c/stem_ISO_8859_1_portuguese.h
+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_KOI8_R_russian.c
+libstemmer_c/src_c/stem_KOI8_R_russian.h
+libstemmer_c/src_c/stem_UTF_8_danish.c
+libstemmer_c/src_c/stem_UTF_8_danish.h
+libstemmer_c/src_c/stem_UTF_8_dutch.c
+libstemmer_c/src_c/stem_UTF_8_dutch.h
+libstemmer_c/src_c/stem_UTF_8_english.c
+libstemmer_c/src_c/stem_UTF_8_english.h
+libstemmer_c/src_c/stem_UTF_8_finnish.c
+libstemmer_c/src_c/stem_UTF_8_finnish.h
+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_italian.c
+libstemmer_c/src_c/stem_UTF_8_italian.h
+libstemmer_c/src_c/stem_UTF_8_norwegian.c
+libstemmer_c/src_c/stem_UTF_8_norwegian.h
+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_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
+Makefile.PL
+MANIFEST
+META.yml Module meta-data (added by MakeMaker)
+ppport.h
+README
+t/0-load.t
+t/1-stem.t
+t/2-full.t
+t/3-subclass.t
+t/98-TestPod.t
+t/99-TestPodCoverage.t
+t/test_voc/da.default_enc
+t/test_voc/da.utf8
+t/test_voc/de.default_enc
+t/test_voc/de.utf8
+t/test_voc/en.default_enc
+t/test_voc/en.utf8
+t/test_voc/es.default_enc
+t/test_voc/es.utf8
+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/it.default_enc
+t/test_voc/it.utf8
+t/test_voc/nl.default_enc
+t/test_voc/nl.utf8
+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/ru.default_enc
+t/test_voc/ru.utf8
+t/test_voc/sv.default_enc
+t/test_voc/sv.utf8
diff --git a/META.yml b/META.yml
new file mode 100644
index 0000000..cfcb152
--- /dev/null
+++ b/META.yml
@@ -0,0 +1,22 @@
+---
+name: Lingua-Stem-Snowball
+version: 0.941
+author:
+ - 'Marvin Humphrey <marvin at rectangular dot com>'
+abstract: Perl interface to Snowball stemmers.
+license: perl
+resources:
+ license: http://dev.perl.org/licenses/
+requires:
+ Test::More: 0
+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
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.2.html
+ version: 1.2
diff --git a/Makefile.PL b/Makefile.PL
new file mode 100644
index 0000000..192903a
--- /dev/null
+++ b/Makefile.PL
@@ -0,0 +1,31 @@
+# Note: this file was auto-generated by Module::Build::Compat version 0.03
+
+ unless (eval "use Module::Build::Compat 0.02; 1" ) {
+ print "This module requires Module::Build to install itself.\n";
+
+ require ExtUtils::MakeMaker;
+ my $yn = ExtUtils::MakeMaker::prompt
+ (' Install Module::Build now from CPAN?', 'y');
+
+ unless ($yn =~ /^y/i) {
+ die " *** Cannot install without Module::Build. Exiting ...\n";
+ }
+
+ require Cwd;
+ require File::Spec;
+ require CPAN;
+
+ # Save this 'cause CPAN will chdir all over the place.
+ my $cwd = Cwd::cwd();
+
+ CPAN::Shell->install('Module::Build::Compat');
+ CPAN::Shell->expand("Module", "Module::Build::Compat")->uptodate
+ or die "Couldn't install Module::Build, giving up.\n";
+
+ chdir $cwd or die "Cannot chdir() back to $cwd: $!";
+ }
+ eval "use Module::Build::Compat 0.02; 1" or die $@;
+
+ Module::Build::Compat->run_build_pl(args => \@ARGV);
+ require Module::Build;
+ Module::Build::Compat->write_makefile(build_class => 'Module::Build');
diff --git a/README b/README
new file mode 100644
index 0000000..ebb877a
--- /dev/null
+++ b/README
@@ -0,0 +1,22 @@
+Lingua-Stem-Snowball
+====================
+
+INSTALLATION
+
+To install this module type the following:
+
+ perl Build.PL
+ perl Build
+ perl Build test
+ perl Build install
+
+COPYRIGHT AND LICENCE
+
+Currently maintained by Fabien Potencier, fabpot at cpan.org
+Original authors Oleg Bartunov, oleg at sai.msu.su, Teodor Sigaev, teodor at stack.net
+
+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/benchmark_stemmers.plx b/bin/benchmark_stemmers.plx
new file mode 100755
index 0000000..b4d3b10
--- /dev/null
+++ b/bin/benchmark_stemmers.plx
@@ -0,0 +1,116 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+$|++;
+
+use Lingua::Stem;
+use Lingua::Stem::Snowball;
+use Benchmark::Timer;
+
+use constant ITERS => 10;
+
+my $timer = Benchmark::Timer->new;
+
+die "Usage: ./bin/benchmark_stemmers.plx TEXTFILES"
+ unless @ARGV;
+
+# retrieve, pre-process and tokenize text
+sub retrieve_text {
+ my $filepath = shift;
+ my $text = do {
+ open( my $fh, '<', $filepath )
+ or die "Couldn't open file '$filepath' for reading: $!";
+ local $/;
+ <$fh>;
+ };
+ $text = lc($text);
+ $text =~ s/[^a-z']/ /gs;
+ $text =~ s/\B'//g;
+ $text =~ s/'\B//g;
+ my @tokens = split( ' ', $text );
+ return \@tokens;
+}
+
+my @token_arrays = map { retrieve_text($_) } @ARGV;
+# prepare vars used in the report
+my %unique;
+my $num_tokens = 0;
+for my $tokens (@token_arrays) {
+ $num_tokens += scalar @$tokens;
+ $unique{$_} = 1 for @$tokens;
+}
+my $num_unique = scalar keys %unique;
+
+for my $iter ( 1 .. ITERS ) {
+ print "$iter ";
+ my ( @out, $out );
+ my $snowball = Lingua::Stem::Snowball->new( lang => 'en' );
+ my $lingua_stem = Lingua::Stem->new( -locale => 'EN' );
+
+ # LS without cache
+ for my $tokens (@token_arrays) {
+ $timer->start('LS');
+ $out = $lingua_stem->stem(@$tokens);
+ $timer->stop('LS');
+ undef $out;
+ }
+
+ # turn stem_caching on for LS
+ $lingua_stem->stem_caching( { -level => 2 } );
+
+ for my $tokens (@token_arrays) {
+ # LS, with stem caching
+ $timer->start('LS2');
+ $out = $lingua_stem->stem(@$tokens);
+ $timer->stop('LS2');
+ undef $out;
+
+ # LSS
+ $timer->start('LSS');
+ @out = $snowball->stem($tokens);
+ $timer->stop('LSS');
+ undef @out;
+
+ # stem_in_place, if this version of LSS is recent enough
+ if ( $snowball->can('stem_in_place') ) {
+ my @copy = @$tokens;
+ $timer->start('LSS2');
+ $snowball->stem_in_place( \@copy );
+ $timer->stop('LSS2');
+ }
+ }
+
+ # LS's stem_cache is global per locale, so clear it each iter
+ $lingua_stem->clear_stem_cache;
+}
+
+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
+$_ *= scalar @ARGV for values %results;
+
+# print the report
+printf( '
+|--------------------------------------------------------------------|
+| total words: %-6d | unique words: %-6d |
+|--------------------------------------------------------------------|
+| module | config | avg secs | rate |
+|--------------------------------------------------------------------|',
+ , $num_tokens, $num_unique );
+printf( '
+| Lingua::Stem %.2f | no cache | %.3f | %-7d |
+| Lingua::Stem %.2f | cache level 2 | %.3f | %-7d |
+| Lingua::Stem::Snowball %.2f | stem | %.3f | %-7d |',
+ $ls_ver, $results{LS}, ( $num_tokens / $results{LS} ),
+ $ls_ver, $results{LS2}, ( $num_tokens / $results{LS2} ),
+ $lss_ver, $results{LSS}, ( $num_tokens / $results{LSS} ),
+);
+printf( '
+| Lingua::Stem::Snowball %-4s | stem_in_place | %.3f | %-7d |',
+ $lss_ver, $results{LSS2}, ( $num_tokens / $results{LSS2} ) )
+ if exists $results{LSS2};
+print "\n|" . ( '-' x 68 ) . "|\n";
+
diff --git a/bin/generate_tests.plx b/bin/generate_tests.plx
new file mode 100755
index 0000000..62b9a4b
--- /dev/null
+++ b/bin/generate_tests.plx
@@ -0,0 +1,63 @@
+#!/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/lib/Lingua/Stem/Snowball.pm b/lib/Lingua/Stem/Snowball.pm
new file mode 100644
index 0000000..261b860
--- /dev/null
+++ b/lib/Lingua/Stem/Snowball.pm
@@ -0,0 +1,330 @@
+package Lingua::Stem::Snowball;
+use strict;
+
+use Carp;
+use Exporter;
+use vars qw(
+ $VERSION
+ @ISA
+ @EXPORT_OK
+ $AUTOLOAD
+ %EXPORT_TAGS
+ $stemmifier
+ %instance_vars
+);
+
+$VERSION = '0.941';
+
+ at ISA = qw( Exporter );
+%EXPORT_TAGS = ( 'all' => [qw( stemmers stem )] );
+ at EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
+
+require XSLoader;
+XSLoader::load( 'Lingua::Stem::Snowball', $VERSION );
+
+# a shared home for the actual struct sb_stemmer C modules.
+$stemmifier = Lingua::Stem::Snowball::Stemmifier->new;
+
+%instance_vars = (
+ lang => '',
+ encoding => undef,
+ locale => undef,
+ stemmer_id => -1,
+ strip_apostrophes => 0,
+);
+
+sub new {
+ my $class = shift;
+ my $self = bless { %instance_vars, @_ }, ref($class) || $class;
+
+ # 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->_derive_stemmer;
+
+ return $self;
+}
+
+sub stem {
+ my ( $self, $lang, $words, $locale, $is_stemmed );
+
+ # support lots of DWIMmery
+ if ( UNIVERSAL::isa( $_[0], 'HASH' ) ) {
+ ( $self, $words, $is_stemmed ) = @_;
+ }
+ else {
+ ( $lang, $words, $locale, $is_stemmed ) = @_;
+ $self = __PACKAGE__->new( lang => $lang );
+ }
+
+ # bail if we don't have a valid lang
+ return undef unless $self->{lang};
+
+ # 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
+ $words = ref($words) ? $words : [$words];
+ my @stems = map {lc} @$words;
+ $self->stem_in_place( \@stems );
+
+ # determine whether any stemming took place, if requested
+ if ( ref($is_stemmed) ) {
+ $$is_stemmed = 0;
+ if ( $self->{stemmer_id} == -1 ) {
+ $$is_stemmed = 1;
+ }
+ else {
+ for ( 0 .. $#stems ) {
+ next if $stems[$_] eq $words->[$_];
+ $$is_stemmed = 1;
+ last;
+ }
+ }
+ }
+
+ return wantarray ? @stems : $stems[0];
+}
+
+sub lang {
+ my ( $self, $lang ) = @_;
+ if ( defined $lang ) {
+ $lang = lc($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
+ $self->{stemmer_id} = -1;
+ }
+ else {
+ $@ = "Language '$lang' does not exist";
+ }
+ }
+ return $self->{lang};
+}
+
+sub encoding {
+ my ( $self, $encoding ) = @_;
+ if ( defined $encoding ) {
+ croak("Invalid value for encoding: '$encoding'")
+ unless $encoding =~ /^(?:UTF-8|KOI8-R|ISO-8859-1)$/;
+ $self->{encoding} = $encoding;
+ # 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
+sub strip_apostrophes {
+ my ( $self, $boolean ) = @_;
+ if ( defined $boolean ) {
+ $self->{strip_apostrophes} eq $boolean ? 1 : 0;
+ }
+ return $self->{strip_apostrophes};
+}
+
+# deprecated, has no effect on stemming behavior
+sub locale {
+ my ( $self, $locale ) = @_;
+ if ($locale) {
+ $self->{locale} = $locale;
+ }
+ return $self->{locale};
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Lingua::Stem::Snowball - Perl interface to Snowball stemmers.
+
+=head1 SYNOPSIS
+
+ my @words = qw( horse hooves );
+
+ # OO interface:
+ my $stemmer = Lingua::Stem::Snowball->new( lang => 'en' );
+ $stemmer->stem_in_place( \@words ); # qw( hors hoov )
+
+ # plain interface:
+ my @stems = stem( 'en', \@words );
+
+=head1 DESCRIPTION
+
+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.
+(L<http://snowball.tartarus.org>).
+
+=head2 Supported Languages
+
+The following stemmers are available (as of Lingua::Stem::Snowball 0.94):
+
+ |-----------------------------------------------------------|
+ | Language | ISO code | default encoding | also available |
+ |-----------------------------------------------------------|
+ | Danish | da | ISO-8859-1 | UTF-8 |
+ | Dutch | nl | ISO-8859-1 | UTF-8 |
+ | English | en | ISO-8859-1 | UTF-8 |
+ | Finnish | fi | ISO-8859-1 | UTF-8 |
+ | French | fr | ISO-8859-1 | UTF-8 |
+ | German | de | 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 |
+ | Spanish | es | ISO-8859-1 | UTF-8 |
+ | Swedish | sv | ISO-8859-1 | UTF-8 |
+ | Russian | ru | KOI8-R | UTF-8 |
+ |-----------------------------------------------------------|
+
+=head2 Benchmarks
+
+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.)
+
+ |--------------------------------------------------------------------|
+ | total words: 454285 | unique words: 22748 |
+ |--------------------------------------------------------------------|
+ | module | config | avg secs | rate |
+ |--------------------------------------------------------------------|
+ | Lingua::Stem 0.81 | no cache | 2.029 | 223881 |
+ | Lingua::Stem 0.81 | cache level 2 | 1.280 | 355025 |
+ | Lingua::Stem::Snowball 0.94 | stem | 1.426 | 318636 |
+ | Lingua::Stem::Snowball 0.94 | stem_in_place | 0.641 | 708495 |
+ |--------------------------------------------------------------------|
+
+=head1 METHODS / FUNCTIONS
+
+=head2 new
+
+ my $stemmer = Lingua::Stem::Snowball->new(
+ lang => 'es',
+ encoding => 'UTF-8',
+ );
+ die $@ if $@;
+
+Create a Lingua::Stem::Snowball object. new() accepts the following hash
+style parameters:
+
+=over
+
+=item *
+
+B<lang>: An ISO code taken from the table of supported languages, above.
+
+=item *
+
+B<encoding>: A supported character encoding.
+
+=back
+
+Be careful with the values you supply to new(). If C<lang> is invalid,
+Lingua::Stem::Snowball does not throw an exception, but instead sets $@.
+Also, if you supply an invalid combination of values for C<lang> and
+C<encoding>, Lingua::Stem::Snowball will not warn you, but the behavior will
+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] );
+
+Return lowercased and stemmed output. WORDS may be either an array of words
+or a single scalar word.
+
+In a scalar context, stem() returns the first item in the array of stems:
+
+ $stem = $stemmer->stem($word);
+ $first_stem = $stemmer->stem(\@words); # probably wrong
+
+LOCALE has no effect; it is only there as a placeholder for backwards
+compatibility (see Changes). IS_STEMMED must be a reference to a scalar; if
+it is supplied, it will be set to 1 if the output differs from the input in
+some way, 0 otherwise.
+
+=head2 stem_in_place
+
+ $stemmer->stem_in_place(\@words);
+
+This is a high-performance, streamlined version of stem() (in fact, stem()
+calls stem_in_place() internally). It has no return value, instead modifying
+each item in an existing array of words. The words must already be in lower
+case.
+
+=head2 lang
+
+ my $lang = $stemmer->lang;
+ $stemmer->lang($iso_language_code);
+
+Accessor/mutator for the lang parameter. If there is no stemmer for the
+supplied ISO code, the language is not changed (but $@ is set).
+
+=head2 encoding
+
+ my $encoding = $stemmer->encoding;
+ $stemmer->encoding($encoding);
+
+Accessor/mutator for the encoding parameter.
+
+=head2 stemmers
+
+ my @iso_codes = stemmers();
+ my @iso_codes = $stemmer->stemmers();
+
+Returns a list of all valid language codes.
+
+=begin deprecated
+
+=head2 strip_apostrophes locale
+
+=end deprecated
+
+=head1 REQUESTS & BUGS
+
+Please report any requests, suggestions or bugs via the RT bug-tracking system
+at http://rt.cpan.org/ or email to bug-Lingua-Stem-Snowball at rt.cpan.org.
+
+http://rt.cpan.org/NoAuth/Bugs.html?Dist=Lingua-Stem-Snowball is the RT queue
+for Lingua::Stem::Snowball. Please check to see if your bug has already been
+reported.
+
+=head1 AUTHORS
+
+Lingua::Stem::Snowball was originally developed to provide
+access to stemming algorithms for the OpenFTS (full text search engine)
+project (L<http://openfts.sourceforge.net>), by Oleg Bartunov, E<lt>oleg at
+sai dot msu dot suE<gt> and Teodor Sigaev, E<lt>teodor at stack dot netE<gt>.
+
+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
+
+Copyright 2004-2006
+
+This software may be freely copied and distributed under the same
+terms and conditions as Perl.
+
+Snowball files and stemmers are covered by the BSD license.
+
+=head1 SEE ALSO
+
+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
new file mode 100644
index 0000000..20ea13f
--- /dev/null
+++ b/lib/Lingua/Stem/Snowball.xs
@@ -0,0 +1,251 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#define NEED_sv_2pv_nolen
+#include "../ppport.h"
+
+#define NUMLANG 12
+#define NUMSTEM 24
+
+#include "include/libstemmer.h"
+
+typedef struct sb_stemmer SnowStemmer;
+
+typedef struct stemmifier {
+ SnowStemmer **stemmers;
+} Stemmifier;
+
+typedef struct langenc {
+ char *lang;
+ char *encoding; /* the real name of the encoding */
+ char *snowenc; /* the variant that libstemmer_c needs */
+} LangEnc;
+
+LangEnc lang_encs[] = {
+ { "da", "ISO-8859-1", "ISO_8859_1" },
+ { "de", "ISO-8859-1", "ISO_8859_1" },
+ { "nl", "ISO-8859-1", "ISO_8859_1" },
+ { "en", "ISO-8859-1", "ISO_8859_1" },
+ { "es", "ISO-8859-1", "ISO_8859_1" },
+ { "fi", "ISO-8859-1", "ISO_8859_1" },
+ { "fr", "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" },
+ { "ru", "KOI8-R", "KOI8_R", },
+ { "sv", "ISO-8859-1", "ISO_8859_1" },
+ { "da", "UTF-8", "UTF_8" },
+ { "de", "UTF-8", "UTF_8" },
+ { "nl", "UTF-8", "UTF_8" },
+ { "en", "UTF-8", "UTF_8" },
+ { "es", "UTF-8", "UTF_8" },
+ { "fi", "UTF-8", "UTF_8" },
+ { "fr", "UTF-8", "UTF_8" },
+ { "it", "UTF-8", "UTF_8" },
+ { "no", "UTF-8", "UTF_8" },
+ { "pt", "UTF-8", "UTF_8" },
+ { "ru", "UTF-8", "UTF_8" },
+ { "sv", "UTF-8", "UTF_8" },
+};
+
+MODULE = Lingua::Stem::Snowball PACKAGE = Lingua::Stem::Snowball
+
+PROTOTYPES: disable
+
+void
+_derive_stemmer(obj_hash)
+ HV *obj_hash;
+PREINIT:
+ 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);
+ if (!sv_ptr)
+ croak("Couldn't find member variable 'lang'");
+ lang = SvPV_nolen(*sv_ptr);
+ sv_ptr = hv_fetch(obj_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;
+ 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 */
+ 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");
+ }
+ temp = SvIV(SvRV(stemmifier_sv));
+ stemmifier = INT2PTR(Stemmifier*, temp);
+
+ /* 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");
+ }
+ }
+
+ break;
+ }
+ }
+
+ /* set the value of $self->{stemmer_id} */
+ sv_ptr = hv_fetch(obj_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;
+CODE:
+ lang = SvPV(lang_sv, len);
+
+ RETVAL = FALSE;
+ for (i = 0; i < NUMLANG; i++) {
+ if ( strcmp(lang, lang_encs[i].lang) == 0 )
+ RETVAL = TRUE;
+ }
+OUTPUT: RETVAL
+
+
+void
+stemmers(...)
+PREINIT:
+ int i;
+PPCODE:
+ 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;
+ 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 */
+ stemmifier_sv = get_sv("Lingua::Stem::Snowball::stemmifier", TRUE);
+ if(!SvROK(stemmifier_sv))
+ 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);
+ if (!sv_ptr)
+ croak("Couldn't access stemmer_id");
+ stemmer_id = SvIV(*sv_ptr);
+ if ( stemmer_id < 0
+ || stemmer_id >= NUMSTEM
+ || stemmifier->stemmers[stemmer_id] == NULL
+ ) {
+ dSP;
+ ENTER;
+ SAVETMPS;
+ PUSHMARK(SP);
+ XPUSHs(obj);
+ 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);
+ stemmer_id = SvIV(*sv_ptr);
+ }
+ if (stemmer_id != -1) {
+ stemmer = stemmifier->stemmers[stemmer_id];
+
+ max = av_len(words_av);
+ for (i = 0; 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);
+ }
+ }
+
+MODULE = Lingua::Stem::Snowball PACKAGE = Lingua::Stem::Snowball::Stemmifier
+
+=for comment
+
+Create a new Stemmifier object.
+
+=cut
+
+void
+new(class)
+ char* class;
+PREINIT:
+ 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);
+
+void
+DESTROY(obj_ref)
+ SV *obj_ref;
+PREINIT:
+ Stemmifier *stemmifier;
+ IV temp;
+ int i;
+PPCODE:
+ temp = SvIV( SvRV(obj_ref) );
+ 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/Makefile b/libstemmer_c/Makefile
new file mode 100644
index 0000000..64d6c8e
--- /dev/null
+++ b/libstemmer_c/Makefile
@@ -0,0 +1,9 @@
+include mkinc.mak
+CFLAGS=-Iinclude
+all: libstemmer.o stemwords
+libstemmer.o: $(snowball_sources:.c=.o)
+ $(AR) -cru $@ $^
+stemwords: examples/stemwords.o libstemmer.o
+ $(CC) -o $@ $^
+clean:
+ rm -f stemwords *.o src_c/*.o runtime/*.o libstemmer/*.o
diff --git a/libstemmer_c/README b/libstemmer_c/README
new file mode 100644
index 0000000..3ff66e4
--- /dev/null
+++ b/libstemmer_c/README
@@ -0,0 +1,82 @@
+libstemmer_c
+============
+
+This document pertains to the C version of the libstemmer distribution,
+available for download from:
+
+http://snowball.tartarus.org/dist/libstemmer_c.tgz
+
+
+Compiling the library
+=====================
+
+A simple makefile is provided for Unix style systems. On such systems, it
+should be possible simply to run "make", and the file "libstemmer.o"
+and the example program "stemwords" will be generated.
+
+If this doesn't work on your system, you need to write your own build
+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.
+
+
+Using the library
+=================
+
+The library provides a simple C API. Essentially, a new stemmer can
+be obtained by using "sb_stemmer_new". "sb_stemmer_stem" is then
+used to stem a word, "sb_stemmer_length" returns the stemmed
+length of the last word processed, and "sb_stemmer_delete" is
+used to delete a stemmer.
+
+Creating a stemmer is a relatively expensive operation - the expected
+usage pattern is that a new stemmer is created when needed, used
+to stem many words, and deleted after some time.
+
+Stemmers are re-entrant, but not threadsafe. In other words, if
+you wish to access the same stemmer object from multiple threads,
+you must ensure that all access is protected by a mutex or similar
+device.
+
+libstemmer does not currently incorporate any mechanism for caching the results
+of stemming operations. Such caching can greatly increase the performance of a
+stemmer under certain situations, so suitable patches will be considered for
+inclusion.
+
+The standard libstemmer sources contain an algorithm for each of the supported
+languages. The algorithm may be selected using the english name of the
+language, or using the 2 or 3 letter ISO 639 language codes. In addition,
+the traditional "Porter" stemming algorithm for english is included for
+backwards compatibility purposes, but we recommend use of the "English"
+stemmer in preference for new projects.
+
+(Some minor algorithms which are included only as curiosities in the snowball
+website, such as the Lovins stemmer and the Kraaij Pohlmann stemmer, are not
+included in the standard libstemmer sources. These are not really supported by
+the snowball project, but it would be possible to compile a modified libstemmer
+library containing these if desired.)
+
+
+The stemwords example
+=====================
+
+The stemwords example program allows you to run any of the stemmers
+compiled into the libstemmer library on a sample vocabulary. For
+details on how to use it, run it with the "-h" command line option.
+
+
+Using the library in a larger system
+====================================
+
+If you are incorporating the library into the build system of a larger
+program, I recommend copying the unpacked tarball without modification into
+a subdirectory of the sources of your program. Future versions of the
+library are intended to keep the same structure, so this will keep the
+work required to move to a new version of the library to a minimum.
+
+As an additional convenience, the list of source and header files used
+in the library is detailed in mkinc.mak - a file which is in a suitable
+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.
+
diff --git a/libstemmer_c/examples/stemwords.c.disabled b/libstemmer_c/examples/stemwords.c.disabled
new file mode 100644
index 0000000..a951ba4
--- /dev/null
+++ b/libstemmer_c/examples/stemwords.c.disabled
@@ -0,0 +1,191 @@
+/* This is a simple program which uses libstemmer to provide a command
+ * line interface for stemming using any of the algorithms provided.
+ */
+
+#include <stdio.h>
+#include <stdlib.h> /* for malloc, free */
+#include <string.h> /* for memmove */
+#include <ctype.h> /* for isupper, tolower */
+
+#include "libstemmer.h"
+
+const char * progname;
+static int pretty = 1;
+
+static void
+stem_file(struct sb_stemmer * stemmer, FILE * f_in, FILE * f_out)
+{
+#define INC 10
+ int lim = INC;
+ sb_symbol * b = (sb_symbol *) malloc(lim * sizeof(sb_symbol));
+
+ while(1) {
+ int ch = getc(f_in);
+ if (ch == EOF) {
+ free(b); return;
+ }
+ {
+ int i = 0;
+ while(1) {
+ if (ch == '\n' || ch == EOF) break;
+ if (i == lim) {
+ sb_symbol * newb;
+ newb = (sb_symbol *)
+ realloc(b, (lim + INC) * sizeof(sb_symbol));
+ if (newb == 0) goto error;
+ b = newb;
+ lim = lim + INC;
+ }
+ /* force lower case: */
+ if (isupper(ch)) ch = tolower(ch);
+
+ b[i] = ch;
+ i++;
+ 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)
+ {
+ fprintf(stderr, "Out of memory");
+ 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");
+ }
+ }
+ }
+ }
+error:
+ if (b != 0) free(b);
+ return;
+}
+
+/** Display the command line syntax, and then exit.
+ * @param n The value to exit with.
+ */
+static void
+usage(int n)
+{
+ printf("usage: %s [-l <language>] [-i <input file>] [-o <output file>] [-c <character encoding>] [-p] [-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"
+ "are mapped to their a-z equivalents anyway. If omitted, stdin is\n"
+ "used.\n"
+ "\n"
+ "If -c is given, the argument is the character encoding of the input\n"
+ "and output files. If it is omitted, the UTF-8 encoding is used.\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"
+ "Otherwise, the output file consists of the stemmed words, one per\n"
+ "line.\n"
+ "\n"
+ "-h displays this help\n",
+ progname);
+ exit(n);
+}
+
+int
+main(int argc, char * argv[])
+{
+ char * in = 0;
+ char * out = 0;
+ FILE * f_in;
+ FILE * f_out;
+ struct sb_stemmer * stemmer;
+
+ char * language = "english";
+ char * charenc = NULL;
+
+ char * s;
+ int i = 1;
+ pretty = 0;
+
+ progname = argv[0];
+
+ while(i < argc) {
+ s = argv[i++];
+ if (s[0] == '-') {
+ if (strcmp(s, "-o") == 0) {
+ if (i >= argc) {
+ fprintf(stderr, "%s requires an argument\n", s);
+ exit(1);
+ }
+ out = argv[i++];
+ } else if (strcmp(s, "-i") == 0) {
+ if (i >= argc) {
+ fprintf(stderr, "%s requires an argument\n", s);
+ exit(1);
+ }
+ in = argv[i++];
+ } else if (strcmp(s, "-l") == 0) {
+ if (i >= argc) {
+ fprintf(stderr, "%s requires an argument\n", s);
+ exit(1);
+ }
+ language = argv[i++];
+ } else if (strcmp(s, "-c") == 0) {
+ if (i >= argc) {
+ fprintf(stderr, "%s requires an argument\n", s);
+ exit(1);
+ }
+ charenc = argv[i++];
+ } else if (strcmp(s, "-p") == 0) {
+ pretty = 1;
+ } else if (strcmp(s, "-h") == 0) {
+ usage(0);
+ } else {
+ fprintf(stderr, "option %s unknown\n", s);
+ usage(1);
+ }
+ } else {
+ fprintf(stderr, "unexpected parameter %s\n", s);
+ usage(1);
+ }
+ }
+
+ /* prepare the files */
+ f_in = (in == 0) ? stdin : fopen(in, "r");
+ if (f_in == 0) {
+ fprintf(stderr, "file %s not found\n", in);
+ exit(1);
+ }
+ f_out = (out == 0) ? stdout : fopen(out, "w");
+ if (f_out == 0) {
+ fprintf(stderr, "file %s cannot be opened\n", out);
+ exit(1);
+ }
+
+ /* do the stemming process: */
+ stemmer = sb_stemmer_new(language, charenc);
+ if (stemmer == 0) {
+ if (charenc == NULL) {
+ fprintf(stderr, "language `%s' not available for stemming\n", language);
+ exit(1);
+ } else {
+ fprintf(stderr, "language `%s' not available for stemming in encoding `%s'\n", language, charenc);
+ exit(1);
+ }
+ }
+ stem_file(stemmer, f_in, f_out);
+ sb_stemmer_delete(stemmer);
+
+ if (in != 0) (void) fclose(f_in);
+ if (out != 0) (void) fclose(f_out);
+
+ return 0;
+}
+
diff --git a/libstemmer_c/include/libstemmer.h b/libstemmer_c/include/libstemmer.h
new file mode 100644
index 0000000..9d86b85
--- /dev/null
+++ b/libstemmer_c/include/libstemmer.h
@@ -0,0 +1,79 @@
+
+/* Make header file work when included from C++ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct sb_stemmer;
+typedef unsigned char sb_symbol;
+
+/* FIXME - should be able to get a version number for each stemming
+ * algorithm (which will be incremented each time the output changes). */
+
+/** Returns an array of the names of the available stemming algorithms.
+ * Note that these are the canonical names - aliases (ie, other names for
+ * the same algorithm) will not be included in the list.
+ * The list is terminated with a null pointer.
+ *
+ * The list must not be modified in any way.
+ */
+const char ** sb_stemmer_list(void);
+
+/** Create a new stemmer object, using the specified algorithm, for the
+ * specified character encoding.
+ *
+ * All algorithms will usually be available in UTF-8, but may also be
+ * available in other character encodings.
+ *
+ * @param algorithm The algorithm name. This is either the english
+ * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the
+ * language. Note that case is significant in this parameter - the
+ * value should be supplied in lower case.
+ *
+ * @param charenc The character encoding. NULL may be passed as
+ * this value, in which case UTF-8 encoding will be assumed. Otherwise,
+ * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1),
+ * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that
+ * case is significant in this parameter.
+ *
+ * @return NULL if the specified algorithm is not recognised, or the
+ * algorithm is not available for the requested encoding. Otherwise,
+ * returns a pointer to a newly created stemmer for the requested algorithm.
+ * The returned pointer must be deleted by calling sb_stemmer_delete().
+ *
+ * @note NULL will also be returned if an out of memory error occurs.
+ */
+struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc);
+
+/** Delete a stemmer object.
+ *
+ * This frees all resources allocated for the stemmer. After calling
+ * this function, the supplied stemmer may no longer be used in any way.
+ *
+ * It is safe to pass a null pointer to this function - this will have
+ * no effect.
+ */
+void sb_stemmer_delete(struct sb_stemmer * stemmer);
+
+/** Stem a word.
+ *
+ * The return value is owned by the stemmer - it must not be freed or
+ * modified, and it will become invalid when the stemmer is called again,
+ * or if the stemmer is freed.
+ *
+ * The length of the return value can be obtained using sb_stemmer_length().
+ *
+ * If an out-of-memory error occurs, this will return NULL.
+ */
+const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer,
+ const sb_symbol * word, int size);
+
+/** Get the length of the result of the last stemmed word.
+ * This should not be called before sb_stemmer_stem() has been called.
+ */
+int sb_stemmer_length(struct sb_stemmer * stemmer);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/libstemmer/libstemmer.c b/libstemmer_c/libstemmer/libstemmer.c
new file mode 100644
index 0000000..1e51026
--- /dev/null
+++ b/libstemmer_c/libstemmer/libstemmer.c
@@ -0,0 +1,92 @@
+
+#include <stdlib.h>
+#include <string.h>
+#include "../include/libstemmer.h"
+#include "../runtime/api.h"
+#include "modules.h"
+
+struct sb_stemmer {
+ struct SN_env * (*create)(void);
+ void (*close)(struct SN_env *);
+ int (*stem)(struct SN_env *);
+
+ struct SN_env * env;
+};
+
+extern const char **
+sb_stemmer_list(void)
+{
+ return algorithm_names;
+}
+
+static stemmer_encoding sb_getenc(const char * charenc)
+{
+ struct stemmer_encoding * encoding;
+ if (charenc == NULL) return ENC_UTF_8;
+ for (encoding = encodings; encoding->name != 0; encoding++) {
+ if (strcmp(encoding->name, charenc) == 0) break;
+ }
+ if (encoding->name == NULL) return ENC_UNKNOWN;
+ return encoding->enc;
+}
+
+extern struct sb_stemmer *
+sb_stemmer_new(const char * algorithm, const char * charenc)
+{
+ stemmer_encoding enc;
+ struct stemmer_modules * module;
+ struct sb_stemmer * stemmer =
+ (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer));
+ if (stemmer == NULL) return NULL;
+ enc = sb_getenc(charenc);
+ if (enc == ENC_UNKNOWN) return NULL;
+
+ for (module = modules; module->name != 0; module++) {
+ if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break;
+ }
+ if (module->name == NULL) return NULL;
+
+ stemmer->create = module->create;
+ stemmer->close = module->close;
+ stemmer->stem = module->stem;
+
+ stemmer->env = stemmer->create();
+ if (stemmer->env == NULL)
+ {
+ sb_stemmer_delete(stemmer);
+ return NULL;
+ }
+
+ return stemmer;
+}
+
+void
+sb_stemmer_delete(struct sb_stemmer * stemmer)
+{
+ if (stemmer == 0) return;
+ if (stemmer->close == 0) return;
+ stemmer->close(stemmer->env);
+ stemmer->close = 0;
+ free(stemmer);
+}
+
+const sb_symbol *
+sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size)
+{
+ int ret;
+ if (SN_set_current(stemmer->env, size, (const symbol *)(word)))
+ {
+ stemmer->env->l = 0;
+ return NULL;
+ }
+ ret = stemmer->stem(stemmer->env);
+ if (ret < 0) return NULL;
+ stemmer->env->p[stemmer->env->l] = 0;
+ return (const sb_symbol *)(stemmer->env->p);
+}
+
+int
+sb_stemmer_length(struct sb_stemmer * stemmer)
+{
+ return stemmer->env->l;
+}
diff --git a/libstemmer_c/libstemmer/modules.h b/libstemmer_c/libstemmer/modules.h
new file mode 100644
index 0000000..f4a5118
--- /dev/null
+++ b/libstemmer_c/libstemmer/modules.h
@@ -0,0 +1,162 @@
+/* libstemmer/modules.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, italian, norwegian, porter, portuguese, russian, spanish, swedish
+ */
+
+#include "../src_c/stem_ISO_8859_1_danish.h"
+#include "../src_c/stem_UTF_8_danish.h"
+#include "../src_c/stem_ISO_8859_1_dutch.h"
+#include "../src_c/stem_UTF_8_dutch.h"
+#include "../src_c/stem_ISO_8859_1_english.h"
+#include "../src_c/stem_UTF_8_english.h"
+#include "../src_c/stem_ISO_8859_1_finnish.h"
+#include "../src_c/stem_UTF_8_finnish.h"
+#include "../src_c/stem_ISO_8859_1_french.h"
+#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_italian.h"
+#include "../src_c/stem_UTF_8_italian.h"
+#include "../src_c/stem_ISO_8859_1_norwegian.h"
+#include "../src_c/stem_UTF_8_norwegian.h"
+#include "../src_c/stem_ISO_8859_1_porter.h"
+#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_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"
+
+typedef enum {
+ ENC_UNKNOWN,
+ ENC_ISO_8859_1,
+ ENC_KOI8_R,
+ ENC_UTF_8
+} stemmer_encoding;
+
+struct stemmer_encoding {
+ const char * name;
+ stemmer_encoding enc;
+};
+static struct stemmer_encoding encodings[] = {
+ {"ISO_8859_1", ENC_ISO_8859_1},
+ {"KOI8_R", ENC_KOI8_R},
+ {"UTF_8", ENC_UTF_8},
+ {0,0}
+};
+
+struct stemmer_modules {
+ const char * name;
+ stemmer_encoding enc;
+ struct SN_env * (*create)(void);
+ void (*close)(struct SN_env *);
+ int (*stem)(struct SN_env *);
+};
+static struct stemmer_modules modules[] = {
+ {"da", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem},
+ {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem},
+ {"dan", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem},
+ {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem},
+ {"danish", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem},
+ {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem},
+ {"de", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem},
+ {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+ {"deu", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem},
+ {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem},
+ {"dut", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem},
+ {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+ {"dutch", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem},
+ {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+ {"en", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem},
+ {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem},
+ {"eng", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem},
+ {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem},
+ {"english", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem},
+ {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem},
+ {"es", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem},
+ {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+ {"esl", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem},
+ {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+ {"fi", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem},
+ {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem},
+ {"fin", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem},
+ {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem},
+ {"finnish", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem},
+ {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem},
+ {"fr", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem},
+ {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+ {"fra", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem},
+ {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+ {"fre", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem},
+ {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+ {"french", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem},
+ {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem},
+ {"ger", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem},
+ {"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},
+ {"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},
+ {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem},
+ {"italian", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem},
+ {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem},
+ {"nl", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem},
+ {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+ {"nld", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem},
+ {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem},
+ {"no", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem},
+ {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem},
+ {"nor", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem},
+ {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem},
+ {"norwegian", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem},
+ {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem},
+ {"por", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem},
+ {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem},
+ {"porter", ENC_ISO_8859_1, porter_ISO_8859_1_create_env, porter_ISO_8859_1_close_env, porter_ISO_8859_1_stem},
+ {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem},
+ {"portuguese", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem},
+ {"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},
+ {"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},
+ {"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},
+ {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem},
+ {"spa", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem},
+ {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+ {"spanish", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem},
+ {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem},
+ {"sv", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem},
+ {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem},
+ {"swe", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem},
+ {"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}
+};
+static const char * algorithm_names[] = {
+ "danish",
+ "dutch",
+ "english",
+ "finnish",
+ "french",
+ "german",
+ "italian",
+ "norwegian",
+ "porter",
+ "portuguese",
+ "russian",
+ "spanish",
+ "swedish",
+ 0
+};
diff --git a/libstemmer_c/mkinc.mak b/libstemmer_c/mkinc.mak
new file mode 100644
index 0000000..fdf2fa2
--- /dev/null
+++ b/libstemmer_c/mkinc.mak
@@ -0,0 +1,63 @@
+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
+
+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
+
diff --git a/libstemmer_c/runtime/api.c b/libstemmer_c/runtime/api.c
new file mode 100644
index 0000000..9dd5a3b
--- /dev/null
+++ b/libstemmer_c/runtime/api.c
@@ -0,0 +1,69 @@
+
+#include <stdlib.h> /* for calloc, free */
+#include "header.h"
+
+extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size)
+{
+ struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env));
+ if (z == NULL) return NULL;
+ z->p = create_s();
+ if (z->p == NULL) goto error;
+ if (S_size)
+ {
+ int i;
+ z->S = (symbol * *) calloc(S_size, sizeof(symbol *));
+ if (z->S == NULL) goto error;
+
+ for (i = 0; i < S_size; i++)
+ {
+ 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));
+ if (z->B == NULL) goto error;
+ z->B_size = B_size;
+ }
+
+ return z;
+error:
+ SN_close_env(z);
+ return NULL;
+}
+
+extern void SN_close_env(struct SN_env * z)
+{
+ if (z == NULL) return;
+ if (z->S_size)
+ {
+ int i;
+ for (i = 0; i < z->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);
+ if (z->p) lose_s(z->p);
+ free(z);
+}
+
+extern int SN_set_current(struct SN_env * z, int size, const symbol * s)
+{
+ int err = replace_s(z, 0, z->l, size, s, NULL);
+ z->c = 0;
+ return err;
+}
+
diff --git a/libstemmer_c/runtime/api.h b/libstemmer_c/runtime/api.h
new file mode 100644
index 0000000..adc2282
--- /dev/null
+++ b/libstemmer_c/runtime/api.h
@@ -0,0 +1,27 @@
+
+typedef unsigned char symbol;
+
+/* Or replace 'char' above with 'short' for 16 bit characters.
+
+ More precisely, replace 'char' with whatever type guarantees the
+ character width you need. Note however that sizeof(symbol) should divide
+ HEAD, defined in header.h as 2*sizeof(int), without remainder, otherwise
+ there is an alignment problem. In the unlikely event of a problem here,
+ consult Martin Porter.
+
+*/
+
+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;
+ symbol * * S;
+ int * I;
+ symbol * 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 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
new file mode 100644
index 0000000..c0721d6
--- /dev/null
+++ b/libstemmer_c/runtime/header.h
@@ -0,0 +1,58 @@
+
+#include <limits.h>
+
+#include "api.h"
+
+#define MAXINT INT_MAX
+#define MININT INT_MIN
+
+#define HEAD 2*sizeof(int)
+
+#define SIZE(p) ((int *)(p))[-1]
+#define SET_SIZE(p, n) ((int *)(p))[-1] = n
+#define CAPACITY(p) ((int *)(p))[-2]
+
+struct among
+{ int s_size; /* number of chars in string */
+ symbol * s; /* search string */
+ int substring_i;/* index to longest matching substring */
+ int result; /* result of the lookup */
+ int (* function)(struct SN_env *);
+};
+
+extern symbol * create_s(void);
+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(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 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 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 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_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 symbol * slice_to(struct SN_env * z, symbol * p);
+extern symbol * assign_to(struct SN_env * z, symbol * p);
+
+extern void debug(struct SN_env * z, int number, int line_count);
+
diff --git a/libstemmer_c/runtime/utilities.c b/libstemmer_c/runtime/utilities.c
new file mode 100644
index 0000000..a6bfa5c
--- /dev/null
+++ b/libstemmer_c/runtime/utilities.c
@@ -0,0 +1,446 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "header.h"
+
+#define unless(C) if(!(C))
+
+#define CREATE_SIZE 1
+
+extern symbol * create_s(void) {
+ symbol * p;
+ void * mem = malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol));
+ if (mem == NULL) return NULL;
+ p = (symbol *) (HEAD + (char *) mem);
+ CAPACITY(p) = CREATE_SIZE;
+ SET_SIZE(p, CREATE_SIZE);
+ return p;
+}
+
+extern void lose_s(symbol * p) {
+ if (p == NULL) return;
+ free((char *) p - HEAD);
+}
+
+/*
+ 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
+ position, or 0 on failure.
+
+ -- used to implement hop and next in the utf8 case.
+*/
+
+extern int skip_utf8(const symbol * p, int c, int lb, int l, int n) {
+ int b;
+ if (n >= 0) {
+ for (; n > 0; n--) {
+ if (c >= l) return -1;
+ b = p[c++];
+ if (b >= 0xC0) { /* 1100 0000 */
+ while (c < l) {
+ b = p[c];
+ if (b >= 0xC0 || b < 0x80) break;
+ /* break unless b is 10------ */
+ c++;
+ }
+ }
+ }
+ } else {
+ for (; n < 0; n++) {
+ if (c <= lb) return -1;
+ b = p[--c];
+ if (b >= 0x80) { /* 1000 0000 */
+ while (c > lb) {
+ b = p[c];
+ if (b >= 0xC0) break; /* 1100 0000 */
+ c--;
+ }
+ }
+ }
+ }
+ return c;
+}
+
+/* Code for character groupings: utf8 cases */
+
+static int get_utf8(const symbol * p, int c, int l, int * slot) {
+ int b0, b1;
+ if (c >= l) return 0;
+ b0 = p[c++];
+ if (b0 < 0xC0 || c == l) { /* 1100 0000 */
+ * slot = b0; return 1;
+ }
+ b1 = p[c++];
+ 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;
+}
+
+static int get_b_utf8(const symbol * p, int c, int lb, int * slot) {
+ int b0, b1;
+ if (c <= lb) return 0;
+ b0 = p[--c];
+ if (b0 < 0x80 || c == lb) { /* 1000 0000 */
+ * slot = b0; return 1;
+ }
+ b1 = p[--c];
+ 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;
+}
+
+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_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 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_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;
+}
+
+/* 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_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 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_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 eq_s(struct SN_env * z, int s_size, 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) {
+ 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) {
+ return eq_s(z, SIZE(p), p);
+}
+
+extern int eq_v_b(struct SN_env * z, symbol * p) {
+ return eq_s_b(z, SIZE(p), p);
+}
+
+extern int find_among(struct SN_env * z, struct among * v, int v_size) {
+
+ int i = 0;
+ int j = v_size;
+
+ int c = z->c; int l = z->l;
+ symbol * q = z->p + c;
+
+ struct among * w;
+
+ int common_i = 0;
+ int common_j = 0;
+
+ int first_key_inspected = 0;
+
+ while(1) {
+ int k = i + ((j - i) >> 1);
+ int diff = 0;
+ int common = common_i < common_j ? common_i : common_j; /* smaller */
+ w = v + k;
+ {
+ int i; for (i = common; i < w->s_size; i++) {
+ if (c + common == l) { diff = -1; break; }
+ diff = q[common] - w->s[i];
+ if (diff != 0) break;
+ common++;
+ }
+ }
+ if (diff < 0) { j = k; common_j = common; }
+ else { i = k; common_i = common; }
+ if (j - i <= 1) {
+ if (i > 0) break; /* v->s has been inspected */
+ if (j == i) break; /* only one item in v */
+
+ /* - but now we need to go round once more to get
+ v->s inspected. This looks messy, but is actually
+ the optimal approach. */
+
+ if (first_key_inspected) break;
+ first_key_inspected = 1;
+ }
+ }
+ while(1) {
+ w = v + i;
+ if (common_i >= w->s_size) {
+ z->c = c + w->s_size;
+ if (w->function == 0) return w->result;
+ {
+ int res = w->function(z);
+ z->c = c + w->s_size;
+ if (res) return w->result;
+ }
+ }
+ i = w->substring_i;
+ if (i < 0) return 0;
+ }
+}
+
+/* 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) {
+
+ int i = 0;
+ int j = v_size;
+
+ int c = z->c; int lb = z->lb;
+ symbol * q = z->p + c - 1;
+
+ struct among * w;
+
+ int common_i = 0;
+ int common_j = 0;
+
+ int first_key_inspected = 0;
+
+ while(1) {
+ int k = i + ((j - i) >> 1);
+ int diff = 0;
+ 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--) {
+ if (c - common == lb) { diff = -1; break; }
+ diff = q[- common] - w->s[i];
+ if (diff != 0) break;
+ common++;
+ }
+ }
+ if (diff < 0) { j = k; common_j = common; }
+ else { i = k; common_i = common; }
+ if (j - i <= 1) {
+ if (i > 0) break;
+ if (j == i) break;
+ if (first_key_inspected) break;
+ first_key_inspected = 1;
+ }
+ }
+ while(1) {
+ w = v + i;
+ if (common_i >= w->s_size) {
+ z->c = c - w->s_size;
+ if (w->function == 0) return w->result;
+ {
+ int res = w->function(z);
+ z->c = c - w->s_size;
+ if (res) return w->result;
+ }
+ }
+ i = w->substring_i;
+ if (i < 0) return 0;
+ }
+}
+
+
+/* Increase the size of the buffer pointed to by p to at least n symbols.
+ * If insufficient memory, returns NULL and frees the old buffer.
+ */
+static symbol * increase_size(symbol * p, int n) {
+ symbol * q;
+ int new_size = n + 20;
+ void * mem = realloc((char *) p - HEAD,
+ HEAD + (new_size + 1) * sizeof(symbol));
+ if (mem == NULL) {
+ lose_s(p);
+ return NULL;
+ }
+ q = (symbol *) (HEAD + (char *)mem);
+ CAPACITY(q) = new_size;
+ return q;
+}
+
+/* to replace symbols between c_bra and c_ket in z->p by the
+ s_size symbols at s.
+ Returns 0 on success, -1 on error.
+ Also, frees z->p (and sets it to NULL) on error.
+*/
+extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjptr)
+{
+ int adjustment;
+ int len;
+ if (z->p == NULL) {
+ z->p = create_s();
+ if (z->p == NULL) return -1;
+ }
+ adjustment = s_size - (c_ket - c_bra);
+ len = SIZE(z->p);
+ if (adjustment != 0) {
+ if (adjustment + len > CAPACITY(z->p)) {
+ z->p = increase_size(z->p, adjustment + len);
+ if (z->p == NULL) return -1;
+ }
+ memmove(z->p + c_ket + adjustment,
+ z->p + c_ket,
+ (len - c_ket) * sizeof(symbol));
+ SET_SIZE(z->p, adjustment + len);
+ z->l += adjustment;
+ if (z->c >= c_ket)
+ z->c += adjustment;
+ else
+ if (z->c > c_bra)
+ z->c = c_bra;
+ }
+ unless (s_size == 0) memmove(z->p + c_bra, s, s_size * sizeof(symbol));
+ if (adjptr != NULL)
+ *adjptr = adjustment;
+ return 0;
+}
+
+static int slice_check(struct SN_env * z) {
+
+ if (z->bra < 0 ||
+ z->bra > z->ket ||
+ z->ket > z->l ||
+ z->p == NULL ||
+ z->l > SIZE(z->p)) /* this line could be removed */
+ {
+#if 0
+ fprintf(stderr, "faulty slice operation:\n");
+ debug(z, -1, 0);
+#endif
+ return -1;
+ }
+ return 0;
+}
+
+extern int slice_from_s(struct SN_env * z, int s_size, 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) {
+ return slice_from_s(z, SIZE(p), p);
+}
+
+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) {
+ int adjustment;
+ if (replace_s(z, bra, ket, s_size, s, &adjustment))
+ return -1;
+ if (bra <= z->bra) z->bra += adjustment;
+ if (bra <= z->ket) z->ket += adjustment;
+ return 0;
+}
+
+extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p) {
+ int adjustment;
+ if (replace_s(z, bra, ket, SIZE(p), p, &adjustment))
+ return -1;
+ if (bra <= z->bra) z->bra += adjustment;
+ if (bra <= z->ket) z->ket += adjustment;
+ return 0;
+}
+
+extern symbol * slice_to(struct SN_env * z, symbol * p) {
+ if (slice_check(z)) {
+ lose_s(p);
+ return NULL;
+ }
+ {
+ int len = z->ket - z->bra;
+ if (CAPACITY(p) < len) {
+ p = increase_size(p, len);
+ if (p == NULL)
+ return NULL;
+ }
+ memmove(p, z->p + z->bra, len * sizeof(symbol));
+ SET_SIZE(p, len);
+ }
+ return p;
+}
+
+extern symbol * assign_to(struct SN_env * z, symbol * p) {
+ int len = z->l;
+ if (CAPACITY(p) < len) {
+ p = increase_size(p, len);
+ if (p == NULL)
+ return NULL;
+ }
+ memmove(p, z->p, len * sizeof(symbol));
+ SET_SIZE(p, len);
+ return p;
+}
+
+#if 0
+extern void debug(struct SN_env * z, int number, int line_count) {
+ int i;
+ int limit = SIZE(z->p);
+ /*if (number >= 0) printf("%3d (line %4d): '", number, line_count);*/
+ if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit);
+ for (i = 0; i <= limit; i++) {
+ if (z->lb == i) printf("{");
+ if (z->bra == i) printf("[");
+ if (z->c == i) printf("|");
+ if (z->ket == i) printf("]");
+ if (z->l == i) printf("}");
+ if (i < limit)
+ { int ch = z->p[i];
+ if (ch == 0) ch = '#';
+ printf("%c", ch);
+ }
+ }
+ printf("'\n");
+}
+#endif
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_danish.c b/libstemmer_c/src_c/stem_ISO_8859_1_danish.c
new file mode 100644
index 0000000..fe0fa76
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_danish.c
@@ -0,0 +1,338 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int danish_ISO_8859_1_stem(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 3, s_0_0, -1, 1, 0},
+/* 1 */ { 5, s_0_1, 0, 1, 0},
+/* 2 */ { 4, s_0_2, -1, 1, 0},
+/* 3 */ { 1, s_0_3, -1, 1, 0},
+/* 4 */ { 5, s_0_4, 3, 1, 0},
+/* 5 */ { 4, s_0_5, 3, 1, 0},
+/* 6 */ { 6, s_0_6, 5, 1, 0},
+/* 7 */ { 3, s_0_7, 3, 1, 0},
+/* 8 */ { 4, s_0_8, 3, 1, 0},
+/* 9 */ { 3, s_0_9, 3, 1, 0},
+/* 10 */ { 2, s_0_10, -1, 1, 0},
+/* 11 */ { 5, s_0_11, 10, 1, 0},
+/* 12 */ { 4, s_0_12, 10, 1, 0},
+/* 13 */ { 2, s_0_13, -1, 1, 0},
+/* 14 */ { 5, s_0_14, 13, 1, 0},
+/* 15 */ { 4, s_0_15, 13, 1, 0},
+/* 16 */ { 1, s_0_16, -1, 2, 0},
+/* 17 */ { 4, s_0_17, 16, 1, 0},
+/* 18 */ { 2, s_0_18, 16, 1, 0},
+/* 19 */ { 5, s_0_19, 18, 1, 0},
+/* 20 */ { 7, s_0_20, 19, 1, 0},
+/* 21 */ { 4, s_0_21, 18, 1, 0},
+/* 22 */ { 5, s_0_22, 18, 1, 0},
+/* 23 */ { 4, s_0_23, 18, 1, 0},
+/* 24 */ { 3, s_0_24, 16, 1, 0},
+/* 25 */ { 6, s_0_25, 24, 1, 0},
+/* 26 */ { 5, s_0_26, 24, 1, 0},
+/* 27 */ { 3, s_0_27, 16, 1, 0},
+/* 28 */ { 3, s_0_28, 16, 1, 0},
+/* 29 */ { 5, s_0_29, 28, 1, 0},
+/* 30 */ { 2, s_0_30, -1, 1, 0},
+/* 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 struct among a_1[4] =
+{
+/* 0 */ { 2, s_1_0, -1, -1, 0},
+/* 1 */ { 2, s_1_1, -1, -1, 0},
+/* 2 */ { 2, s_1_2, -1, -1, 0},
+/* 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 struct among a_2[5] =
+{
+/* 0 */ { 2, s_2_0, -1, 1, 0},
+/* 1 */ { 3, s_2_1, 0, 1, 0},
+/* 2 */ { 4, s_2_2, 1, 1, 0},
+/* 3 */ { 3, s_2_3, -1, 1, 0},
+/* 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 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 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 */
+ }
+ 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 */
+ }
+ z->I[0] = z->c; /* setmark p1, line 34 */
+ /* try, line 35 */
+ if (!(z->I[0] < z->I[1])) goto lab2;
+ z->I[0] = z->I[1];
+lab2:
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 41 */
+ among_var = find_among_b(z, a_0, 32); /* substring, line 41 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 41 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 56 */
+ if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */
+ z->bra = z->c; /* ], line 56 */
+ z->lb = m3;
+ }
+ 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 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_other_suffix(struct SN_env * z) {
+ int among_var;
+ { int m = z->l - z->c; (void) m; /* 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 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m3; /* setlimit, line 67 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 67 */
+ among_var = find_among_b(z, a_2, 5); /* substring, line 67 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 67 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 70 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 3, s_2); /* <-, line 72 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_undouble(struct SN_env * z) {
+ { int m3; /* setlimit, line 76 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 76 */
+ if (!(out_grouping_b(z, g_v, 97, 248))) { z->lb = m3; 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;
+ }
+ if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */
+ { int ret;
+ 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 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->lb = z->c; z->c = z->l; /* backwards, line 85 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_danish.h b/libstemmer_c/src_c/stem_ISO_8859_1_danish.h
new file mode 100644
index 0000000..49c5559
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_danish.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 * danish_ISO_8859_1_create_env(void);
+extern void danish_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int danish_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c b/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c
new file mode 100644
index 0000000..36de3b5
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_dutch.c
@@ -0,0 +1,635 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int dutch_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_R1(struct SN_env * z);
+static int r_mark_regions(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 6, 0},
+/* 1 */ { 1, s_0_1, 0, 1, 0},
+/* 2 */ { 1, s_0_2, 0, 1, 0},
+/* 3 */ { 1, s_0_3, 0, 2, 0},
+/* 4 */ { 1, s_0_4, 0, 2, 0},
+/* 5 */ { 1, s_0_5, 0, 3, 0},
+/* 6 */ { 1, s_0_6, 0, 3, 0},
+/* 7 */ { 1, s_0_7, 0, 4, 0},
+/* 8 */ { 1, s_0_8, 0, 4, 0},
+/* 9 */ { 1, s_0_9, 0, 5, 0},
+/* 10 */ { 1, s_0_10, 0, 5, 0}
+};
+
+static symbol s_1_1[1] = { 'I' };
+static symbol s_1_2[1] = { 'Y' };
+
+static 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 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 struct among a_3[5] =
+{
+/* 0 */ { 3, s_3_0, -1, 2, 0},
+/* 1 */ { 2, s_3_1, -1, 3, 0},
+/* 2 */ { 2, s_3_2, -1, 2, 0},
+/* 3 */ { 5, s_3_3, 2, 1, 0},
+/* 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 struct among a_4[6] =
+{
+/* 0 */ { 3, s_4_0, -1, 1, 0},
+/* 1 */ { 2, s_4_1, -1, 2, 0},
+/* 2 */ { 3, s_4_2, -1, 1, 0},
+/* 3 */ { 4, s_4_3, -1, 3, 0},
+/* 4 */ { 4, s_4_4, -1, 4, 0},
+/* 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 struct among a_5[4] =
+{
+/* 0 */ { 2, s_5_0, -1, -1, 0},
+/* 1 */ { 2, s_5_1, -1, -1, 0},
+/* 2 */ { 2, s_5_2, -1, -1, 0},
+/* 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 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;
+ z->bra = z->c; /* [, line 43 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 54 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ z->c = c_test;
+ }
+ { int c = z->c; /* try, line 57 */
+ z->bra = z->c; /* [, line 57 */
+ if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; }
+ z->ket = z->c; /* ], line 57 */
+ { int ret;
+ 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;
+ while(1) { /* goto, line 58 */
+ int c = z->c;
+ if (!(in_grouping(z, g_v, 97, 232))) goto lab3;
+ z->bra = z->c; /* [, line 59 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab4;
+ lab5:
+ z->c = c;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ z->c = c;
+ break;
+ lab3:
+ z->c = c;
+ if (z->c >= z->l) goto lab2;
+ z->c++; /* goto, line 58 */
+ }
+ continue;
+ lab2:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+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 */
+ }
+ 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 */
+ }
+ z->I[0] = z->c; /* setmark p1, line 69 */
+ /* try, line 70 */
+ if (!(z->I[0] < 3)) goto lab2;
+ 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 */
+ }
+ 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 */
+ }
+ z->I[1] = z->c; /* setmark p2, line 71 */
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 75 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 77 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_12); /* <-, line 79 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 80 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_undouble(struct SN_env * z) {
+ { int m_test = z->l - z->c; /* test, line 91 */
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_e_ending(struct SN_env * z) {
+ z->B[0] = 0; /* unset e_found, line 95 */
+ z->ket = z->c; /* [, line 96 */
+ if (!(eq_s_b(z, 1, s_13))) return 0;
+ z->bra = z->c; /* ], line 96 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 96 */
+ 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;
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 96 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set e_found, line 97 */
+ { int ret = r_undouble(z);
+ if (ret == 0) return 0; /* call undouble, line 98 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_en_ending(struct SN_env * z) {
+ { 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; /* 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 */
+ if (!(eq_s_b(z, 3, s_14))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 102 */
+ if (ret < 0) return ret;
+ }
+ { int ret = r_undouble(z);
+ if (ret == 0) return 0; /* call undouble, line 103 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ { int m = z->l - z->c; (void) m; /* do, line 107 */
+ z->ket = z->c; /* [, line 108 */
+ among_var = find_among_b(z, a_3, 5); /* substring, line 108 */
+ if (!(among_var)) goto lab0;
+ z->bra = z->c; /* ], line 108 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret = r_R1(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_en_ending(z);
+ if (ret == 0) goto lab0; /* call en_ending, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret = r_R1(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 (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ { int ret = r_R2(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 */
+ if (!(eq_s_b(z, 1, s_17))) goto lab3;
+ goto lab2;
+ lab3:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 122 */
+ if (ret < 0) return ret;
+ }
+ z->ket = z->c; /* [, line 123 */
+ if (!(eq_s_b(z, 2, s_18))) goto lab2;
+ z->bra = z->c; /* ], line 123 */
+ { int ret = r_en_ending(z);
+ if (ret == 0) goto lab2; /* call en_ending, line 123 */
+ if (ret < 0) return ret;
+ }
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 126 */
+ z->ket = z->c; /* [, line 127 */
+ among_var = find_among_b(z, a_4, 6); /* substring, line 127 */
+ if (!(among_var)) goto lab4;
+ z->bra = z->c; /* ], line 127 */
+ switch(among_var) {
+ case 0: goto lab4;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 129 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 129 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ { int ret = r_R2(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 */
+ if (!(eq_s_b(z, 1, s_20))) goto lab7;
+ goto lab6;
+ lab7:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 130 */
+ if (ret < 0) return ret;
+ }
+ goto lab5;
+ lab6:
+ z->c = z->l - m;
+ { int ret = r_undouble(z);
+ if (ret == 0) goto lab4; /* call undouble, line 130 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab5:
+ break;
+ case 2:
+ { int ret = r_R2(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 */
+ if (!(eq_s_b(z, 1, s_21))) goto lab8;
+ goto lab4;
+ lab8:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 136 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 136 */
+ if (ret < 0) return ret;
+ }
+ { int ret = r_e_ending(z);
+ if (ret == 0) goto lab4; /* call e_ending, line 136 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 139 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 139 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 142 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab4:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 146 */
+ if (!(out_grouping_b(z, g_v_I, 73, 232))) goto lab9;
+ { int m_test = z->l - z->c; /* test, line 148 */
+ if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */
+ if (!(out_grouping_b(z, g_v, 97, 232))) 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 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ return 1;
+}
+
+extern int dutch_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 161 */
+
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_dutch.h b/libstemmer_c/src_c/stem_ISO_8859_1_dutch.h
new file mode 100644
index 0000000..e67d111
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_dutch.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 * dutch_ISO_8859_1_create_env(void);
+extern void dutch_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int dutch_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_english.c b/libstemmer_c/src_c/stem_ISO_8859_1_english.c
new file mode 100644
index 0000000..3477b38
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_english.c
@@ -0,0 +1,1156 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int english_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_Step_4(struct SN_env * z);
+static int r_Step_3(struct SN_env * z);
+static int r_Step_2(struct SN_env * z);
+static int r_Step_1c(struct SN_env * z);
+static int r_Step_1b(struct SN_env * z);
+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);
+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);
+
+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] =
+{
+/* 0 */ { 6, s_0_0, -1, -1, 0},
+/* 1 */ { 5, s_0_1, -1, -1, 0}
+};
+
+static symbol s_1_0[1] = { '\'' };
+static symbol s_1_1[3] = { '\'', 's', '\'' };
+static symbol s_1_2[2] = { '\'', 's' };
+
+static 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 struct among a_2[6] =
+{
+/* 0 */ { 3, s_2_0, -1, 2, 0},
+/* 1 */ { 1, s_2_1, -1, 3, 0},
+/* 2 */ { 3, s_2_2, 1, 2, 0},
+/* 3 */ { 4, s_2_3, 1, 1, 0},
+/* 4 */ { 2, s_2_4, 1, -1, 0},
+/* 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 struct among a_3[13] =
+{
+/* 0 */ { 0, 0, -1, 3, 0},
+/* 1 */ { 2, s_3_1, 0, 2, 0},
+/* 2 */ { 2, s_3_2, 0, 2, 0},
+/* 3 */ { 2, s_3_3, 0, 2, 0},
+/* 4 */ { 2, s_3_4, 0, 2, 0},
+/* 5 */ { 2, s_3_5, 0, 1, 0},
+/* 6 */ { 2, s_3_6, 0, 2, 0},
+/* 7 */ { 2, s_3_7, 0, 2, 0},
+/* 8 */ { 2, s_3_8, 0, 2, 0},
+/* 9 */ { 2, s_3_9, 0, 2, 0},
+/* 10 */ { 2, s_3_10, 0, 1, 0},
+/* 11 */ { 2, s_3_11, 0, 2, 0},
+/* 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 struct among a_4[6] =
+{
+/* 0 */ { 2, s_4_0, -1, 2, 0},
+/* 1 */ { 3, s_4_1, 0, 1, 0},
+/* 2 */ { 3, s_4_2, -1, 2, 0},
+/* 3 */ { 4, s_4_3, -1, 2, 0},
+/* 4 */ { 5, s_4_4, 3, 1, 0},
+/* 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 struct among a_5[24] =
+{
+/* 0 */ { 4, s_5_0, -1, 3, 0},
+/* 1 */ { 4, s_5_1, -1, 2, 0},
+/* 2 */ { 3, s_5_2, -1, 13, 0},
+/* 3 */ { 2, s_5_3, -1, 16, 0},
+/* 4 */ { 3, s_5_4, 3, 12, 0},
+/* 5 */ { 4, s_5_5, 4, 4, 0},
+/* 6 */ { 4, s_5_6, 3, 8, 0},
+/* 7 */ { 5, s_5_7, 3, 14, 0},
+/* 8 */ { 6, s_5_8, 3, 15, 0},
+/* 9 */ { 5, s_5_9, 3, 10, 0},
+/* 10 */ { 5, s_5_10, 3, 5, 0},
+/* 11 */ { 5, s_5_11, -1, 8, 0},
+/* 12 */ { 6, s_5_12, -1, 12, 0},
+/* 13 */ { 5, s_5_13, -1, 11, 0},
+/* 14 */ { 6, s_5_14, -1, 1, 0},
+/* 15 */ { 7, s_5_15, 14, 7, 0},
+/* 16 */ { 5, s_5_16, -1, 8, 0},
+/* 17 */ { 5, s_5_17, -1, 7, 0},
+/* 18 */ { 7, s_5_18, 17, 6, 0},
+/* 19 */ { 4, s_5_19, -1, 6, 0},
+/* 20 */ { 4, s_5_20, -1, 7, 0},
+/* 21 */ { 7, s_5_21, -1, 11, 0},
+/* 22 */ { 7, s_5_22, -1, 9, 0},
+/* 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 struct among a_6[9] =
+{
+/* 0 */ { 5, s_6_0, -1, 4, 0},
+/* 1 */ { 5, s_6_1, -1, 6, 0},
+/* 2 */ { 5, s_6_2, -1, 3, 0},
+/* 3 */ { 5, s_6_3, -1, 4, 0},
+/* 4 */ { 4, s_6_4, -1, 4, 0},
+/* 5 */ { 6, s_6_5, -1, 1, 0},
+/* 6 */ { 7, s_6_6, 5, 2, 0},
+/* 7 */ { 3, s_6_7, -1, 5, 0},
+/* 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 struct among a_7[18] =
+{
+/* 0 */ { 2, s_7_0, -1, 1, 0},
+/* 1 */ { 4, s_7_1, -1, 1, 0},
+/* 2 */ { 4, s_7_2, -1, 1, 0},
+/* 3 */ { 4, s_7_3, -1, 1, 0},
+/* 4 */ { 4, s_7_4, -1, 1, 0},
+/* 5 */ { 3, s_7_5, -1, 1, 0},
+/* 6 */ { 3, s_7_6, -1, 1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 3, s_7_8, -1, 1, 0},
+/* 9 */ { 2, s_7_9, -1, 1, 0},
+/* 10 */ { 3, s_7_10, -1, 1, 0},
+/* 11 */ { 3, s_7_11, -1, 2, 0},
+/* 12 */ { 2, s_7_12, -1, 1, 0},
+/* 13 */ { 3, s_7_13, -1, 1, 0},
+/* 14 */ { 3, s_7_14, -1, 1, 0},
+/* 15 */ { 3, s_7_15, -1, 1, 0},
+/* 16 */ { 4, s_7_16, 15, 1, 0},
+/* 17 */ { 5, s_7_17, 16, 1, 0}
+};
+
+static symbol s_8_0[1] = { 'e' };
+static symbol s_8_1[1] = { 'l' };
+
+static 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 struct among a_9[8] =
+{
+/* 0 */ { 7, s_9_0, -1, -1, 0},
+/* 1 */ { 7, s_9_1, -1, -1, 0},
+/* 2 */ { 6, s_9_2, -1, -1, 0},
+/* 3 */ { 7, s_9_3, -1, -1, 0},
+/* 4 */ { 6, s_9_4, -1, -1, 0},
+/* 5 */ { 7, s_9_5, -1, -1, 0},
+/* 6 */ { 7, s_9_6, -1, -1, 0},
+/* 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 struct among a_10[18] =
+{
+/* 0 */ { 5, s_10_0, -1, -1, 0},
+/* 1 */ { 5, s_10_1, -1, -1, 0},
+/* 2 */ { 4, s_10_2, -1, -1, 0},
+/* 3 */ { 6, s_10_3, -1, -1, 0},
+/* 4 */ { 5, s_10_4, -1, 3, 0},
+/* 5 */ { 5, s_10_5, -1, 9, 0},
+/* 6 */ { 6, s_10_6, -1, 7, 0},
+/* 7 */ { 4, s_10_7, -1, -1, 0},
+/* 8 */ { 4, s_10_8, -1, 6, 0},
+/* 9 */ { 5, s_10_9, -1, 4, 0},
+/* 10 */ { 4, s_10_10, -1, -1, 0},
+/* 11 */ { 4, s_10_11, -1, 10, 0},
+/* 12 */ { 6, s_10_12, -1, 11, 0},
+/* 13 */ { 5, s_10_13, -1, 2, 0},
+/* 14 */ { 4, s_10_14, -1, 1, 0},
+/* 15 */ { 3, s_10_15, -1, -1, 0},
+/* 16 */ { 5, s_10_16, -1, 5, 0},
+/* 17 */ { 4, s_10_17, -1, 8, 0}
+};
+
+static unsigned char g_v[] = { 17, 65, 16, 1 };
+
+static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
+
+static 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 int r_prelude(struct SN_env * z) {
+ z->B[0] = 0; /* unset Y_found, line 26 */
+ { int c = 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 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ z->c = c;
+ }
+ { int c = 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 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set Y_found, line 28 */
+ lab1:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 29 */
+ while(1) { /* repeat, line 29 */
+ int c = z->c;
+ while(1) { /* goto, line 29 */
+ int c = z->c;
+ if (!(in_grouping(z, g_v, 97, 121))) 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;
+ break;
+ lab4:
+ z->c = c;
+ if (z->c >= z->l) goto lab3;
+ z->c++; /* goto, line 29 */
+ }
+ { int ret;
+ 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;
+ break;
+ }
+ z->c = c;
+ }
+ return 1;
+}
+
+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 */
+ 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 */
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[1] = z->c; /* setmark p2, line 42 */
+ lab0:
+ z->c = c;
+ }
+ 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;
+ 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 */
+ }
+lab0:
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+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 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab0; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 61 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ ;
+ }
+ z->ket = z->c; /* [, line 64 */
+ among_var = find_among_b(z, a_2, 6); /* substring, line 64 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 64 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_from_s(z, 2, s_5); /* <-, line 65 */
+ 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 ret;
+ ret = slice_from_s(z, 1, s_6); /* <-, line 67 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab1:
+ 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 */
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 68 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 74 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
+ 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 */
+ }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 79 */
+ 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 */
+ 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;
+ }
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ z->ket = z->c; /* [, line 85 */
+ 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 */
+ 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 */
+ { int ret = r_shortv(z);
+ if (ret == 0) return 0; /* call shortv, line 86 */
+ 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;
+ }
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(eq_s_b(z, 1, s_11))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ 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 */
+ return 0;
+ lab2:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_13); /* <-, line 95 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 99 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 99 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 4, s_15); /* <-, line 101 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 4, s_16); /* <-, line 102 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_from_s(z, 4, s_17); /* <-, line 103 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_from_s(z, 3, s_18); /* <-, line 104 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret;
+ ret = slice_from_s(z, 3, s_19); /* <-, line 106 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret;
+ ret = slice_from_s(z, 3, s_20); /* <-, line 108 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 8:
+ { int ret;
+ ret = slice_from_s(z, 2, s_21); /* <-, line 110 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 9:
+ { int ret;
+ ret = slice_from_s(z, 3, s_22); /* <-, line 111 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 10:
+ { int ret;
+ ret = slice_from_s(z, 3, s_23); /* <-, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int ret;
+ ret = slice_from_s(z, 3, s_24); /* <-, line 115 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 12:
+ { int ret;
+ ret = slice_from_s(z, 3, s_25); /* <-, line 117 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 14:
+ { int ret;
+ ret = slice_from_s(z, 3, s_28); /* <-, line 119 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 15:
+ { int ret;
+ ret = slice_from_s(z, 4, s_29); /* <-, line 120 */
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 126 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 126 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 3, s_31); /* <-, line 128 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 2, s_32); /* <-, line 129 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_from_s(z, 2, s_33); /* <-, line 131 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 135 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 140 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 140 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 143 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* or, line 144 */
+ if (!(eq_s_b(z, 1, s_34))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_35))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 144 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 149 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* or, line 150 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab1; /* call R2, line 150 */
+ if (ret < 0) return ret;
+ }
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 150 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* not, line 150 */
+ { int ret = r_shortv(z);
+ if (ret == 0) goto lab2; /* call shortv, line 150 */
+ if (ret < 0) return ret;
+ }
+ return 0;
+ lab2:
+ z->c = z->l - m;
+ }
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 150 */
+ 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 ret;
+ }
+ if (!(eq_s_b(z, 1, s_36))) return 0;
+ { int ret;
+ ret = slice_del(z); /* delete, line 151 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ 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 */
+ if (!(among_var)) return 0;
+ z->ket = z->c; /* ], line 169 */
+ if (z->c < z->l) return 0; /* atlimit, line 169 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_from_s(z, 3, s_37); /* <-, line 173 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 3, s_38); /* <-, line 174 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 3, s_39); /* <-, line 175 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_from_s(z, 3, s_40); /* <-, line 176 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_from_s(z, 3, s_41); /* <-, line 177 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret;
+ ret = slice_from_s(z, 3, s_42); /* <-, line 181 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret;
+ ret = slice_from_s(z, 5, s_43); /* <-, line 182 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 8:
+ { int ret;
+ ret = slice_from_s(z, 4, s_44); /* <-, line 183 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 9:
+ { int ret;
+ ret = slice_from_s(z, 5, s_45); /* <-, line 184 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 10:
+ { int ret;
+ ret = slice_from_s(z, 4, s_46); /* <-, line 185 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int ret;
+ ret = slice_from_s(z, 5, s_47); /* <-, line 186 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 (!(eq_s(z, 1, s_48))) goto lab1;
+ z->ket = z->c; /* ], line 202 */
+ z->c = c;
+ break;
+ lab1:
+ z->c = c;
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* goto, line 202 */
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_49); /* <-, line 202 */
+ if (ret < 0) return ret;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+extern int english_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = z->c; /* or, line 206 */
+ { int ret = r_exception1(z);
+ if (ret == 0) goto lab1; /* call exception1, line 206 */
+ 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 */
+ }
+ goto lab2;
+ lab3:
+ z->c = c;
+ }
+ goto lab0;
+ lab2:
+ z->c = c;
+ { int c = z->c; /* do, line 208 */
+ { int ret = r_prelude(z);
+ if (ret == 0) goto lab4; /* call prelude, line 208 */
+ if (ret < 0) return ret;
+ }
+ lab4:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 209 */
+ { int ret = r_mark_regions(z);
+ if (ret == 0) goto lab5; /* call mark_regions, line 209 */
+ if (ret < 0) return ret;
+ }
+ lab5:
+ z->c = c;
+ }
+ z->lb = z->c; z->c = z->l; /* backwards, line 210 */
+
+ { int m = z->l - z->c; (void) m; /* do, line 212 */
+ { int ret = r_Step_1a(z);
+ if (ret == 0) goto lab6; /* call Step_1a, line 212 */
+ if (ret < 0) return ret;
+ }
+ lab6:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* or, line 214 */
+ { int ret = r_exception2(z);
+ if (ret == 0) goto lab8; /* call exception2, line 214 */
+ if (ret < 0) return ret;
+ }
+ goto lab7;
+ lab8:
+ z->c = z->l - m;
+ { int m = z->l - z->c; (void) m; /* do, line 216 */
+ { int ret = r_Step_1b(z);
+ if (ret == 0) goto lab9; /* call Step_1b, line 216 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 217 */
+ { int ret = r_Step_1c(z);
+ if (ret == 0) goto lab10; /* call Step_1c, line 217 */
+ if (ret < 0) return ret;
+ }
+ lab10:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 219 */
+ { int ret = r_Step_2(z);
+ if (ret == 0) goto lab11; /* call Step_2, line 219 */
+ if (ret < 0) return ret;
+ }
+ lab11:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 220 */
+ { int ret = r_Step_3(z);
+ if (ret == 0) goto lab12; /* call Step_3, line 220 */
+ if (ret < 0) return ret;
+ }
+ lab12:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 221 */
+ { int ret = r_Step_4(z);
+ if (ret == 0) goto lab13; /* call Step_4, line 221 */
+ if (ret < 0) return ret;
+ }
+ lab13:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 223 */
+ { int ret = r_Step_5(z);
+ if (ret == 0) goto lab14; /* call Step_5, line 223 */
+ if (ret < 0) return ret;
+ }
+ lab14:
+ z->c = z->l - m;
+ }
+ }
+ lab7:
+ z->c = z->lb;
+ { int c = z->c; /* do, line 226 */
+ { int ret = r_postlude(z);
+ if (ret == 0) goto lab15; /* call postlude, line 226 */
+ if (ret < 0) return ret;
+ }
+ lab15:
+ z->c = c;
+ }
+ }
+lab0:
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_english.h b/libstemmer_c/src_c/stem_ISO_8859_1_english.h
new file mode 100644
index 0000000..e685dcf
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_english.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 * english_ISO_8859_1_create_env(void);
+extern void english_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int english_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c b/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c
new file mode 100644
index 0000000..0d851cd
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_finnish.c
@@ -0,0 +1,792 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int finnish_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_i_plural(struct SN_env * z);
+static int r_case_ending(struct SN_env * z);
+static int r_VI(struct SN_env * z);
+static int r_LONG(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 2, s_0_0, -1, 1, 0},
+/* 1 */ { 3, s_0_1, -1, 2, 0},
+/* 2 */ { 4, 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 */ { 2, s_0_7, -1, 1, 0},
+/* 8 */ { 2, s_0_8, -1, 1, 0},
+/* 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 struct among a_1[6] =
+{
+/* 0 */ { 3, s_1_0, -1, -1, 0},
+/* 1 */ { 2, s_1_1, -1, -1, 0},
+/* 2 */ { 3, s_1_2, -1, -1, 0},
+/* 3 */ { 2, s_1_3, -1, -1, 0},
+/* 4 */ { 3, s_1_4, 3, -1, 0},
+/* 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 struct among a_2[6] =
+{
+/* 0 */ { 3, s_2_0, -1, -1, 0},
+/* 1 */ { 2, s_2_1, -1, -1, 0},
+/* 2 */ { 3, s_2_2, -1, -1, 0},
+/* 3 */ { 2, s_2_3, -1, -1, 0},
+/* 4 */ { 3, s_2_4, 3, -1, 0},
+/* 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 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] =
+{
+/* 0 */ { 3, s_4_0, -1, 3, 0},
+/* 1 */ { 3, s_4_1, -1, 3, 0},
+/* 2 */ { 3, s_4_2, -1, 3, 0},
+/* 3 */ { 2, s_4_3, -1, 2, 0},
+/* 4 */ { 2, s_4_4, -1, 1, 0},
+/* 5 */ { 2, s_4_5, -1, 4, 0},
+/* 6 */ { 2, s_4_6, -1, 6, 0},
+/* 7 */ { 2, s_4_7, -1, 5, 0},
+/* 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 struct among a_5[7] =
+{
+/* 0 */ { 2, s_5_0, -1, -1, 0},
+/* 1 */ { 2, s_5_1, -1, -1, 0},
+/* 2 */ { 2, s_5_2, -1, -1, 0},
+/* 3 */ { 2, s_5_3, -1, -1, 0},
+/* 4 */ { 2, s_5_4, -1, -1, 0},
+/* 5 */ { 2, s_5_5, -1, -1, 0},
+/* 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] =
+{
+/* 0 */ { 1, s_6_0, -1, 8, 0},
+/* 1 */ { 3, s_6_1, 0, -1, 0},
+/* 2 */ { 2, s_6_2, 0, -1, 0},
+/* 3 */ { 3, s_6_3, 0, -1, 0},
+/* 4 */ { 2, s_6_4, 0, -1, 0},
+/* 5 */ { 3, s_6_5, 4, -1, 0},
+/* 6 */ { 3, s_6_6, 4, -1, 0},
+/* 7 */ { 3, s_6_7, 4, 9, 0},
+/* 8 */ { 3, s_6_8, -1, -1, 0},
+/* 9 */ { 3, s_6_9, -1, -1, 0},
+/* 10 */ { 3, s_6_10, -1, -1, 0},
+/* 11 */ { 1, s_6_11, -1, 7, 0},
+/* 12 */ { 3, s_6_12, 11, 1, 0},
+/* 13 */ { 3, s_6_13, 11, -1, r_VI},
+/* 14 */ { 4, s_6_14, 11, -1, r_LONG},
+/* 15 */ { 3, s_6_15, 11, 2, 0},
+/* 16 */ { 4, s_6_16, 11, -1, r_VI},
+/* 17 */ { 3, s_6_17, 11, 3, 0},
+/* 18 */ { 4, s_6_18, 11, -1, r_VI},
+/* 19 */ { 3, s_6_19, 11, 4, 0},
+/* 20 */ { 3, s_6_20, 11, 5, 0},
+/* 21 */ { 3, s_6_21, 11, 6, 0},
+/* 22 */ { 1, s_6_22, -1, 8, 0},
+/* 23 */ { 3, s_6_23, 22, -1, 0},
+/* 24 */ { 2, s_6_24, 22, -1, 0},
+/* 25 */ { 3, s_6_25, 22, -1, 0},
+/* 26 */ { 2, s_6_26, 22, -1, 0},
+/* 27 */ { 3, s_6_27, 26, -1, 0},
+/* 28 */ { 3, s_6_28, 26, -1, 0},
+/* 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] =
+{
+/* 0 */ { 3, s_7_0, -1, -1, 0},
+/* 1 */ { 3, s_7_1, -1, 1, 0},
+/* 2 */ { 4, s_7_2, 1, -1, 0},
+/* 3 */ { 3, s_7_3, -1, 1, 0},
+/* 4 */ { 4, s_7_4, 3, -1, 0},
+/* 5 */ { 3, s_7_5, -1, 1, 0},
+/* 6 */ { 4, s_7_6, 5, -1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 4, s_7_8, 7, -1, 0},
+/* 9 */ { 3, s_7_9, -1, -1, 0},
+/* 10 */ { 3, s_7_10, -1, 1, 0},
+/* 11 */ { 4, s_7_11, 10, -1, 0},
+/* 12 */ { 3, s_7_12, -1, 1, 0},
+/* 13 */ { 4, s_7_13, 12, -1, 0}
+};
+
+static symbol s_8_0[1] = { 'i' };
+static symbol s_8_1[1] = { 'j' };
+
+static 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 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 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 */
+ }
+ 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 */
+ }
+ z->I[1] = z->c; /* setmark p2, line 47 */
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 55 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ if (!(in_grouping_b(z, g_particle_end, 97, 246))) return 0;
+ break;
+ case 2:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 64 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 66 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_possessive(struct SN_env * z) {
+ int among_var;
+ { int m3; /* setlimit, line 69 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 69 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* not, line 72 */
+ if (!(eq_s_b(z, 1, s_0))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 72 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 78 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 81 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 84 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 86 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_LONG(struct SN_env * z) {
+ if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */
+ return 1;
+}
+
+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;
+ 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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 96 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ if (!(eq_s_b(z, 1, s_4))) return 0;
+ break;
+ case 2:
+ if (!(eq_s_b(z, 1, s_5))) return 0;
+ break;
+ case 3:
+ if (!(eq_s_b(z, 1, s_6))) return 0;
+ break;
+ case 4:
+ if (!(eq_s_b(z, 1, s_7))) return 0;
+ break;
+ case 5:
+ if (!(eq_s_b(z, 1, s_8))) return 0;
+ break;
+ case 6:
+ 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 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; }
+ }
+ lab1:
+ z->c = z->l - m;
+ if (z->c <= z->lb) { z->c = z->l - m; goto lab0; }
+ z->c--; /* next, line 113 */
+ }
+ z->bra = z->c; /* ], line 113 */
+ lab0:
+ ;
+ }
+ 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;
+ break;
+ case 9:
+ if (!(eq_s_b(z, 1, s_11))) return 0;
+ break;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 138 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set ending_removed, line 139 */
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 142 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* not, line 146 */
+ if (!(eq_s_b(z, 2, s_12))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ break;
+ }
+ { int ret;
+ 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;
+ 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 154 */
+ if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */
+ z->bra = z->c; /* ], line 154 */
+ z->lb = m3;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 158 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 162 */
+ if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; 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; }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 163 */
+ if (ret < 0) return ret;
+ }
+ z->lb = m3;
+ }
+ { int m3; /* setlimit, line 165 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 165 */
+ among_var = find_among_b(z, a_9, 2); /* substring, line 165 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 165 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* not, line 167 */
+ if (!(eq_s_b(z, 2, s_14))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ break;
+ }
+ { int ret;
+ 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;
+ 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 */
+ { 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->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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 175 */
+ z->ket = z->c; /* [, line 175 */
+ if (!(in_grouping_b(z, g_AEI, 97, 228))) 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 (ret < 0) return ret;
+ }
+ lab1:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ if (!(eq_s_b(z, 1, s_16))) goto lab4;
+ goto lab3;
+ lab4:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_17))) goto lab2;
+ }
+ lab3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 176 */
+ if (ret < 0) return ret;
+ }
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ 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(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->ket = z->c; /* [, line 179 */
+ if (z->c <= z->lb) return 0;
+ z->c--; /* 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 */
+ 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 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->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 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 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;
+ }
+ goto lab5;
+ lab6:
+ z->c = z->l - m;
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ }
+lab5:
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_finnish.h b/libstemmer_c/src_c/stem_ISO_8859_1_finnish.h
new file mode 100644
index 0000000..c67b67b
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_finnish.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 * finnish_ISO_8859_1_create_env(void);
+extern void finnish_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int finnish_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_french.c b/libstemmer_c/src_c/stem_ISO_8859_1_french.c
new file mode 100644
index 0000000..e4eb80d
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_french.c
@@ -0,0 +1,1276 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int french_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_verb_suffix(struct SN_env * z);
+static int r_i_verb_suffix(struct SN_env * z);
+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_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);
+
+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] =
+{
+/* 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}
+};
+
+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 struct among a_1[6] =
+{
+/* 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}
+};
+
+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 struct among a_2[3] =
+{
+/* 0 */ { 2, s_2_0, -1, 2, 0},
+/* 1 */ { 4, s_2_1, -1, 1, 0},
+/* 2 */ { 2, s_2_2, -1, 3, 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 struct among a_3[43] =
+{
+/* 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}
+};
+
+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 struct among a_4[35] =
+{
+/* 0 */ { 3, s_4_0, -1, 1, 0},
+/* 1 */ { 2, s_4_1, -1, 1, 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}
+};
+
+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 struct among a_5[38] =
+{
+/* 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}
+};
+
+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 struct among a_6[7] =
+{
+/* 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}
+};
+
+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 struct among a_7[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}
+};
+
+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 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 int r_prelude(struct SN_env * z) {
+ while(1) { /* repeat, line 38 */
+ int c = 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;
+ z->bra = z->c; /* [, line 40 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab4;
+ lab5:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ goto lab4;
+ lab6:
+ z->c = c;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ goto lab2;
+ lab3:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ goto lab2;
+ lab7:
+ z->c = c;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab2:
+ z->c = c;
+ break;
+ lab1:
+ z->c = c;
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* goto, line 38 */
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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 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;
+ if (z->c >= z->l) goto lab2;
+ z->c++; /* next, line 57 */
+ goto lab1;
+ lab2:
+ z->c = c;
+ 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 */
+ }
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 58 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[2] = z->c; /* setmark p2, line 62 */
+ lab4:
+ z->c = c;
+ }
+ 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 */
+ if (!(among_var)) goto lab0;
+ z->ket = z->c; /* ], line 68 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ ret = slice_from_s(z, 1, s_11); /* <-, line 69 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_12); /* <-, line 70 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 1, s_13); /* <-, line 71 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 72 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 83 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 87 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 90 */
+ 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 ret = r_R2(z);
+ if (ret == 0) goto lab2; /* call R2, line 91 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 91 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab1:
+ lab0:
+ ;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 95 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_16); /* <-, line 95 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_17); /* <-, line 98 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_18); /* <-, line 101 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 105 */
+ 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 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 108 */
+ 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 */
+ { int ret = r_R2(z);
+ if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 108 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* or, line 109 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab5; /* call R2, line 109 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 109 */
+ if (ret < 0) return ret;
+ }
+ goto lab4;
+ lab5:
+ z->c = z->l - m;
+ { int ret = r_R1(z);
+ if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_20); /* <-, line 109 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 111 */
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_21); /* <-, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 7:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 120 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 120 */
+ 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 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab6; }
+ case 1:
+ { int m = z->l - z->c; (void) m; /* or, line 123 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab8; /* call R2, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 123 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab7:
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* or, line 124 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab10; /* call R2, line 124 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 124 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab9:
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 125 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab6:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 132 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 132 */
+ 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 ret = r_R2(z);
+ if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ 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 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab13; /* call R2, line 133 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab12:
+ lab11:
+ ;
+ }
+ break;
+ case 9:
+ { int ret;
+ ret = slice_from_s(z, 3, s_27); /* <-, line 135 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 2, s_28); /* <-, line 136 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int m = z->l - z->c; (void) m; /* or, line 138 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab15; /* call R2, line 138 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 138 */
+ if (ret < 0) return ret;
+ }
+ goto lab14;
+ lab15:
+ z->c = z->l - m;
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 138 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_29); /* <-, line 138 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab14:
+ break;
+ case 12:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 141 */
+ 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 (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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_30); /* <-, line 146 */
+ if (ret < 0) return ret;
+ }
+ return 0; /* fail, line 146 */
+ break;
+ case 14:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 147 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_31); /* <-, line 147 */
+ if (ret < 0) return ret;
+ }
+ return 0; /* fail, line 147 */
+ 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 ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 149 */
+ if (ret < 0) return ret;
+ }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 149 */
+ if (ret < 0) return ret;
+ }
+ return 0; /* fail, line 149 */
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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 */
+ switch(among_var) {
+ case 0: { z->lb = m3; 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ 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;
+ 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 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 168 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 176 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 181 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ 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; }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 190 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ { int m3; /* setlimit, line 191 */
+ int m = z->l - z->c; (void) m;
+ 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 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* or, line 193 */
+ 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; }
+ }
+ lab1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 193 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_36); /* <-, line 195 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 196 */
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ 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 */
+ z->c = z->l - m_test;
+ }
+ z->ket = z->c; /* [, line 203 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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;
+ i--;
+ continue;
+ lab0:
+ break;
+ }
+ if (i > 0) return 0;
+ }
+ z->ket = z->c; /* [, line 208 */
+ { int m = z->l - z->c; (void) m; /* or, line 208 */
+ if (!(eq_s_b(z, 1, s_38))) goto lab2;
+ goto lab1;
+ lab2:
+ z->c = z->l - m;
+ 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 */
+ 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 ret = r_prelude(z);
+ if (ret == 0) goto lab0; /* call prelude, line 214 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 215 */
+ { int ret = r_mark_regions(z);
+ if (ret == 0) goto lab1; /* call mark_regions, line 215 */
+ if (ret < 0) return ret;
+ }
+ lab1:
+ z->c = c;
+ }
+ z->lb = z->c; z->c = z->l; /* backwards, line 216 */
+
+ { 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 ret = r_standard_suffix(z);
+ if (ret == 0) goto lab6; /* call standard_suffix, line 220 */
+ if (ret < 0) return ret;
+ }
+ goto lab5;
+ lab6:
+ z->c = z->l - m;
+ { int ret = r_i_verb_suffix(z);
+ if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */
+ if (ret < 0) return ret;
+ }
+ goto lab5;
+ lab7:
+ z->c = z->l - m;
+ { int ret = r_verb_suffix(z);
+ if (ret == 0) goto lab4; /* call verb_suffix, line 222 */
+ 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 */
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab9:
+ lab8:
+ ;
+ }
+ }
+ goto lab3;
+ lab4:
+ z->c = z->l - m;
+ { int ret = r_residual_suffix(z);
+ if (ret == 0) goto lab2; /* call residual_suffix, line 229 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab3:
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 234 */
+ { int ret = r_un_double(z);
+ if (ret == 0) goto lab11; /* call un_double, line 234 */
+ if (ret < 0) return ret;
+ }
+ lab11:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 235 */
+ { int ret = r_un_accent(z);
+ if (ret == 0) goto lab12; /* call un_accent, line 235 */
+ if (ret < 0) return ret;
+ }
+ lab12:
+ z->c = z->l - m;
+ }
+ z->c = z->lb;
+ { int c = z->c; /* do, line 237 */
+ { int ret = r_postlude(z);
+ if (ret == 0) goto lab13; /* call postlude, line 237 */
+ if (ret < 0) return ret;
+ }
+ lab13:
+ z->c = c;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_french.h b/libstemmer_c/src_c/stem_ISO_8859_1_french.h
new file mode 100644
index 0000000..21244d6
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_french.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 * french_ISO_8859_1_create_env(void);
+extern void french_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int french_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_german.c b/libstemmer_c/src_c/stem_ISO_8859_1_german.c
new file mode 100644
index 0000000..633bf03
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_german.c
@@ -0,0 +1,512 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int german_ISO_8859_1_stem(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 6, 0},
+/* 1 */ { 1, s_0_1, 0, 2, 0},
+/* 2 */ { 1, s_0_2, 0, 1, 0},
+/* 3 */ { 1, s_0_3, 0, 3, 0},
+/* 4 */ { 1, s_0_4, 0, 4, 0},
+/* 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 struct among a_1[7] =
+{
+/* 0 */ { 1, s_1_0, -1, 1, 0},
+/* 1 */ { 2, s_1_1, -1, 1, 0},
+/* 2 */ { 2, s_1_2, -1, 1, 0},
+/* 3 */ { 3, s_1_3, -1, 1, 0},
+/* 4 */ { 2, s_1_4, -1, 1, 0},
+/* 5 */ { 1, s_1_5, -1, 2, 0},
+/* 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 struct among a_2[4] =
+{
+/* 0 */ { 2, s_2_0, -1, 1, 0},
+/* 1 */ { 2, s_2_1, -1, 1, 0},
+/* 2 */ { 2, s_2_2, -1, 2, 0},
+/* 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 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 struct among a_4[8] =
+{
+/* 0 */ { 3, s_4_0, -1, 1, 0},
+/* 1 */ { 2, s_4_1, -1, 2, 0},
+/* 2 */ { 3, s_4_2, -1, 1, 0},
+/* 3 */ { 4, s_4_3, -1, 3, 0},
+/* 4 */ { 4, s_4_4, -1, 2, 0},
+/* 5 */ { 2, s_4_5, -1, 2, 0},
+/* 6 */ { 4, s_4_6, -1, 3, 0},
+/* 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 unsigned char g_s_ending[] = { 117, 30, 5 };
+
+static 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 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ goto lab1;
+ lab2:
+ z->c = c;
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 33 */
+ }
+ lab1:
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ z->c = c_test;
+ }
+ while(1) { /* repeat, line 36 */
+ int c = z->c;
+ while(1) { /* goto, line 36 */
+ int c = z->c;
+ if (!(in_grouping(z, g_v, 97, 252))) goto lab4;
+ z->bra = z->c; /* [, line 37 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab5;
+ lab6:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ }
+ lab5:
+ z->c = c;
+ break;
+ lab4:
+ z->c = c;
+ if (z->c >= z->l) goto lab3;
+ z->c++; /* goto, line 36 */
+ }
+ continue;
+ lab3:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[0] = z->c; /* setmark p1, line 49 */
+ /* try, line 50 */
+ if (!(z->I[0] < z->I[2])) goto lab2;
+ 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 */
+ }
+ 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 */
+ }
+ z->I[1] = z->c; /* setmark p2, line 51 */
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 55 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 57 */
+ among_var = find_among(z, a_0, 6); /* substring, line 57 */
+ if (!(among_var)) goto lab0;
+ z->ket = z->c; /* ], line 57 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_from_s(z, 1, s_10); /* <-, line 62 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 63 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ { int m = z->l - z->c; (void) m; /* do, line 74 */
+ z->ket = z->c; /* [, line 75 */
+ among_var = find_among_b(z, a_1, 7); /* substring, line 75 */
+ if (!(among_var)) goto lab0;
+ z->bra = z->c; /* ], line 75 */
+ { int ret = r_R1(z);
+ if (ret == 0) goto lab0; /* call R1, line 75 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 84 */
+ z->ket = z->c; /* [, line 85 */
+ among_var = find_among_b(z, a_2, 4); /* substring, line 85 */
+ if (!(among_var)) goto lab1;
+ z->bra = z->c; /* ], line 85 */
+ { int ret = r_R1(z);
+ if (ret == 0) goto lab1; /* call R1, line 85 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: goto lab1;
+ case 1:
+ { int ret;
+ 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 */
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 90 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 94 */
+ z->ket = z->c; /* [, line 95 */
+ among_var = find_among_b(z, a_4, 8); /* substring, line 95 */
+ if (!(among_var)) goto lab2;
+ z->bra = z->c; /* ], line 95 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab2; /* call R2, line 95 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: goto lab2;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 97 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 98 */
+ z->ket = z->c; /* [, line 98 */
+ if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; }
+ z->bra = z->c; /* ], line 98 */
+ { int m = z->l - z->c; (void) m; /* not, line 98 */
+ if (!(eq_s_b(z, 1, s_12))) goto lab4;
+ { z->c = z->l - m; goto lab3; }
+ lab4:
+ z->c = z->l - m;
+ }
+ { int ret = r_R2(z);
+ if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 98 */
+ if (ret < 0) return ret;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* not, line 101 */
+ if (!(eq_s_b(z, 1, s_13))) goto lab5;
+ goto lab2;
+ lab5:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 101 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 104 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 105 */
+ z->ket = z->c; /* [, line 106 */
+ { int m = z->l - z->c; (void) m; /* 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; }
+ }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 106 */
+ if (ret < 0) return ret;
+ }
+ lab6:
+ ;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_del(z); /* delete, line 110 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 111 */
+ z->ket = z->c; /* [, line 112 */
+ among_var = find_among_b(z, a_3, 2); /* substring, line 112 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab9; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 114 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab9:
+ ;
+ }
+ break;
+ }
+ lab2:
+ z->c = z->l - m;
+ }
+ return 1;
+}
+
+extern int german_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 127 */
+
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_german.h b/libstemmer_c/src_c/stem_ISO_8859_1_german.h
new file mode 100644
index 0000000..8525389
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_german.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 * german_ISO_8859_1_create_env(void);
+extern void german_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int german_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
new file mode 100644
index 0000000..9fe9776
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_italian.c
@@ -0,0 +1,1091 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int italian_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_attached_pronoun(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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 7, 0},
+/* 1 */ { 2, s_0_1, 0, 6, 0},
+/* 2 */ { 1, s_0_2, 0, 1, 0},
+/* 3 */ { 1, s_0_3, 0, 2, 0},
+/* 4 */ { 1, s_0_4, 0, 3, 0},
+/* 5 */ { 1, s_0_5, 0, 4, 0},
+/* 6 */ { 1, s_0_6, 0, 5, 0}
+};
+
+static symbol s_1_1[1] = { 'I' };
+static symbol s_1_2[1] = { 'U' };
+
+static 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 struct among a_2[37] =
+{
+/* 0 */ { 2, s_2_0, -1, -1, 0},
+/* 1 */ { 4, s_2_1, 0, -1, 0},
+/* 2 */ { 6, s_2_2, 0, -1, 0},
+/* 3 */ { 4, s_2_3, 0, -1, 0},
+/* 4 */ { 4, s_2_4, 0, -1, 0},
+/* 5 */ { 4, s_2_5, 0, -1, 0},
+/* 6 */ { 2, s_2_6, -1, -1, 0},
+/* 7 */ { 4, s_2_7, 6, -1, 0},
+/* 8 */ { 6, s_2_8, 6, -1, 0},
+/* 9 */ { 4, s_2_9, 6, -1, 0},
+/* 10 */ { 4, s_2_10, 6, -1, 0},
+/* 11 */ { 4, s_2_11, 6, -1, 0},
+/* 12 */ { 2, s_2_12, -1, -1, 0},
+/* 13 */ { 4, s_2_13, 12, -1, 0},
+/* 14 */ { 6, s_2_14, 12, -1, 0},
+/* 15 */ { 4, s_2_15, 12, -1, 0},
+/* 16 */ { 4, s_2_16, 12, -1, 0},
+/* 17 */ { 4, s_2_17, 12, -1, 0},
+/* 18 */ { 4, s_2_18, 12, -1, 0},
+/* 19 */ { 2, s_2_19, -1, -1, 0},
+/* 20 */ { 2, s_2_20, -1, -1, 0},
+/* 21 */ { 4, s_2_21, 20, -1, 0},
+/* 22 */ { 6, s_2_22, 20, -1, 0},
+/* 23 */ { 4, s_2_23, 20, -1, 0},
+/* 24 */ { 4, s_2_24, 20, -1, 0},
+/* 25 */ { 4, s_2_25, 20, -1, 0},
+/* 26 */ { 3, s_2_26, 20, -1, 0},
+/* 27 */ { 2, s_2_27, -1, -1, 0},
+/* 28 */ { 2, s_2_28, -1, -1, 0},
+/* 29 */ { 2, s_2_29, -1, -1, 0},
+/* 30 */ { 2, s_2_30, -1, -1, 0},
+/* 31 */ { 2, s_2_31, -1, -1, 0},
+/* 32 */ { 4, s_2_32, 31, -1, 0},
+/* 33 */ { 6, s_2_33, 31, -1, 0},
+/* 34 */ { 4, s_2_34, 31, -1, 0},
+/* 35 */ { 4, s_2_35, 31, -1, 0},
+/* 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 struct among a_3[5] =
+{
+/* 0 */ { 4, s_3_0, -1, 1, 0},
+/* 1 */ { 4, s_3_1, -1, 1, 0},
+/* 2 */ { 2, s_3_2, -1, 2, 0},
+/* 3 */ { 2, s_3_3, -1, 2, 0},
+/* 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 struct among a_4[4] =
+{
+/* 0 */ { 2, s_4_0, -1, -1, 0},
+/* 1 */ { 4, s_4_1, -1, -1, 0},
+/* 2 */ { 2, s_4_2, -1, -1, 0},
+/* 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 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 struct among a_6[51] =
+{
+/* 0 */ { 3, s_6_0, -1, 1, 0},
+/* 1 */ { 5, s_6_1, -1, 3, 0},
+/* 2 */ { 3, s_6_2, -1, 1, 0},
+/* 3 */ { 4, s_6_3, -1, 1, 0},
+/* 4 */ { 3, s_6_4, -1, 9, 0},
+/* 5 */ { 4, s_6_5, -1, 1, 0},
+/* 6 */ { 4, s_6_6, -1, 5, 0},
+/* 7 */ { 3, s_6_7, -1, 1, 0},
+/* 8 */ { 6, s_6_8, 7, 1, 0},
+/* 9 */ { 4, s_6_9, -1, 1, 0},
+/* 10 */ { 5, s_6_10, -1, 3, 0},
+/* 11 */ { 5, s_6_11, -1, 1, 0},
+/* 12 */ { 5, s_6_12, -1, 1, 0},
+/* 13 */ { 6, s_6_13, -1, 4, 0},
+/* 14 */ { 6, s_6_14, -1, 2, 0},
+/* 15 */ { 6, s_6_15, -1, 4, 0},
+/* 16 */ { 5, s_6_16, -1, 2, 0},
+/* 17 */ { 3, s_6_17, -1, 1, 0},
+/* 18 */ { 4, s_6_18, -1, 1, 0},
+/* 19 */ { 5, s_6_19, -1, 1, 0},
+/* 20 */ { 6, s_6_20, 19, 7, 0},
+/* 21 */ { 4, s_6_21, -1, 1, 0},
+/* 22 */ { 3, s_6_22, -1, 9, 0},
+/* 23 */ { 4, s_6_23, -1, 1, 0},
+/* 24 */ { 4, s_6_24, -1, 5, 0},
+/* 25 */ { 3, s_6_25, -1, 1, 0},
+/* 26 */ { 6, s_6_26, 25, 1, 0},
+/* 27 */ { 4, s_6_27, -1, 1, 0},
+/* 28 */ { 5, s_6_28, -1, 1, 0},
+/* 29 */ { 5, s_6_29, -1, 1, 0},
+/* 30 */ { 4, s_6_30, -1, 1, 0},
+/* 31 */ { 6, s_6_31, -1, 4, 0},
+/* 32 */ { 6, s_6_32, -1, 2, 0},
+/* 33 */ { 6, s_6_33, -1, 4, 0},
+/* 34 */ { 5, s_6_34, -1, 2, 0},
+/* 35 */ { 3, s_6_35, -1, 1, 0},
+/* 36 */ { 4, s_6_36, -1, 1, 0},
+/* 37 */ { 6, s_6_37, -1, 6, 0},
+/* 38 */ { 6, s_6_38, -1, 6, 0},
+/* 39 */ { 4, s_6_39, -1, 1, 0},
+/* 40 */ { 3, s_6_40, -1, 9, 0},
+/* 41 */ { 3, s_6_41, -1, 1, 0},
+/* 42 */ { 4, s_6_42, -1, 1, 0},
+/* 43 */ { 3, s_6_43, -1, 1, 0},
+/* 44 */ { 6, s_6_44, -1, 6, 0},
+/* 45 */ { 6, s_6_45, -1, 6, 0},
+/* 46 */ { 3, s_6_46, -1, 9, 0},
+/* 47 */ { 3, s_6_47, -1, 8, 0},
+/* 48 */ { 4, s_6_48, -1, 1, 0},
+/* 49 */ { 4, s_6_49, -1, 1, 0},
+/* 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 struct among a_7[87] =
+{
+/* 0 */ { 4, 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},
+/* 5 */ { 3, s_7_5, -1, 1, 0},
+/* 6 */ { 3, s_7_6, -1, 1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 6, s_7_8, -1, 1, 0},
+/* 9 */ { 6, s_7_9, -1, 1, 0},
+/* 10 */ { 4, s_7_10, -1, 1, 0},
+/* 11 */ { 4, s_7_11, -1, 1, 0},
+/* 12 */ { 3, s_7_12, -1, 1, 0},
+/* 13 */ { 3, s_7_13, -1, 1, 0},
+/* 14 */ { 3, s_7_14, -1, 1, 0},
+/* 15 */ { 4, s_7_15, -1, 1, 0},
+/* 16 */ { 3, s_7_16, -1, 1, 0},
+/* 17 */ { 5, s_7_17, 16, 1, 0},
+/* 18 */ { 5, s_7_18, 16, 1, 0},
+/* 19 */ { 5, s_7_19, 16, 1, 0},
+/* 20 */ { 3, s_7_20, -1, 1, 0},
+/* 21 */ { 5, s_7_21, 20, 1, 0},
+/* 22 */ { 5, s_7_22, 20, 1, 0},
+/* 23 */ { 3, s_7_23, -1, 1, 0},
+/* 24 */ { 6, s_7_24, -1, 1, 0},
+/* 25 */ { 6, s_7_25, -1, 1, 0},
+/* 26 */ { 3, s_7_26, -1, 1, 0},
+/* 27 */ { 4, s_7_27, -1, 1, 0},
+/* 28 */ { 4, s_7_28, -1, 1, 0},
+/* 29 */ { 4, s_7_29, -1, 1, 0},
+/* 30 */ { 4, s_7_30, -1, 1, 0},
+/* 31 */ { 4, s_7_31, -1, 1, 0},
+/* 32 */ { 4, s_7_32, -1, 1, 0},
+/* 33 */ { 4, s_7_33, -1, 1, 0},
+/* 34 */ { 3, s_7_34, -1, 1, 0},
+/* 35 */ { 3, s_7_35, -1, 1, 0},
+/* 36 */ { 6, s_7_36, -1, 1, 0},
+/* 37 */ { 6, s_7_37, -1, 1, 0},
+/* 38 */ { 3, s_7_38, -1, 1, 0},
+/* 39 */ { 3, s_7_39, -1, 1, 0},
+/* 40 */ { 3, s_7_40, -1, 1, 0},
+/* 41 */ { 3, s_7_41, -1, 1, 0},
+/* 42 */ { 4, s_7_42, -1, 1, 0},
+/* 43 */ { 4, s_7_43, -1, 1, 0},
+/* 44 */ { 4, s_7_44, -1, 1, 0},
+/* 45 */ { 4, s_7_45, -1, 1, 0},
+/* 46 */ { 4, s_7_46, -1, 1, 0},
+/* 47 */ { 5, s_7_47, -1, 1, 0},
+/* 48 */ { 5, s_7_48, -1, 1, 0},
+/* 49 */ { 5, s_7_49, -1, 1, 0},
+/* 50 */ { 5, s_7_50, -1, 1, 0},
+/* 51 */ { 5, s_7_51, -1, 1, 0},
+/* 52 */ { 6, s_7_52, -1, 1, 0},
+/* 53 */ { 4, s_7_53, -1, 1, 0},
+/* 54 */ { 4, s_7_54, -1, 1, 0},
+/* 55 */ { 6, s_7_55, 54, 1, 0},
+/* 56 */ { 6, s_7_56, 54, 1, 0},
+/* 57 */ { 4, s_7_57, -1, 1, 0},
+/* 58 */ { 3, s_7_58, -1, 1, 0},
+/* 59 */ { 6, s_7_59, 58, 1, 0},
+/* 60 */ { 5, s_7_60, 58, 1, 0},
+/* 61 */ { 5, s_7_61, 58, 1, 0},
+/* 62 */ { 5, s_7_62, 58, 1, 0},
+/* 63 */ { 6, s_7_63, -1, 1, 0},
+/* 64 */ { 6, s_7_64, -1, 1, 0},
+/* 65 */ { 3, s_7_65, -1, 1, 0},
+/* 66 */ { 6, s_7_66, 65, 1, 0},
+/* 67 */ { 5, s_7_67, 65, 1, 0},
+/* 68 */ { 5, s_7_68, 65, 1, 0},
+/* 69 */ { 5, s_7_69, 65, 1, 0},
+/* 70 */ { 8, s_7_70, -1, 1, 0},
+/* 71 */ { 8, s_7_71, -1, 1, 0},
+/* 72 */ { 6, s_7_72, -1, 1, 0},
+/* 73 */ { 6, s_7_73, -1, 1, 0},
+/* 74 */ { 6, s_7_74, -1, 1, 0},
+/* 75 */ { 3, s_7_75, -1, 1, 0},
+/* 76 */ { 3, s_7_76, -1, 1, 0},
+/* 77 */ { 3, s_7_77, -1, 1, 0},
+/* 78 */ { 3, s_7_78, -1, 1, 0},
+/* 79 */ { 3, s_7_79, -1, 1, 0},
+/* 80 */ { 3, s_7_80, -1, 1, 0},
+/* 81 */ { 2, s_7_81, -1, 1, 0},
+/* 82 */ { 2, s_7_82, -1, 1, 0},
+/* 83 */ { 3, s_7_83, -1, 1, 0},
+/* 84 */ { 3, s_7_84, -1, 1, 0},
+/* 85 */ { 3, s_7_85, -1, 1, 0},
+/* 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 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 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 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;
+ z->bra = z->c; /* [, line 36 */
+ among_var = find_among(z, a_0, 7); /* substring, line 36 */
+ if (!(among_var)) goto lab0;
+ z->ket = z->c; /* ], line 36 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 43 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ z->c = c_test;
+ }
+ while(1) { /* repeat, line 46 */
+ int c = z->c;
+ while(1) { /* goto, line 46 */
+ int c = z->c;
+ if (!(in_grouping(z, g_v, 97, 249))) goto lab2;
+ z->bra = z->c; /* [, line 47 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab3;
+ lab4:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ }
+ lab3:
+ z->c = c;
+ break;
+ lab2:
+ z->c = c;
+ if (z->c >= z->l) goto lab1;
+ z->c++; /* goto, line 46 */
+ }
+ continue;
+ lab1:
+ z->c = c;
+ 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 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 */
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ goto lab7;
+ lab8:
+ z->c = c;
+ if (!(in_grouping(z, g_v, 97, 249))) goto lab0;
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 61 */
+ }
+ lab7:
+ ;
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 62 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[2] = z->c; /* setmark p2, line 66 */
+ lab10:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 70 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 72 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_11); /* <-, line 74 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 75 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_attached_pronoun(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 87 */
+ if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */
+ z->bra = z->c; /* ], line 87 */
+ among_var = find_among_b(z, a_3, 5); /* among, line 97 */
+ if (!(among_var)) return 0;
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 97 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 104 */
+ among_var = find_among_b(z, a_6, 51); /* substring, line 104 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 104 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 111 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 111 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 113 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 113 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 114 */
+ z->ket = z->c; /* [, line 114 */
+ if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 114 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 123 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 125 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 125 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 126 */
+ z->ket = z->c; /* [, line 127 */
+ among_var = find_among_b(z, a_4, 4); /* substring, line 127 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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 1:
+ z->ket = z->c; /* [, line 128 */
+ if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 128 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 135 */
+ z->ket = z->c; /* [, line 136 */
+ among_var = find_among_b(z, a_5, 3); /* substring, line 136 */
+ if (!(among_var)) { z->c = z->l - m; goto lab2; }
+ z->bra = z->c; /* ], line 136 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 137 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab2:
+ ;
+ }
+ break;
+ case 9:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 142 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 142 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 143 */
+ z->ket = z->c; /* [, line 143 */
+ if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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; }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 143 */
+ if (ret < 0) return ret;
+ }
+ lab3:
+ ;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 149 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 163 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ return 1;
+}
+
+static int r_vowel_suffix(struct SN_env * z) {
+ { int m = z->l - z->c; (void) m; /* 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; }
+ 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) return ret;
+ }
+ { int ret;
+ 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; }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 173 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 175 */
+ z->ket = z->c; /* [, line 176 */
+ if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; }
+ z->bra = z->c; /* ], line 176 */
+ if (!(in_grouping_b(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; }
+ { int ret = r_RV(z);
+ if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 176 */
+ if (ret < 0) return ret;
+ }
+ lab1:
+ ;
+ }
+ return 1;
+}
+
+extern int italian_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 184 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 186 */
+ { int m = z->l - z->c; (void) m; /* 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;
+ { int ret = r_verb_suffix(z);
+ if (ret == 0) goto lab3; /* call verb_suffix, line 186 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ lab3:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_italian.h b/libstemmer_c/src_c/stem_ISO_8859_1_italian.h
new file mode 100644
index 0000000..dccbfd5
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_italian.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 * italian_ISO_8859_1_create_env(void);
+extern void italian_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int italian_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c b/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
new file mode 100644
index 0000000..c28e2f0
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.c
@@ -0,0 +1,296 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int norwegian_ISO_8859_1_stem(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);
+
+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] =
+{
+/* 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 */ { 4, s_0_3, 1, 1, 0},
+/* 4 */ { 4, s_0_4, 1, 1, 0},
+/* 5 */ { 3, s_0_5, 1, 1, 0},
+/* 6 */ { 3, s_0_6, 1, 1, 0},
+/* 7 */ { 6, s_0_7, 6, 1, 0},
+/* 8 */ { 4, s_0_8, 1, 3, 0},
+/* 9 */ { 2, s_0_9, -1, 1, 0},
+/* 10 */ { 5, s_0_10, 9, 1, 0},
+/* 11 */ { 2, s_0_11, -1, 1, 0},
+/* 12 */ { 2, s_0_12, -1, 1, 0},
+/* 13 */ { 5, s_0_13, 12, 1, 0},
+/* 14 */ { 1, s_0_14, -1, 2, 0},
+/* 15 */ { 2, s_0_15, 14, 1, 0},
+/* 16 */ { 2, s_0_16, 14, 1, 0},
+/* 17 */ { 4, s_0_17, 16, 1, 0},
+/* 18 */ { 5, s_0_18, 16, 1, 0},
+/* 19 */ { 4, s_0_19, 16, 1, 0},
+/* 20 */ { 7, s_0_20, 19, 1, 0},
+/* 21 */ { 3, s_0_21, 14, 1, 0},
+/* 22 */ { 6, s_0_22, 21, 1, 0},
+/* 23 */ { 3, s_0_23, 14, 1, 0},
+/* 24 */ { 3, s_0_24, 14, 1, 0},
+/* 25 */ { 2, s_0_25, -1, 1, 0},
+/* 26 */ { 3, s_0_26, 25, 1, 0},
+/* 27 */ { 3, s_0_27, -1, 3, 0},
+/* 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 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 struct among a_2[11] =
+{
+/* 0 */ { 3, s_2_0, -1, 1, 0},
+/* 1 */ { 4, s_2_1, 0, 1, 0},
+/* 2 */ { 2, s_2_2, -1, 1, 0},
+/* 3 */ { 3, s_2_3, 2, 1, 0},
+/* 4 */ { 3, s_2_4, 2, 1, 0},
+/* 5 */ { 4, s_2_5, 4, 1, 0},
+/* 6 */ { 3, s_2_6, -1, 1, 0},
+/* 7 */ { 3, s_2_7, -1, 1, 0},
+/* 8 */ { 4, s_2_8, 7, 1, 0},
+/* 9 */ { 4, s_2_9, 7, 1, 0},
+/* 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 unsigned char g_s_ending[] = { 119, 125, 149, 1 };
+
+static symbol s_0[] = { 'k' };
+static 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 */
+ }
+ 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 */
+ }
+ z->I[0] = z->c; /* setmark p1, line 31 */
+ /* try, line 32 */
+ if (!(z->I[0] < z->I[1])) goto lab2;
+ z->I[0] = z->I[1];
+lab2:
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 38 */
+ among_var = find_among_b(z, a_0, 29); /* substring, line 38 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 38 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_0))) return 0;
+ if (!(out_grouping_b(z, g_v, 97, 248))) return 0;
+ }
+ lab0:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 54 */
+ if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */
+ z->bra = z->c; /* ], line 54 */
+ z->lb = m3;
+ }
+ 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 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 63 */
+ among_var = find_among_b(z, a_2, 11); /* substring, line 63 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 63 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 67 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int norwegian_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 75 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.h b/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.h
new file mode 100644
index 0000000..e09e34e
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_norwegian.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 * norwegian_ISO_8859_1_create_env(void);
+extern void norwegian_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int norwegian_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_porter.c b/libstemmer_c/src_c/stem_ISO_8859_1_porter.c
new file mode 100644
index 0000000..b2c6ad0
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_porter.c
@@ -0,0 +1,776 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int porter_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_Step_3(struct SN_env * z);
+static int r_Step_2(struct SN_env * z);
+static int r_Step_1c(struct SN_env * z);
+static int r_Step_1b(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 1, s_0_0, -1, 3, 0},
+/* 1 */ { 3, s_0_1, 0, 2, 0},
+/* 2 */ { 4, s_0_2, 0, 1, 0},
+/* 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] =
+{
+/* 0 */ { 0, 0, -1, 3, 0},
+/* 1 */ { 2, s_1_1, 0, 2, 0},
+/* 2 */ { 2, s_1_2, 0, 2, 0},
+/* 3 */ { 2, s_1_3, 0, 2, 0},
+/* 4 */ { 2, s_1_4, 0, 2, 0},
+/* 5 */ { 2, s_1_5, 0, 1, 0},
+/* 6 */ { 2, s_1_6, 0, 2, 0},
+/* 7 */ { 2, s_1_7, 0, 2, 0},
+/* 8 */ { 2, s_1_8, 0, 2, 0},
+/* 9 */ { 2, s_1_9, 0, 2, 0},
+/* 10 */ { 2, s_1_10, 0, 1, 0},
+/* 11 */ { 2, s_1_11, 0, 2, 0},
+/* 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 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] =
+{
+/* 0 */ { 4, s_3_0, -1, 3, 0},
+/* 1 */ { 4, s_3_1, -1, 2, 0},
+/* 2 */ { 4, s_3_2, -1, 4, 0},
+/* 3 */ { 3, s_3_3, -1, 6, 0},
+/* 4 */ { 4, s_3_4, -1, 9, 0},
+/* 5 */ { 5, s_3_5, -1, 12, 0},
+/* 6 */ { 5, s_3_6, -1, 5, 0},
+/* 7 */ { 5, s_3_7, -1, 10, 0},
+/* 8 */ { 6, s_3_8, -1, 14, 0},
+/* 9 */ { 5, s_3_9, -1, 13, 0},
+/* 10 */ { 6, s_3_10, -1, 1, 0},
+/* 11 */ { 7, s_3_11, 10, 8, 0},
+/* 12 */ { 5, s_3_12, -1, 10, 0},
+/* 13 */ { 5, s_3_13, -1, 8, 0},
+/* 14 */ { 7, s_3_14, 13, 7, 0},
+/* 15 */ { 4, s_3_15, -1, 7, 0},
+/* 16 */ { 4, s_3_16, -1, 8, 0},
+/* 17 */ { 7, s_3_17, -1, 13, 0},
+/* 18 */ { 7, s_3_18, -1, 11, 0},
+/* 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 struct among a_4[7] =
+{
+/* 0 */ { 5, s_4_0, -1, 2, 0},
+/* 1 */ { 5, s_4_1, -1, 3, 0},
+/* 2 */ { 5, s_4_2, -1, 1, 0},
+/* 3 */ { 5, s_4_3, -1, 2, 0},
+/* 4 */ { 4, s_4_4, -1, 2, 0},
+/* 5 */ { 3, s_4_5, -1, 3, 0},
+/* 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] =
+{
+/* 0 */ { 2, s_5_0, -1, 1, 0},
+/* 1 */ { 4, s_5_1, -1, 1, 0},
+/* 2 */ { 4, s_5_2, -1, 1, 0},
+/* 3 */ { 4, s_5_3, -1, 1, 0},
+/* 4 */ { 4, s_5_4, -1, 1, 0},
+/* 5 */ { 3, s_5_5, -1, 1, 0},
+/* 6 */ { 3, s_5_6, -1, 1, 0},
+/* 7 */ { 3, s_5_7, -1, 1, 0},
+/* 8 */ { 3, s_5_8, -1, 1, 0},
+/* 9 */ { 2, s_5_9, -1, 1, 0},
+/* 10 */ { 3, s_5_10, -1, 1, 0},
+/* 11 */ { 3, s_5_11, -1, 2, 0},
+/* 12 */ { 2, s_5_12, -1, 1, 0},
+/* 13 */ { 3, s_5_13, -1, 1, 0},
+/* 14 */ { 3, s_5_14, -1, 1, 0},
+/* 15 */ { 3, s_5_15, -1, 1, 0},
+/* 16 */ { 4, s_5_16, 15, 1, 0},
+/* 17 */ { 5, s_5_17, 16, 1, 0},
+/* 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 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;
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_Step_1a(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 25 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_Step_1b(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 34 */
+ among_var = find_among_b(z, a_2, 3); /* substring, line 34 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 34 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R1(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 */
+ 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 */
+ }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 38 */
+ if (ret < 0) return ret;
+ }
+ { int m_test = z->l - z->c; /* test, line 39 */
+ among_var = find_among_b(z, a_1, 13); /* substring, line 39 */
+ 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_3); /* <+, line 41 */
+ z->c = c;
+ }
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ z->ket = z->c; /* [, line 44 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ if (z->c != z->I[0]) return 0; /* atmark, line 45 */
+ { int m_test = z->l - z->c; /* test, line 45 */
+ { int ret = r_shortv(z);
+ if (ret == 0) return 0; /* call shortv, line 45 */
+ 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_4); /* <+, line 45 */
+ z->c = c;
+ }
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(eq_s_b(z, 1, s_5))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ 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 */
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_7); /* <-, line 54 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_Step_2(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 58 */
+ among_var = find_among_b(z, a_3, 20); /* substring, line 58 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 58 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 58 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 9:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 13:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_Step_3(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 82 */
+ among_var = find_among_b(z, a_4, 7); /* substring, line 82 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 82 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 82 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 87 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_Step_4(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 92 */
+ among_var = find_among_b(z, a_5, 19); /* substring, line 92 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 92 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 92 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (!(eq_s_b(z, 1, s_24))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_25))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 96 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 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;
+ { 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 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;
+ }
+ }
+lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 103 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_Step_5b(struct SN_env * z) {
+ z->ket = z->c; /* [, line 107 */
+ if (!(eq_s_b(z, 1, s_27))) return 0;
+ z->bra = z->c; /* ], line 107 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 108 */
+ if (ret < 0) return ret;
+ }
+ if (!(eq_s_b(z, 1, s_28))) return 0;
+ { int ret;
+ ret = slice_del(z); /* delete, line 109 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set Y_found, line 116 */
+ lab0:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 117 */
+ while(1) { /* repeat, line 117 */
+ int c = z->c;
+ while(1) { /* goto, line 117 */
+ int c = z->c;
+ if (!(in_grouping(z, g_v, 97, 121))) 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;
+ break;
+ lab3:
+ z->c = c;
+ if (z->c >= z->l) goto lab2;
+ z->c++; /* goto, line 117 */
+ }
+ { int ret;
+ 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;
+ break;
+ }
+ z->c = c;
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[1] = z->c; /* setmark p2, line 123 */
+ lab4:
+ z->c = c;
+ }
+ z->lb = z->c; z->c = z->l; /* backwards, line 126 */
+
+ { int m = z->l - z->c; (void) m; /* do, line 127 */
+ { int ret = r_Step_1a(z);
+ if (ret == 0) goto lab9; /* call Step_1a, line 127 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 128 */
+ { int ret = r_Step_1b(z);
+ if (ret == 0) goto lab10; /* call Step_1b, line 128 */
+ if (ret < 0) return ret;
+ }
+ lab10:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 129 */
+ { int ret = r_Step_1c(z);
+ if (ret == 0) goto lab11; /* call Step_1c, line 129 */
+ if (ret < 0) return ret;
+ }
+ lab11:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 130 */
+ { int ret = r_Step_2(z);
+ if (ret == 0) goto lab12; /* call Step_2, line 130 */
+ if (ret < 0) return ret;
+ }
+ lab12:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 131 */
+ { int ret = r_Step_3(z);
+ if (ret == 0) goto lab13; /* call Step_3, line 131 */
+ if (ret < 0) return ret;
+ }
+ lab13:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 132 */
+ { int ret = r_Step_4(z);
+ if (ret == 0) goto lab14; /* call Step_4, line 132 */
+ if (ret < 0) return ret;
+ }
+ lab14:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 133 */
+ { int ret = r_Step_5a(z);
+ if (ret == 0) goto lab15; /* call Step_5a, line 133 */
+ if (ret < 0) return ret;
+ }
+ lab15:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 134 */
+ { int ret = r_Step_5b(z);
+ if (ret == 0) goto lab16; /* call Step_5b, line 134 */
+ if (ret < 0) return ret;
+ }
+ lab16:
+ z->c = z->l - m;
+ }
+ z->c = z->lb;
+ { int c = z->c; /* do, line 137 */
+ if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */
+ while(1) { /* repeat, line 137 */
+ int c = z->c;
+ while(1) { /* goto, line 137 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 137 */
+ if (!(eq_s(z, 1, s_33))) goto lab19;
+ z->ket = z->c; /* ], line 137 */
+ z->c = c;
+ break;
+ lab19:
+ z->c = c;
+ if (z->c >= z->l) goto lab18;
+ z->c++; /* goto, line 137 */
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_34); /* <-, line 137 */
+ if (ret < 0) return ret;
+ }
+ continue;
+ lab18:
+ z->c = c;
+ break;
+ }
+ lab17:
+ z->c = c;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_porter.h b/libstemmer_c/src_c/stem_ISO_8859_1_porter.h
new file mode 100644
index 0000000..5c8fd01
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_porter.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 * porter_ISO_8859_1_create_env(void);
+extern void porter_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int porter_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c b/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c
new file mode 100644
index 0000000..d586909
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.c
@@ -0,0 +1,1035 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int portuguese_ISO_8859_1_stem(struct SN_env * z);
+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);
+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_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);
+
+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] =
+{
+/* 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 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 struct among a_2[4] =
+{
+/* 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}
+};
+
+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 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 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] =
+{
+/* 0 */ { 3, s_5_0, -1, 1, 0},
+/* 1 */ { 5, s_5_1, -1, 1, 0},
+/* 2 */ { 5, s_5_2, -1, 4, 0},
+/* 3 */ { 3, s_5_3, -1, 9, 0},
+/* 4 */ { 5, s_5_4, -1, 1, 0},
+/* 5 */ { 3, s_5_5, -1, 1, 0},
+/* 6 */ { 4, s_5_6, -1, 1, 0},
+/* 7 */ { 3, s_5_7, -1, 8, 0},
+/* 8 */ { 3, s_5_8, -1, 1, 0},
+/* 9 */ { 5, s_5_9, -1, 2, 0},
+/* 10 */ { 5, s_5_10, -1, 7, 0},
+/* 11 */ { 4, s_5_11, -1, 1, 0},
+/* 12 */ { 5, s_5_12, -1, 6, 0},
+/* 13 */ { 6, s_5_13, 12, 5, 0},
+/* 14 */ { 4, s_5_14, -1, 1, 0},
+/* 15 */ { 4, s_5_15, -1, 1, 0},
+/* 16 */ { 5, s_5_16, -1, 3, 0},
+/* 17 */ { 3, s_5_17, -1, 1, 0},
+/* 18 */ { 4, s_5_18, -1, 1, 0},
+/* 19 */ { 3, s_5_19, -1, 1, 0},
+/* 20 */ { 6, s_5_20, -1, 1, 0},
+/* 21 */ { 6, s_5_21, -1, 1, 0},
+/* 22 */ { 3, s_5_22, -1, 8, 0},
+/* 23 */ { 5, s_5_23, -1, 1, 0},
+/* 24 */ { 4, s_5_24, -1, 1, 0},
+/* 25 */ { 4, s_5_25, -1, 1, 0},
+/* 26 */ { 6, s_5_26, -1, 4, 0},
+/* 27 */ { 4, s_5_27, -1, 9, 0},
+/* 28 */ { 6, s_5_28, -1, 1, 0},
+/* 29 */ { 4, s_5_29, -1, 1, 0},
+/* 30 */ { 5, s_5_30, -1, 1, 0},
+/* 31 */ { 4, s_5_31, -1, 8, 0},
+/* 32 */ { 4, s_5_32, -1, 1, 0},
+/* 33 */ { 6, s_5_33, -1, 2, 0},
+/* 34 */ { 6, s_5_34, -1, 7, 0},
+/* 35 */ { 7, s_5_35, -1, 3, 0},
+/* 36 */ { 6, s_5_36, -1, 1, 0},
+/* 37 */ { 5, s_5_37, -1, 1, 0},
+/* 38 */ { 6, s_5_38, -1, 1, 0},
+/* 39 */ { 4, s_5_39, -1, 1, 0},
+/* 40 */ { 5, s_5_40, -1, 1, 0},
+/* 41 */ { 4, s_5_41, -1, 1, 0},
+/* 42 */ { 7, s_5_42, -1, 1, 0},
+/* 43 */ { 7, s_5_43, -1, 1, 0},
+/* 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] =
+{
+/* 0 */ { 3, s_6_0, -1, 1, 0},
+/* 1 */ { 3, s_6_1, -1, 1, 0},
+/* 2 */ { 2, s_6_2, -1, 1, 0},
+/* 3 */ { 4, s_6_3, 2, 1, 0},
+/* 4 */ { 4, s_6_4, 2, 1, 0},
+/* 5 */ { 4, s_6_5, 2, 1, 0},
+/* 6 */ { 3, s_6_6, -1, 1, 0},
+/* 7 */ { 3, s_6_7, -1, 1, 0},
+/* 8 */ { 3, s_6_8, -1, 1, 0},
+/* 9 */ { 3, s_6_9, -1, 1, 0},
+/* 10 */ { 4, s_6_10, -1, 1, 0},
+/* 11 */ { 4, s_6_11, -1, 1, 0},
+/* 12 */ { 4, s_6_12, -1, 1, 0},
+/* 13 */ { 4, s_6_13, -1, 1, 0},
+/* 14 */ { 4, s_6_14, -1, 1, 0},
+/* 15 */ { 4, s_6_15, -1, 1, 0},
+/* 16 */ { 2, s_6_16, -1, 1, 0},
+/* 17 */ { 4, s_6_17, 16, 1, 0},
+/* 18 */ { 4, s_6_18, 16, 1, 0},
+/* 19 */ { 4, s_6_19, 16, 1, 0},
+/* 20 */ { 2, s_6_20, -1, 1, 0},
+/* 21 */ { 3, s_6_21, 20, 1, 0},
+/* 22 */ { 5, s_6_22, 21, 1, 0},
+/* 23 */ { 5, s_6_23, 21, 1, 0},
+/* 24 */ { 5, s_6_24, 21, 1, 0},
+/* 25 */ { 4, s_6_25, 20, 1, 0},
+/* 26 */ { 4, s_6_26, 20, 1, 0},
+/* 27 */ { 4, s_6_27, 20, 1, 0},
+/* 28 */ { 4, s_6_28, 20, 1, 0},
+/* 29 */ { 2, s_6_29, -1, 1, 0},
+/* 30 */ { 4, s_6_30, 29, 1, 0},
+/* 31 */ { 4, s_6_31, 29, 1, 0},
+/* 32 */ { 4, s_6_32, 29, 1, 0},
+/* 33 */ { 5, s_6_33, 29, 1, 0},
+/* 34 */ { 5, s_6_34, 29, 1, 0},
+/* 35 */ { 5, s_6_35, 29, 1, 0},
+/* 36 */ { 3, s_6_36, -1, 1, 0},
+/* 37 */ { 3, s_6_37, -1, 1, 0},
+/* 38 */ { 4, s_6_38, -1, 1, 0},
+/* 39 */ { 4, s_6_39, -1, 1, 0},
+/* 40 */ { 4, s_6_40, -1, 1, 0},
+/* 41 */ { 5, s_6_41, -1, 1, 0},
+/* 42 */ { 5, s_6_42, -1, 1, 0},
+/* 43 */ { 5, s_6_43, -1, 1, 0},
+/* 44 */ { 2, s_6_44, -1, 1, 0},
+/* 45 */ { 2, s_6_45, -1, 1, 0},
+/* 46 */ { 2, s_6_46, -1, 1, 0},
+/* 47 */ { 2, s_6_47, -1, 1, 0},
+/* 48 */ { 4, s_6_48, 47, 1, 0},
+/* 49 */ { 4, s_6_49, 47, 1, 0},
+/* 50 */ { 3, s_6_50, 47, 1, 0},
+/* 51 */ { 5, s_6_51, 50, 1, 0},
+/* 52 */ { 5, s_6_52, 50, 1, 0},
+/* 53 */ { 5, s_6_53, 50, 1, 0},
+/* 54 */ { 4, s_6_54, 47, 1, 0},
+/* 55 */ { 4, s_6_55, 47, 1, 0},
+/* 56 */ { 4, s_6_56, 47, 1, 0},
+/* 57 */ { 4, s_6_57, 47, 1, 0},
+/* 58 */ { 2, s_6_58, -1, 1, 0},
+/* 59 */ { 5, s_6_59, 58, 1, 0},
+/* 60 */ { 5, s_6_60, 58, 1, 0},
+/* 61 */ { 5, s_6_61, 58, 1, 0},
+/* 62 */ { 4, s_6_62, 58, 1, 0},
+/* 63 */ { 4, s_6_63, 58, 1, 0},
+/* 64 */ { 4, s_6_64, 58, 1, 0},
+/* 65 */ { 5, s_6_65, 58, 1, 0},
+/* 66 */ { 5, s_6_66, 58, 1, 0},
+/* 67 */ { 5, s_6_67, 58, 1, 0},
+/* 68 */ { 5, s_6_68, 58, 1, 0},
+/* 69 */ { 5, s_6_69, 58, 1, 0},
+/* 70 */ { 5, s_6_70, 58, 1, 0},
+/* 71 */ { 2, s_6_71, -1, 1, 0},
+/* 72 */ { 3, s_6_72, 71, 1, 0},
+/* 73 */ { 3, s_6_73, 71, 1, 0},
+/* 74 */ { 5, s_6_74, 73, 1, 0},
+/* 75 */ { 5, s_6_75, 73, 1, 0},
+/* 76 */ { 5, s_6_76, 73, 1, 0},
+/* 77 */ { 5, s_6_77, 73, 1, 0},
+/* 78 */ { 5, s_6_78, 73, 1, 0},
+/* 79 */ { 5, s_6_79, 73, 1, 0},
+/* 80 */ { 6, s_6_80, 73, 1, 0},
+/* 81 */ { 6, s_6_81, 73, 1, 0},
+/* 82 */ { 6, s_6_82, 73, 1, 0},
+/* 83 */ { 5, s_6_83, 73, 1, 0},
+/* 84 */ { 4, s_6_84, 73, 1, 0},
+/* 85 */ { 6, s_6_85, 84, 1, 0},
+/* 86 */ { 6, s_6_86, 84, 1, 0},
+/* 87 */ { 6, s_6_87, 84, 1, 0},
+/* 88 */ { 4, s_6_88, -1, 1, 0},
+/* 89 */ { 4, s_6_89, -1, 1, 0},
+/* 90 */ { 4, s_6_90, -1, 1, 0},
+/* 91 */ { 6, s_6_91, 90, 1, 0},
+/* 92 */ { 6, s_6_92, 90, 1, 0},
+/* 93 */ { 6, s_6_93, 90, 1, 0},
+/* 94 */ { 6, s_6_94, 90, 1, 0},
+/* 95 */ { 5, s_6_95, 90, 1, 0},
+/* 96 */ { 7, s_6_96, 95, 1, 0},
+/* 97 */ { 7, s_6_97, 95, 1, 0},
+/* 98 */ { 7, s_6_98, 95, 1, 0},
+/* 99 */ { 4, s_6_99, -1, 1, 0},
+/*100 */ { 6, s_6_100, 99, 1, 0},
+/*101 */ { 6, s_6_101, 99, 1, 0},
+/*102 */ { 6, s_6_102, 99, 1, 0},
+/*103 */ { 7, s_6_103, 99, 1, 0},
+/*104 */ { 7, s_6_104, 99, 1, 0},
+/*105 */ { 7, s_6_105, 99, 1, 0},
+/*106 */ { 4, s_6_106, -1, 1, 0},
+/*107 */ { 5, s_6_107, -1, 1, 0},
+/*108 */ { 5, s_6_108, -1, 1, 0},
+/*109 */ { 5, s_6_109, -1, 1, 0},
+/*110 */ { 4, s_6_110, -1, 1, 0},
+/*111 */ { 4, s_6_111, -1, 1, 0},
+/*112 */ { 4, s_6_112, -1, 1, 0},
+/*113 */ { 4, s_6_113, -1, 1, 0},
+/*114 */ { 2, s_6_114, -1, 1, 0},
+/*115 */ { 2, s_6_115, -1, 1, 0},
+/*116 */ { 2, s_6_116, -1, 1, 0},
+/*117 */ { 3, s_6_117, -1, 1, 0},
+/*118 */ { 3, s_6_118, -1, 1, 0},
+/*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 struct among a_7[7] =
+{
+/* 0 */ { 1, s_7_0, -1, 1, 0},
+/* 1 */ { 1, s_7_1, -1, 1, 0},
+/* 2 */ { 1, s_7_2, -1, 1, 0},
+/* 3 */ { 2, s_7_3, -1, 1, 0},
+/* 4 */ { 1, s_7_4, -1, 1, 0},
+/* 5 */ { 1, s_7_5, -1, 1, 0},
+/* 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 struct among a_8[4] =
+{
+/* 0 */ { 1, s_8_0, -1, 1, 0},
+/* 1 */ { 1, s_8_1, -1, 2, 0},
+/* 2 */ { 1, s_8_2, -1, 1, 0},
+/* 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 int r_prelude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 36 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 37 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 2, s_1); /* <-, line 39 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 40 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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 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 */
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ goto lab7;
+ lab8:
+ z->c = c;
+ if (!(in_grouping(z, g_v, 97, 250))) goto lab0;
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 53 */
+ }
+ lab7:
+ ;
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 54 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[2] = z->c; /* setmark p2, line 58 */
+ lab10:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 62 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 63 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_3); /* <-, line 65 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 66 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_standard_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 77 */
+ among_var = find_among_b(z, a_5, 45); /* substring, line 77 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 77 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 93 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 93 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 110 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 110 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 111 */
+ z->ket = z->c; /* [, line 112 */
+ among_var = find_among_b(z, a_2, 4); /* substring, line 112 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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 1:
+ z->ket = z->c; /* [, line 113 */
+ if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ ;
+ }
+ break;
+ case 6:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 122 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 122 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 123 */
+ z->ket = z->c; /* [, line 124 */
+ among_var = find_among_b(z, a_3, 3); /* substring, line 124 */
+ if (!(among_var)) { z->c = z->l - m; goto lab1; }
+ z->bra = z->c; /* ], line 124 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 127 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ ;
+ }
+ break;
+ case 7:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 135 */
+ z->ket = z->c; /* [, line 136 */
+ among_var = find_among_b(z, a_4, 3); /* substring, line 136 */
+ if (!(among_var)) { z->c = z->l - m; goto lab2; }
+ z->bra = z->c; /* ], line 136 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 139 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab2:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 146 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 146 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 147 */
+ z->ket = z->c; /* [, line 148 */
+ if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 148 */
+ if (ret < 0) return ret;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 9:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 153 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 160 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 179 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ return 1;
+}
+
+static int r_residual_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 184 */
+ among_var = find_among_b(z, a_7, 7); /* substring, line 184 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 184 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 187 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 187 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_residual_form(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 192 */
+ among_var = find_among_b(z, a_8, 4); /* substring, line 192 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 192 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 194 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ 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 */
+ 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 */
+ if (!(eq_s_b(z, 1, s_12))) goto lab1;
+ z->c = z->l - m_test;
+ }
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ 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 */
+ if (!(eq_s_b(z, 1, s_14))) return 0;
+ z->c = z->l - m_test;
+ }
+ }
+ lab0:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 195 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int portuguese_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->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 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;
+ { 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->ket = z->c; /* [, line 207 */
+ if (!(eq_s_b(z, 1, s_16))) goto lab7;
+ z->bra = z->c; /* ], line 207 */
+ { int m_test = z->l - z->c; /* test, line 207 */
+ if (!(eq_s_b(z, 1, s_17))) goto lab7;
+ z->c = z->l - m_test;
+ }
+ { int ret = r_RV(z);
+ if (ret == 0) goto lab7; /* call RV, line 207 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 207 */
+ if (ret < 0) return ret;
+ }
+ lab7:
+ z->c = z->l - m;
+ }
+ }
+ goto lab3;
+ lab4:
+ z->c = z->l - m;
+ { int ret = r_residual_suffix(z);
+ if (ret == 0) goto lab2; /* call residual_suffix, line 209 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab3:
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.h b/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.h
new file mode 100644
index 0000000..0279bc9
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_portuguese.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 * portuguese_ISO_8859_1_create_env(void);
+extern void portuguese_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int portuguese_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c b/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c
new file mode 100644
index 0000000..acc4fa9
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_spanish.c
@@ -0,0 +1,1119 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int spanish_ISO_8859_1_stem(struct SN_env * z);
+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);
+static int r_standard_suffix(struct SN_env * z);
+static int r_attached_pronoun(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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 6, 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},
+/* 4 */ { 1, s_0_4, 0, 4, 0},
+/* 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 struct among a_1[13] =
+{
+/* 0 */ { 2, s_1_0, -1, -1, 0},
+/* 1 */ { 4, s_1_1, 0, -1, 0},
+/* 2 */ { 2, s_1_2, -1, -1, 0},
+/* 3 */ { 2, s_1_3, -1, -1, 0},
+/* 4 */ { 2, s_1_4, -1, -1, 0},
+/* 5 */ { 2, s_1_5, -1, -1, 0},
+/* 6 */ { 4, s_1_6, 5, -1, 0},
+/* 7 */ { 3, s_1_7, -1, -1, 0},
+/* 8 */ { 5, s_1_8, 7, -1, 0},
+/* 9 */ { 3, s_1_9, -1, -1, 0},
+/* 10 */ { 3, s_1_10, -1, -1, 0},
+/* 11 */ { 5, s_1_11, 10, -1, 0},
+/* 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 struct among a_2[11] =
+{
+/* 0 */ { 4, s_2_0, -1, 6, 0},
+/* 1 */ { 5, s_2_1, -1, 6, 0},
+/* 2 */ { 5, s_2_2, -1, 7, 0},
+/* 3 */ { 4, s_2_3, -1, 2, 0},
+/* 4 */ { 5, s_2_4, -1, 1, 0},
+/* 5 */ { 2, s_2_5, -1, 6, 0},
+/* 6 */ { 2, s_2_6, -1, 6, 0},
+/* 7 */ { 2, s_2_7, -1, 6, 0},
+/* 8 */ { 2, s_2_8, -1, 3, 0},
+/* 9 */ { 2, s_2_9, -1, 4, 0},
+/* 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 struct among a_3[4] =
+{
+/* 0 */ { 2, s_3_0, -1, -1, 0},
+/* 1 */ { 2, s_3_1, -1, -1, 0},
+/* 2 */ { 2, s_3_2, -1, -1, 0},
+/* 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 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 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 struct among a_6[46] =
+{
+/* 0 */ { 3, s_6_0, -1, 1, 0},
+/* 1 */ { 5, s_6_1, -1, 2, 0},
+/* 2 */ { 5, s_6_2, -1, 5, 0},
+/* 3 */ { 5, s_6_3, -1, 2, 0},
+/* 4 */ { 3, s_6_4, -1, 1, 0},
+/* 5 */ { 4, s_6_5, -1, 1, 0},
+/* 6 */ { 3, s_6_6, -1, 9, 0},
+/* 7 */ { 4, s_6_7, -1, 1, 0},
+/* 8 */ { 5, s_6_8, -1, 3, 0},
+/* 9 */ { 4, s_6_9, -1, 8, 0},
+/* 10 */ { 4, s_6_10, -1, 1, 0},
+/* 11 */ { 4, s_6_11, -1, 1, 0},
+/* 12 */ { 4, s_6_12, -1, 2, 0},
+/* 13 */ { 5, s_6_13, -1, 7, 0},
+/* 14 */ { 6, s_6_14, 13, 6, 0},
+/* 15 */ { 5, s_6_15, -1, 2, 0},
+/* 16 */ { 5, s_6_16, -1, 4, 0},
+/* 17 */ { 3, s_6_17, -1, 1, 0},
+/* 18 */ { 4, s_6_18, -1, 1, 0},
+/* 19 */ { 3, s_6_19, -1, 1, 0},
+/* 20 */ { 7, s_6_20, -1, 1, 0},
+/* 21 */ { 7, s_6_21, -1, 1, 0},
+/* 22 */ { 3, s_6_22, -1, 9, 0},
+/* 23 */ { 4, s_6_23, -1, 2, 0},
+/* 24 */ { 4, s_6_24, -1, 1, 0},
+/* 25 */ { 6, s_6_25, -1, 2, 0},
+/* 26 */ { 6, s_6_26, -1, 5, 0},
+/* 27 */ { 6, s_6_27, -1, 2, 0},
+/* 28 */ { 4, s_6_28, -1, 1, 0},
+/* 29 */ { 5, s_6_29, -1, 1, 0},
+/* 30 */ { 4, s_6_30, -1, 9, 0},
+/* 31 */ { 5, s_6_31, -1, 1, 0},
+/* 32 */ { 6, s_6_32, -1, 3, 0},
+/* 33 */ { 6, s_6_33, -1, 8, 0},
+/* 34 */ { 5, s_6_34, -1, 1, 0},
+/* 35 */ { 5, s_6_35, -1, 1, 0},
+/* 36 */ { 7, s_6_36, -1, 2, 0},
+/* 37 */ { 7, s_6_37, -1, 4, 0},
+/* 38 */ { 6, s_6_38, -1, 2, 0},
+/* 39 */ { 5, s_6_39, -1, 2, 0},
+/* 40 */ { 4, s_6_40, -1, 1, 0},
+/* 41 */ { 5, s_6_41, -1, 1, 0},
+/* 42 */ { 4, s_6_42, -1, 1, 0},
+/* 43 */ { 8, s_6_43, -1, 1, 0},
+/* 44 */ { 8, s_6_44, -1, 1, 0},
+/* 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 struct among a_7[12] =
+{
+/* 0 */ { 2, s_7_0, -1, 1, 0},
+/* 1 */ { 2, s_7_1, -1, 1, 0},
+/* 2 */ { 3, s_7_2, -1, 1, 0},
+/* 3 */ { 3, s_7_3, -1, 1, 0},
+/* 4 */ { 5, s_7_4, -1, 1, 0},
+/* 5 */ { 5, s_7_5, -1, 1, 0},
+/* 6 */ { 2, s_7_6, -1, 1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 3, s_7_8, -1, 1, 0},
+/* 9 */ { 4, s_7_9, -1, 1, 0},
+/* 10 */ { 5, s_7_10, -1, 1, 0},
+/* 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 struct among a_8[96] =
+{
+/* 0 */ { 3, s_8_0, -1, 2, 0},
+/* 1 */ { 3, s_8_1, -1, 2, 0},
+/* 2 */ { 3, s_8_2, -1, 2, 0},
+/* 3 */ { 3, s_8_3, -1, 2, 0},
+/* 4 */ { 4, s_8_4, -1, 2, 0},
+/* 5 */ { 2, s_8_5, -1, 2, 0},
+/* 6 */ { 4, s_8_6, 5, 2, 0},
+/* 7 */ { 4, s_8_7, 5, 2, 0},
+/* 8 */ { 4, s_8_8, 5, 2, 0},
+/* 9 */ { 2, s_8_9, -1, 2, 0},
+/* 10 */ { 2, s_8_10, -1, 2, 0},
+/* 11 */ { 2, s_8_11, -1, 2, 0},
+/* 12 */ { 3, s_8_12, -1, 2, 0},
+/* 13 */ { 4, s_8_13, -1, 2, 0},
+/* 14 */ { 4, s_8_14, -1, 2, 0},
+/* 15 */ { 4, s_8_15, -1, 2, 0},
+/* 16 */ { 2, s_8_16, -1, 2, 0},
+/* 17 */ { 4, s_8_17, 16, 2, 0},
+/* 18 */ { 4, s_8_18, 16, 2, 0},
+/* 19 */ { 5, s_8_19, 16, 2, 0},
+/* 20 */ { 3, s_8_20, 16, 2, 0},
+/* 21 */ { 5, s_8_21, 20, 2, 0},
+/* 22 */ { 5, s_8_22, 20, 2, 0},
+/* 23 */ { 5, s_8_23, 20, 2, 0},
+/* 24 */ { 2, s_8_24, -1, 1, 0},
+/* 25 */ { 4, s_8_25, 24, 2, 0},
+/* 26 */ { 5, s_8_26, 24, 2, 0},
+/* 27 */ { 4, s_8_27, -1, 2, 0},
+/* 28 */ { 5, s_8_28, -1, 2, 0},
+/* 29 */ { 4, s_8_29, -1, 2, 0},
+/* 30 */ { 4, s_8_30, -1, 2, 0},
+/* 31 */ { 4, s_8_31, -1, 2, 0},
+/* 32 */ { 3, s_8_32, -1, 2, 0},
+/* 33 */ { 3, s_8_33, -1, 2, 0},
+/* 34 */ { 4, s_8_34, -1, 2, 0},
+/* 35 */ { 5, s_8_35, -1, 2, 0},
+/* 36 */ { 2, s_8_36, -1, 2, 0},
+/* 37 */ { 2, s_8_37, -1, 2, 0},
+/* 38 */ { 2, s_8_38, -1, 2, 0},
+/* 39 */ { 2, s_8_39, -1, 2, 0},
+/* 40 */ { 4, s_8_40, 39, 2, 0},
+/* 41 */ { 4, s_8_41, 39, 2, 0},
+/* 42 */ { 4, s_8_42, 39, 2, 0},
+/* 43 */ { 4, s_8_43, 39, 2, 0},
+/* 44 */ { 5, s_8_44, 39, 2, 0},
+/* 45 */ { 3, s_8_45, 39, 2, 0},
+/* 46 */ { 5, s_8_46, 45, 2, 0},
+/* 47 */ { 5, s_8_47, 45, 2, 0},
+/* 48 */ { 5, s_8_48, 45, 2, 0},
+/* 49 */ { 2, s_8_49, -1, 1, 0},
+/* 50 */ { 4, s_8_50, 49, 2, 0},
+/* 51 */ { 5, s_8_51, 49, 2, 0},
+/* 52 */ { 5, s_8_52, -1, 2, 0},
+/* 53 */ { 5, s_8_53, -1, 2, 0},
+/* 54 */ { 6, s_8_54, -1, 2, 0},
+/* 55 */ { 4, s_8_55, -1, 2, 0},
+/* 56 */ { 6, s_8_56, 55, 2, 0},
+/* 57 */ { 6, s_8_57, 55, 2, 0},
+/* 58 */ { 6, s_8_58, 55, 2, 0},
+/* 59 */ { 5, s_8_59, -1, 2, 0},
+/* 60 */ { 6, s_8_60, -1, 2, 0},
+/* 61 */ { 6, s_8_61, -1, 2, 0},
+/* 62 */ { 6, s_8_62, -1, 2, 0},
+/* 63 */ { 3, s_8_63, -1, 2, 0},
+/* 64 */ { 3, s_8_64, -1, 1, 0},
+/* 65 */ { 5, s_8_65, 64, 2, 0},
+/* 66 */ { 5, s_8_66, 64, 2, 0},
+/* 67 */ { 5, s_8_67, 64, 2, 0},
+/* 68 */ { 4, s_8_68, -1, 2, 0},
+/* 69 */ { 4, s_8_69, -1, 2, 0},
+/* 70 */ { 4, s_8_70, -1, 2, 0},
+/* 71 */ { 6, s_8_71, 70, 2, 0},
+/* 72 */ { 6, s_8_72, 70, 2, 0},
+/* 73 */ { 7, s_8_73, 70, 2, 0},
+/* 74 */ { 5, s_8_74, 70, 2, 0},
+/* 75 */ { 7, s_8_75, 74, 2, 0},
+/* 76 */ { 7, s_8_76, 74, 2, 0},
+/* 77 */ { 7, s_8_77, 74, 2, 0},
+/* 78 */ { 4, s_8_78, -1, 1, 0},
+/* 79 */ { 6, s_8_79, 78, 2, 0},
+/* 80 */ { 6, s_8_80, 78, 2, 0},
+/* 81 */ { 6, s_8_81, 78, 2, 0},
+/* 82 */ { 6, s_8_82, 78, 2, 0},
+/* 83 */ { 7, s_8_83, 78, 2, 0},
+/* 84 */ { 4, s_8_84, -1, 2, 0},
+/* 85 */ { 4, s_8_85, -1, 2, 0},
+/* 86 */ { 4, s_8_86, -1, 2, 0},
+/* 87 */ { 4, s_8_87, -1, 2, 0},
+/* 88 */ { 2, s_8_88, -1, 2, 0},
+/* 89 */ { 3, s_8_89, -1, 2, 0},
+/* 90 */ { 3, s_8_90, -1, 2, 0},
+/* 91 */ { 3, s_8_91, -1, 2, 0},
+/* 92 */ { 3, s_8_92, -1, 2, 0},
+/* 93 */ { 3, s_8_93, -1, 2, 0},
+/* 94 */ { 3, s_8_94, -1, 2, 0},
+/* 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 struct among a_9[8] =
+{
+/* 0 */ { 1, s_9_0, -1, 1, 0},
+/* 1 */ { 1, s_9_1, -1, 2, 0},
+/* 2 */ { 1, s_9_2, -1, 1, 0},
+/* 3 */ { 2, s_9_3, -1, 1, 0},
+/* 4 */ { 1, s_9_4, -1, 1, 0},
+/* 5 */ { 1, s_9_5, -1, 2, 0},
+/* 6 */ { 1, s_9_6, -1, 1, 0},
+/* 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 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 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 */
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ goto lab7;
+ lab8:
+ z->c = c;
+ if (!(in_grouping(z, g_v, 97, 252))) goto lab0;
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 40 */
+ }
+ lab7:
+ ;
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 41 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[2] = z->c; /* setmark p2, line 45 */
+ lab10:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 49 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 50 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ if (z->c >= z->l) goto lab0;
+ z->c++; /* next, line 57 */
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_attached_pronoun(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 68 */
+ if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */
+ z->bra = z->c; /* ], line 68 */
+ among_var = find_among_b(z, a_2, 11); /* substring, line 72 */
+ if (!(among_var)) return 0;
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 72 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ z->bra = z->c; /* ], line 73 */
+ { int ret;
+ 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 */
+ 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 */
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 87 */
+ among_var = find_among_b(z, a_6, 46); /* substring, line 87 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 87 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 99 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 99 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 105 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 105 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 106 */
+ z->ket = z->c; /* [, line 106 */
+ if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 106 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 124 */
+ z->ket = z->c; /* [, line 125 */
+ among_var = find_among_b(z, a_3, 4); /* substring, line 125 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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 1:
+ z->ket = z->c; /* [, line 126 */
+ if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 126 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ ;
+ }
+ break;
+ case 7:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 135 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 135 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 136 */
+ z->ket = z->c; /* [, line 137 */
+ among_var = find_among_b(z, a_4, 3); /* substring, line 137 */
+ if (!(among_var)) { z->c = z->l - m; goto lab2; }
+ z->bra = z->c; /* ], line 137 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 140 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab2:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 147 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 147 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 148 */
+ z->ket = z->c; /* [, line 149 */
+ among_var = find_among_b(z, a_5, 3); /* substring, line 149 */
+ if (!(among_var)) { z->c = z->l - m; goto lab3; }
+ z->bra = z->c; /* ], line 149 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 152 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 9:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 159 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 159 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 160 */
+ z->ket = z->c; /* [, line 161 */
+ if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 161 */
+ if (ret < 0) return ret;
+ }
+ lab4:
+ ;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 168 */
+ z->lb = m3;
+ }
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 176 */
+ z->lb = m3;
+ }
+ 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_test = z->l - z->c; /* test, line 179 */
+ if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; }
+ z->c = z->l - m_test;
+ }
+ lab0:
+ ;
+ }
+ z->bra = z->c; /* ], line 179 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 179 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 200 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_residual_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 205 */
+ among_var = find_among_b(z, a_9, 8); /* substring, line 205 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 205 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 208 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 208 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 210 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 210 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 210 */
+ z->ket = z->c; /* [, line 210 */
+ if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; 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; }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 210 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int spanish_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 217 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 219 */
+ { int m = z->l - z->c; (void) m; /* 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;
+ { 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;
+ { int ret = r_verb_suffix(z);
+ if (ret == 0) goto lab2; /* call verb_suffix, line 221 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab3:
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_spanish.h b/libstemmer_c/src_c/stem_ISO_8859_1_spanish.h
new file mode 100644
index 0000000..83f1498
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_spanish.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 * spanish_ISO_8859_1_create_env(void);
+extern void spanish_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int spanish_ISO_8859_1_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c b/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c
new file mode 100644
index 0000000..c571fd9
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_swedish.c
@@ -0,0 +1,307 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int swedish_ISO_8859_1_stem(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);
+
+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] =
+{
+/* 0 */ { 1, s_0_0, -1, 1, 0},
+/* 1 */ { 4, s_0_1, 0, 1, 0},
+/* 2 */ { 4, s_0_2, 0, 1, 0},
+/* 3 */ { 7, s_0_3, 2, 1, 0},
+/* 4 */ { 4, s_0_4, 0, 1, 0},
+/* 5 */ { 2, s_0_5, -1, 1, 0},
+/* 6 */ { 1, s_0_6, -1, 1, 0},
+/* 7 */ { 3, s_0_7, 6, 1, 0},
+/* 8 */ { 4, s_0_8, 6, 1, 0},
+/* 9 */ { 4, s_0_9, 6, 1, 0},
+/* 10 */ { 3, s_0_10, 6, 1, 0},
+/* 11 */ { 4, s_0_11, 6, 1, 0},
+/* 12 */ { 2, s_0_12, -1, 1, 0},
+/* 13 */ { 5, s_0_13, 12, 1, 0},
+/* 14 */ { 4, s_0_14, 12, 1, 0},
+/* 15 */ { 5, s_0_15, 12, 1, 0},
+/* 16 */ { 3, s_0_16, -1, 1, 0},
+/* 17 */ { 2, s_0_17, -1, 1, 0},
+/* 18 */ { 2, s_0_18, -1, 1, 0},
+/* 19 */ { 5, s_0_19, 18, 1, 0},
+/* 20 */ { 2, s_0_20, -1, 1, 0},
+/* 21 */ { 1, s_0_21, -1, 2, 0},
+/* 22 */ { 2, s_0_22, 21, 1, 0},
+/* 23 */ { 5, s_0_23, 22, 1, 0},
+/* 24 */ { 5, s_0_24, 22, 1, 0},
+/* 25 */ { 5, s_0_25, 22, 1, 0},
+/* 26 */ { 2, s_0_26, 21, 1, 0},
+/* 27 */ { 4, s_0_27, 26, 1, 0},
+/* 28 */ { 5, s_0_28, 26, 1, 0},
+/* 29 */ { 3, s_0_29, 21, 1, 0},
+/* 30 */ { 5, s_0_30, 29, 1, 0},
+/* 31 */ { 6, s_0_31, 29, 1, 0},
+/* 32 */ { 4, s_0_32, 21, 1, 0},
+/* 33 */ { 2, s_0_33, -1, 1, 0},
+/* 34 */ { 5, s_0_34, -1, 1, 0},
+/* 35 */ { 3, s_0_35, -1, 1, 0},
+/* 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 struct among a_1[7] =
+{
+/* 0 */ { 2, s_1_0, -1, -1, 0},
+/* 1 */ { 2, s_1_1, -1, -1, 0},
+/* 2 */ { 2, s_1_2, -1, -1, 0},
+/* 3 */ { 2, s_1_3, -1, -1, 0},
+/* 4 */ { 2, s_1_4, -1, -1, 0},
+/* 5 */ { 2, s_1_5, -1, -1, 0},
+/* 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 struct among a_2[5] =
+{
+/* 0 */ { 2, s_2_0, -1, 1, 0},
+/* 1 */ { 3, s_2_1, 0, 1, 0},
+/* 2 */ { 3, s_2_2, -1, 1, 0},
+/* 3 */ { 5, s_2_3, -1, 3, 0},
+/* 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 unsigned char g_s_ending[] = { 119, 127, 149 };
+
+static symbol s_0[] = { 'l', 0xF6, 's' };
+static 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 */
+ }
+ 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 */
+ }
+ z->I[0] = z->c; /* setmark p1, line 30 */
+ /* try, line 31 */
+ if (!(z->I[0] < z->I[1])) goto lab2;
+ z->I[0] = z->I[1];
+lab2:
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 37 */
+ among_var = find_among_b(z, a_0, 37); /* substring, line 37 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 37 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_consonant_pair(struct SN_env * z) {
+ { int m3; /* setlimit, line 50 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 52 */
+ if (z->c <= z->lb) { z->lb = m3; return 0; }
+ z->c--; /* next, line 52 */
+ z->bra = z->c; /* ], line 52 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 52 */
+ if (ret < 0) return ret;
+ }
+ }
+ z->lb = m3;
+ }
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 56 */
+ among_var = find_among_b(z, a_2, 5); /* substring, line 56 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 56 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 4, s_1); /* <-, line 59 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ return 1;
+}
+
+extern int swedish_ISO_8859_1_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 67 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_ISO_8859_1_swedish.h b/libstemmer_c/src_c/stem_ISO_8859_1_swedish.h
new file mode 100644
index 0000000..4184e5c
--- /dev/null
+++ b/libstemmer_c/src_c/stem_ISO_8859_1_swedish.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 * swedish_ISO_8859_1_create_env(void);
+extern void swedish_ISO_8859_1_close_env(struct SN_env * z);
+
+extern int swedish_ISO_8859_1_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
new file mode 100644
index 0000000..0a68a3b
--- /dev/null
+++ b/libstemmer_c/src_c/stem_KOI8_R_russian.c
@@ -0,0 +1,701 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int russian_KOI8_R_stem(struct SN_env * z);
+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);
+static int r_verb(struct SN_env * z);
+static int r_reflexive(struct SN_env * z);
+static int r_adjectival(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 3, s_0_0, -1, 1, 0},
+/* 1 */ { 4, s_0_1, 0, 2, 0},
+/* 2 */ { 4, s_0_2, 0, 2, 0},
+/* 3 */ { 1, s_0_3, -1, 1, 0},
+/* 4 */ { 2, s_0_4, 3, 2, 0},
+/* 5 */ { 2, s_0_5, 3, 2, 0},
+/* 6 */ { 5, s_0_6, -1, 1, 0},
+/* 7 */ { 6, s_0_7, 6, 2, 0},
+/* 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] =
+{
+/* 0 */ { 2, s_1_0, -1, 1, 0},
+/* 1 */ { 2, s_1_1, -1, 1, 0},
+/* 2 */ { 2, s_1_2, -1, 1, 0},
+/* 3 */ { 2, s_1_3, -1, 1, 0},
+/* 4 */ { 2, s_1_4, -1, 1, 0},
+/* 5 */ { 2, s_1_5, -1, 1, 0},
+/* 6 */ { 2, s_1_6, -1, 1, 0},
+/* 7 */ { 2, s_1_7, -1, 1, 0},
+/* 8 */ { 2, s_1_8, -1, 1, 0},
+/* 9 */ { 2, s_1_9, -1, 1, 0},
+/* 10 */ { 3, s_1_10, -1, 1, 0},
+/* 11 */ { 3, s_1_11, -1, 1, 0},
+/* 12 */ { 2, s_1_12, -1, 1, 0},
+/* 13 */ { 2, s_1_13, -1, 1, 0},
+/* 14 */ { 2, s_1_14, -1, 1, 0},
+/* 15 */ { 2, s_1_15, -1, 1, 0},
+/* 16 */ { 2, s_1_16, -1, 1, 0},
+/* 17 */ { 2, s_1_17, -1, 1, 0},
+/* 18 */ { 2, s_1_18, -1, 1, 0},
+/* 19 */ { 2, s_1_19, -1, 1, 0},
+/* 20 */ { 3, s_1_20, -1, 1, 0},
+/* 21 */ { 3, s_1_21, -1, 1, 0},
+/* 22 */ { 2, s_1_22, -1, 1, 0},
+/* 23 */ { 2, s_1_23, -1, 1, 0},
+/* 24 */ { 3, s_1_24, -1, 1, 0},
+/* 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 struct among a_2[8] =
+{
+/* 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 */ { 3, s_2_3, 2, 2, 0},
+/* 4 */ { 3, s_2_4, 2, 2, 0},
+/* 5 */ { 1, s_2_5, -1, 1, 0},
+/* 6 */ { 2, s_2_6, 5, 1, 0},
+/* 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 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] =
+{
+/* 0 */ { 1, s_4_0, -1, 2, 0},
+/* 1 */ { 2, s_4_1, 0, 2, 0},
+/* 2 */ { 2, s_4_2, -1, 1, 0},
+/* 3 */ { 3, s_4_3, 2, 2, 0},
+/* 4 */ { 3, s_4_4, 2, 2, 0},
+/* 5 */ { 2, s_4_5, -1, 1, 0},
+/* 6 */ { 3, s_4_6, 5, 2, 0},
+/* 7 */ { 3, s_4_7, -1, 1, 0},
+/* 8 */ { 3, s_4_8, -1, 2, 0},
+/* 9 */ { 3, s_4_9, -1, 1, 0},
+/* 10 */ { 4, s_4_10, 9, 2, 0},
+/* 11 */ { 4, s_4_11, 9, 2, 0},
+/* 12 */ { 2, s_4_12, -1, 1, 0},
+/* 13 */ { 3, s_4_13, 12, 2, 0},
+/* 14 */ { 3, s_4_14, 12, 2, 0},
+/* 15 */ { 1, s_4_15, -1, 1, 0},
+/* 16 */ { 2, s_4_16, 15, 2, 0},
+/* 17 */ { 2, s_4_17, 15, 2, 0},
+/* 18 */ { 1, s_4_18, -1, 1, 0},
+/* 19 */ { 2, s_4_19, 18, 2, 0},
+/* 20 */ { 2, s_4_20, 18, 2, 0},
+/* 21 */ { 2, s_4_21, -1, 1, 0},
+/* 22 */ { 2, s_4_22, -1, 2, 0},
+/* 23 */ { 2, s_4_23, -1, 2, 0},
+/* 24 */ { 1, s_4_24, -1, 1, 0},
+/* 25 */ { 2, s_4_25, 24, 2, 0},
+/* 26 */ { 2, s_4_26, -1, 1, 0},
+/* 27 */ { 3, s_4_27, 26, 2, 0},
+/* 28 */ { 3, s_4_28, 26, 2, 0},
+/* 29 */ { 2, s_4_29, -1, 1, 0},
+/* 30 */ { 3, s_4_30, 29, 2, 0},
+/* 31 */ { 3, s_4_31, 29, 1, 0},
+/* 32 */ { 2, s_4_32, -1, 1, 0},
+/* 33 */ { 3, s_4_33, 32, 2, 0},
+/* 34 */ { 2, s_4_34, -1, 1, 0},
+/* 35 */ { 3, s_4_35, 34, 2, 0},
+/* 36 */ { 2, s_4_36, -1, 2, 0},
+/* 37 */ { 2, s_4_37, -1, 2, 0},
+/* 38 */ { 2, s_4_38, -1, 2, 0},
+/* 39 */ { 2, s_4_39, -1, 1, 0},
+/* 40 */ { 3, s_4_40, 39, 2, 0},
+/* 41 */ { 3, s_4_41, 39, 2, 0},
+/* 42 */ { 3, s_4_42, -1, 1, 0},
+/* 43 */ { 3, s_4_43, -1, 2, 0},
+/* 44 */ { 2, s_4_44, -1, 1, 0},
+/* 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] =
+{
+/* 0 */ { 1, s_5_0, -1, 1, 0},
+/* 1 */ { 2, s_5_1, 0, 1, 0},
+/* 2 */ { 2, s_5_2, 0, 1, 0},
+/* 3 */ { 1, s_5_3, -1, 1, 0},
+/* 4 */ { 1, s_5_4, -1, 1, 0},
+/* 5 */ { 2, s_5_5, 4, 1, 0},
+/* 6 */ { 2, s_5_6, 4, 1, 0},
+/* 7 */ { 2, s_5_7, -1, 1, 0},
+/* 8 */ { 2, s_5_8, -1, 1, 0},
+/* 9 */ { 3, s_5_9, 8, 1, 0},
+/* 10 */ { 1, s_5_10, -1, 1, 0},
+/* 11 */ { 2, s_5_11, 10, 1, 0},
+/* 12 */ { 2, s_5_12, 10, 1, 0},
+/* 13 */ { 3, s_5_13, 10, 1, 0},
+/* 14 */ { 3, s_5_14, 10, 1, 0},
+/* 15 */ { 4, s_5_15, 14, 1, 0},
+/* 16 */ { 1, s_5_16, -1, 1, 0},
+/* 17 */ { 2, s_5_17, 16, 1, 0},
+/* 18 */ { 3, s_5_18, 17, 1, 0},
+/* 19 */ { 2, s_5_19, 16, 1, 0},
+/* 20 */ { 2, s_5_20, 16, 1, 0},
+/* 21 */ { 2, s_5_21, -1, 1, 0},
+/* 22 */ { 2, s_5_22, -1, 1, 0},
+/* 23 */ { 3, s_5_23, 22, 1, 0},
+/* 24 */ { 2, s_5_24, -1, 1, 0},
+/* 25 */ { 2, s_5_25, -1, 1, 0},
+/* 26 */ { 3, s_5_26, 25, 1, 0},
+/* 27 */ { 1, s_5_27, -1, 1, 0},
+/* 28 */ { 1, s_5_28, -1, 1, 0},
+/* 29 */ { 2, s_5_29, 28, 1, 0},
+/* 30 */ { 2, s_5_30, 28, 1, 0},
+/* 31 */ { 1, s_5_31, -1, 1, 0},
+/* 32 */ { 2, s_5_32, -1, 1, 0},
+/* 33 */ { 2, s_5_33, -1, 1, 0},
+/* 34 */ { 1, s_5_34, -1, 1, 0},
+/* 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 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 struct among a_7[4] =
+{
+/* 0 */ { 4, s_7_0, -1, 1, 0},
+/* 1 */ { 1, s_7_1, -1, 2, 0},
+/* 2 */ { 1, s_7_2, -1, 3, 0},
+/* 3 */ { 3, s_7_3, -1, 1, 0}
+};
+
+static 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 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ z->I[1] = z->c; /* setmark p2, line 65 */
+ lab0:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_perfective_gerund(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 74 */
+ 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 */
+ if (!(eq_s_b(z, 1, s_0))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_1))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 78 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 85 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_adjective(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 90 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_adjectival(struct SN_env * z) {
+ int among_var;
+ { int ret = r_adjective(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 */
+ z->ket = z->c; /* [, line 112 */
+ among_var = find_among_b(z, a_2, 8); /* substring, line 112 */
+ if (!(among_var)) { z->c = z->l - m; goto lab0; }
+ z->bra = z->c; /* ], line 112 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab0; }
+ case 1:
+ { int m = z->l - z->c; (void) m; /* 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; }
+ }
+ lab1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 117 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 124 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ ;
+ }
+ return 1;
+}
+
+static int r_reflexive(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 131 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_verb(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 139 */
+ 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 */
+ if (!(eq_s_b(z, 1, s_4))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_5))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 145 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 153 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_noun(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 162 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_derivational(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 178 */
+ among_var = find_among_b(z, a_6, 2); /* substring, line 178 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 178 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 178 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 181 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_tidy_up(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 186 */
+ 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 */
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 196 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int russian_KOI8_R_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 204 */
+
+ { int m3; /* setlimit, line 204 */
+ int m = z->l - z->c; (void) m;
+ 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 */
+ { 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 */
+ { int ret = r_reflexive(z);
+ if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 207 */
+ if (ret < 0) return ret;
+ }
+ lab4:
+ ;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ { 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;
+ { int ret = r_noun(z);
+ if (ret == 0) goto lab1; /* call noun, line 208 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab5:
+ ;
+ }
+ lab2:
+ lab1:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 211 */
+ z->ket = z->c; /* [, line 211 */
+ if (!(eq_s_b(z, 1, s_9))) { z->c = z->l - m; goto lab8; }
+ z->bra = z->c; /* ], line 211 */
+ { int ret;
+ 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 ret = r_derivational(z);
+ if (ret == 0) goto lab9; /* call derivational, line 214 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb = m3;
+ }
+ z->c = z->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_KOI8_R_russian.h b/libstemmer_c/src_c/stem_KOI8_R_russian.h
new file mode 100644
index 0000000..de2179d
--- /dev/null
+++ b/libstemmer_c/src_c/stem_KOI8_R_russian.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 * russian_KOI8_R_create_env(void);
+extern void russian_KOI8_R_close_env(struct SN_env * z);
+
+extern int russian_KOI8_R_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_danish.c b/libstemmer_c/src_c/stem_UTF_8_danish.c
new file mode 100644
index 0000000..bb98298
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_danish.c
@@ -0,0 +1,344 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int danish_UTF_8_stem(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 3, s_0_0, -1, 1, 0},
+/* 1 */ { 5, s_0_1, 0, 1, 0},
+/* 2 */ { 4, s_0_2, -1, 1, 0},
+/* 3 */ { 1, s_0_3, -1, 1, 0},
+/* 4 */ { 5, s_0_4, 3, 1, 0},
+/* 5 */ { 4, s_0_5, 3, 1, 0},
+/* 6 */ { 6, s_0_6, 5, 1, 0},
+/* 7 */ { 3, s_0_7, 3, 1, 0},
+/* 8 */ { 4, s_0_8, 3, 1, 0},
+/* 9 */ { 3, s_0_9, 3, 1, 0},
+/* 10 */ { 2, s_0_10, -1, 1, 0},
+/* 11 */ { 5, s_0_11, 10, 1, 0},
+/* 12 */ { 4, s_0_12, 10, 1, 0},
+/* 13 */ { 2, s_0_13, -1, 1, 0},
+/* 14 */ { 5, s_0_14, 13, 1, 0},
+/* 15 */ { 4, s_0_15, 13, 1, 0},
+/* 16 */ { 1, s_0_16, -1, 2, 0},
+/* 17 */ { 4, s_0_17, 16, 1, 0},
+/* 18 */ { 2, s_0_18, 16, 1, 0},
+/* 19 */ { 5, s_0_19, 18, 1, 0},
+/* 20 */ { 7, s_0_20, 19, 1, 0},
+/* 21 */ { 4, s_0_21, 18, 1, 0},
+/* 22 */ { 5, s_0_22, 18, 1, 0},
+/* 23 */ { 4, s_0_23, 18, 1, 0},
+/* 24 */ { 3, s_0_24, 16, 1, 0},
+/* 25 */ { 6, s_0_25, 24, 1, 0},
+/* 26 */ { 5, s_0_26, 24, 1, 0},
+/* 27 */ { 3, s_0_27, 16, 1, 0},
+/* 28 */ { 3, s_0_28, 16, 1, 0},
+/* 29 */ { 5, s_0_29, 28, 1, 0},
+/* 30 */ { 2, s_0_30, -1, 1, 0},
+/* 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 struct among a_1[4] =
+{
+/* 0 */ { 2, s_1_0, -1, -1, 0},
+/* 1 */ { 2, s_1_1, -1, -1, 0},
+/* 2 */ { 2, s_1_2, -1, -1, 0},
+/* 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 struct among a_2[5] =
+{
+/* 0 */ { 2, s_2_0, -1, 1, 0},
+/* 1 */ { 3, s_2_1, 0, 1, 0},
+/* 2 */ { 4, s_2_2, 1, 1, 0},
+/* 3 */ { 3, s_2_3, -1, 1, 0},
+/* 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 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 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 */
+ }
+ 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 */
+ }
+ }
+ z->I[0] = z->c; /* setmark p1, line 34 */
+ /* try, line 35 */
+ if (!(z->I[0] < z->I[1])) goto lab2;
+ z->I[0] = z->I[1];
+lab2:
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 41 */
+ among_var = find_among_b(z, a_0, 32); /* substring, line 41 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 41 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 56 */
+ if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */
+ z->bra = z->c; /* ], line 56 */
+ z->lb = m3;
+ }
+ 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 */
+ }
+ z->bra = z->c; /* ], line 62 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 62 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_other_suffix(struct SN_env * z) {
+ int among_var;
+ { int m = z->l - z->c; (void) m; /* 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 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m3; /* setlimit, line 67 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 67 */
+ among_var = find_among_b(z, a_2, 5); /* substring, line 67 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 67 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 70 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 4, s_2); /* <-, line 72 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_undouble(struct SN_env * z) {
+ { int m3; /* setlimit, line 76 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 76 */
+ if (!(out_grouping_b_U(z, g_v, 97, 248))) { z->lb = m3; 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;
+ }
+ if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */
+ { int ret;
+ 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 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->lb = z->c; z->c = z->l; /* backwards, line 85 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_danish.h b/libstemmer_c/src_c/stem_UTF_8_danish.h
new file mode 100644
index 0000000..ed744d4
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_danish.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 * danish_UTF_8_create_env(void);
+extern void danish_UTF_8_close_env(struct SN_env * z);
+
+extern int danish_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_dutch.c b/libstemmer_c/src_c/stem_UTF_8_dutch.c
new file mode 100644
index 0000000..3de469b
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_dutch.c
@@ -0,0 +1,653 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int dutch_UTF_8_stem(struct SN_env * z);
+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);
+static int r_R1(struct SN_env * z);
+static int r_mark_regions(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 6, 0},
+/* 1 */ { 2, s_0_1, 0, 1, 0},
+/* 2 */ { 2, s_0_2, 0, 1, 0},
+/* 3 */ { 2, s_0_3, 0, 2, 0},
+/* 4 */ { 2, s_0_4, 0, 2, 0},
+/* 5 */ { 2, s_0_5, 0, 3, 0},
+/* 6 */ { 2, s_0_6, 0, 3, 0},
+/* 7 */ { 2, s_0_7, 0, 4, 0},
+/* 8 */ { 2, s_0_8, 0, 4, 0},
+/* 9 */ { 2, s_0_9, 0, 5, 0},
+/* 10 */ { 2, s_0_10, 0, 5, 0}
+};
+
+static symbol s_1_1[1] = { 'I' };
+static symbol s_1_2[1] = { 'Y' };
+
+static 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 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 struct among a_3[5] =
+{
+/* 0 */ { 3, s_3_0, -1, 2, 0},
+/* 1 */ { 2, s_3_1, -1, 3, 0},
+/* 2 */ { 2, s_3_2, -1, 2, 0},
+/* 3 */ { 5, s_3_3, 2, 1, 0},
+/* 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 struct among a_4[6] =
+{
+/* 0 */ { 3, s_4_0, -1, 1, 0},
+/* 1 */ { 2, s_4_1, -1, 2, 0},
+/* 2 */ { 3, s_4_2, -1, 1, 0},
+/* 3 */ { 4, s_4_3, -1, 3, 0},
+/* 4 */ { 4, s_4_4, -1, 4, 0},
+/* 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 struct among a_5[4] =
+{
+/* 0 */ { 2, s_5_0, -1, -1, 0},
+/* 1 */ { 2, s_5_1, -1, -1, 0},
+/* 2 */ { 2, s_5_2, -1, -1, 0},
+/* 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 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;
+ z->bra = z->c; /* [, line 43 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ 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 */
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ z->c = c_test;
+ }
+ { int c = z->c; /* try, line 57 */
+ z->bra = z->c; /* [, line 57 */
+ if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; }
+ z->ket = z->c; /* ], line 57 */
+ { int ret;
+ 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;
+ while(1) { /* goto, line 58 */
+ int c = z->c;
+ if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3;
+ z->bra = z->c; /* [, line 59 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab4;
+ lab5:
+ z->c = c;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ z->c = c;
+ 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 */
+ }
+ }
+ continue;
+ lab2:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[0] = z->c; /* setmark p1, line 69 */
+ /* try, line 70 */
+ if (!(z->I[0] < 3)) goto lab2;
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[1] = z->c; /* setmark p2, line 71 */
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 75 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 77 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_undouble(struct SN_env * z) {
+ { int m_test = z->l - z->c; /* test, line 91 */
+ 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 */
+ }
+ z->bra = z->c; /* ], line 91 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 91 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_e_ending(struct SN_env * z) {
+ z->B[0] = 0; /* unset e_found, line 95 */
+ z->ket = z->c; /* [, line 96 */
+ if (!(eq_s_b(z, 1, s_13))) return 0;
+ z->bra = z->c; /* ], line 96 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 96 */
+ 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;
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 96 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set e_found, line 97 */
+ { int ret = r_undouble(z);
+ if (ret == 0) return 0; /* call undouble, line 98 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_en_ending(struct SN_env * z) {
+ { 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; /* 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 */
+ if (!(eq_s_b(z, 3, s_14))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 102 */
+ if (ret < 0) return ret;
+ }
+ { int ret = r_undouble(z);
+ if (ret == 0) return 0; /* call undouble, line 103 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ { int m = z->l - z->c; (void) m; /* do, line 107 */
+ z->ket = z->c; /* [, line 108 */
+ among_var = find_among_b(z, a_3, 5); /* substring, line 108 */
+ if (!(among_var)) goto lab0;
+ z->bra = z->c; /* ], line 108 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret = r_R1(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_en_ending(z);
+ if (ret == 0) goto lab0; /* call en_ending, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret = r_R1(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 (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ { int ret = r_R2(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 */
+ if (!(eq_s_b(z, 1, s_17))) goto lab3;
+ goto lab2;
+ lab3:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 122 */
+ if (ret < 0) return ret;
+ }
+ z->ket = z->c; /* [, line 123 */
+ if (!(eq_s_b(z, 2, s_18))) goto lab2;
+ z->bra = z->c; /* ], line 123 */
+ { int ret = r_en_ending(z);
+ if (ret == 0) goto lab2; /* call en_ending, line 123 */
+ if (ret < 0) return ret;
+ }
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 126 */
+ z->ket = z->c; /* [, line 127 */
+ among_var = find_among_b(z, a_4, 6); /* substring, line 127 */
+ if (!(among_var)) goto lab4;
+ z->bra = z->c; /* ], line 127 */
+ switch(among_var) {
+ case 0: goto lab4;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 129 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 129 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ { int ret = r_R2(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 */
+ if (!(eq_s_b(z, 1, s_20))) goto lab7;
+ goto lab6;
+ lab7:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 130 */
+ if (ret < 0) return ret;
+ }
+ goto lab5;
+ lab6:
+ z->c = z->l - m;
+ { int ret = r_undouble(z);
+ if (ret == 0) goto lab4; /* call undouble, line 130 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab5:
+ break;
+ case 2:
+ { int ret = r_R2(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 */
+ if (!(eq_s_b(z, 1, s_21))) goto lab8;
+ goto lab4;
+ lab8:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 136 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 136 */
+ if (ret < 0) return ret;
+ }
+ { int ret = r_e_ending(z);
+ if (ret == 0) goto lab4; /* call e_ending, line 136 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 139 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 139 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab4; /* call R2, line 142 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab4:
+ z->c = z->l - m;
+ }
+ { 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 m_test = z->l - z->c; /* test, line 148 */
+ 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;
+ 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 */
+ }
+ z->bra = z->c; /* ], line 152 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 152 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ return 1;
+}
+
+extern int dutch_UTF_8_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 161 */
+
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_dutch.h b/libstemmer_c/src_c/stem_UTF_8_dutch.h
new file mode 100644
index 0000000..a996464
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_dutch.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 * dutch_UTF_8_create_env(void);
+extern void dutch_UTF_8_close_env(struct SN_env * z);
+
+extern int dutch_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_english.c b/libstemmer_c/src_c/stem_UTF_8_english.c
new file mode 100644
index 0000000..1452eea
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_english.c
@@ -0,0 +1,1176 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int english_UTF_8_stem(struct SN_env * z);
+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);
+static int r_Step_4(struct SN_env * z);
+static int r_Step_3(struct SN_env * z);
+static int r_Step_2(struct SN_env * z);
+static int r_Step_1c(struct SN_env * z);
+static int r_Step_1b(struct SN_env * z);
+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);
+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);
+
+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] =
+{
+/* 0 */ { 6, s_0_0, -1, -1, 0},
+/* 1 */ { 5, s_0_1, -1, -1, 0}
+};
+
+static symbol s_1_0[1] = { '\'' };
+static symbol s_1_1[3] = { '\'', 's', '\'' };
+static symbol s_1_2[2] = { '\'', 's' };
+
+static 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 struct among a_2[6] =
+{
+/* 0 */ { 3, s_2_0, -1, 2, 0},
+/* 1 */ { 1, s_2_1, -1, 3, 0},
+/* 2 */ { 3, s_2_2, 1, 2, 0},
+/* 3 */ { 4, s_2_3, 1, 1, 0},
+/* 4 */ { 2, s_2_4, 1, -1, 0},
+/* 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 struct among a_3[13] =
+{
+/* 0 */ { 0, 0, -1, 3, 0},
+/* 1 */ { 2, s_3_1, 0, 2, 0},
+/* 2 */ { 2, s_3_2, 0, 2, 0},
+/* 3 */ { 2, s_3_3, 0, 2, 0},
+/* 4 */ { 2, s_3_4, 0, 2, 0},
+/* 5 */ { 2, s_3_5, 0, 1, 0},
+/* 6 */ { 2, s_3_6, 0, 2, 0},
+/* 7 */ { 2, s_3_7, 0, 2, 0},
+/* 8 */ { 2, s_3_8, 0, 2, 0},
+/* 9 */ { 2, s_3_9, 0, 2, 0},
+/* 10 */ { 2, s_3_10, 0, 1, 0},
+/* 11 */ { 2, s_3_11, 0, 2, 0},
+/* 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 struct among a_4[6] =
+{
+/* 0 */ { 2, s_4_0, -1, 2, 0},
+/* 1 */ { 3, s_4_1, 0, 1, 0},
+/* 2 */ { 3, s_4_2, -1, 2, 0},
+/* 3 */ { 4, s_4_3, -1, 2, 0},
+/* 4 */ { 5, s_4_4, 3, 1, 0},
+/* 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 struct among a_5[24] =
+{
+/* 0 */ { 4, s_5_0, -1, 3, 0},
+/* 1 */ { 4, s_5_1, -1, 2, 0},
+/* 2 */ { 3, s_5_2, -1, 13, 0},
+/* 3 */ { 2, s_5_3, -1, 16, 0},
+/* 4 */ { 3, s_5_4, 3, 12, 0},
+/* 5 */ { 4, s_5_5, 4, 4, 0},
+/* 6 */ { 4, s_5_6, 3, 8, 0},
+/* 7 */ { 5, s_5_7, 3, 14, 0},
+/* 8 */ { 6, s_5_8, 3, 15, 0},
+/* 9 */ { 5, s_5_9, 3, 10, 0},
+/* 10 */ { 5, s_5_10, 3, 5, 0},
+/* 11 */ { 5, s_5_11, -1, 8, 0},
+/* 12 */ { 6, s_5_12, -1, 12, 0},
+/* 13 */ { 5, s_5_13, -1, 11, 0},
+/* 14 */ { 6, s_5_14, -1, 1, 0},
+/* 15 */ { 7, s_5_15, 14, 7, 0},
+/* 16 */ { 5, s_5_16, -1, 8, 0},
+/* 17 */ { 5, s_5_17, -1, 7, 0},
+/* 18 */ { 7, s_5_18, 17, 6, 0},
+/* 19 */ { 4, s_5_19, -1, 6, 0},
+/* 20 */ { 4, s_5_20, -1, 7, 0},
+/* 21 */ { 7, s_5_21, -1, 11, 0},
+/* 22 */ { 7, s_5_22, -1, 9, 0},
+/* 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 struct among a_6[9] =
+{
+/* 0 */ { 5, s_6_0, -1, 4, 0},
+/* 1 */ { 5, s_6_1, -1, 6, 0},
+/* 2 */ { 5, s_6_2, -1, 3, 0},
+/* 3 */ { 5, s_6_3, -1, 4, 0},
+/* 4 */ { 4, s_6_4, -1, 4, 0},
+/* 5 */ { 6, s_6_5, -1, 1, 0},
+/* 6 */ { 7, s_6_6, 5, 2, 0},
+/* 7 */ { 3, s_6_7, -1, 5, 0},
+/* 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 struct among a_7[18] =
+{
+/* 0 */ { 2, s_7_0, -1, 1, 0},
+/* 1 */ { 4, s_7_1, -1, 1, 0},
+/* 2 */ { 4, s_7_2, -1, 1, 0},
+/* 3 */ { 4, s_7_3, -1, 1, 0},
+/* 4 */ { 4, s_7_4, -1, 1, 0},
+/* 5 */ { 3, s_7_5, -1, 1, 0},
+/* 6 */ { 3, s_7_6, -1, 1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 3, s_7_8, -1, 1, 0},
+/* 9 */ { 2, s_7_9, -1, 1, 0},
+/* 10 */ { 3, s_7_10, -1, 1, 0},
+/* 11 */ { 3, s_7_11, -1, 2, 0},
+/* 12 */ { 2, s_7_12, -1, 1, 0},
+/* 13 */ { 3, s_7_13, -1, 1, 0},
+/* 14 */ { 3, s_7_14, -1, 1, 0},
+/* 15 */ { 3, s_7_15, -1, 1, 0},
+/* 16 */ { 4, s_7_16, 15, 1, 0},
+/* 17 */ { 5, s_7_17, 16, 1, 0}
+};
+
+static symbol s_8_0[1] = { 'e' };
+static symbol s_8_1[1] = { 'l' };
+
+static 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 struct among a_9[8] =
+{
+/* 0 */ { 7, s_9_0, -1, -1, 0},
+/* 1 */ { 7, s_9_1, -1, -1, 0},
+/* 2 */ { 6, s_9_2, -1, -1, 0},
+/* 3 */ { 7, s_9_3, -1, -1, 0},
+/* 4 */ { 6, s_9_4, -1, -1, 0},
+/* 5 */ { 7, s_9_5, -1, -1, 0},
+/* 6 */ { 7, s_9_6, -1, -1, 0},
+/* 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 struct among a_10[18] =
+{
+/* 0 */ { 5, s_10_0, -1, -1, 0},
+/* 1 */ { 5, s_10_1, -1, -1, 0},
+/* 2 */ { 4, s_10_2, -1, -1, 0},
+/* 3 */ { 6, s_10_3, -1, -1, 0},
+/* 4 */ { 5, s_10_4, -1, 3, 0},
+/* 5 */ { 5, s_10_5, -1, 9, 0},
+/* 6 */ { 6, s_10_6, -1, 7, 0},
+/* 7 */ { 4, s_10_7, -1, -1, 0},
+/* 8 */ { 4, s_10_8, -1, 6, 0},
+/* 9 */ { 5, s_10_9, -1, 4, 0},
+/* 10 */ { 4, s_10_10, -1, -1, 0},
+/* 11 */ { 4, s_10_11, -1, 10, 0},
+/* 12 */ { 6, s_10_12, -1, 11, 0},
+/* 13 */ { 5, s_10_13, -1, 2, 0},
+/* 14 */ { 4, s_10_14, -1, 1, 0},
+/* 15 */ { 3, s_10_15, -1, -1, 0},
+/* 16 */ { 5, s_10_16, -1, 5, 0},
+/* 17 */ { 4, s_10_17, -1, 8, 0}
+};
+
+static unsigned char g_v[] = { 17, 65, 16, 1 };
+
+static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 };
+
+static 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 int r_prelude(struct SN_env * z) {
+ z->B[0] = 0; /* unset Y_found, line 26 */
+ { int c = 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 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ z->c = c;
+ }
+ { int c = 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 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set Y_found, line 28 */
+ lab1:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 29 */
+ while(1) { /* repeat, line 29 */
+ int c = z->c;
+ while(1) { /* goto, line 29 */
+ int c = z->c;
+ if (!(in_grouping_U(z, g_v, 97, 121))) 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;
+ 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 */
+ }
+ }
+ { int ret;
+ 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;
+ break;
+ }
+ z->c = c;
+ }
+ return 1;
+}
+
+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 */
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[1] = z->c; /* setmark p2, line 42 */
+ lab0:
+ z->c = c;
+ }
+ 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;
+ 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 */
+ }
+lab0:
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+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 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab0; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 61 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ ;
+ }
+ z->ket = z->c; /* [, line 64 */
+ among_var = find_among_b(z, a_2, 6); /* substring, line 64 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 64 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_from_s(z, 2, s_5); /* <-, line 65 */
+ 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 ret;
+ ret = slice_from_s(z, 1, s_6); /* <-, line 67 */
+ 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 */
+ 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 */
+ }
+ 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 */
+ }
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 68 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 74 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 2, s_8); /* <-, line 76 */
+ 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 */
+ }
+ }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 79 */
+ 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 */
+ 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;
+ }
+ 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->bra = z->c; /* ], line 85 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 85 */
+ 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 */
+ { int ret = r_shortv(z);
+ if (ret == 0) return 0; /* call shortv, line 86 */
+ 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;
+ }
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(eq_s_b(z, 1, s_11))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ 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 */
+ return 0;
+ lab2:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_13); /* <-, line 95 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 99 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 99 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 4, s_15); /* <-, line 101 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 4, s_16); /* <-, line 102 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_from_s(z, 4, s_17); /* <-, line 103 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_from_s(z, 3, s_18); /* <-, line 104 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret;
+ ret = slice_from_s(z, 3, s_19); /* <-, line 106 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret;
+ ret = slice_from_s(z, 3, s_20); /* <-, line 108 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 8:
+ { int ret;
+ ret = slice_from_s(z, 2, s_21); /* <-, line 110 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 9:
+ { int ret;
+ ret = slice_from_s(z, 3, s_22); /* <-, line 111 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 10:
+ { int ret;
+ ret = slice_from_s(z, 3, s_23); /* <-, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int ret;
+ ret = slice_from_s(z, 3, s_24); /* <-, line 115 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 12:
+ { int ret;
+ ret = slice_from_s(z, 3, s_25); /* <-, line 117 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 14:
+ { int ret;
+ ret = slice_from_s(z, 3, s_28); /* <-, line 119 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 15:
+ { int ret;
+ ret = slice_from_s(z, 4, s_29); /* <-, line 120 */
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 126 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 126 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 3, s_31); /* <-, line 128 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 2, s_32); /* <-, line 129 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_from_s(z, 2, s_33); /* <-, line 131 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 135 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 140 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 140 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 143 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* or, line 144 */
+ if (!(eq_s_b(z, 1, s_34))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_35))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 144 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 149 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* or, line 150 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab1; /* call R2, line 150 */
+ if (ret < 0) return ret;
+ }
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 150 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* not, line 150 */
+ { int ret = r_shortv(z);
+ if (ret == 0) goto lab2; /* call shortv, line 150 */
+ if (ret < 0) return ret;
+ }
+ return 0;
+ lab2:
+ z->c = z->l - m;
+ }
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 150 */
+ 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 ret;
+ }
+ if (!(eq_s_b(z, 1, s_36))) return 0;
+ { int ret;
+ ret = slice_del(z); /* delete, line 151 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ 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 */
+ if (!(among_var)) return 0;
+ z->ket = z->c; /* ], line 169 */
+ if (z->c < z->l) return 0; /* atlimit, line 169 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_from_s(z, 3, s_37); /* <-, line 173 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 3, s_38); /* <-, line 174 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 3, s_39); /* <-, line 175 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_from_s(z, 3, s_40); /* <-, line 176 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ ret = slice_from_s(z, 3, s_41); /* <-, line 177 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret;
+ ret = slice_from_s(z, 3, s_42); /* <-, line 181 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret;
+ ret = slice_from_s(z, 5, s_43); /* <-, line 182 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 8:
+ { int ret;
+ ret = slice_from_s(z, 4, s_44); /* <-, line 183 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 9:
+ { int ret;
+ ret = slice_from_s(z, 5, s_45); /* <-, line 184 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 10:
+ { int ret;
+ ret = slice_from_s(z, 4, s_46); /* <-, line 185 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int ret;
+ ret = slice_from_s(z, 5, s_47); /* <-, line 186 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 (!(eq_s(z, 1, s_48))) goto lab1;
+ z->ket = z->c; /* ], line 202 */
+ z->c = c;
+ 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 */
+ }
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_49); /* <-, line 202 */
+ if (ret < 0) return ret;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+extern int english_UTF_8_stem(struct SN_env * z) {
+ { int c = z->c; /* or, line 206 */
+ { int ret = r_exception1(z);
+ if (ret == 0) goto lab1; /* call exception1, line 206 */
+ 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 */
+ }
+ goto lab2;
+ lab3:
+ z->c = c;
+ }
+ goto lab0;
+ lab2:
+ z->c = c;
+ { int c = z->c; /* do, line 208 */
+ { int ret = r_prelude(z);
+ if (ret == 0) goto lab4; /* call prelude, line 208 */
+ if (ret < 0) return ret;
+ }
+ lab4:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 209 */
+ { int ret = r_mark_regions(z);
+ if (ret == 0) goto lab5; /* call mark_regions, line 209 */
+ if (ret < 0) return ret;
+ }
+ lab5:
+ z->c = c;
+ }
+ z->lb = z->c; z->c = z->l; /* backwards, line 210 */
+
+ { int m = z->l - z->c; (void) m; /* do, line 212 */
+ { int ret = r_Step_1a(z);
+ if (ret == 0) goto lab6; /* call Step_1a, line 212 */
+ if (ret < 0) return ret;
+ }
+ lab6:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* or, line 214 */
+ { int ret = r_exception2(z);
+ if (ret == 0) goto lab8; /* call exception2, line 214 */
+ if (ret < 0) return ret;
+ }
+ goto lab7;
+ lab8:
+ z->c = z->l - m;
+ { int m = z->l - z->c; (void) m; /* do, line 216 */
+ { int ret = r_Step_1b(z);
+ if (ret == 0) goto lab9; /* call Step_1b, line 216 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 217 */
+ { int ret = r_Step_1c(z);
+ if (ret == 0) goto lab10; /* call Step_1c, line 217 */
+ if (ret < 0) return ret;
+ }
+ lab10:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 219 */
+ { int ret = r_Step_2(z);
+ if (ret == 0) goto lab11; /* call Step_2, line 219 */
+ if (ret < 0) return ret;
+ }
+ lab11:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 220 */
+ { int ret = r_Step_3(z);
+ if (ret == 0) goto lab12; /* call Step_3, line 220 */
+ if (ret < 0) return ret;
+ }
+ lab12:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 221 */
+ { int ret = r_Step_4(z);
+ if (ret == 0) goto lab13; /* call Step_4, line 221 */
+ if (ret < 0) return ret;
+ }
+ lab13:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 223 */
+ { int ret = r_Step_5(z);
+ if (ret == 0) goto lab14; /* call Step_5, line 223 */
+ if (ret < 0) return ret;
+ }
+ lab14:
+ z->c = z->l - m;
+ }
+ }
+ lab7:
+ z->c = z->lb;
+ { int c = z->c; /* do, line 226 */
+ { int ret = r_postlude(z);
+ if (ret == 0) goto lab15; /* call postlude, line 226 */
+ if (ret < 0) return ret;
+ }
+ lab15:
+ z->c = c;
+ }
+ }
+lab0:
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_english.h b/libstemmer_c/src_c/stem_UTF_8_english.h
new file mode 100644
index 0000000..619a8bc
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_english.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 * english_UTF_8_create_env(void);
+extern void english_UTF_8_close_env(struct SN_env * z);
+
+extern int english_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_finnish.c b/libstemmer_c/src_c/stem_UTF_8_finnish.c
new file mode 100644
index 0000000..a221be6
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_finnish.c
@@ -0,0 +1,808 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int finnish_UTF_8_stem(struct SN_env * z);
+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);
+static int r_i_plural(struct SN_env * z);
+static int r_case_ending(struct SN_env * z);
+static int r_VI(struct SN_env * z);
+static int r_LONG(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 2, s_0_0, -1, 1, 0},
+/* 1 */ { 3, s_0_1, -1, 2, 0},
+/* 2 */ { 4, s_0_2, -1, 1, 0},
+/* 3 */ { 3, s_0_3, -1, 1, 0},
+/* 4 */ { 3, s_0_4, -1, 1, 0},
+/* 5 */ { 4, s_0_5, -1, 1, 0},
+/* 6 */ { 6, s_0_6, -1, 1, 0},
+/* 7 */ { 2, s_0_7, -1, 1, 0},
+/* 8 */ { 3, s_0_8, -1, 1, 0},
+/* 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 struct among a_1[6] =
+{
+/* 0 */ { 3, s_1_0, -1, -1, 0},
+/* 1 */ { 2, s_1_1, -1, -1, 0},
+/* 2 */ { 3, s_1_2, -1, -1, 0},
+/* 3 */ { 2, s_1_3, -1, -1, 0},
+/* 4 */ { 3, s_1_4, 3, -1, 0},
+/* 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 struct among a_2[6] =
+{
+/* 0 */ { 4, s_2_0, -1, -1, 0},
+/* 1 */ { 3, s_2_1, -1, -1, 0},
+/* 2 */ { 4, s_2_2, -1, -1, 0},
+/* 3 */ { 3, s_2_3, -1, -1, 0},
+/* 4 */ { 4, s_2_4, 3, -1, 0},
+/* 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 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] =
+{
+/* 0 */ { 3, s_4_0, -1, 3, 0},
+/* 1 */ { 3, s_4_1, -1, 3, 0},
+/* 2 */ { 3, s_4_2, -1, 3, 0},
+/* 3 */ { 2, s_4_3, -1, 2, 0},
+/* 4 */ { 2, s_4_4, -1, 1, 0},
+/* 5 */ { 2, s_4_5, -1, 4, 0},
+/* 6 */ { 2, s_4_6, -1, 6, 0},
+/* 7 */ { 3, s_4_7, -1, 5, 0},
+/* 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 struct among a_5[7] =
+{
+/* 0 */ { 2, s_5_0, -1, -1, 0},
+/* 1 */ { 2, s_5_1, -1, -1, 0},
+/* 2 */ { 2, s_5_2, -1, -1, 0},
+/* 3 */ { 2, s_5_3, -1, -1, 0},
+/* 4 */ { 2, s_5_4, -1, -1, 0},
+/* 5 */ { 4, s_5_5, -1, -1, 0},
+/* 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] =
+{
+/* 0 */ { 1, s_6_0, -1, 8, 0},
+/* 1 */ { 3, s_6_1, 0, -1, 0},
+/* 2 */ { 2, s_6_2, 0, -1, 0},
+/* 3 */ { 3, s_6_3, 0, -1, 0},
+/* 4 */ { 2, s_6_4, 0, -1, 0},
+/* 5 */ { 3, s_6_5, 4, -1, 0},
+/* 6 */ { 3, s_6_6, 4, -1, 0},
+/* 7 */ { 3, s_6_7, 4, 9, 0},
+/* 8 */ { 3, s_6_8, -1, -1, 0},
+/* 9 */ { 3, s_6_9, -1, -1, 0},
+/* 10 */ { 3, s_6_10, -1, -1, 0},
+/* 11 */ { 1, s_6_11, -1, 7, 0},
+/* 12 */ { 3, s_6_12, 11, 1, 0},
+/* 13 */ { 3, s_6_13, 11, -1, r_VI},
+/* 14 */ { 4, s_6_14, 11, -1, r_LONG},
+/* 15 */ { 3, s_6_15, 11, 2, 0},
+/* 16 */ { 4, s_6_16, 11, -1, r_VI},
+/* 17 */ { 3, s_6_17, 11, 3, 0},
+/* 18 */ { 4, s_6_18, 11, -1, r_VI},
+/* 19 */ { 3, s_6_19, 11, 4, 0},
+/* 20 */ { 4, s_6_20, 11, 5, 0},
+/* 21 */ { 4, s_6_21, 11, 6, 0},
+/* 22 */ { 2, s_6_22, -1, 8, 0},
+/* 23 */ { 4, s_6_23, 22, -1, 0},
+/* 24 */ { 3, s_6_24, 22, -1, 0},
+/* 25 */ { 4, s_6_25, 22, -1, 0},
+/* 26 */ { 3, s_6_26, 22, -1, 0},
+/* 27 */ { 4, s_6_27, 26, -1, 0},
+/* 28 */ { 4, s_6_28, 26, -1, 0},
+/* 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] =
+{
+/* 0 */ { 3, s_7_0, -1, -1, 0},
+/* 1 */ { 3, s_7_1, -1, 1, 0},
+/* 2 */ { 4, s_7_2, 1, -1, 0},
+/* 3 */ { 3, s_7_3, -1, 1, 0},
+/* 4 */ { 4, s_7_4, 3, -1, 0},
+/* 5 */ { 3, s_7_5, -1, 1, 0},
+/* 6 */ { 4, s_7_6, 5, -1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 4, s_7_8, 7, -1, 0},
+/* 9 */ { 4, s_7_9, -1, -1, 0},
+/* 10 */ { 4, s_7_10, -1, 1, 0},
+/* 11 */ { 5, s_7_11, 10, -1, 0},
+/* 12 */ { 4, s_7_12, -1, 1, 0},
+/* 13 */ { 5, s_7_13, 12, -1, 0}
+};
+
+static symbol s_8_0[1] = { 'i' };
+static symbol s_8_1[1] = { 'j' };
+
+static 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 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 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[1] = z->c; /* setmark p2, line 47 */
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 55 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ if (!(in_grouping_b_U(z, g_particle_end, 97, 246))) return 0;
+ break;
+ case 2:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 64 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 66 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_possessive(struct SN_env * z) {
+ int among_var;
+ { int m3; /* setlimit, line 69 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 69 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* not, line 72 */
+ if (!(eq_s_b(z, 1, s_0))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 72 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 78 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 81 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 84 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 86 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_LONG(struct SN_env * z) {
+ if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */
+ return 1;
+}
+
+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;
+ 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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 96 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ if (!(eq_s_b(z, 1, s_4))) return 0;
+ break;
+ case 2:
+ if (!(eq_s_b(z, 1, s_5))) return 0;
+ break;
+ case 3:
+ if (!(eq_s_b(z, 1, s_6))) return 0;
+ break;
+ case 4:
+ if (!(eq_s_b(z, 1, s_7))) return 0;
+ break;
+ case 5:
+ if (!(eq_s_b(z, 2, s_8))) return 0;
+ break;
+ case 6:
+ 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 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; }
+ }
+ 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->bra = z->c; /* ], line 113 */
+ lab0:
+ ;
+ }
+ 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;
+ break;
+ case 9:
+ if (!(eq_s_b(z, 1, s_11))) return 0;
+ break;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 138 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set ending_removed, line 139 */
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 142 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* not, line 146 */
+ if (!(eq_s_b(z, 2, s_12))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ break;
+ }
+ { int ret;
+ 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;
+ 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 154 */
+ if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */
+ z->bra = z->c; /* ], line 154 */
+ z->lb = m3;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 158 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 162 */
+ if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; 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; }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 163 */
+ if (ret < 0) return ret;
+ }
+ z->lb = m3;
+ }
+ { int m3; /* setlimit, line 165 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ z->ket = z->c; /* [, line 165 */
+ among_var = find_among_b(z, a_9, 2); /* substring, line 165 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 165 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* not, line 167 */
+ if (!(eq_s_b(z, 2, s_14))) goto lab0;
+ return 0;
+ lab0:
+ z->c = z->l - m;
+ }
+ break;
+ }
+ { int ret;
+ 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;
+ 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 */
+ { 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->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 */
+ }
+ z->bra = z->c; /* ], line 174 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 174 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 175 */
+ z->ket = z->c; /* [, line 175 */
+ if (!(in_grouping_b_U(z, g_AEI, 97, 228))) 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 (ret < 0) return ret;
+ }
+ lab1:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ if (!(eq_s_b(z, 1, s_16))) goto lab4;
+ goto lab3;
+ lab4:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_17))) goto lab2;
+ }
+ lab3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 176 */
+ if (ret < 0) return ret;
+ }
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 */
+ 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->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 */
+ }
+ 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 */
+ 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 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->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 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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 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;
+ }
+ goto lab5;
+ lab6:
+ z->c = z->l - m;
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ }
+lab5:
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_finnish.h b/libstemmer_c/src_c/stem_UTF_8_finnish.h
new file mode 100644
index 0000000..d2f2fd9
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_finnish.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 * finnish_UTF_8_create_env(void);
+extern void finnish_UTF_8_close_env(struct SN_env * z);
+
+extern int finnish_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_french.c b/libstemmer_c/src_c/stem_UTF_8_french.c
new file mode 100644
index 0000000..1f95c7c
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_french.c
@@ -0,0 +1,1296 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int french_UTF_8_stem(struct SN_env * z);
+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);
+static int r_verb_suffix(struct SN_env * z);
+static int r_i_verb_suffix(struct SN_env * z);
+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_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);
+
+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] =
+{
+/* 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}
+};
+
+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 struct among a_1[6] =
+{
+/* 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}
+};
+
+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 struct among a_2[3] =
+{
+/* 0 */ { 2, s_2_0, -1, 2, 0},
+/* 1 */ { 4, s_2_1, -1, 1, 0},
+/* 2 */ { 2, s_2_2, -1, 3, 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 struct among a_3[43] =
+{
+/* 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}
+};
+
+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 struct among a_4[35] =
+{
+/* 0 */ { 3, s_4_0, -1, 1, 0},
+/* 1 */ { 2, s_4_1, -1, 1, 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}
+};
+
+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 struct among a_5[38] =
+{
+/* 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}
+};
+
+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 struct among a_6[7] =
+{
+/* 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},
+/* 4 */ { 3, s_6_4, -1, 2, 0},
+/* 5 */ { 3, s_6_5, -1, 2, 0},
+/* 6 */ { 2, s_6_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 struct among a_7[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}
+};
+
+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 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[] = { 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 int r_prelude(struct SN_env * z) {
+ while(1) { /* repeat, line 38 */
+ int c = 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;
+ z->bra = z->c; /* [, line 40 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab4;
+ lab5:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ goto lab4;
+ lab6:
+ z->c = c;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ goto lab2;
+ lab3:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ goto lab2;
+ lab7:
+ z->c = c;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab2:
+ z->c = c;
+ 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 */
+ }
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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 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 */
+ }
+ 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 */
+ }
+ 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 */
+ }
+ }
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 58 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[2] = z->c; /* setmark p2, line 62 */
+ lab4:
+ z->c = c;
+ }
+ 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 */
+ if (!(among_var)) goto lab0;
+ z->ket = z->c; /* ], line 68 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ ret = slice_from_s(z, 1, s_11); /* <-, line 69 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_12); /* <-, line 70 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 1, s_13); /* <-, line 71 */
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_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 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 83 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 87 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 90 */
+ 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 ret = r_R2(z);
+ if (ret == 0) goto lab2; /* call R2, line 91 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 91 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab1:
+ lab0:
+ ;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 95 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_16); /* <-, line 95 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_17); /* <-, line 98 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_18); /* <-, line 101 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 105 */
+ 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 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 108 */
+ 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 */
+ { int ret = r_R2(z);
+ if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 108 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* or, line 109 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab5; /* call R2, line 109 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 109 */
+ if (ret < 0) return ret;
+ }
+ goto lab4;
+ lab5:
+ z->c = z->l - m;
+ { int ret = r_R1(z);
+ if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_20); /* <-, line 109 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 111 */
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_21); /* <-, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 7:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 120 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 120 */
+ 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 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab6; }
+ case 1:
+ { int m = z->l - z->c; (void) m; /* or, line 123 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab8; /* call R2, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 123 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab7:
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* or, line 124 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab10; /* call R2, line 124 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 124 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab9:
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 125 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab6:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 132 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 132 */
+ 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 ret = r_R2(z);
+ if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ 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 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab13; /* call R2, line 133 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 133 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab12:
+ lab11:
+ ;
+ }
+ break;
+ case 9:
+ { int ret;
+ ret = slice_from_s(z, 3, s_27); /* <-, line 135 */
+ 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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 2, s_28); /* <-, line 136 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int m = z->l - z->c; (void) m; /* or, line 138 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab15; /* call R2, line 138 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 138 */
+ if (ret < 0) return ret;
+ }
+ goto lab14;
+ lab15:
+ z->c = z->l - m;
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 138 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_29); /* <-, line 138 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab14:
+ break;
+ case 12:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 141 */
+ 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 (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 ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_30); /* <-, line 146 */
+ if (ret < 0) return ret;
+ }
+ return 0; /* fail, line 146 */
+ break;
+ case 14:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 147 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_from_s(z, 3, s_31); /* <-, line 147 */
+ if (ret < 0) return ret;
+ }
+ return 0; /* fail, line 147 */
+ 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 ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 149 */
+ if (ret < 0) return ret;
+ }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 149 */
+ if (ret < 0) return ret;
+ }
+ return 0; /* fail, line 149 */
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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 */
+ switch(among_var) {
+ case 0: { z->lb = m3; 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ 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;
+ 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 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 168 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 176 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 181 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ 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; }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 190 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ { int m3; /* setlimit, line 191 */
+ int m = z->l - z->c; (void) m;
+ 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 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* or, line 193 */
+ 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; }
+ }
+ lab1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 193 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_from_s(z, 1, s_36); /* <-, line 195 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 196 */
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ 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 */
+ 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->bra = z->c; /* ], line 203 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 203 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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;
+ i--;
+ continue;
+ lab0:
+ break;
+ }
+ if (i > 0) return 0;
+ }
+ z->ket = z->c; /* [, line 208 */
+ { int m = z->l - z->c; (void) m; /* or, line 208 */
+ if (!(eq_s_b(z, 2, s_38))) goto lab2;
+ goto lab1;
+ lab2:
+ z->c = z->l - m;
+ 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 */
+ 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 ret = r_prelude(z);
+ if (ret == 0) goto lab0; /* call prelude, line 214 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 215 */
+ { int ret = r_mark_regions(z);
+ if (ret == 0) goto lab1; /* call mark_regions, line 215 */
+ if (ret < 0) return ret;
+ }
+ lab1:
+ z->c = c;
+ }
+ z->lb = z->c; z->c = z->l; /* backwards, line 216 */
+
+ { 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 ret = r_standard_suffix(z);
+ if (ret == 0) goto lab6; /* call standard_suffix, line 220 */
+ if (ret < 0) return ret;
+ }
+ goto lab5;
+ lab6:
+ z->c = z->l - m;
+ { int ret = r_i_verb_suffix(z);
+ if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */
+ if (ret < 0) return ret;
+ }
+ goto lab5;
+ lab7:
+ z->c = z->l - m;
+ { int ret = r_verb_suffix(z);
+ if (ret == 0) goto lab4; /* call verb_suffix, line 222 */
+ 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 */
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab9:
+ lab8:
+ ;
+ }
+ }
+ goto lab3;
+ lab4:
+ z->c = z->l - m;
+ { int ret = r_residual_suffix(z);
+ if (ret == 0) goto lab2; /* call residual_suffix, line 229 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab3:
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 234 */
+ { int ret = r_un_double(z);
+ if (ret == 0) goto lab11; /* call un_double, line 234 */
+ if (ret < 0) return ret;
+ }
+ lab11:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 235 */
+ { int ret = r_un_accent(z);
+ if (ret == 0) goto lab12; /* call un_accent, line 235 */
+ if (ret < 0) return ret;
+ }
+ lab12:
+ z->c = z->l - m;
+ }
+ z->c = z->lb;
+ { int c = z->c; /* do, line 237 */
+ { int ret = r_postlude(z);
+ if (ret == 0) goto lab13; /* call postlude, line 237 */
+ if (ret < 0) return ret;
+ }
+ lab13:
+ z->c = c;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_french.h b/libstemmer_c/src_c/stem_UTF_8_french.h
new file mode 100644
index 0000000..08e3418
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_french.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 * french_UTF_8_create_env(void);
+extern void french_UTF_8_close_env(struct SN_env * z);
+
+extern int french_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_german.c b/libstemmer_c/src_c/stem_UTF_8_german.c
new file mode 100644
index 0000000..d66a137
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_german.c
@@ -0,0 +1,526 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int german_UTF_8_stem(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 6, 0},
+/* 1 */ { 1, s_0_1, 0, 2, 0},
+/* 2 */ { 1, s_0_2, 0, 1, 0},
+/* 3 */ { 2, s_0_3, 0, 3, 0},
+/* 4 */ { 2, s_0_4, 0, 4, 0},
+/* 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 struct among a_1[7] =
+{
+/* 0 */ { 1, s_1_0, -1, 1, 0},
+/* 1 */ { 2, s_1_1, -1, 1, 0},
+/* 2 */ { 2, s_1_2, -1, 1, 0},
+/* 3 */ { 3, s_1_3, -1, 1, 0},
+/* 4 */ { 2, s_1_4, -1, 1, 0},
+/* 5 */ { 1, s_1_5, -1, 2, 0},
+/* 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 struct among a_2[4] =
+{
+/* 0 */ { 2, s_2_0, -1, 1, 0},
+/* 1 */ { 2, s_2_1, -1, 1, 0},
+/* 2 */ { 2, s_2_2, -1, 2, 0},
+/* 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 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 struct among a_4[8] =
+{
+/* 0 */ { 3, s_4_0, -1, 1, 0},
+/* 1 */ { 2, s_4_1, -1, 2, 0},
+/* 2 */ { 3, s_4_2, -1, 1, 0},
+/* 3 */ { 4, s_4_3, -1, 3, 0},
+/* 4 */ { 4, s_4_4, -1, 2, 0},
+/* 5 */ { 2, s_4_5, -1, 2, 0},
+/* 6 */ { 4, s_4_6, -1, 3, 0},
+/* 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 unsigned char g_s_ending[] = { 117, 30, 5 };
+
+static 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 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 */
+ 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 */
+ 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 */
+ }
+ }
+ lab1:
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ z->c = c_test;
+ }
+ while(1) { /* repeat, line 36 */
+ int c = z->c;
+ while(1) { /* goto, line 36 */
+ int c = z->c;
+ if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4;
+ z->bra = z->c; /* [, line 37 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab5;
+ lab6:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ }
+ lab5:
+ z->c = c;
+ 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 */
+ }
+ }
+ continue;
+ lab3:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+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 */
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[0] = z->c; /* setmark p1, line 49 */
+ /* try, line 50 */
+ if (!(z->I[0] < z->I[2])) goto lab2;
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[1] = z->c; /* setmark p2, line 51 */
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 55 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 57 */
+ among_var = find_among(z, a_0, 6); /* substring, line 57 */
+ if (!(among_var)) goto lab0;
+ z->ket = z->c; /* ], line 57 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ { int m = z->l - z->c; (void) m; /* do, line 74 */
+ z->ket = z->c; /* [, line 75 */
+ among_var = find_among_b(z, a_1, 7); /* substring, line 75 */
+ if (!(among_var)) goto lab0;
+ z->bra = z->c; /* ], line 75 */
+ { int ret = r_R1(z);
+ if (ret == 0) goto lab0; /* call R1, line 75 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 84 */
+ z->ket = z->c; /* [, line 85 */
+ among_var = find_among_b(z, a_2, 4); /* substring, line 85 */
+ if (!(among_var)) goto lab1;
+ z->bra = z->c; /* ], line 85 */
+ { int ret = r_R1(z);
+ if (ret == 0) goto lab1; /* call R1, line 85 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: goto lab1;
+ case 1:
+ { int ret;
+ 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 */
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 90 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 94 */
+ z->ket = z->c; /* [, line 95 */
+ among_var = find_among_b(z, a_4, 8); /* substring, line 95 */
+ if (!(among_var)) goto lab2;
+ z->bra = z->c; /* ], line 95 */
+ { int ret = r_R2(z);
+ if (ret == 0) goto lab2; /* call R2, line 95 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: goto lab2;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 97 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 98 */
+ z->ket = z->c; /* [, line 98 */
+ if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; }
+ z->bra = z->c; /* ], line 98 */
+ { int m = z->l - z->c; (void) m; /* not, line 98 */
+ if (!(eq_s_b(z, 1, s_12))) goto lab4;
+ { z->c = z->l - m; goto lab3; }
+ lab4:
+ z->c = z->l - m;
+ }
+ { int ret = r_R2(z);
+ if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 98 */
+ if (ret < 0) return ret;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 2:
+ { int m = z->l - z->c; (void) m; /* not, line 101 */
+ if (!(eq_s_b(z, 1, s_13))) goto lab5;
+ goto lab2;
+ lab5:
+ z->c = z->l - m;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 101 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 104 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 105 */
+ z->ket = z->c; /* [, line 106 */
+ { int m = z->l - z->c; (void) m; /* 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; }
+ }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 106 */
+ if (ret < 0) return ret;
+ }
+ lab6:
+ ;
+ }
+ break;
+ case 4:
+ { int ret;
+ ret = slice_del(z); /* delete, line 110 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 111 */
+ z->ket = z->c; /* [, line 112 */
+ among_var = find_among_b(z, a_3, 2); /* substring, line 112 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab9; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 114 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab9:
+ ;
+ }
+ break;
+ }
+ lab2:
+ z->c = z->l - m;
+ }
+ return 1;
+}
+
+extern int german_UTF_8_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 127 */
+
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_german.h b/libstemmer_c/src_c/stem_UTF_8_german.h
new file mode 100644
index 0000000..5bd84d4
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_german.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 * german_UTF_8_create_env(void);
+extern void german_UTF_8_close_env(struct SN_env * z);
+
+extern int german_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
new file mode 100644
index 0000000..5639b1c
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_italian.c
@@ -0,0 +1,1113 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int italian_UTF_8_stem(struct SN_env * z);
+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);
+static int r_attached_pronoun(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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 7, 0},
+/* 1 */ { 2, s_0_1, 0, 6, 0},
+/* 2 */ { 2, s_0_2, 0, 1, 0},
+/* 3 */ { 2, s_0_3, 0, 2, 0},
+/* 4 */ { 2, s_0_4, 0, 3, 0},
+/* 5 */ { 2, s_0_5, 0, 4, 0},
+/* 6 */ { 2, s_0_6, 0, 5, 0}
+};
+
+static symbol s_1_1[1] = { 'I' };
+static symbol s_1_2[1] = { 'U' };
+
+static 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 struct among a_2[37] =
+{
+/* 0 */ { 2, s_2_0, -1, -1, 0},
+/* 1 */ { 4, s_2_1, 0, -1, 0},
+/* 2 */ { 6, s_2_2, 0, -1, 0},
+/* 3 */ { 4, s_2_3, 0, -1, 0},
+/* 4 */ { 4, s_2_4, 0, -1, 0},
+/* 5 */ { 4, s_2_5, 0, -1, 0},
+/* 6 */ { 2, s_2_6, -1, -1, 0},
+/* 7 */ { 4, s_2_7, 6, -1, 0},
+/* 8 */ { 6, s_2_8, 6, -1, 0},
+/* 9 */ { 4, s_2_9, 6, -1, 0},
+/* 10 */ { 4, s_2_10, 6, -1, 0},
+/* 11 */ { 4, s_2_11, 6, -1, 0},
+/* 12 */ { 2, s_2_12, -1, -1, 0},
+/* 13 */ { 4, s_2_13, 12, -1, 0},
+/* 14 */ { 6, s_2_14, 12, -1, 0},
+/* 15 */ { 4, s_2_15, 12, -1, 0},
+/* 16 */ { 4, s_2_16, 12, -1, 0},
+/* 17 */ { 4, s_2_17, 12, -1, 0},
+/* 18 */ { 4, s_2_18, 12, -1, 0},
+/* 19 */ { 2, s_2_19, -1, -1, 0},
+/* 20 */ { 2, s_2_20, -1, -1, 0},
+/* 21 */ { 4, s_2_21, 20, -1, 0},
+/* 22 */ { 6, s_2_22, 20, -1, 0},
+/* 23 */ { 4, s_2_23, 20, -1, 0},
+/* 24 */ { 4, s_2_24, 20, -1, 0},
+/* 25 */ { 4, s_2_25, 20, -1, 0},
+/* 26 */ { 3, s_2_26, 20, -1, 0},
+/* 27 */ { 2, s_2_27, -1, -1, 0},
+/* 28 */ { 2, s_2_28, -1, -1, 0},
+/* 29 */ { 2, s_2_29, -1, -1, 0},
+/* 30 */ { 2, s_2_30, -1, -1, 0},
+/* 31 */ { 2, s_2_31, -1, -1, 0},
+/* 32 */ { 4, s_2_32, 31, -1, 0},
+/* 33 */ { 6, s_2_33, 31, -1, 0},
+/* 34 */ { 4, s_2_34, 31, -1, 0},
+/* 35 */ { 4, s_2_35, 31, -1, 0},
+/* 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 struct among a_3[5] =
+{
+/* 0 */ { 4, s_3_0, -1, 1, 0},
+/* 1 */ { 4, s_3_1, -1, 1, 0},
+/* 2 */ { 2, s_3_2, -1, 2, 0},
+/* 3 */ { 2, s_3_3, -1, 2, 0},
+/* 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 struct among a_4[4] =
+{
+/* 0 */ { 2, s_4_0, -1, -1, 0},
+/* 1 */ { 4, s_4_1, -1, -1, 0},
+/* 2 */ { 2, s_4_2, -1, -1, 0},
+/* 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 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 struct among a_6[51] =
+{
+/* 0 */ { 3, s_6_0, -1, 1, 0},
+/* 1 */ { 5, s_6_1, -1, 3, 0},
+/* 2 */ { 3, s_6_2, -1, 1, 0},
+/* 3 */ { 4, s_6_3, -1, 1, 0},
+/* 4 */ { 3, s_6_4, -1, 9, 0},
+/* 5 */ { 4, s_6_5, -1, 1, 0},
+/* 6 */ { 4, s_6_6, -1, 5, 0},
+/* 7 */ { 3, s_6_7, -1, 1, 0},
+/* 8 */ { 6, s_6_8, 7, 1, 0},
+/* 9 */ { 4, s_6_9, -1, 1, 0},
+/* 10 */ { 5, s_6_10, -1, 3, 0},
+/* 11 */ { 5, s_6_11, -1, 1, 0},
+/* 12 */ { 5, s_6_12, -1, 1, 0},
+/* 13 */ { 6, s_6_13, -1, 4, 0},
+/* 14 */ { 6, s_6_14, -1, 2, 0},
+/* 15 */ { 6, s_6_15, -1, 4, 0},
+/* 16 */ { 5, s_6_16, -1, 2, 0},
+/* 17 */ { 3, s_6_17, -1, 1, 0},
+/* 18 */ { 4, s_6_18, -1, 1, 0},
+/* 19 */ { 5, s_6_19, -1, 1, 0},
+/* 20 */ { 6, s_6_20, 19, 7, 0},
+/* 21 */ { 4, s_6_21, -1, 1, 0},
+/* 22 */ { 3, s_6_22, -1, 9, 0},
+/* 23 */ { 4, s_6_23, -1, 1, 0},
+/* 24 */ { 4, s_6_24, -1, 5, 0},
+/* 25 */ { 3, s_6_25, -1, 1, 0},
+/* 26 */ { 6, s_6_26, 25, 1, 0},
+/* 27 */ { 4, s_6_27, -1, 1, 0},
+/* 28 */ { 5, s_6_28, -1, 1, 0},
+/* 29 */ { 5, s_6_29, -1, 1, 0},
+/* 30 */ { 4, s_6_30, -1, 1, 0},
+/* 31 */ { 6, s_6_31, -1, 4, 0},
+/* 32 */ { 6, s_6_32, -1, 2, 0},
+/* 33 */ { 6, s_6_33, -1, 4, 0},
+/* 34 */ { 5, s_6_34, -1, 2, 0},
+/* 35 */ { 3, s_6_35, -1, 1, 0},
+/* 36 */ { 4, s_6_36, -1, 1, 0},
+/* 37 */ { 6, s_6_37, -1, 6, 0},
+/* 38 */ { 6, s_6_38, -1, 6, 0},
+/* 39 */ { 4, s_6_39, -1, 1, 0},
+/* 40 */ { 3, s_6_40, -1, 9, 0},
+/* 41 */ { 3, s_6_41, -1, 1, 0},
+/* 42 */ { 4, s_6_42, -1, 1, 0},
+/* 43 */ { 3, s_6_43, -1, 1, 0},
+/* 44 */ { 6, s_6_44, -1, 6, 0},
+/* 45 */ { 6, s_6_45, -1, 6, 0},
+/* 46 */ { 3, s_6_46, -1, 9, 0},
+/* 47 */ { 4, s_6_47, -1, 8, 0},
+/* 48 */ { 5, s_6_48, -1, 1, 0},
+/* 49 */ { 5, s_6_49, -1, 1, 0},
+/* 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 struct among a_7[87] =
+{
+/* 0 */ { 4, 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},
+/* 5 */ { 3, s_7_5, -1, 1, 0},
+/* 6 */ { 3, s_7_6, -1, 1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 6, s_7_8, -1, 1, 0},
+/* 9 */ { 6, s_7_9, -1, 1, 0},
+/* 10 */ { 4, s_7_10, -1, 1, 0},
+/* 11 */ { 4, s_7_11, -1, 1, 0},
+/* 12 */ { 3, s_7_12, -1, 1, 0},
+/* 13 */ { 3, s_7_13, -1, 1, 0},
+/* 14 */ { 3, s_7_14, -1, 1, 0},
+/* 15 */ { 4, s_7_15, -1, 1, 0},
+/* 16 */ { 3, s_7_16, -1, 1, 0},
+/* 17 */ { 5, s_7_17, 16, 1, 0},
+/* 18 */ { 5, s_7_18, 16, 1, 0},
+/* 19 */ { 5, s_7_19, 16, 1, 0},
+/* 20 */ { 3, s_7_20, -1, 1, 0},
+/* 21 */ { 5, s_7_21, 20, 1, 0},
+/* 22 */ { 5, s_7_22, 20, 1, 0},
+/* 23 */ { 3, s_7_23, -1, 1, 0},
+/* 24 */ { 6, s_7_24, -1, 1, 0},
+/* 25 */ { 6, s_7_25, -1, 1, 0},
+/* 26 */ { 3, s_7_26, -1, 1, 0},
+/* 27 */ { 4, s_7_27, -1, 1, 0},
+/* 28 */ { 4, s_7_28, -1, 1, 0},
+/* 29 */ { 4, s_7_29, -1, 1, 0},
+/* 30 */ { 4, s_7_30, -1, 1, 0},
+/* 31 */ { 4, s_7_31, -1, 1, 0},
+/* 32 */ { 4, s_7_32, -1, 1, 0},
+/* 33 */ { 4, s_7_33, -1, 1, 0},
+/* 34 */ { 3, s_7_34, -1, 1, 0},
+/* 35 */ { 3, s_7_35, -1, 1, 0},
+/* 36 */ { 6, s_7_36, -1, 1, 0},
+/* 37 */ { 6, s_7_37, -1, 1, 0},
+/* 38 */ { 3, s_7_38, -1, 1, 0},
+/* 39 */ { 3, s_7_39, -1, 1, 0},
+/* 40 */ { 3, s_7_40, -1, 1, 0},
+/* 41 */ { 3, s_7_41, -1, 1, 0},
+/* 42 */ { 4, s_7_42, -1, 1, 0},
+/* 43 */ { 4, s_7_43, -1, 1, 0},
+/* 44 */ { 4, s_7_44, -1, 1, 0},
+/* 45 */ { 4, s_7_45, -1, 1, 0},
+/* 46 */ { 4, s_7_46, -1, 1, 0},
+/* 47 */ { 5, s_7_47, -1, 1, 0},
+/* 48 */ { 5, s_7_48, -1, 1, 0},
+/* 49 */ { 5, s_7_49, -1, 1, 0},
+/* 50 */ { 5, s_7_50, -1, 1, 0},
+/* 51 */ { 5, s_7_51, -1, 1, 0},
+/* 52 */ { 6, s_7_52, -1, 1, 0},
+/* 53 */ { 4, s_7_53, -1, 1, 0},
+/* 54 */ { 4, s_7_54, -1, 1, 0},
+/* 55 */ { 6, s_7_55, 54, 1, 0},
+/* 56 */ { 6, s_7_56, 54, 1, 0},
+/* 57 */ { 4, s_7_57, -1, 1, 0},
+/* 58 */ { 3, s_7_58, -1, 1, 0},
+/* 59 */ { 6, s_7_59, 58, 1, 0},
+/* 60 */ { 5, s_7_60, 58, 1, 0},
+/* 61 */ { 5, s_7_61, 58, 1, 0},
+/* 62 */ { 5, s_7_62, 58, 1, 0},
+/* 63 */ { 6, s_7_63, -1, 1, 0},
+/* 64 */ { 6, s_7_64, -1, 1, 0},
+/* 65 */ { 3, s_7_65, -1, 1, 0},
+/* 66 */ { 6, s_7_66, 65, 1, 0},
+/* 67 */ { 5, s_7_67, 65, 1, 0},
+/* 68 */ { 5, s_7_68, 65, 1, 0},
+/* 69 */ { 5, s_7_69, 65, 1, 0},
+/* 70 */ { 8, s_7_70, -1, 1, 0},
+/* 71 */ { 8, s_7_71, -1, 1, 0},
+/* 72 */ { 6, s_7_72, -1, 1, 0},
+/* 73 */ { 6, s_7_73, -1, 1, 0},
+/* 74 */ { 6, s_7_74, -1, 1, 0},
+/* 75 */ { 3, s_7_75, -1, 1, 0},
+/* 76 */ { 3, s_7_76, -1, 1, 0},
+/* 77 */ { 3, s_7_77, -1, 1, 0},
+/* 78 */ { 3, s_7_78, -1, 1, 0},
+/* 79 */ { 3, s_7_79, -1, 1, 0},
+/* 80 */ { 3, s_7_80, -1, 1, 0},
+/* 81 */ { 2, s_7_81, -1, 1, 0},
+/* 82 */ { 2, s_7_82, -1, 1, 0},
+/* 83 */ { 4, s_7_83, -1, 1, 0},
+/* 84 */ { 4, s_7_84, -1, 1, 0},
+/* 85 */ { 4, s_7_85, -1, 1, 0},
+/* 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 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 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 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;
+ z->bra = z->c; /* [, line 36 */
+ among_var = find_among(z, a_0, 7); /* substring, line 36 */
+ if (!(among_var)) goto lab0;
+ z->ket = z->c; /* ], line 36 */
+ switch(among_var) {
+ case 0: goto lab0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ 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 */
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ break;
+ }
+ z->c = c_test;
+ }
+ while(1) { /* repeat, line 46 */
+ int c = z->c;
+ while(1) { /* goto, line 46 */
+ int c = z->c;
+ if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2;
+ z->bra = z->c; /* [, line 47 */
+ { int c = 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 (ret < 0) return ret;
+ }
+ goto lab3;
+ lab4:
+ z->c = c;
+ 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 (ret < 0) return ret;
+ }
+ }
+ lab3:
+ z->c = c;
+ 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 */
+ }
+ }
+ continue;
+ lab1:
+ z->c = c;
+ 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 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ lab7:
+ ;
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 62 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[2] = z->c; /* setmark p2, line 66 */
+ lab10:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 70 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 72 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_attached_pronoun(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 87 */
+ if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */
+ z->bra = z->c; /* ], line 87 */
+ among_var = find_among_b(z, a_3, 5); /* among, line 97 */
+ if (!(among_var)) return 0;
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 97 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 104 */
+ among_var = find_among_b(z, a_6, 51); /* substring, line 104 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 104 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 111 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 111 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 113 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 113 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 114 */
+ z->ket = z->c; /* [, line 114 */
+ if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 114 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 123 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 125 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 125 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 126 */
+ z->ket = z->c; /* [, line 127 */
+ among_var = find_among_b(z, a_4, 4); /* substring, line 127 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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 1:
+ z->ket = z->c; /* [, line 128 */
+ if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 128 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 135 */
+ z->ket = z->c; /* [, line 136 */
+ among_var = find_among_b(z, a_5, 3); /* substring, line 136 */
+ if (!(among_var)) { z->c = z->l - m; goto lab2; }
+ z->bra = z->c; /* ], line 136 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 137 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab2:
+ ;
+ }
+ break;
+ case 9:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 142 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 142 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 143 */
+ z->ket = z->c; /* [, line 143 */
+ if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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; }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 143 */
+ if (ret < 0) return ret;
+ }
+ lab3:
+ ;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 149 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 163 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ return 1;
+}
+
+static int r_vowel_suffix(struct SN_env * z) {
+ { int m = z->l - z->c; (void) m; /* 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; }
+ 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) return ret;
+ }
+ { int ret;
+ 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; }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 173 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 175 */
+ z->ket = z->c; /* [, line 176 */
+ if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; 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; }
+ { int ret = r_RV(z);
+ if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 176 */
+ if (ret < 0) return ret;
+ }
+ lab1:
+ ;
+ }
+ return 1;
+}
+
+extern int italian_UTF_8_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 184 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 186 */
+ { int m = z->l - z->c; (void) m; /* 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;
+ { int ret = r_verb_suffix(z);
+ if (ret == 0) goto lab3; /* call verb_suffix, line 186 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab4:
+ lab3:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_italian.h b/libstemmer_c/src_c/stem_UTF_8_italian.h
new file mode 100644
index 0000000..3bee080
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_italian.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 * italian_UTF_8_create_env(void);
+extern void italian_UTF_8_close_env(struct SN_env * z);
+
+extern int italian_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_norwegian.c b/libstemmer_c/src_c/stem_UTF_8_norwegian.c
new file mode 100644
index 0000000..6a5ea99
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_norwegian.c
@@ -0,0 +1,302 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int norwegian_UTF_8_stem(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);
+
+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] =
+{
+/* 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 */ { 4, s_0_3, 1, 1, 0},
+/* 4 */ { 4, s_0_4, 1, 1, 0},
+/* 5 */ { 3, s_0_5, 1, 1, 0},
+/* 6 */ { 3, s_0_6, 1, 1, 0},
+/* 7 */ { 6, s_0_7, 6, 1, 0},
+/* 8 */ { 4, s_0_8, 1, 3, 0},
+/* 9 */ { 2, s_0_9, -1, 1, 0},
+/* 10 */ { 5, s_0_10, 9, 1, 0},
+/* 11 */ { 2, s_0_11, -1, 1, 0},
+/* 12 */ { 2, s_0_12, -1, 1, 0},
+/* 13 */ { 5, s_0_13, 12, 1, 0},
+/* 14 */ { 1, s_0_14, -1, 2, 0},
+/* 15 */ { 2, s_0_15, 14, 1, 0},
+/* 16 */ { 2, s_0_16, 14, 1, 0},
+/* 17 */ { 4, s_0_17, 16, 1, 0},
+/* 18 */ { 5, s_0_18, 16, 1, 0},
+/* 19 */ { 4, s_0_19, 16, 1, 0},
+/* 20 */ { 7, s_0_20, 19, 1, 0},
+/* 21 */ { 3, s_0_21, 14, 1, 0},
+/* 22 */ { 6, s_0_22, 21, 1, 0},
+/* 23 */ { 3, s_0_23, 14, 1, 0},
+/* 24 */ { 3, s_0_24, 14, 1, 0},
+/* 25 */ { 2, s_0_25, -1, 1, 0},
+/* 26 */ { 3, s_0_26, 25, 1, 0},
+/* 27 */ { 3, s_0_27, -1, 3, 0},
+/* 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 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 struct among a_2[11] =
+{
+/* 0 */ { 3, s_2_0, -1, 1, 0},
+/* 1 */ { 4, s_2_1, 0, 1, 0},
+/* 2 */ { 2, s_2_2, -1, 1, 0},
+/* 3 */ { 3, s_2_3, 2, 1, 0},
+/* 4 */ { 3, s_2_4, 2, 1, 0},
+/* 5 */ { 4, s_2_5, 4, 1, 0},
+/* 6 */ { 3, s_2_6, -1, 1, 0},
+/* 7 */ { 3, s_2_7, -1, 1, 0},
+/* 8 */ { 4, s_2_8, 7, 1, 0},
+/* 9 */ { 4, s_2_9, 7, 1, 0},
+/* 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 unsigned char g_s_ending[] = { 119, 125, 149, 1 };
+
+static symbol s_0[] = { 'k' };
+static 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 */
+ }
+ 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 */
+ }
+ }
+ z->I[0] = z->c; /* setmark p1, line 31 */
+ /* try, line 32 */
+ if (!(z->I[0] < z->I[1])) goto lab2;
+ z->I[0] = z->I[1];
+lab2:
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 38 */
+ among_var = find_among_b(z, a_0, 29); /* substring, line 38 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 38 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_0))) return 0;
+ if (!(out_grouping_b_U(z, g_v, 97, 248))) return 0;
+ }
+ lab0:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 54 */
+ if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */
+ z->bra = z->c; /* ], line 54 */
+ z->lb = m3;
+ }
+ 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 */
+ }
+ z->bra = z->c; /* ], line 59 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 59 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ z->ket = z->c; /* [, line 63 */
+ among_var = find_among_b(z, a_2, 11); /* substring, line 63 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 63 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 67 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int norwegian_UTF_8_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 75 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_norwegian.h b/libstemmer_c/src_c/stem_UTF_8_norwegian.h
new file mode 100644
index 0000000..c75444b
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_norwegian.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 * norwegian_UTF_8_create_env(void);
+extern void norwegian_UTF_8_close_env(struct SN_env * z);
+
+extern int norwegian_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_porter.c b/libstemmer_c/src_c/stem_UTF_8_porter.c
new file mode 100644
index 0000000..1d22e71
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_porter.c
@@ -0,0 +1,794 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int porter_UTF_8_stem(struct SN_env * z);
+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);
+static int r_Step_3(struct SN_env * z);
+static int r_Step_2(struct SN_env * z);
+static int r_Step_1c(struct SN_env * z);
+static int r_Step_1b(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 1, s_0_0, -1, 3, 0},
+/* 1 */ { 3, s_0_1, 0, 2, 0},
+/* 2 */ { 4, s_0_2, 0, 1, 0},
+/* 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] =
+{
+/* 0 */ { 0, 0, -1, 3, 0},
+/* 1 */ { 2, s_1_1, 0, 2, 0},
+/* 2 */ { 2, s_1_2, 0, 2, 0},
+/* 3 */ { 2, s_1_3, 0, 2, 0},
+/* 4 */ { 2, s_1_4, 0, 2, 0},
+/* 5 */ { 2, s_1_5, 0, 1, 0},
+/* 6 */ { 2, s_1_6, 0, 2, 0},
+/* 7 */ { 2, s_1_7, 0, 2, 0},
+/* 8 */ { 2, s_1_8, 0, 2, 0},
+/* 9 */ { 2, s_1_9, 0, 2, 0},
+/* 10 */ { 2, s_1_10, 0, 1, 0},
+/* 11 */ { 2, s_1_11, 0, 2, 0},
+/* 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 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] =
+{
+/* 0 */ { 4, s_3_0, -1, 3, 0},
+/* 1 */ { 4, s_3_1, -1, 2, 0},
+/* 2 */ { 4, s_3_2, -1, 4, 0},
+/* 3 */ { 3, s_3_3, -1, 6, 0},
+/* 4 */ { 4, s_3_4, -1, 9, 0},
+/* 5 */ { 5, s_3_5, -1, 12, 0},
+/* 6 */ { 5, s_3_6, -1, 5, 0},
+/* 7 */ { 5, s_3_7, -1, 10, 0},
+/* 8 */ { 6, s_3_8, -1, 14, 0},
+/* 9 */ { 5, s_3_9, -1, 13, 0},
+/* 10 */ { 6, s_3_10, -1, 1, 0},
+/* 11 */ { 7, s_3_11, 10, 8, 0},
+/* 12 */ { 5, s_3_12, -1, 10, 0},
+/* 13 */ { 5, s_3_13, -1, 8, 0},
+/* 14 */ { 7, s_3_14, 13, 7, 0},
+/* 15 */ { 4, s_3_15, -1, 7, 0},
+/* 16 */ { 4, s_3_16, -1, 8, 0},
+/* 17 */ { 7, s_3_17, -1, 13, 0},
+/* 18 */ { 7, s_3_18, -1, 11, 0},
+/* 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 struct among a_4[7] =
+{
+/* 0 */ { 5, s_4_0, -1, 2, 0},
+/* 1 */ { 5, s_4_1, -1, 3, 0},
+/* 2 */ { 5, s_4_2, -1, 1, 0},
+/* 3 */ { 5, s_4_3, -1, 2, 0},
+/* 4 */ { 4, s_4_4, -1, 2, 0},
+/* 5 */ { 3, s_4_5, -1, 3, 0},
+/* 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] =
+{
+/* 0 */ { 2, s_5_0, -1, 1, 0},
+/* 1 */ { 4, s_5_1, -1, 1, 0},
+/* 2 */ { 4, s_5_2, -1, 1, 0},
+/* 3 */ { 4, s_5_3, -1, 1, 0},
+/* 4 */ { 4, s_5_4, -1, 1, 0},
+/* 5 */ { 3, s_5_5, -1, 1, 0},
+/* 6 */ { 3, s_5_6, -1, 1, 0},
+/* 7 */ { 3, s_5_7, -1, 1, 0},
+/* 8 */ { 3, s_5_8, -1, 1, 0},
+/* 9 */ { 2, s_5_9, -1, 1, 0},
+/* 10 */ { 3, s_5_10, -1, 1, 0},
+/* 11 */ { 3, s_5_11, -1, 2, 0},
+/* 12 */ { 2, s_5_12, -1, 1, 0},
+/* 13 */ { 3, s_5_13, -1, 1, 0},
+/* 14 */ { 3, s_5_14, -1, 1, 0},
+/* 15 */ { 3, s_5_15, -1, 1, 0},
+/* 16 */ { 4, s_5_16, 15, 1, 0},
+/* 17 */ { 5, s_5_17, 16, 1, 0},
+/* 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 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;
+ return 1;
+}
+
+static int r_R1(struct SN_env * z) {
+ if (!(z->I[0] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_Step_1a(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 25 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_Step_1b(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 34 */
+ among_var = find_among_b(z, a_2, 3); /* substring, line 34 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 34 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R1(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 */
+ 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 */
+ }
+ }
+ z->c = z->l - m_test;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 38 */
+ if (ret < 0) return ret;
+ }
+ { int m_test = z->l - z->c; /* test, line 39 */
+ among_var = find_among_b(z, a_1, 13); /* substring, line 39 */
+ 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_3); /* <+, line 41 */
+ z->c = c;
+ }
+ 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 */
+ }
+ z->bra = z->c; /* ], line 44 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 44 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ if (z->c != z->I[0]) return 0; /* atmark, line 45 */
+ { int m_test = z->l - z->c; /* test, line 45 */
+ { int ret = r_shortv(z);
+ if (ret == 0) return 0; /* call shortv, line 45 */
+ 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_4); /* <+, line 45 */
+ z->c = c;
+ }
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 */
+ if (!(eq_s_b(z, 1, s_5))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ 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 */
+ }
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_7); /* <-, line 54 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_Step_2(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 58 */
+ among_var = find_among_b(z, a_3, 20); /* substring, line 58 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 58 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 58 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 7:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 9:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 11:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 13:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_Step_3(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 82 */
+ among_var = find_among_b(z, a_4, 7); /* substring, line 82 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 82 */
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 82 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 87 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_Step_4(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 92 */
+ among_var = find_among_b(z, a_5, 19); /* substring, line 92 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 92 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 92 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ if (!(eq_s_b(z, 1, s_24))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 1, s_25))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 96 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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 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;
+ { 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 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;
+ }
+ }
+lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 103 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+static int r_Step_5b(struct SN_env * z) {
+ z->ket = z->c; /* [, line 107 */
+ if (!(eq_s_b(z, 1, s_27))) return 0;
+ z->bra = z->c; /* ], line 107 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 108 */
+ if (ret < 0) return ret;
+ }
+ if (!(eq_s_b(z, 1, s_28))) return 0;
+ { int ret;
+ ret = slice_del(z); /* delete, line 109 */
+ if (ret < 0) return ret;
+ }
+ return 1;
+}
+
+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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ z->B[0] = 1; /* set Y_found, line 116 */
+ lab0:
+ z->c = c;
+ }
+ { int c = z->c; /* do, line 117 */
+ while(1) { /* repeat, line 117 */
+ int c = z->c;
+ while(1) { /* goto, line 117 */
+ int c = z->c;
+ if (!(in_grouping_U(z, g_v, 97, 121))) 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;
+ 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 */
+ }
+ }
+ { int ret;
+ 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;
+ break;
+ }
+ z->c = c;
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[1] = z->c; /* setmark p2, line 123 */
+ lab4:
+ z->c = c;
+ }
+ z->lb = z->c; z->c = z->l; /* backwards, line 126 */
+
+ { int m = z->l - z->c; (void) m; /* do, line 127 */
+ { int ret = r_Step_1a(z);
+ if (ret == 0) goto lab9; /* call Step_1a, line 127 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 128 */
+ { int ret = r_Step_1b(z);
+ if (ret == 0) goto lab10; /* call Step_1b, line 128 */
+ if (ret < 0) return ret;
+ }
+ lab10:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 129 */
+ { int ret = r_Step_1c(z);
+ if (ret == 0) goto lab11; /* call Step_1c, line 129 */
+ if (ret < 0) return ret;
+ }
+ lab11:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 130 */
+ { int ret = r_Step_2(z);
+ if (ret == 0) goto lab12; /* call Step_2, line 130 */
+ if (ret < 0) return ret;
+ }
+ lab12:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 131 */
+ { int ret = r_Step_3(z);
+ if (ret == 0) goto lab13; /* call Step_3, line 131 */
+ if (ret < 0) return ret;
+ }
+ lab13:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 132 */
+ { int ret = r_Step_4(z);
+ if (ret == 0) goto lab14; /* call Step_4, line 132 */
+ if (ret < 0) return ret;
+ }
+ lab14:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 133 */
+ { int ret = r_Step_5a(z);
+ if (ret == 0) goto lab15; /* call Step_5a, line 133 */
+ if (ret < 0) return ret;
+ }
+ lab15:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 134 */
+ { int ret = r_Step_5b(z);
+ if (ret == 0) goto lab16; /* call Step_5b, line 134 */
+ if (ret < 0) return ret;
+ }
+ lab16:
+ z->c = z->l - m;
+ }
+ z->c = z->lb;
+ { int c = z->c; /* do, line 137 */
+ if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */
+ while(1) { /* repeat, line 137 */
+ int c = z->c;
+ while(1) { /* goto, line 137 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 137 */
+ if (!(eq_s(z, 1, s_33))) goto lab19;
+ z->ket = z->c; /* ], line 137 */
+ z->c = c;
+ 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 */
+ }
+ }
+ { int ret;
+ ret = slice_from_s(z, 1, s_34); /* <-, line 137 */
+ if (ret < 0) return ret;
+ }
+ continue;
+ lab18:
+ z->c = c;
+ break;
+ }
+ lab17:
+ z->c = c;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_porter.h b/libstemmer_c/src_c/stem_UTF_8_porter.h
new file mode 100644
index 0000000..82d469a
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_porter.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 * porter_UTF_8_create_env(void);
+extern void porter_UTF_8_close_env(struct SN_env * z);
+
+extern int porter_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_portuguese.c b/libstemmer_c/src_c/stem_UTF_8_portuguese.c
new file mode 100644
index 0000000..e288544
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_portuguese.c
@@ -0,0 +1,1055 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int portuguese_UTF_8_stem(struct SN_env * z);
+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);
+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_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);
+
+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] =
+{
+/* 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 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 struct among a_2[4] =
+{
+/* 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}
+};
+
+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 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 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] =
+{
+/* 0 */ { 3, s_5_0, -1, 1, 0},
+/* 1 */ { 6, s_5_1, -1, 1, 0},
+/* 2 */ { 6, s_5_2, -1, 4, 0},
+/* 3 */ { 3, s_5_3, -1, 9, 0},
+/* 4 */ { 5, s_5_4, -1, 1, 0},
+/* 5 */ { 3, s_5_5, -1, 1, 0},
+/* 6 */ { 4, s_5_6, -1, 1, 0},
+/* 7 */ { 3, s_5_7, -1, 8, 0},
+/* 8 */ { 3, s_5_8, -1, 1, 0},
+/* 9 */ { 6, s_5_9, -1, 2, 0},
+/* 10 */ { 5, s_5_10, -1, 7, 0},
+/* 11 */ { 4, s_5_11, -1, 1, 0},
+/* 12 */ { 5, s_5_12, -1, 6, 0},
+/* 13 */ { 6, s_5_13, 12, 5, 0},
+/* 14 */ { 5, s_5_14, -1, 1, 0},
+/* 15 */ { 5, s_5_15, -1, 1, 0},
+/* 16 */ { 6, s_5_16, -1, 3, 0},
+/* 17 */ { 3, s_5_17, -1, 1, 0},
+/* 18 */ { 4, s_5_18, -1, 1, 0},
+/* 19 */ { 3, s_5_19, -1, 1, 0},
+/* 20 */ { 6, s_5_20, -1, 1, 0},
+/* 21 */ { 6, s_5_21, -1, 1, 0},
+/* 22 */ { 3, s_5_22, -1, 8, 0},
+/* 23 */ { 6, s_5_23, -1, 1, 0},
+/* 24 */ { 4, s_5_24, -1, 1, 0},
+/* 25 */ { 4, s_5_25, -1, 1, 0},
+/* 26 */ { 7, s_5_26, -1, 4, 0},
+/* 27 */ { 4, s_5_27, -1, 9, 0},
+/* 28 */ { 6, s_5_28, -1, 1, 0},
+/* 29 */ { 4, s_5_29, -1, 1, 0},
+/* 30 */ { 5, s_5_30, -1, 1, 0},
+/* 31 */ { 4, s_5_31, -1, 8, 0},
+/* 32 */ { 4, s_5_32, -1, 1, 0},
+/* 33 */ { 7, s_5_33, -1, 2, 0},
+/* 34 */ { 6, s_5_34, -1, 7, 0},
+/* 35 */ { 7, s_5_35, -1, 3, 0},
+/* 36 */ { 6, s_5_36, -1, 1, 0},
+/* 37 */ { 5, s_5_37, -1, 1, 0},
+/* 38 */ { 7, s_5_38, -1, 1, 0},
+/* 39 */ { 4, s_5_39, -1, 1, 0},
+/* 40 */ { 5, s_5_40, -1, 1, 0},
+/* 41 */ { 4, s_5_41, -1, 1, 0},
+/* 42 */ { 7, s_5_42, -1, 1, 0},
+/* 43 */ { 7, s_5_43, -1, 1, 0},
+/* 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] =
+{
+/* 0 */ { 3, s_6_0, -1, 1, 0},
+/* 1 */ { 3, s_6_1, -1, 1, 0},
+/* 2 */ { 2, s_6_2, -1, 1, 0},
+/* 3 */ { 4, s_6_3, 2, 1, 0},
+/* 4 */ { 4, s_6_4, 2, 1, 0},
+/* 5 */ { 4, s_6_5, 2, 1, 0},
+/* 6 */ { 3, s_6_6, -1, 1, 0},
+/* 7 */ { 3, s_6_7, -1, 1, 0},
+/* 8 */ { 3, s_6_8, -1, 1, 0},
+/* 9 */ { 3, s_6_9, -1, 1, 0},
+/* 10 */ { 4, s_6_10, -1, 1, 0},
+/* 11 */ { 4, s_6_11, -1, 1, 0},
+/* 12 */ { 4, s_6_12, -1, 1, 0},
+/* 13 */ { 4, s_6_13, -1, 1, 0},
+/* 14 */ { 4, s_6_14, -1, 1, 0},
+/* 15 */ { 4, s_6_15, -1, 1, 0},
+/* 16 */ { 2, s_6_16, -1, 1, 0},
+/* 17 */ { 4, s_6_17, 16, 1, 0},
+/* 18 */ { 4, s_6_18, 16, 1, 0},
+/* 19 */ { 4, s_6_19, 16, 1, 0},
+/* 20 */ { 2, s_6_20, -1, 1, 0},
+/* 21 */ { 3, s_6_21, 20, 1, 0},
+/* 22 */ { 5, s_6_22, 21, 1, 0},
+/* 23 */ { 5, s_6_23, 21, 1, 0},
+/* 24 */ { 5, s_6_24, 21, 1, 0},
+/* 25 */ { 4, s_6_25, 20, 1, 0},
+/* 26 */ { 4, s_6_26, 20, 1, 0},
+/* 27 */ { 4, s_6_27, 20, 1, 0},
+/* 28 */ { 4, s_6_28, 20, 1, 0},
+/* 29 */ { 2, s_6_29, -1, 1, 0},
+/* 30 */ { 4, s_6_30, 29, 1, 0},
+/* 31 */ { 4, s_6_31, 29, 1, 0},
+/* 32 */ { 4, s_6_32, 29, 1, 0},
+/* 33 */ { 5, s_6_33, 29, 1, 0},
+/* 34 */ { 5, s_6_34, 29, 1, 0},
+/* 35 */ { 5, s_6_35, 29, 1, 0},
+/* 36 */ { 3, s_6_36, -1, 1, 0},
+/* 37 */ { 3, s_6_37, -1, 1, 0},
+/* 38 */ { 4, s_6_38, -1, 1, 0},
+/* 39 */ { 4, s_6_39, -1, 1, 0},
+/* 40 */ { 4, s_6_40, -1, 1, 0},
+/* 41 */ { 5, s_6_41, -1, 1, 0},
+/* 42 */ { 5, s_6_42, -1, 1, 0},
+/* 43 */ { 5, s_6_43, -1, 1, 0},
+/* 44 */ { 2, s_6_44, -1, 1, 0},
+/* 45 */ { 2, s_6_45, -1, 1, 0},
+/* 46 */ { 2, s_6_46, -1, 1, 0},
+/* 47 */ { 2, s_6_47, -1, 1, 0},
+/* 48 */ { 4, s_6_48, 47, 1, 0},
+/* 49 */ { 4, s_6_49, 47, 1, 0},
+/* 50 */ { 3, s_6_50, 47, 1, 0},
+/* 51 */ { 5, s_6_51, 50, 1, 0},
+/* 52 */ { 5, s_6_52, 50, 1, 0},
+/* 53 */ { 5, s_6_53, 50, 1, 0},
+/* 54 */ { 4, s_6_54, 47, 1, 0},
+/* 55 */ { 4, s_6_55, 47, 1, 0},
+/* 56 */ { 4, s_6_56, 47, 1, 0},
+/* 57 */ { 4, s_6_57, 47, 1, 0},
+/* 58 */ { 2, s_6_58, -1, 1, 0},
+/* 59 */ { 5, s_6_59, 58, 1, 0},
+/* 60 */ { 5, s_6_60, 58, 1, 0},
+/* 61 */ { 5, s_6_61, 58, 1, 0},
+/* 62 */ { 4, s_6_62, 58, 1, 0},
+/* 63 */ { 4, s_6_63, 58, 1, 0},
+/* 64 */ { 4, s_6_64, 58, 1, 0},
+/* 65 */ { 5, s_6_65, 58, 1, 0},
+/* 66 */ { 5, s_6_66, 58, 1, 0},
+/* 67 */ { 5, s_6_67, 58, 1, 0},
+/* 68 */ { 5, s_6_68, 58, 1, 0},
+/* 69 */ { 5, s_6_69, 58, 1, 0},
+/* 70 */ { 5, s_6_70, 58, 1, 0},
+/* 71 */ { 2, s_6_71, -1, 1, 0},
+/* 72 */ { 3, s_6_72, 71, 1, 0},
+/* 73 */ { 3, s_6_73, 71, 1, 0},
+/* 74 */ { 5, s_6_74, 73, 1, 0},
+/* 75 */ { 5, s_6_75, 73, 1, 0},
+/* 76 */ { 5, s_6_76, 73, 1, 0},
+/* 77 */ { 6, s_6_77, 73, 1, 0},
+/* 78 */ { 6, s_6_78, 73, 1, 0},
+/* 79 */ { 6, s_6_79, 73, 1, 0},
+/* 80 */ { 7, s_6_80, 73, 1, 0},
+/* 81 */ { 7, s_6_81, 73, 1, 0},
+/* 82 */ { 7, s_6_82, 73, 1, 0},
+/* 83 */ { 6, s_6_83, 73, 1, 0},
+/* 84 */ { 5, s_6_84, 73, 1, 0},
+/* 85 */ { 7, s_6_85, 84, 1, 0},
+/* 86 */ { 7, s_6_86, 84, 1, 0},
+/* 87 */ { 7, s_6_87, 84, 1, 0},
+/* 88 */ { 4, s_6_88, -1, 1, 0},
+/* 89 */ { 4, s_6_89, -1, 1, 0},
+/* 90 */ { 4, s_6_90, -1, 1, 0},
+/* 91 */ { 7, s_6_91, 90, 1, 0},
+/* 92 */ { 7, s_6_92, 90, 1, 0},
+/* 93 */ { 7, s_6_93, 90, 1, 0},
+/* 94 */ { 7, s_6_94, 90, 1, 0},
+/* 95 */ { 6, s_6_95, 90, 1, 0},
+/* 96 */ { 8, s_6_96, 95, 1, 0},
+/* 97 */ { 8, s_6_97, 95, 1, 0},
+/* 98 */ { 8, s_6_98, 95, 1, 0},
+/* 99 */ { 4, s_6_99, -1, 1, 0},
+/*100 */ { 6, s_6_100, 99, 1, 0},
+/*101 */ { 6, s_6_101, 99, 1, 0},
+/*102 */ { 6, s_6_102, 99, 1, 0},
+/*103 */ { 8, s_6_103, 99, 1, 0},
+/*104 */ { 8, s_6_104, 99, 1, 0},
+/*105 */ { 8, s_6_105, 99, 1, 0},
+/*106 */ { 4, s_6_106, -1, 1, 0},
+/*107 */ { 5, s_6_107, -1, 1, 0},
+/*108 */ { 5, s_6_108, -1, 1, 0},
+/*109 */ { 5, s_6_109, -1, 1, 0},
+/*110 */ { 5, s_6_110, -1, 1, 0},
+/*111 */ { 5, s_6_111, -1, 1, 0},
+/*112 */ { 5, s_6_112, -1, 1, 0},
+/*113 */ { 5, s_6_113, -1, 1, 0},
+/*114 */ { 2, s_6_114, -1, 1, 0},
+/*115 */ { 2, s_6_115, -1, 1, 0},
+/*116 */ { 2, s_6_116, -1, 1, 0},
+/*117 */ { 4, s_6_117, -1, 1, 0},
+/*118 */ { 4, s_6_118, -1, 1, 0},
+/*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 struct among a_7[7] =
+{
+/* 0 */ { 1, s_7_0, -1, 1, 0},
+/* 1 */ { 1, s_7_1, -1, 1, 0},
+/* 2 */ { 1, s_7_2, -1, 1, 0},
+/* 3 */ { 2, s_7_3, -1, 1, 0},
+/* 4 */ { 2, s_7_4, -1, 1, 0},
+/* 5 */ { 2, s_7_5, -1, 1, 0},
+/* 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 struct among a_8[4] =
+{
+/* 0 */ { 1, s_8_0, -1, 1, 0},
+/* 1 */ { 2, s_8_1, -1, 2, 0},
+/* 2 */ { 2, s_8_2, -1, 1, 0},
+/* 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 int r_prelude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 36 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 37 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ lab7:
+ ;
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 54 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[2] = z->c; /* setmark p2, line 58 */
+ lab10:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 62 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 63 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_standard_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 77 */
+ among_var = find_among_b(z, a_5, 45); /* substring, line 77 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 77 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 93 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 93 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 110 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 110 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 111 */
+ z->ket = z->c; /* [, line 112 */
+ among_var = find_among_b(z, a_2, 4); /* substring, line 112 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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 1:
+ z->ket = z->c; /* [, line 113 */
+ if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 113 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ ;
+ }
+ break;
+ case 6:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 122 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 122 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 123 */
+ z->ket = z->c; /* [, line 124 */
+ among_var = find_among_b(z, a_3, 3); /* substring, line 124 */
+ if (!(among_var)) { z->c = z->l - m; goto lab1; }
+ z->bra = z->c; /* ], line 124 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 127 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ ;
+ }
+ break;
+ case 7:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 134 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 135 */
+ z->ket = z->c; /* [, line 136 */
+ among_var = find_among_b(z, a_4, 3); /* substring, line 136 */
+ if (!(among_var)) { z->c = z->l - m; goto lab2; }
+ z->bra = z->c; /* ], line 136 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 139 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab2:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 146 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 146 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 147 */
+ z->ket = z->c; /* [, line 148 */
+ if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 148 */
+ if (ret < 0) return ret;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 9:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 153 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 160 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 179 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ return 1;
+}
+
+static int r_residual_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 184 */
+ among_var = find_among_b(z, a_7, 7); /* substring, line 184 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 184 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 187 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 187 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_residual_form(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 192 */
+ among_var = find_among_b(z, a_8, 4); /* substring, line 192 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 192 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 194 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ 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 */
+ 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 */
+ if (!(eq_s_b(z, 1, s_12))) goto lab1;
+ z->c = z->l - m_test;
+ }
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ 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 */
+ if (!(eq_s_b(z, 1, s_14))) return 0;
+ z->c = z->l - m_test;
+ }
+ }
+ lab0:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 195 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int portuguese_UTF_8_stem(struct SN_env * z) {
+ { int c = 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;
+ }
+ { int c = 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->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 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;
+ { 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->ket = z->c; /* [, line 207 */
+ if (!(eq_s_b(z, 1, s_16))) goto lab7;
+ z->bra = z->c; /* ], line 207 */
+ { int m_test = z->l - z->c; /* test, line 207 */
+ if (!(eq_s_b(z, 1, s_17))) goto lab7;
+ z->c = z->l - m_test;
+ }
+ { int ret = r_RV(z);
+ if (ret == 0) goto lab7; /* call RV, line 207 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 207 */
+ if (ret < 0) return ret;
+ }
+ lab7:
+ z->c = z->l - m;
+ }
+ }
+ goto lab3;
+ lab4:
+ z->c = z->l - m;
+ { int ret = r_residual_suffix(z);
+ if (ret == 0) goto lab2; /* call residual_suffix, line 209 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab3:
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_portuguese.h b/libstemmer_c/src_c/stem_UTF_8_portuguese.h
new file mode 100644
index 0000000..9fe7f9a
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_portuguese.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 * portuguese_UTF_8_create_env(void);
+extern void portuguese_UTF_8_close_env(struct SN_env * z);
+
+extern int portuguese_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
new file mode 100644
index 0000000..19581dd
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_russian.c
@@ -0,0 +1,709 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int russian_UTF_8_stem(struct SN_env * z);
+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);
+static int r_verb(struct SN_env * z);
+static int r_reflexive(struct SN_env * z);
+static int r_adjectival(struct SN_env * z);
+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);
+
+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] =
+{
+/* 0 */ { 10, s_0_0, -1, 1, 0},
+/* 1 */ { 12, s_0_1, 0, 2, 0},
+/* 2 */ { 12, s_0_2, 0, 2, 0},
+/* 3 */ { 2, s_0_3, -1, 1, 0},
+/* 4 */ { 4, s_0_4, 3, 2, 0},
+/* 5 */ { 4, s_0_5, 3, 2, 0},
+/* 6 */ { 6, s_0_6, -1, 1, 0},
+/* 7 */ { 8, s_0_7, 6, 2, 0},
+/* 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] =
+{
+/* 0 */ { 6, s_1_0, -1, 1, 0},
+/* 1 */ { 6, s_1_1, -1, 1, 0},
+/* 2 */ { 4, s_1_2, -1, 1, 0},
+/* 3 */ { 4, s_1_3, -1, 1, 0},
+/* 4 */ { 4, s_1_4, -1, 1, 0},
+/* 5 */ { 4, s_1_5, -1, 1, 0},
+/* 6 */ { 4, s_1_6, -1, 1, 0},
+/* 7 */ { 4, s_1_7, -1, 1, 0},
+/* 8 */ { 4, s_1_8, -1, 1, 0},
+/* 9 */ { 4, s_1_9, -1, 1, 0},
+/* 10 */ { 4, s_1_10, -1, 1, 0},
+/* 11 */ { 4, s_1_11, -1, 1, 0},
+/* 12 */ { 4, s_1_12, -1, 1, 0},
+/* 13 */ { 4, s_1_13, -1, 1, 0},
+/* 14 */ { 6, s_1_14, -1, 1, 0},
+/* 15 */ { 6, s_1_15, -1, 1, 0},
+/* 16 */ { 4, s_1_16, -1, 1, 0},
+/* 17 */ { 4, s_1_17, -1, 1, 0},
+/* 18 */ { 4, s_1_18, -1, 1, 0},
+/* 19 */ { 4, s_1_19, -1, 1, 0},
+/* 20 */ { 4, s_1_20, -1, 1, 0},
+/* 21 */ { 4, s_1_21, -1, 1, 0},
+/* 22 */ { 4, s_1_22, -1, 1, 0},
+/* 23 */ { 4, s_1_23, -1, 1, 0},
+/* 24 */ { 6, s_1_24, -1, 1, 0},
+/* 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 struct among a_2[8] =
+{
+/* 0 */ { 4, s_2_0, -1, 1, 0},
+/* 1 */ { 6, s_2_1, 0, 2, 0},
+/* 2 */ { 6, s_2_2, 0, 2, 0},
+/* 3 */ { 2, s_2_3, -1, 1, 0},
+/* 4 */ { 4, s_2_4, 3, 1, 0},
+/* 5 */ { 6, s_2_5, 4, 2, 0},
+/* 6 */ { 4, s_2_6, -1, 1, 0},
+/* 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 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] =
+{
+/* 0 */ { 4, s_4_0, -1, 2, 0},
+/* 1 */ { 4, s_4_1, -1, 1, 0},
+/* 2 */ { 6, s_4_2, 1, 2, 0},
+/* 3 */ { 4, s_4_3, -1, 2, 0},
+/* 4 */ { 4, s_4_4, -1, 1, 0},
+/* 5 */ { 6, s_4_5, 4, 2, 0},
+/* 6 */ { 4, s_4_6, -1, 2, 0},
+/* 7 */ { 4, s_4_7, -1, 1, 0},
+/* 8 */ { 6, s_4_8, 7, 2, 0},
+/* 9 */ { 4, s_4_9, -1, 1, 0},
+/* 10 */ { 6, s_4_10, 9, 2, 0},
+/* 11 */ { 6, s_4_11, 9, 2, 0},
+/* 12 */ { 6, s_4_12, -1, 1, 0},
+/* 13 */ { 6, s_4_13, -1, 2, 0},
+/* 14 */ { 2, s_4_14, -1, 2, 0},
+/* 15 */ { 4, s_4_15, 14, 2, 0},
+/* 16 */ { 4, s_4_16, -1, 1, 0},
+/* 17 */ { 6, s_4_17, 16, 2, 0},
+/* 18 */ { 6, s_4_18, 16, 2, 0},
+/* 19 */ { 4, s_4_19, -1, 1, 0},
+/* 20 */ { 6, s_4_20, 19, 2, 0},
+/* 21 */ { 6, s_4_21, -1, 1, 0},
+/* 22 */ { 6, s_4_22, -1, 2, 0},
+/* 23 */ { 6, s_4_23, -1, 1, 0},
+/* 24 */ { 8, s_4_24, 23, 2, 0},
+/* 25 */ { 8, s_4_25, 23, 2, 0},
+/* 26 */ { 4, s_4_26, -1, 1, 0},
+/* 27 */ { 6, s_4_27, 26, 2, 0},
+/* 28 */ { 6, s_4_28, 26, 2, 0},
+/* 29 */ { 2, s_4_29, -1, 1, 0},
+/* 30 */ { 4, s_4_30, 29, 2, 0},
+/* 31 */ { 4, s_4_31, 29, 2, 0},
+/* 32 */ { 2, s_4_32, -1, 1, 0},
+/* 33 */ { 4, s_4_33, 32, 2, 0},
+/* 34 */ { 4, s_4_34, 32, 2, 0},
+/* 35 */ { 4, s_4_35, -1, 2, 0},
+/* 36 */ { 4, s_4_36, -1, 1, 0},
+/* 37 */ { 4, s_4_37, -1, 2, 0},
+/* 38 */ { 2, s_4_38, -1, 1, 0},
+/* 39 */ { 4, s_4_39, 38, 2, 0},
+/* 40 */ { 4, s_4_40, -1, 1, 0},
+/* 41 */ { 6, s_4_41, 40, 2, 0},
+/* 42 */ { 6, s_4_42, 40, 2, 0},
+/* 43 */ { 4, s_4_43, -1, 1, 0},
+/* 44 */ { 6, s_4_44, 43, 2, 0},
+/* 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] =
+{
+/* 0 */ { 2, s_5_0, -1, 1, 0},
+/* 1 */ { 4, s_5_1, -1, 1, 0},
+/* 2 */ { 6, s_5_2, 1, 1, 0},
+/* 3 */ { 4, s_5_3, -1, 1, 0},
+/* 4 */ { 2, s_5_4, -1, 1, 0},
+/* 5 */ { 2, s_5_5, -1, 1, 0},
+/* 6 */ { 2, s_5_6, -1, 1, 0},
+/* 7 */ { 4, s_5_7, 6, 1, 0},
+/* 8 */ { 4, s_5_8, 6, 1, 0},
+/* 9 */ { 2, s_5_9, -1, 1, 0},
+/* 10 */ { 4, s_5_10, 9, 1, 0},
+/* 11 */ { 4, s_5_11, 9, 1, 0},
+/* 12 */ { 2, s_5_12, -1, 1, 0},
+/* 13 */ { 4, s_5_13, -1, 1, 0},
+/* 14 */ { 4, s_5_14, -1, 1, 0},
+/* 15 */ { 2, s_5_15, -1, 1, 0},
+/* 16 */ { 4, s_5_16, 15, 1, 0},
+/* 17 */ { 4, s_5_17, 15, 1, 0},
+/* 18 */ { 2, s_5_18, -1, 1, 0},
+/* 19 */ { 4, s_5_19, 18, 1, 0},
+/* 20 */ { 4, s_5_20, 18, 1, 0},
+/* 21 */ { 6, s_5_21, 18, 1, 0},
+/* 22 */ { 8, s_5_22, 21, 1, 0},
+/* 23 */ { 6, s_5_23, 18, 1, 0},
+/* 24 */ { 2, s_5_24, -1, 1, 0},
+/* 25 */ { 4, s_5_25, 24, 1, 0},
+/* 26 */ { 6, s_5_26, 25, 1, 0},
+/* 27 */ { 4, s_5_27, 24, 1, 0},
+/* 28 */ { 4, s_5_28, 24, 1, 0},
+/* 29 */ { 4, s_5_29, -1, 1, 0},
+/* 30 */ { 6, s_5_30, 29, 1, 0},
+/* 31 */ { 4, s_5_31, -1, 1, 0},
+/* 32 */ { 4, s_5_32, -1, 1, 0},
+/* 33 */ { 6, s_5_33, 32, 1, 0},
+/* 34 */ { 4, s_5_34, -1, 1, 0},
+/* 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 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 struct among a_7[4] =
+{
+/* 0 */ { 6, s_7_0, -1, 1, 0},
+/* 1 */ { 2, s_7_1, -1, 3, 0},
+/* 2 */ { 8, s_7_2, -1, 1, 0},
+/* 3 */ { 2, s_7_3, -1, 2, 0}
+};
+
+static 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 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[1] = z->c; /* setmark p2, line 63 */
+ lab0:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_R2(struct SN_env * z) {
+ if (!(z->I[1] <= z->c)) return 0;
+ return 1;
+}
+
+static int r_perfective_gerund(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 72 */
+ among_var = find_among_b(z, a_0, 9); /* substring, line 72 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 72 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* or, line 76 */
+ if (!(eq_s_b(z, 2, s_0))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 2, s_1))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 76 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 83 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_adjective(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 88 */
+ among_var = find_among_b(z, a_1, 26); /* substring, line 88 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 88 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 97 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_adjectival(struct SN_env * z) {
+ int among_var;
+ { int ret = r_adjective(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 */
+ 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; }
+ z->bra = z->c; /* ], line 110 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; goto lab0; }
+ case 1:
+ { int m = z->l - z->c; (void) m; /* 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; }
+ }
+ lab1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 115 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 122 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab0:
+ ;
+ }
+ return 1;
+}
+
+static int r_reflexive(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 129 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_verb(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 137 */
+ among_var = find_among_b(z, a_4, 46); /* substring, line 137 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 137 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int m = z->l - z->c; (void) m; /* or, line 143 */
+ if (!(eq_s_b(z, 2, s_4))) goto lab1;
+ goto lab0;
+ lab1:
+ z->c = z->l - m;
+ if (!(eq_s_b(z, 2, s_5))) return 0;
+ }
+ lab0:
+ { int ret;
+ ret = slice_del(z); /* delete, line 143 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 151 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_noun(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 160 */
+ among_var = find_among_b(z, a_5, 36); /* substring, line 160 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 160 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 167 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_derivational(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 176 */
+ among_var = find_among_b(z, a_6, 2); /* substring, line 176 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 176 */
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 176 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ ret = slice_del(z); /* delete, line 179 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_tidy_up(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 184 */
+ among_var = find_among_b(z, a_7, 4); /* substring, line 184 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 184 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_del(z); /* delete, line 194 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int russian_UTF_8_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 202 */
+
+ { int m3; /* setlimit, line 202 */
+ int m = z->l - z->c; (void) m;
+ 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 */
+ { 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 */
+ { int ret = r_reflexive(z);
+ if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 205 */
+ if (ret < 0) return ret;
+ }
+ lab4:
+ ;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ { 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;
+ { int ret = r_noun(z);
+ if (ret == 0) goto lab1; /* call noun, line 206 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab5:
+ ;
+ }
+ lab2:
+ lab1:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 209 */
+ z->ket = z->c; /* [, line 209 */
+ if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m; goto lab8; }
+ z->bra = z->c; /* ], line 209 */
+ { int ret;
+ 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 ret = r_derivational(z);
+ if (ret == 0) goto lab9; /* call derivational, line 212 */
+ if (ret < 0) return ret;
+ }
+ lab9:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb = m3;
+ }
+ z->c = z->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_russian.h b/libstemmer_c/src_c/stem_UTF_8_russian.h
new file mode 100644
index 0000000..4ef774d
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_russian.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 * russian_UTF_8_create_env(void);
+extern void russian_UTF_8_close_env(struct SN_env * z);
+
+extern int russian_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_spanish.c b/libstemmer_c/src_c/stem_UTF_8_spanish.c
new file mode 100644
index 0000000..77771ba
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_spanish.c
@@ -0,0 +1,1137 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int spanish_UTF_8_stem(struct SN_env * z);
+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);
+static int r_standard_suffix(struct SN_env * z);
+static int r_attached_pronoun(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);
+
+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] =
+{
+/* 0 */ { 0, 0, -1, 6, 0},
+/* 1 */ { 2, s_0_1, 0, 1, 0},
+/* 2 */ { 2, s_0_2, 0, 2, 0},
+/* 3 */ { 2, s_0_3, 0, 3, 0},
+/* 4 */ { 2, s_0_4, 0, 4, 0},
+/* 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 struct among a_1[13] =
+{
+/* 0 */ { 2, s_1_0, -1, -1, 0},
+/* 1 */ { 4, s_1_1, 0, -1, 0},
+/* 2 */ { 2, s_1_2, -1, -1, 0},
+/* 3 */ { 2, s_1_3, -1, -1, 0},
+/* 4 */ { 2, s_1_4, -1, -1, 0},
+/* 5 */ { 2, s_1_5, -1, -1, 0},
+/* 6 */ { 4, s_1_6, 5, -1, 0},
+/* 7 */ { 3, s_1_7, -1, -1, 0},
+/* 8 */ { 5, s_1_8, 7, -1, 0},
+/* 9 */ { 3, s_1_9, -1, -1, 0},
+/* 10 */ { 3, s_1_10, -1, -1, 0},
+/* 11 */ { 5, s_1_11, 10, -1, 0},
+/* 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 struct among a_2[11] =
+{
+/* 0 */ { 4, s_2_0, -1, 6, 0},
+/* 1 */ { 5, s_2_1, -1, 6, 0},
+/* 2 */ { 5, s_2_2, -1, 7, 0},
+/* 3 */ { 5, s_2_3, -1, 2, 0},
+/* 4 */ { 6, s_2_4, -1, 1, 0},
+/* 5 */ { 2, s_2_5, -1, 6, 0},
+/* 6 */ { 2, s_2_6, -1, 6, 0},
+/* 7 */ { 2, s_2_7, -1, 6, 0},
+/* 8 */ { 3, s_2_8, -1, 3, 0},
+/* 9 */ { 3, s_2_9, -1, 4, 0},
+/* 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 struct among a_3[4] =
+{
+/* 0 */ { 2, s_3_0, -1, -1, 0},
+/* 1 */ { 2, s_3_1, -1, -1, 0},
+/* 2 */ { 2, s_3_2, -1, -1, 0},
+/* 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 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 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 struct among a_6[46] =
+{
+/* 0 */ { 3, s_6_0, -1, 1, 0},
+/* 1 */ { 5, s_6_1, -1, 2, 0},
+/* 2 */ { 5, s_6_2, -1, 5, 0},
+/* 3 */ { 5, s_6_3, -1, 2, 0},
+/* 4 */ { 3, s_6_4, -1, 1, 0},
+/* 5 */ { 4, s_6_5, -1, 1, 0},
+/* 6 */ { 3, s_6_6, -1, 9, 0},
+/* 7 */ { 4, s_6_7, -1, 1, 0},
+/* 8 */ { 6, s_6_8, -1, 3, 0},
+/* 9 */ { 4, s_6_9, -1, 8, 0},
+/* 10 */ { 4, s_6_10, -1, 1, 0},
+/* 11 */ { 4, s_6_11, -1, 1, 0},
+/* 12 */ { 4, s_6_12, -1, 2, 0},
+/* 13 */ { 5, s_6_13, -1, 7, 0},
+/* 14 */ { 6, s_6_14, 13, 6, 0},
+/* 15 */ { 6, s_6_15, -1, 2, 0},
+/* 16 */ { 6, s_6_16, -1, 4, 0},
+/* 17 */ { 3, s_6_17, -1, 1, 0},
+/* 18 */ { 4, s_6_18, -1, 1, 0},
+/* 19 */ { 3, s_6_19, -1, 1, 0},
+/* 20 */ { 7, s_6_20, -1, 1, 0},
+/* 21 */ { 7, s_6_21, -1, 1, 0},
+/* 22 */ { 3, s_6_22, -1, 9, 0},
+/* 23 */ { 4, s_6_23, -1, 2, 0},
+/* 24 */ { 4, s_6_24, -1, 1, 0},
+/* 25 */ { 6, s_6_25, -1, 2, 0},
+/* 26 */ { 6, s_6_26, -1, 5, 0},
+/* 27 */ { 6, s_6_27, -1, 2, 0},
+/* 28 */ { 4, s_6_28, -1, 1, 0},
+/* 29 */ { 5, s_6_29, -1, 1, 0},
+/* 30 */ { 4, s_6_30, -1, 9, 0},
+/* 31 */ { 5, s_6_31, -1, 1, 0},
+/* 32 */ { 7, s_6_32, -1, 3, 0},
+/* 33 */ { 6, s_6_33, -1, 8, 0},
+/* 34 */ { 5, s_6_34, -1, 1, 0},
+/* 35 */ { 5, s_6_35, -1, 1, 0},
+/* 36 */ { 7, s_6_36, -1, 2, 0},
+/* 37 */ { 7, s_6_37, -1, 4, 0},
+/* 38 */ { 6, s_6_38, -1, 2, 0},
+/* 39 */ { 5, s_6_39, -1, 2, 0},
+/* 40 */ { 4, s_6_40, -1, 1, 0},
+/* 41 */ { 5, s_6_41, -1, 1, 0},
+/* 42 */ { 4, s_6_42, -1, 1, 0},
+/* 43 */ { 8, s_6_43, -1, 1, 0},
+/* 44 */ { 8, s_6_44, -1, 1, 0},
+/* 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 struct among a_7[12] =
+{
+/* 0 */ { 2, s_7_0, -1, 1, 0},
+/* 1 */ { 2, s_7_1, -1, 1, 0},
+/* 2 */ { 3, s_7_2, -1, 1, 0},
+/* 3 */ { 3, s_7_3, -1, 1, 0},
+/* 4 */ { 5, s_7_4, -1, 1, 0},
+/* 5 */ { 5, s_7_5, -1, 1, 0},
+/* 6 */ { 2, s_7_6, -1, 1, 0},
+/* 7 */ { 3, s_7_7, -1, 1, 0},
+/* 8 */ { 3, s_7_8, -1, 1, 0},
+/* 9 */ { 4, s_7_9, -1, 1, 0},
+/* 10 */ { 5, s_7_10, -1, 1, 0},
+/* 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 struct among a_8[96] =
+{
+/* 0 */ { 3, s_8_0, -1, 2, 0},
+/* 1 */ { 3, s_8_1, -1, 2, 0},
+/* 2 */ { 3, s_8_2, -1, 2, 0},
+/* 3 */ { 3, s_8_3, -1, 2, 0},
+/* 4 */ { 4, s_8_4, -1, 2, 0},
+/* 5 */ { 3, s_8_5, -1, 2, 0},
+/* 6 */ { 5, s_8_6, 5, 2, 0},
+/* 7 */ { 5, s_8_7, 5, 2, 0},
+/* 8 */ { 5, s_8_8, 5, 2, 0},
+/* 9 */ { 2, s_8_9, -1, 2, 0},
+/* 10 */ { 2, s_8_10, -1, 2, 0},
+/* 11 */ { 2, s_8_11, -1, 2, 0},
+/* 12 */ { 3, s_8_12, -1, 2, 0},
+/* 13 */ { 4, s_8_13, -1, 2, 0},
+/* 14 */ { 4, s_8_14, -1, 2, 0},
+/* 15 */ { 4, s_8_15, -1, 2, 0},
+/* 16 */ { 2, s_8_16, -1, 2, 0},
+/* 17 */ { 4, s_8_17, 16, 2, 0},
+/* 18 */ { 4, s_8_18, 16, 2, 0},
+/* 19 */ { 5, s_8_19, 16, 2, 0},
+/* 20 */ { 4, s_8_20, 16, 2, 0},
+/* 21 */ { 6, s_8_21, 20, 2, 0},
+/* 22 */ { 6, s_8_22, 20, 2, 0},
+/* 23 */ { 6, s_8_23, 20, 2, 0},
+/* 24 */ { 2, s_8_24, -1, 1, 0},
+/* 25 */ { 4, s_8_25, 24, 2, 0},
+/* 26 */ { 5, s_8_26, 24, 2, 0},
+/* 27 */ { 4, s_8_27, -1, 2, 0},
+/* 28 */ { 5, s_8_28, -1, 2, 0},
+/* 29 */ { 5, s_8_29, -1, 2, 0},
+/* 30 */ { 5, s_8_30, -1, 2, 0},
+/* 31 */ { 5, s_8_31, -1, 2, 0},
+/* 32 */ { 3, s_8_32, -1, 2, 0},
+/* 33 */ { 3, s_8_33, -1, 2, 0},
+/* 34 */ { 4, s_8_34, -1, 2, 0},
+/* 35 */ { 5, s_8_35, -1, 2, 0},
+/* 36 */ { 2, s_8_36, -1, 2, 0},
+/* 37 */ { 2, s_8_37, -1, 2, 0},
+/* 38 */ { 2, s_8_38, -1, 2, 0},
+/* 39 */ { 2, s_8_39, -1, 2, 0},
+/* 40 */ { 4, s_8_40, 39, 2, 0},
+/* 41 */ { 4, s_8_41, 39, 2, 0},
+/* 42 */ { 4, s_8_42, 39, 2, 0},
+/* 43 */ { 4, s_8_43, 39, 2, 0},
+/* 44 */ { 5, s_8_44, 39, 2, 0},
+/* 45 */ { 4, s_8_45, 39, 2, 0},
+/* 46 */ { 6, s_8_46, 45, 2, 0},
+/* 47 */ { 6, s_8_47, 45, 2, 0},
+/* 48 */ { 6, s_8_48, 45, 2, 0},
+/* 49 */ { 2, s_8_49, -1, 1, 0},
+/* 50 */ { 4, s_8_50, 49, 2, 0},
+/* 51 */ { 5, s_8_51, 49, 2, 0},
+/* 52 */ { 5, s_8_52, -1, 2, 0},
+/* 53 */ { 5, s_8_53, -1, 2, 0},
+/* 54 */ { 6, s_8_54, -1, 2, 0},
+/* 55 */ { 5, s_8_55, -1, 2, 0},
+/* 56 */ { 7, s_8_56, 55, 2, 0},
+/* 57 */ { 7, s_8_57, 55, 2, 0},
+/* 58 */ { 7, s_8_58, 55, 2, 0},
+/* 59 */ { 5, s_8_59, -1, 2, 0},
+/* 60 */ { 6, s_8_60, -1, 2, 0},
+/* 61 */ { 6, s_8_61, -1, 2, 0},
+/* 62 */ { 6, s_8_62, -1, 2, 0},
+/* 63 */ { 4, s_8_63, -1, 2, 0},
+/* 64 */ { 4, s_8_64, -1, 1, 0},
+/* 65 */ { 6, s_8_65, 64, 2, 0},
+/* 66 */ { 6, s_8_66, 64, 2, 0},
+/* 67 */ { 6, s_8_67, 64, 2, 0},
+/* 68 */ { 4, s_8_68, -1, 2, 0},
+/* 69 */ { 4, s_8_69, -1, 2, 0},
+/* 70 */ { 4, s_8_70, -1, 2, 0},
+/* 71 */ { 7, s_8_71, 70, 2, 0},
+/* 72 */ { 7, s_8_72, 70, 2, 0},
+/* 73 */ { 8, s_8_73, 70, 2, 0},
+/* 74 */ { 6, s_8_74, 70, 2, 0},
+/* 75 */ { 8, s_8_75, 74, 2, 0},
+/* 76 */ { 8, s_8_76, 74, 2, 0},
+/* 77 */ { 8, s_8_77, 74, 2, 0},
+/* 78 */ { 4, s_8_78, -1, 1, 0},
+/* 79 */ { 6, s_8_79, 78, 2, 0},
+/* 80 */ { 6, s_8_80, 78, 2, 0},
+/* 81 */ { 6, s_8_81, 78, 2, 0},
+/* 82 */ { 7, s_8_82, 78, 2, 0},
+/* 83 */ { 8, s_8_83, 78, 2, 0},
+/* 84 */ { 4, s_8_84, -1, 2, 0},
+/* 85 */ { 5, s_8_85, -1, 2, 0},
+/* 86 */ { 5, s_8_86, -1, 2, 0},
+/* 87 */ { 5, s_8_87, -1, 2, 0},
+/* 88 */ { 3, s_8_88, -1, 2, 0},
+/* 89 */ { 4, s_8_89, -1, 2, 0},
+/* 90 */ { 4, s_8_90, -1, 2, 0},
+/* 91 */ { 4, s_8_91, -1, 2, 0},
+/* 92 */ { 4, s_8_92, -1, 2, 0},
+/* 93 */ { 4, s_8_93, -1, 2, 0},
+/* 94 */ { 4, s_8_94, -1, 2, 0},
+/* 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 struct among a_9[8] =
+{
+/* 0 */ { 1, s_9_0, -1, 1, 0},
+/* 1 */ { 1, s_9_1, -1, 2, 0},
+/* 2 */ { 1, s_9_2, -1, 1, 0},
+/* 3 */ { 2, s_9_3, -1, 1, 0},
+/* 4 */ { 2, s_9_4, -1, 1, 0},
+/* 5 */ { 2, s_9_5, -1, 2, 0},
+/* 6 */ { 2, s_9_6, -1, 1, 0},
+/* 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 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 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ lab7:
+ ;
+ }
+ lab1:
+ z->I[0] = z->c; /* setmark pV, line 41 */
+ lab0:
+ z->c = c;
+ }
+ { 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ 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 */
+ }
+ }
+ z->I[2] = z->c; /* setmark p2, line 45 */
+ lab10:
+ z->c = c;
+ }
+ return 1;
+}
+
+static int r_postlude(struct SN_env * z) {
+ int among_var;
+ while(1) { /* repeat, line 49 */
+ int c = z->c;
+ z->bra = z->c; /* [, line 50 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret;
+ 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 */
+ 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 */
+ }
+ break;
+ }
+ continue;
+ lab0:
+ z->c = c;
+ 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_attached_pronoun(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 68 */
+ if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */
+ z->bra = z->c; /* ], line 68 */
+ among_var = find_among_b(z, a_2, 11); /* substring, line 72 */
+ if (!(among_var)) return 0;
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 72 */
+ if (ret < 0) return ret;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ z->bra = z->c; /* ], line 73 */
+ { int ret;
+ 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 */
+ 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 */
+ 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 */
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_standard_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 87 */
+ among_var = find_among_b(z, a_6, 46); /* substring, line 87 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 87 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 99 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 99 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 105 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 105 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 106 */
+ z->ket = z->c; /* [, line 106 */
+ if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 106 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ case 3:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 4:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 5:
+ { int ret = r_R2(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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 6:
+ { int ret = r_R1(z);
+ if (ret == 0) return 0; /* call R1, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 123 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 124 */
+ z->ket = z->c; /* [, line 125 */
+ among_var = find_among_b(z, a_3, 4); /* substring, line 125 */
+ if (!(among_var)) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ 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 1:
+ z->ket = z->c; /* [, line 126 */
+ if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 126 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab1:
+ ;
+ }
+ break;
+ case 7:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 135 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 135 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 136 */
+ z->ket = z->c; /* [, line 137 */
+ among_var = find_among_b(z, a_4, 3); /* substring, line 137 */
+ if (!(among_var)) { z->c = z->l - m; goto lab2; }
+ z->bra = z->c; /* ], line 137 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 140 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab2:
+ ;
+ }
+ break;
+ case 8:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 147 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 147 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 148 */
+ z->ket = z->c; /* [, line 149 */
+ among_var = find_among_b(z, a_5, 3); /* substring, line 149 */
+ if (!(among_var)) { z->c = z->l - m; goto lab3; }
+ z->bra = z->c; /* ], line 149 */
+ switch(among_var) {
+ case 0: { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 152 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ lab3:
+ ;
+ }
+ break;
+ case 9:
+ { int ret = r_R2(z);
+ if (ret == 0) return 0; /* call R2, line 159 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 159 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 160 */
+ z->ket = z->c; /* [, line 161 */
+ if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 161 */
+ if (ret < 0) return ret;
+ }
+ lab4:
+ ;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 168 */
+ z->lb = m3;
+ }
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+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;
+ 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;
+ 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; }
+ z->bra = z->c; /* ], line 176 */
+ z->lb = m3;
+ }
+ 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_test = z->l - z->c; /* test, line 179 */
+ if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; }
+ z->c = z->l - m_test;
+ }
+ lab0:
+ ;
+ }
+ z->bra = z->c; /* ], line 179 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 179 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret;
+ ret = slice_del(z); /* delete, line 200 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_residual_suffix(struct SN_env * z) {
+ int among_var;
+ z->ket = z->c; /* [, line 205 */
+ among_var = find_among_b(z, a_9, 8); /* substring, line 205 */
+ if (!(among_var)) return 0;
+ z->bra = z->c; /* ], line 205 */
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 208 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 208 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 2:
+ { int ret = r_RV(z);
+ if (ret == 0) return 0; /* call RV, line 210 */
+ if (ret < 0) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 210 */
+ if (ret < 0) return ret;
+ }
+ { int m = z->l - z->c; (void) m; /* try, line 210 */
+ z->ket = z->c; /* [, line 210 */
+ if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; 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; }
+ 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) return ret;
+ }
+ { int ret;
+ ret = slice_del(z); /* delete, line 210 */
+ if (ret < 0) return ret;
+ }
+ lab0:
+ ;
+ }
+ break;
+ }
+ return 1;
+}
+
+extern int spanish_UTF_8_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 217 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* do, line 219 */
+ { int m = z->l - z->c; (void) m; /* 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;
+ { 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;
+ { int ret = r_verb_suffix(z);
+ if (ret == 0) goto lab2; /* call verb_suffix, line 221 */
+ if (ret < 0) return ret;
+ }
+ }
+ lab3:
+ lab2:
+ z->c = z->l - m;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ { int c = 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;
+ }
+ 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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_spanish.h b/libstemmer_c/src_c/stem_UTF_8_spanish.h
new file mode 100644
index 0000000..10572ec
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_spanish.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 * spanish_UTF_8_create_env(void);
+extern void spanish_UTF_8_close_env(struct SN_env * z);
+
+extern int spanish_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_swedish.c b/libstemmer_c/src_c/stem_UTF_8_swedish.c
new file mode 100644
index 0000000..af75551
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_swedish.c
@@ -0,0 +1,313 @@
+
+/* This file was generated automatically by the Snowball to ANSI C compiler */
+
+#include "../runtime/header.h"
+
+extern int swedish_UTF_8_stem(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);
+
+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] =
+{
+/* 0 */ { 1, s_0_0, -1, 1, 0},
+/* 1 */ { 4, s_0_1, 0, 1, 0},
+/* 2 */ { 4, s_0_2, 0, 1, 0},
+/* 3 */ { 7, s_0_3, 2, 1, 0},
+/* 4 */ { 4, s_0_4, 0, 1, 0},
+/* 5 */ { 2, s_0_5, -1, 1, 0},
+/* 6 */ { 1, s_0_6, -1, 1, 0},
+/* 7 */ { 3, s_0_7, 6, 1, 0},
+/* 8 */ { 4, s_0_8, 6, 1, 0},
+/* 9 */ { 4, s_0_9, 6, 1, 0},
+/* 10 */ { 3, s_0_10, 6, 1, 0},
+/* 11 */ { 4, s_0_11, 6, 1, 0},
+/* 12 */ { 2, s_0_12, -1, 1, 0},
+/* 13 */ { 5, s_0_13, 12, 1, 0},
+/* 14 */ { 4, s_0_14, 12, 1, 0},
+/* 15 */ { 5, s_0_15, 12, 1, 0},
+/* 16 */ { 3, s_0_16, -1, 1, 0},
+/* 17 */ { 2, s_0_17, -1, 1, 0},
+/* 18 */ { 2, s_0_18, -1, 1, 0},
+/* 19 */ { 5, s_0_19, 18, 1, 0},
+/* 20 */ { 2, s_0_20, -1, 1, 0},
+/* 21 */ { 1, s_0_21, -1, 2, 0},
+/* 22 */ { 2, s_0_22, 21, 1, 0},
+/* 23 */ { 5, s_0_23, 22, 1, 0},
+/* 24 */ { 5, s_0_24, 22, 1, 0},
+/* 25 */ { 5, s_0_25, 22, 1, 0},
+/* 26 */ { 2, s_0_26, 21, 1, 0},
+/* 27 */ { 4, s_0_27, 26, 1, 0},
+/* 28 */ { 5, s_0_28, 26, 1, 0},
+/* 29 */ { 3, s_0_29, 21, 1, 0},
+/* 30 */ { 5, s_0_30, 29, 1, 0},
+/* 31 */ { 6, s_0_31, 29, 1, 0},
+/* 32 */ { 4, s_0_32, 21, 1, 0},
+/* 33 */ { 2, s_0_33, -1, 1, 0},
+/* 34 */ { 5, s_0_34, -1, 1, 0},
+/* 35 */ { 3, s_0_35, -1, 1, 0},
+/* 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 struct among a_1[7] =
+{
+/* 0 */ { 2, s_1_0, -1, -1, 0},
+/* 1 */ { 2, s_1_1, -1, -1, 0},
+/* 2 */ { 2, s_1_2, -1, -1, 0},
+/* 3 */ { 2, s_1_3, -1, -1, 0},
+/* 4 */ { 2, s_1_4, -1, -1, 0},
+/* 5 */ { 2, s_1_5, -1, -1, 0},
+/* 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 struct among a_2[5] =
+{
+/* 0 */ { 2, s_2_0, -1, 1, 0},
+/* 1 */ { 3, s_2_1, 0, 1, 0},
+/* 2 */ { 3, s_2_2, -1, 1, 0},
+/* 3 */ { 5, s_2_3, -1, 3, 0},
+/* 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 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 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 */
+ }
+ 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 */
+ }
+ }
+ z->I[0] = z->c; /* setmark p1, line 30 */
+ /* try, line 31 */
+ if (!(z->I[0] < z->I[1])) goto lab2;
+ z->I[0] = z->I[1];
+lab2:
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 37 */
+ among_var = find_among_b(z, a_0, 37); /* substring, line 37 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 37 */
+ z->lb = m3;
+ }
+ switch(among_var) {
+ case 0: return 0;
+ case 1:
+ { int ret;
+ 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 (ret < 0) return ret;
+ }
+ break;
+ }
+ return 1;
+}
+
+static int r_consonant_pair(struct SN_env * z) {
+ { int m3; /* setlimit, line 50 */
+ int m = z->l - z->c; (void) m;
+ 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;
+ 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 */
+ }
+ z->bra = z->c; /* ], line 52 */
+ { int ret;
+ ret = slice_del(z); /* delete, line 52 */
+ if (ret < 0) return ret;
+ }
+ }
+ z->lb = m3;
+ }
+ 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;
+ 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;
+ z->ket = z->c; /* [, line 56 */
+ among_var = find_among_b(z, a_2, 5); /* substring, line 56 */
+ if (!(among_var)) { z->lb = m3; return 0; }
+ z->bra = z->c; /* ], line 56 */
+ switch(among_var) {
+ case 0: { z->lb = m3; return 0; }
+ case 1:
+ { int ret;
+ 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 */
+ if (ret < 0) return ret;
+ }
+ break;
+ case 3:
+ { int ret;
+ ret = slice_from_s(z, 4, s_1); /* <-, line 59 */
+ if (ret < 0) return ret;
+ }
+ break;
+ }
+ z->lb = m3;
+ }
+ return 1;
+}
+
+extern int swedish_UTF_8_stem(struct SN_env * z) {
+ { int c = 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->lb = z->c; z->c = z->l; /* backwards, line 67 */
+
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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;
+ }
+ { int m = z->l - z->c; (void) m; /* 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->lb;
+ return 1;
+}
+
+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); }
+
diff --git a/libstemmer_c/src_c/stem_UTF_8_swedish.h b/libstemmer_c/src_c/stem_UTF_8_swedish.h
new file mode 100644
index 0000000..1444ebb
--- /dev/null
+++ b/libstemmer_c/src_c/stem_UTF_8_swedish.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 * swedish_UTF_8_create_env(void);
+extern void swedish_UTF_8_close_env(struct SN_env * z);
+
+extern int swedish_UTF_8_stem(struct SN_env * z);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/ppport.h b/ppport.h
new file mode 100644
index 0000000..dbc1227
--- /dev/null
+++ b/ppport.h
@@ -0,0 +1,5820 @@
+#if 0
+<<'SKIP';
+#endif
+/*
+----------------------------------------------------------------------
+
+ ppport.h -- Perl/Pollution/Portability Version 3.10
+
+ Automatically created by Devel::PPPort running under perl 5.008007.
+
+ Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
+ includes in parts/inc/ instead.
+
+ Use 'perldoc ppport.h' to view the documentation below.
+
+----------------------------------------------------------------------
+
+SKIP
+
+=pod
+
+=head1 NAME
+
+ppport.h - Perl/Pollution/Portability version 3.10
+
+=head1 SYNOPSIS
+
+ perl ppport.h [options] [source files]
+
+ Searches current directory for files if no [source files] are given
+
+ --help show short help
+
+ --version show version
+
+ --patch=file write one patch file with changes
+ --copy=suffix write changed copies with suffix
+ --diff=program use diff program and options
+
+ --compat-version=version provide compatibility with Perl version
+ --cplusplus accept C++ comments
+
+ --quiet don't output anything except fatal errors
+ --nodiag don't show diagnostics
+ --nohints don't show hints
+ --nochanges don't suggest changes
+ --nofilter don't filter input files
+
+ --strip strip all script and doc functionality from
+ ppport.h
+
+ --list-provided list provided API
+ --list-unsupported list unsupported API
+ --api-info=name show Perl API portability information
+
+=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.
+
+=head1 OPTIONS
+
+=head2 --help
+
+Display a brief usage summary.
+
+=head2 --version
+
+Display the version of F<ppport.h>.
+
+=head2 --patch=I<file>
+
+If this option is given, a single patch file will be created if
+any changes are suggested. This requires a working diff program
+to be installed on your system.
+
+=head2 --copy=I<suffix>
+
+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.
+
+If neither C<--patch> or C<--copy> are given, the default is to
+simply print the diffs for each file. This requires either
+C<Text::Diff> or a C<diff> program to be installed.
+
+=head2 --diff=I<program>
+
+Manually set the diff program and options to use. The default
+is to use C<Text::Diff>, when installed, and output unified
+context diffs.
+
+=head2 --compat-version=I<version>
+
+Tell F<ppport.h> to check for compatibility with the given
+Perl version. The default is to check for compatibility with Perl
+version 5.003. You can use this option to reduce the output
+of F<ppport.h> if you intend to be backward compatible only
+down to a certain Perl version.
+
+=head2 --cplusplus
+
+Usually, F<ppport.h> will detect C++ style comments and
+replace them with C style comments for portability reasons.
+Using this option instructs F<ppport.h> to leave C++
+comments untouched.
+
+=head2 --quiet
+
+Be quiet. Don't print anything except fatal errors.
+
+=head2 --nodiag
+
+Don't output any diagnostic messages. Only portability
+alerts will be printed.
+
+=head2 --nohints
+
+Don't output any hints. Hints often contain useful portability
+notes.
+
+=head2 --nochanges
+
+Don't suggest any changes. Only give diagnostic output and hints
+unless these are also deactivated.
+
+=head2 --nofilter
+
+Don't filter the list of input files. By default, files not looking
+like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
+
+=head2 --strip
+
+Strip all script and documentation functionality from F<ppport.h>.
+This reduces the size of F<ppport.h> dramatically and may be useful
+if you want to include F<ppport.h> in smaller modules without
+increasing their distribution size too much.
+
+The stripped F<ppport.h> will have a C<--unstrip> option that allows
+you to undo the stripping, but only if an appropriate C<Devel::PPPort>
+module is installed.
+
+=head2 --list-provided
+
+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.
+
+=head2 --list-unsupported
+
+Lists the API elements that are known not to be supported by
+F<ppport.h> and below which version of Perl they probably
+won't be available or work.
+
+=head2 --api-info=I<name>
+
+Show portability information for API elements matching I<name>.
+If I<name> is surrounded by slashes, it is interpreted as a regular
+expression.
+
+=head1 DESCRIPTION
+
+In order for a Perl extension (XS) module to be as portable as possible
+across differing versions of Perl itself, certain steps need to be taken.
+
+=over 4
+
+=item *
+
+Including this header is the first major one. This alone will give you
+access to a large part of the Perl API that hasn't been available in
+earlier Perl releases. Use
+
+ perl ppport.h --list-provided
+
+to see which API elements are provided by ppport.h.
+
+=item *
+
+You should avoid using deprecated parts of the API. For example, using
+global Perl variables without the C<PL_> prefix is deprecated. Also,
+some API functions used to have a C<perl_> prefix. Using this form is
+also deprecated. You can safely use the supported API, as F<ppport.h>
+will provide wrappers for older Perl versions.
+
+=item *
+
+If you use one of a few functions or variables that were not present in
+earlier versions of Perl, and that can't be provided using a macro, you
+have to explicitly request support for these functions by adding one or
+more C<#define>s in your source code before the inclusion of F<ppport.h>.
+
+These functions or variables will be marked C<explicit> in the list shown
+by C<--list-provided>.
+
+Depending on whether you module has a single or multiple files that
+use such functions or variables, you want either C<static> or global
+variants.
+
+For a C<static> function or variable (used only in a single source
+file), use:
+
+ #define NEED_function
+ #define NEED_variable
+
+For a global function or variable (used in multiple source files),
+use:
+
+ #define NEED_function_GLOBAL
+ #define NEED_variable_GLOBAL
+
+Note that you mustn't have more than one global request for the
+same function or variable in your project.
+
+ Function / Variable Static Request Global Request
+ -----------------------------------------------------------------------------------------
+ PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
+ eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
+ grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
+ grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
+ 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
+ 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
+ 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_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
+ vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL
+ warner() NEED_warner NEED_warner_GLOBAL
+
+To avoid namespace conflicts, you can change the namespace of the
+explicitly exported functions / variables using the C<DPPP_NAMESPACE>
+macro. Just C<#define> the macro before including C<ppport.h>:
+
+ #define DPPP_NAMESPACE MyOwnNamespace_
+ #include "ppport.h"
+
+The default namespace is C<DPPP_>.
+
+=back
+
+The good thing is that most of the above can be checked by running
+F<ppport.h> on your source code. See the next section for
+details.
+
+=head1 EXAMPLES
+
+To verify whether F<ppport.h> is needed for your module, whether you
+should make any changes to your code, and whether any special defines
+should be used, F<ppport.h> can be run as a Perl script to check your
+source code. Simply say:
+
+ perl ppport.h
+
+The result will usually be a list of patches suggesting changes
+that should at least be acceptable, if not necessarily the most
+efficient solution, or a fix for all possible problems.
+
+If you know that your XS module uses features only available in
+newer Perl releases, if you're aware that it uses C++ comments,
+and if you want all suggestions as a single patch file, you could
+use something like this:
+
+ perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
+
+If you only want your code to be scanned without any suggestions
+for changes, use:
+
+ perl ppport.h --nochanges
+
+You can specify a different C<diff> program or options, using
+the C<--diff> option:
+
+ perl ppport.h --diff='diff -C 10'
+
+This would output context diffs with 10 lines of context.
+
+To display portability information for the C<newSVpvn> function,
+use:
+
+ perl ppport.h --api-info=newSVpvn
+
+Since the argument to C<--api-info> can be a regular expression,
+you can use
+
+ perl ppport.h --api-info=/_nomg$/
+
+to display portability information for all C<_nomg> functions or
+
+ perl ppport.h --api-info=/./
+
+to display information for all known API elements.
+
+=head1 BUGS
+
+If this version of F<ppport.h> is causing failure during
+the compilation of this module, please check if newer versions
+of either this module or C<Devel::PPPort> are available on CPAN
+before sending a bug report.
+
+If F<ppport.h> was generated using the latest version of
+C<Devel::PPPort> and is causing failure of this module, please
+file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
+
+Please include the following information:
+
+=over 4
+
+=item 1.
+
+The complete output from running "perl -V"
+
+=item 2.
+
+This file.
+
+=item 3.
+
+The name and version of the module you were trying to build.
+
+=item 4.
+
+A full log of the build that failed.
+
+=item 5.
+
+Any other information that you think could be relevant.
+
+=back
+
+For the latest version of this code, please get the C<Devel::PPPort>
+module from CPAN.
+
+=head1 COPYRIGHT
+
+Version 3.x, Copyright (c) 2004-2006, Marcus Holland-Moritz.
+
+Version 2.x, Copyright (C) 2001, Paul Marquess.
+
+Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+See L<Devel::PPPort>.
+
+=cut
+
+use strict;
+
+my $VERSION = 3.10;
+
+my %opt = (
+ quiet => 0,
+ diag => 1,
+ hints => 1,
+ changes => 1,
+ cplusplus => 0,
+ filter => 1,
+ strip => 0,
+ version => 0,
+);
+
+my($ppport) = $0 =~ /([\w.]+)$/;
+my $LF = '(?:\r\n|[\r\n])'; # line feed
+my $HS = "[ \t]"; # horizontal whitespace
+
+eval {
+ require Getopt::Long;
+ Getopt::Long::GetOptions(\%opt, qw(
+ help quiet diag! filter! hints! changes! cplusplus strip version
+ patch=s copy=s diff=s compat-version=s
+ list-provided list-unsupported api-info=s
+ )) or usage();
+};
+
+if ($@ and grep /^-/, @ARGV) {
+ usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
+ die "Getopt::Long not found. Please don't use any options.\n";
+}
+
+if ($opt{version}) {
+ print "This is $0 $VERSION.\n";
+ exit 0;
+}
+
+usage() if $opt{help};
+strip() if $opt{strip};
+
+if (exists $opt{'compat-version'}) {
+ my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
+ if ($@) {
+ die "Invalid version number format: '$opt{'compat-version'}'\n";
+ }
+ die "Only Perl 5 is supported\n" if $r != 5;
+ die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
+ $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
+}
+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 ) : ()),
+ ($3 ? ( todo => $3 ) : ()),
+ (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
+ (index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
+ (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()),
+ } )
+ : die "invalid spec: $_" } qw(
+AvFILLp|5.004050||p
+AvFILL|||
+CLASS|||n
+CX_CURPAD_SAVE|||
+CX_CURPAD_SV|||
+CopFILEAV|5.006000||p
+CopFILEGV_set|5.006000||p
+CopFILEGV|5.006000||p
+CopFILESV|5.006000||p
+CopFILE_set|5.006000||p
+CopFILE|5.006000||p
+CopSTASHPV_set|5.006000||p
+CopSTASHPV|5.006000||p
+CopSTASH_eq|5.006000||p
+CopSTASH_set|5.006000||p
+CopSTASH|5.006000||p
+CopyD|5.009002||p
+Copy|||
+CvPADLIST|||
+CvSTASH|||
+CvWEAKOUTSIDE|||
+DEFSV|5.004050||p
+END_EXTERN_C|5.005000||p
+ENTER|||
+ERRSV|5.004050||p
+EXTEND|||
+EXTERN_C|5.005000||p
+F0convert|||n
+FREETMPS|||
+GIMME_V||5.004000|n
+GIMME|||n
+GROK_NUMERIC_RADIX|5.007002||p
+G_ARRAY|||
+G_DISCARD|||
+G_EVAL|||
+G_NOARGS|||
+G_SCALAR|||
+G_VOID||5.004000|
+GetVars|||
+GvSV|||
+Gv_AMupdate|||
+HEf_SVKEY||5.004000|
+HeHASH||5.004000|
+HeKEY||5.004000|
+HeKLEN||5.004000|
+HePV||5.004000|
+HeSVKEY_force||5.004000|
+HeSVKEY_set||5.004000|
+HeSVKEY||5.004000|
+HeVAL||5.004000|
+HvNAME|||
+INT2PTR|5.006000||p
+IN_LOCALE_COMPILETIME|5.007002||p
+IN_LOCALE_RUNTIME|5.007002||p
+IN_LOCALE|5.007002||p
+IN_PERL_COMPILETIME|5.008001||p
+IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
+IS_NUMBER_INFINITY|5.007002||p
+IS_NUMBER_IN_UV|5.007002||p
+IS_NUMBER_NAN|5.007003||p
+IS_NUMBER_NEG|5.007002||p
+IS_NUMBER_NOT_INT|5.007002||p
+IVSIZE|5.006000||p
+IVTYPE|5.006000||p
+IVdf|5.006000||p
+LEAVE|||
+LVRET|||
+MARK|||
+MULTICALL||5.009004|
+MY_CXT_CLONE|5.009002||p
+MY_CXT_INIT|5.007003||p
+MY_CXT|5.007003||p
+MoveD|5.009002||p
+Move|||
+NOOP|5.005000||p
+NUM2PTR|5.006000||p
+NVTYPE|5.006000||p
+NVef|5.006001||p
+NVff|5.006001||p
+NVgf|5.006001||p
+Newxc|5.009003||p
+Newxz|5.009003||p
+Newx|5.009003||p
+Nullav|||
+Nullch|||
+Nullcv|||
+Nullhv|||
+Nullsv|||
+ORIGMARK|||
+PAD_BASE_SV|||
+PAD_CLONE_VARS|||
+PAD_COMPNAME_FLAGS|||
+PAD_COMPNAME_GEN_set|||
+PAD_COMPNAME_GEN|||
+PAD_COMPNAME_OURSTASH|||
+PAD_COMPNAME_PV|||
+PAD_COMPNAME_TYPE|||
+PAD_RESTORE_LOCAL|||
+PAD_SAVE_LOCAL|||
+PAD_SAVE_SETNULLPAD|||
+PAD_SETSV|||
+PAD_SET_CUR_NOSAVE|||
+PAD_SET_CUR|||
+PAD_SVl|||
+PAD_SV|||
+PERL_ABS|5.008001||p
+PERL_BCDVERSION|5.009004||p
+PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
+PERL_INT_MAX|5.004000||p
+PERL_INT_MIN|5.004000||p
+PERL_LONG_MAX|5.004000||p
+PERL_LONG_MIN|5.004000||p
+PERL_MAGIC_arylen|5.007002||p
+PERL_MAGIC_backref|5.007002||p
+PERL_MAGIC_bm|5.007002||p
+PERL_MAGIC_collxfrm|5.007002||p
+PERL_MAGIC_dbfile|5.007002||p
+PERL_MAGIC_dbline|5.007002||p
+PERL_MAGIC_defelem|5.007002||p
+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_isaelem|5.007002||p
+PERL_MAGIC_isa|5.007002||p
+PERL_MAGIC_mutex|5.007002||p
+PERL_MAGIC_nkeys|5.007002||p
+PERL_MAGIC_overload_elem|5.007002||p
+PERL_MAGIC_overload_table|5.007002||p
+PERL_MAGIC_overload|5.007002||p
+PERL_MAGIC_pos|5.007002||p
+PERL_MAGIC_qr|5.007002||p
+PERL_MAGIC_regdata|5.007002||p
+PERL_MAGIC_regdatum|5.007002||p
+PERL_MAGIC_regex_global|5.007002||p
+PERL_MAGIC_shared_scalar|5.007003||p
+PERL_MAGIC_shared|5.007003||p
+PERL_MAGIC_sigelem|5.007002||p
+PERL_MAGIC_sig|5.007002||p
+PERL_MAGIC_substr|5.007002||p
+PERL_MAGIC_sv|5.007002||p
+PERL_MAGIC_taint|5.007002||p
+PERL_MAGIC_tiedelem|5.007002||p
+PERL_MAGIC_tiedscalar|5.007002||p
+PERL_MAGIC_tied|5.007002||p
+PERL_MAGIC_utf8|5.008001||p
+PERL_MAGIC_uvar_elem|5.007003||p
+PERL_MAGIC_uvar|5.007002||p
+PERL_MAGIC_vec|5.007002||p
+PERL_MAGIC_vstring|5.008001||p
+PERL_QUAD_MAX|5.004000||p
+PERL_QUAD_MIN|5.004000||p
+PERL_REVISION|5.006000||p
+PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
+PERL_SCAN_DISALLOW_PREFIX|5.007003||p
+PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
+PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
+PERL_SHORT_MAX|5.004000||p
+PERL_SHORT_MIN|5.004000||p
+PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
+PERL_SUBVERSION|5.006000||p
+PERL_UCHAR_MAX|5.004000||p
+PERL_UCHAR_MIN|5.004000||p
+PERL_UINT_MAX|5.004000||p
+PERL_UINT_MIN|5.004000||p
+PERL_ULONG_MAX|5.004000||p
+PERL_ULONG_MIN|5.004000||p
+PERL_UNUSED_ARG|5.009003||p
+PERL_UNUSED_CONTEXT|5.009004||p
+PERL_UNUSED_DECL|5.007002||p
+PERL_UNUSED_VAR|5.007002||p
+PERL_UQUAD_MAX|5.004000||p
+PERL_UQUAD_MIN|5.004000||p
+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_DBsingle|||pn
+PL_DBsub|||pn
+PL_DBtrace|||n
+PL_Sv|5.005000||p
+PL_compiling|5.004050||p
+PL_copline|5.005000||p
+PL_curcop|5.004050||p
+PL_curstash|5.004050||p
+PL_debstash|5.004050||p
+PL_defgv|5.004050||p
+PL_diehook|5.004050||p
+PL_dirty|5.004050||p
+PL_dowarn|||pn
+PL_errgv|5.004050||p
+PL_hexdigit|5.005000||p
+PL_hints|5.005000||p
+PL_last_in_gv|||n
+PL_modglobal||5.005000|n
+PL_na|5.004050||pn
+PL_no_modify|5.006000||p
+PL_ofs_sv|||n
+PL_perl_destruct_level|5.004050||p
+PL_perldb|5.004050||p
+PL_ppaddr|5.006000||p
+PL_rsfp_filters|5.004050||p
+PL_rsfp|5.004050||p
+PL_rs|||n
+PL_signals|5.008001||p
+PL_stack_base|5.004050||p
+PL_stack_sp|5.004050||p
+PL_stdingv|5.004050||p
+PL_sv_arenaroot|5.004050||p
+PL_sv_no|5.004050||pn
+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|
+POPi|||n
+POPl|||n
+POPn|||n
+POPpbytex||5.007001|n
+POPpx||5.005030|n
+POPp|||n
+POPs|||n
+PTR2IV|5.006000||p
+PTR2NV|5.006000||p
+PTR2UV|5.006000||p
+PTR2ul|5.007001||p
+PTRV|5.006000||p
+PUSHMARK|||
+PUSH_MULTICALL||5.009004|
+PUSHi|||
+PUSHmortal|5.009002||p
+PUSHn|||
+PUSHp|||
+PUSHs|||
+PUSHu|5.004000||p
+PUTBACK|||
+PerlIO_clearerr||5.007003|
+PerlIO_close||5.007003|
+PerlIO_context_layers||5.009004|
+PerlIO_eof||5.007003|
+PerlIO_error||5.007003|
+PerlIO_fileno||5.007003|
+PerlIO_fill||5.007003|
+PerlIO_flush||5.007003|
+PerlIO_get_base||5.007003|
+PerlIO_get_bufsiz||5.007003|
+PerlIO_get_cnt||5.007003|
+PerlIO_get_ptr||5.007003|
+PerlIO_read||5.007003|
+PerlIO_seek||5.007003|
+PerlIO_set_cnt||5.007003|
+PerlIO_set_ptrcnt||5.007003|
+PerlIO_setlinebuf||5.007003|
+PerlIO_stderr||5.007003|
+PerlIO_stdin||5.007003|
+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
+PoisonFree|5.009004||p
+PoisonNew|5.009004||p
+PoisonWith|5.009004||p
+Poison|5.008000||p
+RETVAL|||n
+Renewc|||
+Renew|||
+SAVECLEARSV|||
+SAVECOMPPAD|||
+SAVEPADSV|||
+SAVETMPS|||
+SAVE_DEFSV|5.004050||p
+SPAGAIN|||
+SP|||
+START_EXTERN_C|5.005000||p
+START_MY_CXT|5.007003||p
+STMT_END|||p
+STMT_START|||p
+STR_WITH_LEN|5.009003||p
+ST|||
+SVf|5.006000||p
+SVt_IV|||
+SVt_NV|||
+SVt_PVAV|||
+SVt_PVCV|||
+SVt_PVHV|||
+SVt_PVMG|||
+SVt_PV|||
+Safefree|||
+Slab_Alloc|||
+Slab_Free|||
+StructCopy|||
+SvCUR_set|||
+SvCUR|||
+SvEND|||
+SvGAMAGIC||5.006001|
+SvGETMAGIC|5.004050||p
+SvGROW|||
+SvIOK_UV||5.006000|
+SvIOK_notUV||5.006000|
+SvIOK_off|||
+SvIOK_only_UV||5.006000|
+SvIOK_only|||
+SvIOK_on|||
+SvIOKp|||
+SvIOK|||
+SvIVX|||
+SvIV_nomg|5.009001||p
+SvIV_set|||
+SvIVx|||
+SvIV|||
+SvIsCOW_shared_hash||5.008003|
+SvIsCOW||5.008003|
+SvLEN_set|||
+SvLEN|||
+SvLOCK||5.007003|
+SvMAGIC_set|5.009003||p
+SvNIOK_off|||
+SvNIOKp|||
+SvNIOK|||
+SvNOK_off|||
+SvNOK_only|||
+SvNOK_on|||
+SvNOKp|||
+SvNOK|||
+SvNVX|||
+SvNV_set|||
+SvNVx|||
+SvNV|||
+SvOK|||
+SvOOK|||
+SvPOK_off|||
+SvPOK_only_UTF8||5.006000|
+SvPOK_only|||
+SvPOK_on|||
+SvPOKp|||
+SvPOK|||
+SvPVX_const|5.009003||p
+SvPVX_mutable|5.009003||p
+SvPVX|||
+SvPV_force_nomg|5.007002||p
+SvPV_force|||
+SvPV_nolen|5.006000||p
+SvPV_nomg|5.007002||p
+SvPV_set|||
+SvPVbyte_force||5.009002|
+SvPVbyte_nolen||5.006000|
+SvPVbytex_force||5.006000|
+SvPVbytex||5.006000|
+SvPVbyte|5.006000||p
+SvPVutf8_force||5.006000|
+SvPVutf8_nolen||5.006000|
+SvPVutf8x_force||5.006000|
+SvPVutf8x||5.006000|
+SvPVutf8||5.006000|
+SvPVx|||
+SvPV|||
+SvREFCNT_dec|||
+SvREFCNT_inc_NN|5.009004||p
+SvREFCNT_inc_simple_NN|5.009004||p
+SvREFCNT_inc_simple_void_NN|5.009004||p
+SvREFCNT_inc_simple_void|5.009004||p
+SvREFCNT_inc_simple|5.009004||p
+SvREFCNT_inc_void_NN|5.009004||p
+SvREFCNT_inc_void|5.009004||p
+SvREFCNT_inc|||p
+SvREFCNT|||
+SvROK_off|||
+SvROK_on|||
+SvROK|||
+SvRV_set|5.009003||p
+SvRV|||
+SvSETMAGIC|||
+SvSHARE||5.007003|
+SvSTASH_set|5.009003||p
+SvSTASH|||
+SvSetMagicSV_nosteal||5.004000|
+SvSetMagicSV||5.004000|
+SvSetSV_nosteal||5.004000|
+SvSetSV|||
+SvTAINTED_off||5.004000|
+SvTAINTED_on||5.004000|
+SvTAINTED||5.004000|
+SvTAINT|||
+SvTRUE|||
+SvTYPE|||
+SvUNLOCK||5.007003|
+SvUOK||5.007001|
+SvUPGRADE|||
+SvUTF8_off||5.006000|
+SvUTF8_on||5.006000|
+SvUTF8||5.006000|
+SvUVXx|5.004000||p
+SvUVX|5.004000||p
+SvUV_nomg|5.009001||p
+SvUV_set|5.009003||p
+SvUVx|5.004000||p
+SvUV|5.004000||p
+SvVOK||5.008001|
+SvVSTRING_mg|5.009004||p
+THIS|||n
+UNDERBAR|5.009002||p
+UVSIZE|5.006000||p
+UVTYPE|5.006000||p
+UVXf|5.007001||p
+UVof|5.006000||p
+UVuf|5.006000||p
+UVxf|5.006000||p
+WARN_ALL|5.006000||p
+WARN_AMBIGUOUS|5.006000||p
+WARN_ASSERTIONS|5.009000||p
+WARN_BAREWORD|5.006000||p
+WARN_CLOSED|5.006000||p
+WARN_CLOSURE|5.006000||p
+WARN_DEBUGGING|5.006000||p
+WARN_DEPRECATED|5.006000||p
+WARN_DIGIT|5.006000||p
+WARN_EXEC|5.006000||p
+WARN_EXITING|5.006000||p
+WARN_GLOB|5.006000||p
+WARN_INPLACE|5.006000||p
+WARN_INTERNAL|5.006000||p
+WARN_IO|5.006000||p
+WARN_LAYER|5.008000||p
+WARN_MALLOC|5.006000||p
+WARN_MISC|5.006000||p
+WARN_NEWLINE|5.006000||p
+WARN_NUMERIC|5.006000||p
+WARN_ONCE|5.006000||p
+WARN_OVERFLOW|5.006000||p
+WARN_PACK|5.006000||p
+WARN_PARENTHESIS|5.006000||p
+WARN_PIPE|5.006000||p
+WARN_PORTABLE|5.006000||p
+WARN_PRECEDENCE|5.006000||p
+WARN_PRINTF|5.006000||p
+WARN_PROTOTYPE|5.006000||p
+WARN_QW|5.006000||p
+WARN_RECURSION|5.006000||p
+WARN_REDEFINE|5.006000||p
+WARN_REGEXP|5.006000||p
+WARN_RESERVED|5.006000||p
+WARN_SEMICOLON|5.006000||p
+WARN_SEVERE|5.006000||p
+WARN_SIGNAL|5.006000||p
+WARN_SUBSTR|5.006000||p
+WARN_SYNTAX|5.006000||p
+WARN_TAINT|5.006000||p
+WARN_THREADS|5.008000||p
+WARN_UNINITIALIZED|5.006000||p
+WARN_UNOPENED|5.006000||p
+WARN_UNPACK|5.006000||p
+WARN_UNTIE|5.006000||p
+WARN_UTF8|5.006000||p
+WARN_VOID|5.006000||p
+XCPT_CATCH|5.009002||p
+XCPT_RETHROW|5.009002||p
+XCPT_TRY_END|5.009002||p
+XCPT_TRY_START|5.009002||p
+XPUSHi|||
+XPUSHmortal|5.009002||p
+XPUSHn|||
+XPUSHp|||
+XPUSHs|||
+XPUSHu|5.004000||p
+XSRETURN_EMPTY|||
+XSRETURN_IV|||
+XSRETURN_NO|||
+XSRETURN_NV|||
+XSRETURN_PV|||
+XSRETURN_UNDEF|||
+XSRETURN_UV|5.008001||p
+XSRETURN_YES|||
+XSRETURN|||p
+XST_mIV|||
+XST_mNO|||
+XST_mNV|||
+XST_mPV|||
+XST_mUNDEF|||
+XST_mUV|5.008001||p
+XST_mYES|||
+XS_VERSION_BOOTCHECK|||
+XS_VERSION|||
+XSprePUSH|5.006000||p
+XS|||
+ZeroD|5.009002||p
+Zero|||
+_aMY_CXT|5.007003||p
+_pMY_CXT|5.007003||p
+aMY_CXT_|5.007003||p
+aMY_CXT|5.007003||p
+aTHX_|5.006000||p
+aTHX|5.006000||p
+add_data|||n
+addmad|||
+allocmy|||
+amagic_call|||
+amagic_cmp_locale|||
+amagic_cmp|||
+amagic_i_ncmp|||
+amagic_ncmp|||
+any_dup|||
+ao|||
+append_elem|||
+append_list|||
+append_madprops|||
+apply_attrs_my|||
+apply_attrs_string||5.006001|
+apply_attrs|||
+apply|||
+atfork_lock||5.007003|n
+atfork_unlock||5.007003|n
+av_arylen_p||5.009003|
+av_clear|||
+av_delete||5.006000|
+av_exists||5.006000|
+av_extend|||
+av_fake|||
+av_fetch|||
+av_fill|||
+av_len|||
+av_make|||
+av_pop|||
+av_push|||
+av_reify|||
+av_shift|||
+av_store|||
+av_undef|||
+av_unshift|||
+ax|||n
+bad_type|||
+bind_match|||
+block_end|||
+block_gimme||5.004000|
+block_start|||
+boolSV|5.004000||p
+boot_core_PerlIO|||
+boot_core_UNIVERSAL|||
+boot_core_xsutils|||
+bytes_from_utf8||5.007001|
+bytes_to_uni|||n
+bytes_to_utf8||5.006001|
+call_argv|5.006000||p
+call_atexit||5.006000|
+call_list||5.004000|
+call_method|5.006000||p
+call_pv|5.006000||p
+call_sv|5.006000||p
+calloc||5.007002|n
+cando|||
+cast_i32||5.006000|
+cast_iv||5.006000|
+cast_ulong||5.006000|
+cast_uv||5.006000|
+check_type_and_open|||
+check_uni|||
+checkcomma|||
+checkposixcc|||
+ckWARN|5.006000||p
+ck_anoncode|||
+ck_bitop|||
+ck_concat|||
+ck_defined|||
+ck_delete|||
+ck_die|||
+ck_eof|||
+ck_eval|||
+ck_exec|||
+ck_exists|||
+ck_exit|||
+ck_ftst|||
+ck_fun|||
+ck_glob|||
+ck_grep|||
+ck_index|||
+ck_join|||
+ck_lengthconst|||
+ck_lfun|||
+ck_listiob|||
+ck_match|||
+ck_method|||
+ck_null|||
+ck_open|||
+ck_repeat|||
+ck_require|||
+ck_retarget|||
+ck_return|||
+ck_rfun|||
+ck_rvconst|||
+ck_sassign|||
+ck_say|||
+ck_select|||
+ck_shift|||
+ck_sort|||
+ck_spair|||
+ck_split|||
+ck_subr|||
+ck_substr|||
+ck_svconst|||
+ck_trunc|||
+ck_unpack|||
+ckwarn_d||5.009003|
+ckwarn||5.009003|
+cl_and|||n
+cl_anything|||n
+cl_init_zero|||n
+cl_init|||n
+cl_is_anything|||n
+cl_or|||n
+clear_placeholders|||
+closest_cop|||
+convert|||
+cop_free|||
+cr_textfilter|||
+create_eval_scope|||
+croak_nocontext|||vn
+croak|||v
+csighandler||5.009003|n
+curmad|||
+custom_op_desc||5.007003|
+custom_op_name||5.007003|
+cv_ckproto_len|||
+cv_ckproto|||
+cv_clone|||
+cv_const_sv||5.004000|
+cv_dump|||
+cv_undef|||
+cx_dump||5.005000|
+cx_dup|||
+cxinc|||
+dAXMARK|5.009003||p
+dAX|5.007002||p
+dITEMS|5.007002||p
+dMARK|||
+dMULTICALL||5.009003|
+dMY_CXT_SV|5.007003||p
+dMY_CXT|5.007003||p
+dNOOP|5.006000||p
+dORIGMARK|||
+dSP|||
+dTHR|5.004050||p
+dTHXa|5.006000||p
+dTHXoa|5.006000||p
+dTHX|5.006000||p
+dUNDERBAR|5.009002||p
+dVAR|5.009003||p
+dXCPT|5.009002||p
+dXSARGS|||
+dXSI32|||
+dXSTARG|5.006000||p
+deb_curcv|||
+deb_nocontext|||vn
+deb_stack_all|||
+deb_stack_n|||
+debop||5.005000|
+debprofdump||5.005000|
+debprof|||
+debstackptrs||5.007003|
+debstack||5.007003|
+debug_start_match|||
+deb||5.007003|v
+del_sv|||
+delete_eval_scope|||
+delimcpy||5.004000|
+deprecate_old|||
+deprecate|||
+despatch_signals||5.007001|
+destroy_matcher|||
+die_nocontext|||vn
+die_where|||
+die|||v
+dirp_dup|||
+div128|||
+djSP|||
+do_aexec5|||
+do_aexec|||
+do_aspawn|||
+do_binmode||5.004050|
+do_chomp|||
+do_chop|||
+do_close|||
+do_dump_pad|||
+do_eof|||
+do_exec3|||
+do_execfree|||
+do_exec|||
+do_gv_dump||5.006000|
+do_gvgv_dump||5.006000|
+do_hv_dump||5.006000|
+do_ipcctl|||
+do_ipcget|||
+do_join|||
+do_kv|||
+do_magic_dump||5.006000|
+do_msgrcv|||
+do_msgsnd|||
+do_oddball|||
+do_op_dump||5.006000|
+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|||
+do_readline|||
+do_seek|||
+do_semop|||
+do_shmio|||
+do_smartmatch|||
+do_spawn_nowait|||
+do_spawn|||
+do_sprintf|||
+do_sv_dump||5.006000|
+do_sysseek|||
+do_tell|||
+do_trans_complex_utf8|||
+do_trans_complex|||
+do_trans_count_utf8|||
+do_trans_count|||
+do_trans_simple_utf8|||
+do_trans_simple|||
+do_trans|||
+do_vecget|||
+do_vecset|||
+do_vop|||
+docatch_body|||
+docatch|||
+doeval|||
+dofile|||
+dofindlabel|||
+doform|||
+doing_taint||5.008001|n
+dooneliner|||
+doopen_pm|||
+doparseform|||
+dopoptoeval|||
+dopoptogiven|||
+dopoptolabel|||
+dopoptoloop|||
+dopoptosub_at|||
+dopoptosub|||
+dopoptowhen|||
+doref||5.009003|
+dounwind|||
+dowantarray|||
+dump_all||5.006000|
+dump_eval||5.006000|
+dump_exec_pos|||
+dump_fds|||
+dump_form||5.006000|
+dump_indent||5.006000|v
+dump_mstats|||
+dump_packsubs||5.006000|
+dump_sub||5.006000|
+dump_sv_child|||
+dump_trie_interim_list|||
+dump_trie_interim_table|||
+dump_trie|||
+dump_vindent||5.006000|
+dumpuntil|||
+dup_attrlist|||
+emulate_eaccess|||
+eval_pv|5.006000||p
+eval_sv|5.006000||p
+exec_failed|||
+expect_number|||
+fbm_compile||5.005000|
+fbm_instr||5.005000|
+fd_on_nosuid_fs|||
+feature_is_enabled|||
+filter_add|||
+filter_del|||
+filter_gets|||
+filter_read|||
+find_array_subscript|||
+find_beginning|||
+find_byclass|||
+find_hash_subscript|||
+find_in_my_stash|||
+find_runcv|||
+find_rundefsvoffset||5.009002|
+find_script|||
+find_uninit_var|||
+first_symbol|||n
+fold_constants|||
+forbid_setid|||
+force_ident|||
+force_list|||
+force_next|||
+force_version|||
+force_word|||
+form_nocontext|||vn
+form||5.004000|v
+fp_dup|||
+fprintf_nocontext|||vn
+free_global_struct|||
+free_tied_hv_pool|||
+free_tmps|||
+gen_constant_list|||
+get_arena|||
+get_av|5.006000||p
+get_context||5.006000|n
+get_cv|5.006000||p
+get_db_sub|||
+get_debug_opts|||
+get_hash_seed|||
+get_hv|5.006000||p
+get_mstats|||
+get_no_modify|||
+get_num|||
+get_op_descs||5.005000|
+get_op_names||5.005000|
+get_opargs|||
+get_ppaddr||5.006000|
+get_sv|5.006000||p
+get_vtbl||5.005030|
+getcwd_sv||5.007002|
+getenv_len|||
+glob_2number|||
+glob_2pv|||
+glob_assign_glob|||
+glob_assign_ref|||
+gp_dup|||
+gp_free|||
+gp_ref|||
+grok_bin|5.007003||p
+grok_hex|5.007003||p
+grok_number|5.007002||p
+grok_numeric_radix|5.007002||p
+grok_oct|5.007003||p
+group_end|||
+gv_AVadd|||
+gv_HVadd|||
+gv_IOadd|||
+gv_SVadd|||
+gv_autoload4||5.004000|
+gv_check|||
+gv_const_sv||5.009003|
+gv_dump||5.006000|
+gv_efullname3||5.004000|
+gv_efullname4||5.006001|
+gv_efullname|||
+gv_ename|||
+gv_fetchfile|||
+gv_fetchmeth_autoload||5.007003|
+gv_fetchmethod_autoload||5.004000|
+gv_fetchmethod|||
+gv_fetchmeth|||
+gv_fetchpvn_flags||5.009002|
+gv_fetchpv|||
+gv_fetchsv||5.009002|
+gv_fullname3||5.004000|
+gv_fullname4||5.006001|
+gv_fullname|||
+gv_handler||5.007001|
+gv_init_sv|||
+gv_init|||
+gv_name_set||5.009004|
+gv_stashpvn|5.004000||p
+gv_stashpvs||5.009003|
+gv_stashpv|||
+gv_stashsv|||
+he_dup|||
+hek_dup|||
+hfreeentries|||
+hsplit|||
+hv_assert||5.009001|
+hv_auxinit|||n
+hv_backreferences_p|||
+hv_clear_placeholders||5.009001|
+hv_clear|||
+hv_copy_hints_hv|||
+hv_delayfree_ent||5.004000|
+hv_delete_common|||
+hv_delete_ent||5.004000|
+hv_delete|||
+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|||
+hv_free_ent||5.004000|
+hv_iterinit|||
+hv_iterkeysv||5.004000|
+hv_iterkey|||
+hv_iternext_flags||5.008000|
+hv_iternextsv|||
+hv_iternext|||
+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|||
+hv_placeholders_get||5.009003|
+hv_placeholders_p||5.009003|
+hv_placeholders_set||5.009003|
+hv_riter_p||5.009003|
+hv_riter_set||5.009003|
+hv_scalar||5.009001|
+hv_store_ent||5.004000|
+hv_store_flags||5.008000|
+hv_stores|5.009004||p
+hv_store|||
+hv_undef|||
+ibcmp_locale||5.004000|
+ibcmp_utf8||5.007003|
+ibcmp|||
+incl_perldb|||
+incline|||
+incpush_if_exists|||
+incpush|||
+ingroup|||
+init_argv_symbols|||
+init_debugger|||
+init_global_struct|||
+init_i18nl10n||5.006000|
+init_i18nl14n||5.006000|
+init_ids|||
+init_interp|||
+init_lexer|||
+init_main_stash|||
+init_perllib|||
+init_postdump_symbols|||
+init_predump_symbols|||
+init_stacks||5.005000|
+init_tm||5.007002|
+instr|||
+intro_my|||
+intuit_method|||
+intuit_more|||
+invert|||
+io_close|||
+isALNUM|||
+isALPHA|||
+isDIGIT|||
+isLOWER|||
+isSPACE|||
+isUPPER|||
+is_an_int|||
+is_gv_magical_sv|||
+is_gv_magical|||
+is_handle_constructor|||n
+is_list_assignment|||
+is_lvalue_sub||5.007001|
+is_uni_alnum_lc||5.006000|
+is_uni_alnumc_lc||5.006000|
+is_uni_alnumc||5.006000|
+is_uni_alnum||5.006000|
+is_uni_alpha_lc||5.006000|
+is_uni_alpha||5.006000|
+is_uni_ascii_lc||5.006000|
+is_uni_ascii||5.006000|
+is_uni_cntrl_lc||5.006000|
+is_uni_cntrl||5.006000|
+is_uni_digit_lc||5.006000|
+is_uni_digit||5.006000|
+is_uni_graph_lc||5.006000|
+is_uni_graph||5.006000|
+is_uni_idfirst_lc||5.006000|
+is_uni_idfirst||5.006000|
+is_uni_lower_lc||5.006000|
+is_uni_lower||5.006000|
+is_uni_print_lc||5.006000|
+is_uni_print||5.006000|
+is_uni_punct_lc||5.006000|
+is_uni_punct||5.006000|
+is_uni_space_lc||5.006000|
+is_uni_space||5.006000|
+is_uni_upper_lc||5.006000|
+is_uni_upper||5.006000|
+is_uni_xdigit_lc||5.006000|
+is_uni_xdigit||5.006000|
+is_utf8_alnumc||5.006000|
+is_utf8_alnum||5.006000|
+is_utf8_alpha||5.006000|
+is_utf8_ascii||5.006000|
+is_utf8_char_slow|||n
+is_utf8_char||5.006000|
+is_utf8_cntrl||5.006000|
+is_utf8_common|||
+is_utf8_digit||5.006000|
+is_utf8_graph||5.006000|
+is_utf8_idcont||5.008000|
+is_utf8_idfirst||5.006000|
+is_utf8_lower||5.006000|
+is_utf8_mark||5.006000|
+is_utf8_print||5.006000|
+is_utf8_punct||5.006000|
+is_utf8_space||5.006000|
+is_utf8_string_loclen||5.009003|
+is_utf8_string_loc||5.008001|
+is_utf8_string||5.006001|
+is_utf8_upper||5.006000|
+is_utf8_xdigit||5.006000|
+isa_lookup|||
+items|||n
+ix|||n
+jmaybe|||
+join_exact|||
+keyword|||
+leave_scope|||
+lex_end|||
+lex_start|||
+linklist|||
+listkids|||
+list|||
+load_module_nocontext|||vn
+load_module||5.006000|v
+localize|||
+looks_like_bool|||
+looks_like_number|||
+lop|||
+mPUSHi|5.009002||p
+mPUSHn|5.009002||p
+mPUSHp|5.009002||p
+mPUSHu|5.009002||p
+mXPUSHi|5.009002||p
+mXPUSHn|5.009002||p
+mXPUSHp|5.009002||p
+mXPUSHu|5.009002||p
+mad_free|||
+madlex|||
+madparse|||
+magic_clear_all_env|||
+magic_clearenv|||
+magic_clearhint|||
+magic_clearpack|||
+magic_clearsig|||
+magic_dump||5.006000|
+magic_existspack|||
+magic_freearylen_p|||
+magic_freeovrld|||
+magic_freeregexp|||
+magic_getarylen|||
+magic_getdefelem|||
+magic_getnkeys|||
+magic_getpack|||
+magic_getpos|||
+magic_getsig|||
+magic_getsubstr|||
+magic_gettaint|||
+magic_getuvar|||
+magic_getvec|||
+magic_get|||
+magic_killbackrefs|||
+magic_len|||
+magic_methcall|||
+magic_methpack|||
+magic_nextpack|||
+magic_regdata_cnt|||
+magic_regdatum_get|||
+magic_regdatum_set|||
+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|||
+magic_setnkeys|||
+magic_setpack|||
+magic_setpos|||
+magic_setregexp|||
+magic_setsig|||
+magic_setsubstr|||
+magic_settaint|||
+magic_setutf8|||
+magic_setuvar|||
+magic_setvec|||
+magic_set|||
+magic_sizepack|||
+magic_wipepack|||
+magicname|||
+make_matcher|||
+make_trie_failtable|||
+make_trie|||
+malloced_size|||n
+malloc||5.007002|n
+markstack_grow|||
+matcher_matches_sv|||
+measure_struct|||
+memEQ|5.004000||p
+memNE|5.004000||p
+mem_collxfrm|||
+mess_alloc|||
+mess_nocontext|||vn
+mess||5.006000|v
+method_common|||
+mfree||5.007002|n
+mg_clear|||
+mg_copy|||
+mg_dup|||
+mg_find|||
+mg_free|||
+mg_get|||
+mg_length||5.005000|
+mg_localize|||
+mg_magical|||
+mg_set|||
+mg_size||5.005000|
+mini_mktime||5.007002|
+missingterm|||
+mode_from_discipline|||
+modkids|||
+mod|||
+more_bodies|||
+more_sv|||
+moreswitches|||
+mul128|||
+mulexp10|||n
+my_atof2||5.007002|
+my_atof||5.006000|
+my_attrs|||
+my_bcopy|||n
+my_betoh16|||n
+my_betoh32|||n
+my_betoh64|||n
+my_betohi|||n
+my_betohl|||n
+my_betohs|||n
+my_bzero|||n
+my_chsize|||
+my_clearenv|||
+my_cxt_init|||
+my_exit_jump|||
+my_exit|||
+my_failure_exit||5.004000|
+my_fflush_all||5.006000|
+my_fork||5.007003|n
+my_htobe16|||n
+my_htobe32|||n
+my_htobe64|||n
+my_htobei|||n
+my_htobel|||n
+my_htobes|||n
+my_htole16|||n
+my_htole32|||n
+my_htole64|||n
+my_htolei|||n
+my_htolel|||n
+my_htoles|||n
+my_htonl|||
+my_kid|||
+my_letoh16|||n
+my_letoh32|||n
+my_letoh64|||n
+my_letohi|||n
+my_letohl|||n
+my_letohs|||n
+my_lstat|||
+my_memcmp||5.004000|n
+my_memset|||n
+my_ntohl|||
+my_pclose||5.004000|
+my_popen_list||5.007001|
+my_popen||5.004000|
+my_setenv|||
+my_snprintf|5.009004||pvn
+my_socketpair||5.007003|n
+my_sprintf||5.009003|vn
+my_stat|||
+my_strftime||5.007002|
+my_strlcat|5.009004||pn
+my_strlcpy|5.009004||pn
+my_swabn|||n
+my_swap|||
+my_unexec|||
+my_vsnprintf||5.009004|n
+my|||
+need_utf8|||n
+newANONATTRSUB||5.006000|
+newANONHASH|||
+newANONLIST|||
+newANONSUB|||
+newASSIGNOP|||
+newATTRSUB||5.006000|
+newAVREF|||
+newAV|||
+newBINOP|||
+newCONDOP|||
+newCONSTSUB|5.004050||p
+newCVREF|||
+newDEFSVOP|||
+newFORM|||
+newFOROP|||
+newGIVENOP||5.009003|
+newGIVWHENOP|||
+newGP|||
+newGVOP|||
+newGVREF|||
+newGVgen|||
+newHVREF|||
+newHVhv||5.005000|
+newHV|||
+newIO|||
+newLISTOP|||
+newLOGOP|||
+newLOOPEX|||
+newLOOPOP|||
+newMADPROP|||
+newMADsv|||
+newMYSUB|||
+newNULLLIST|||
+newOP|||
+newPADOP||5.006000|
+newPMOP|||
+newPROG|||
+newPVOP|||
+newRANGE|||
+newRV_inc|5.004000||p
+newRV_noinc|5.004000||p
+newRV|||
+newSLICEOP|||
+newSTATEOP|||
+newSUB|||
+newSVOP|||
+newSVREF|||
+newSVhek||5.009003|
+newSViv|||
+newSVnv|||
+newSVpvf_nocontext|||vn
+newSVpvf||5.004000|v
+newSVpvn_share||5.007001|
+newSVpvn|5.004050||p
+newSVpvs_share||5.009003|
+newSVpvs|5.009003||p
+newSVpv|||
+newSVrv|||
+newSVsv|||
+newSVuv|5.006000||p
+newSV|||
+newTOKEN|||
+newUNOP|||
+newWHENOP||5.009003|
+newWHILEOP||5.009003|
+newXS_flags||5.009004|
+newXSproto||5.006000|
+newXS||5.006000|
+new_collate||5.006000|
+new_constant|||
+new_ctype||5.006000|
+new_he|||
+new_logop|||
+new_numeric||5.006000|
+new_stackinfo||5.005000|
+new_version||5.009000|
+new_warnings_bitfield|||
+next_symbol|||
+nextargv|||
+nextchar|||
+ninstr|||
+no_bareword_allowed|||
+no_fh_allowed|||
+no_op|||
+not_a_number|||
+nothreadhook||5.008000|
+nuke_stacks|||
+num_overflow|||n
+offer_nice_chunk|||
+oopsAV|||
+oopsCV|||
+oopsHV|||
+op_clear|||
+op_const_sv|||
+op_dump||5.006000|
+op_free|||
+op_getmad_weak|||
+op_getmad|||
+op_null||5.007002|
+op_refcnt_lock||5.009002|
+op_refcnt_unlock||5.009002|
+op_xmldump|||
+open_script|||
+pMY_CXT_|5.007003||p
+pMY_CXT|5.007003||p
+pTHX_|5.006000||p
+pTHX|5.006000||p
+packWARN|5.007003||p
+pack_cat||5.007003|
+pack_rec|||
+package|||
+packlist||5.008001|
+pad_add_anon|||
+pad_add_name|||
+pad_alloc|||
+pad_block_start|||
+pad_check_dup|||
+pad_compname_type|||
+pad_findlex|||
+pad_findmy|||
+pad_fixup_inner_anons|||
+pad_free|||
+pad_leavemy|||
+pad_new|||
+pad_peg|||n
+pad_push|||
+pad_reset|||
+pad_setsv|||
+pad_sv||5.009004|
+pad_swipe|||
+pad_tidy|||
+pad_undef|||
+parse_body|||
+parse_unicode_opts|||
+path_is_absolute|||n
+peep|||
+pending_ident|||
+perl_alloc_using|||n
+perl_alloc|||n
+perl_clone_using|||n
+perl_clone|||n
+perl_construct|||n
+perl_destruct||5.007003|n
+perl_free|||n
+perl_parse||5.006000|n
+perl_run|||n
+pidgone|||
+pm_description|||
+pmflag|||
+pmop_dump||5.006000|
+pmop_xmldump|||
+pmruntime|||
+pmtrans|||
+pop_scope|||
+pregcomp|||
+pregexec|||
+pregfree|||
+prepend_elem|||
+prepend_madprops|||
+printbuf|||
+printf_nocontext|||vn
+ptr_table_clear|||
+ptr_table_fetch|||
+ptr_table_find|||n
+ptr_table_free|||
+ptr_table_new|||
+ptr_table_split|||
+ptr_table_store|||
+push_scope|||
+put_byte|||
+pv_display||5.006000|
+pv_escape||5.009004|
+pv_pretty||5.009004|
+pv_uni_display||5.007003|
+qerror|||
+qsortsvu|||
+re_croak2|||
+re_dup|||
+re_intuit_start||5.006000|
+re_intuit_string||5.006000|
+realloc||5.007002|n
+reentrant_free|||
+reentrant_init|||
+reentrant_retry|||vn
+reentrant_size|||
+ref_array_or_hash|||
+refcounted_he_chain_2hv|||
+refcounted_he_fetch|||
+refcounted_he_free|||
+refcounted_he_new|||
+refcounted_he_value|||
+refkids|||
+refto|||
+ref||5.009003|
+reg_node|||
+reganode|||
+regatom|||
+regbranch|||
+regclass_swash||5.009004|
+regclass|||
+regcppop|||
+regcppush|||
+regcurly|||n
+regdump||5.005000|
+regexec_flags||5.005000|
+reghop3|||n
+reghopmaybe3|||n
+reginclass|||
+reginitcolors||5.006000|
+reginsert|||
+regmatch|||
+regnext||5.005000|
+regpiece|||
+regpposixcc|||
+regprop|||
+regrepeat|||
+regtail_study|||
+regtail|||
+regtry|||
+reguni|||
+regwhite|||n
+reg|||
+repeatcpy|||
+report_evil_fh|||
+report_uninit|||
+require_errno|||
+require_pv||5.006000|
+restore_magic|||
+rninstr|||
+rsignal_restore|||
+rsignal_save|||
+rsignal_state||5.004000|
+rsignal||5.004000|
+run_body|||
+run_user_filter|||
+runops_debug||5.005000|
+runops_standard||5.005000|
+rvpv_dup|||
+rxres_free|||
+rxres_restore|||
+rxres_save|||
+safesyscalloc||5.006000|n
+safesysfree||5.006000|n
+safesysmalloc||5.006000|n
+safesysrealloc||5.006000|n
+same_dirent|||
+save_I16||5.004000|
+save_I32|||
+save_I8||5.006000|
+save_aelem||5.004050|
+save_alloc||5.006000|
+save_aptr|||
+save_ary|||
+save_bool||5.008001|
+save_clearsv|||
+save_delete|||
+save_destructor_x||5.006000|
+save_destructor||5.006000|
+save_freeop|||
+save_freepv|||
+save_freesv|||
+save_generic_pvref||5.006001|
+save_generic_svref||5.005030|
+save_gp||5.004000|
+save_hash|||
+save_hek_flags|||n
+save_helem||5.004050|
+save_hints||5.005000|
+save_hptr|||
+save_int|||
+save_item|||
+save_iv||5.005000|
+save_lines|||
+save_list|||
+save_long|||
+save_magic|||
+save_mortalizesv||5.007001|
+save_nogv|||
+save_op|||
+save_padsv||5.007001|
+save_pptr|||
+save_re_context||5.006000|
+save_scalar_at|||
+save_scalar|||
+save_set_svflags||5.009000|
+save_shared_pvref||5.007003|
+save_sptr|||
+save_svref|||
+save_vptr||5.006000|
+savepvn|||
+savepvs||5.009003|
+savepv|||
+savesharedpv||5.007003|
+savestack_grow_cnt||5.008001|
+savestack_grow|||
+savesvpv||5.009002|
+sawparens|||
+scalar_mod_type|||n
+scalarboolean|||
+scalarkids|||
+scalarseq|||
+scalarvoid|||
+scalar|||
+scan_bin||5.006000|
+scan_commit|||
+scan_const|||
+scan_formline|||
+scan_heredoc|||
+scan_hex|||
+scan_ident|||
+scan_inputsymbol|||
+scan_num||5.007001|
+scan_oct|||
+scan_pat|||
+scan_str|||
+scan_subst|||
+scan_trans|||
+scan_version||5.009001|
+scan_vstring||5.008001|
+scan_word|||
+scope|||
+screaminstr||5.005000|
+seed||5.008001|
+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|
+setdefout|||
+setenv_getix|||
+share_hek_flags|||
+share_hek||5.004000|
+si_dup|||
+sighandler|||n
+simplify_sort|||
+skipspace0|||
+skipspace1|||
+skipspace2|||
+skipspace|||
+sortcv_stacked|||
+sortcv_xsub|||
+sortcv|||
+sortsv_flags||5.009003|
+sortsv||5.007003|
+space_join_names_mortal|||
+ss_dup|||
+stack_grow|||
+start_force|||
+start_glob|||
+start_subparse||5.004000|
+stashpv_hvname_match||5.009004|
+stdize_locale|||
+strEQ|||
+strGE|||
+strGT|||
+strLE|||
+strLT|||
+strNE|||
+str_to_version||5.006000|
+stringify_regexp|||
+strip_return|||
+strnEQ|||
+strnNE|||
+study_chunk|||
+sub_crush_depth|||
+sublex_done|||
+sublex_push|||
+sublex_start|||
+sv_2bool|||
+sv_2cv|||
+sv_2io|||
+sv_2iuv_common|||
+sv_2iuv_non_preserve|||
+sv_2iv_flags||5.009001|
+sv_2iv|||
+sv_2mortal|||
+sv_2nv|||
+sv_2pv_flags||5.007002|
+sv_2pv_nolen|5.006000||p
+sv_2pvbyte_nolen|||
+sv_2pvbyte|5.006000||p
+sv_2pvutf8_nolen||5.006000|
+sv_2pvutf8||5.006000|
+sv_2pv|||
+sv_2uv_flags||5.009001|
+sv_2uv|5.004000||p
+sv_add_arena|||
+sv_add_backref|||
+sv_backoff|||
+sv_bless|||
+sv_cat_decode||5.008001|
+sv_catpv_mg|5.004050||p
+sv_catpvf_mg_nocontext|||pvn
+sv_catpvf_mg|5.006000|5.004000|pv
+sv_catpvf_nocontext|||vn
+sv_catpvf||5.004000|v
+sv_catpvn_flags||5.007002|
+sv_catpvn_mg|5.004050||p
+sv_catpvn_nomg|5.007002||p
+sv_catpvn|||
+sv_catpvs|5.009003||p
+sv_catpv|||
+sv_catsv_flags||5.007002|
+sv_catsv_mg|5.004050||p
+sv_catsv_nomg|5.007002||p
+sv_catsv|||
+sv_catxmlpvn|||
+sv_catxmlsv|||
+sv_chop|||
+sv_clean_all|||
+sv_clean_objs|||
+sv_clear|||
+sv_cmp_locale||5.004000|
+sv_cmp|||
+sv_collxfrm|||
+sv_compile_2op||5.008001|
+sv_copypv||5.007003|
+sv_dec|||
+sv_del_backref|||
+sv_derived_from||5.004000|
+sv_does||5.009004|
+sv_dump|||
+sv_dup|||
+sv_eq|||
+sv_exp_grow|||
+sv_force_normal_flags||5.007001|
+sv_force_normal||5.006000|
+sv_free2|||
+sv_free_arenas|||
+sv_free|||
+sv_gets||5.004000|
+sv_grow|||
+sv_i_ncmp|||
+sv_inc|||
+sv_insert|||
+sv_isa|||
+sv_isobject|||
+sv_iv||5.005000|
+sv_kill_backrefs|||
+sv_len_utf8||5.006000|
+sv_len|||
+sv_magicext||5.007003|
+sv_magic|||
+sv_mortalcopy|||
+sv_ncmp|||
+sv_newmortal|||
+sv_newref|||
+sv_nolocking||5.007003|
+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|||
+sv_pos_u2b_forwards|||n
+sv_pos_u2b_midway|||n
+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_pvutf8n_force||5.006000|
+sv_pvutf8n||5.006000|
+sv_pvutf8||5.006000|
+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|||
+sv_rvweaken||5.006000|
+sv_setiv_mg|5.004050||p
+sv_setiv|||
+sv_setnv_mg|5.006000||p
+sv_setnv|||
+sv_setpv_mg|5.004050||p
+sv_setpvf_mg_nocontext|||pvn
+sv_setpvf_mg|5.006000|5.004000|pv
+sv_setpvf_nocontext|||vn
+sv_setpvf||5.004000|v
+sv_setpviv_mg||5.008001|
+sv_setpviv||5.008001|
+sv_setpvn_mg|5.004050||p
+sv_setpvn|||
+sv_setpvs|5.009004||p
+sv_setpv|||
+sv_setref_iv|||
+sv_setref_nv|||
+sv_setref_pvn|||
+sv_setref_pv|||
+sv_setref_uv||5.007001|
+sv_setsv_cow|||
+sv_setsv_flags||5.007002|
+sv_setsv_mg|5.004050||p
+sv_setsv_nomg|5.007002||p
+sv_setsv|||
+sv_setuv_mg|5.004050||p
+sv_setuv|5.004000||p
+sv_tainted||5.004000|
+sv_taint||5.004000|
+sv_true||5.005000|
+sv_unglob|||
+sv_uni_display||5.007003|
+sv_unmagic|||
+sv_unref_flags||5.007001|
+sv_unref|||
+sv_untaint||5.004000|
+sv_upgrade|||
+sv_usepvn_flags||5.009004|
+sv_usepvn_mg|5.004050||p
+sv_usepvn|||
+sv_utf8_decode||5.006000|
+sv_utf8_downgrade||5.006000|
+sv_utf8_encode||5.006000|
+sv_utf8_upgrade_flags||5.007002|
+sv_utf8_upgrade||5.007001|
+sv_uv|5.005000||p
+sv_vcatpvf_mg|5.006000|5.004000|p
+sv_vcatpvfn||5.004000|
+sv_vcatpvf|5.006000|5.004000|p
+sv_vsetpvf_mg|5.006000|5.004000|p
+sv_vsetpvfn||5.004000|
+sv_vsetpvf|5.006000|5.004000|p
+sv_xmlpeek|||
+svtype|||
+swallow_bom|||
+swash_fetch||5.007002|
+swash_get|||
+swash_init||5.006000|
+sys_intern_clear|||
+sys_intern_dup|||
+sys_intern_init|||
+taint_env|||
+taint_proper|||
+tmps_grow||5.006000|
+toLOWER|||
+toUPPER|||
+to_byte_substr|||
+to_uni_fold||5.007003|
+to_uni_lower_lc||5.006000|
+to_uni_lower||5.007003|
+to_uni_title_lc||5.006000|
+to_uni_title||5.007003|
+to_uni_upper_lc||5.006000|
+to_uni_upper||5.007003|
+to_utf8_case||5.007003|
+to_utf8_fold||5.007003|
+to_utf8_lower||5.007003|
+to_utf8_substr|||
+to_utf8_title||5.007003|
+to_utf8_upper||5.007003|
+token_free|||
+token_getmad|||
+tokenize_use|||
+tokeq|||
+tokereport|||
+too_few_arguments|||
+too_many_arguments|||
+uiv_2buf|||n
+unlnk|||
+unpack_rec|||
+unpack_str||5.007003|
+unpackstring||5.008001|
+unshare_hek_or_pvn|||
+unshare_hek|||
+unsharepvn||5.004000|
+unwind_handler_stack|||
+upg_version||5.009000|
+usage|||
+utf16_to_utf8_reversed||5.006001|
+utf16_to_utf8||5.006001|
+utf8_distance||5.006000|
+utf8_hop||5.006000|
+utf8_length||5.007001|
+utf8_mg_pos_cache_update|||
+utf8_to_bytes||5.006001|
+utf8_to_uvchr||5.007001|
+utf8_to_uvuni||5.007001|
+utf8n_to_uvchr|||
+utf8n_to_uvuni||5.007001|
+utilize|||
+uvchr_to_utf8_flags||5.007003|
+uvchr_to_utf8|||
+uvuni_to_utf8_flags||5.007003|
+uvuni_to_utf8||5.007001|
+validate_suid|||
+varname|||
+vcmp||5.009000|
+vcroak||5.006000|
+vdeb||5.007003|
+vdie_common|||
+vdie_croak_common|||
+vdie|||
+vform||5.006000|
+visit|||
+vivify_defelem|||
+vivify_ref|||
+vload_module||5.006000|
+vmess||5.006000|
+vnewSVpvf|5.006000|5.004000|p
+vnormal||5.009002|
+vnumify||5.009000|
+vstringify||5.009000|
+vverify||5.009003|
+vwarner||5.006000|
+vwarn||5.006000|
+wait4pid|||
+warn_nocontext|||vn
+warner_nocontext|||vn
+warner|5.006000|5.004000|pv
+warn|||v
+watch|||
+whichsig|||
+write_no_mem|||
+write_to_stderr|||
+xmldump_all|||
+xmldump_attr|||
+xmldump_eval|||
+xmldump_form|||
+xmldump_indent|||v
+xmldump_packsubs|||
+xmldump_sub|||
+xmldump_vindent|||
+yyerror|||
+yylex|||
+yyparse|||
+yywarn|||
+);
+
+if (exists $opt{'list-unsupported'}) {
+ my $f;
+ for $f (sort { lc $a cmp lc $b } keys %API) {
+ next unless $API{$f}{todo};
+ print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
+ }
+ exit 0;
+}
+
+# Scan for possible replacement candidates
+
+my(%replace, %need, %hints, %depends);
+my $replace = 0;
+my $hint = '';
+
+while (<DATA>) {
+ if ($hint) {
+ if (m{^\s*\*\s(.*?)\s*$}) {
+ $hints{$hint} ||= ''; # suppress warning with older perls
+ $hints{$hint} .= "$1\n";
+ }
+ else {
+ $hint = '';
+ }
+ }
+ $hint = $1 if m{^\s*$rccs\sHint:\s+(\w+)\s*$};
+
+ $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+)};
+ $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
+ $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
+
+ if (m{^\s*$rccs\s+(\w+)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
+ push @{$depends{$1}}, map { s/\s+//g; $_ } split /,/, $2;
+ }
+
+ $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
+}
+
+if (exists $opt{'api-info'}) {
+ my $f;
+ my $count = 0;
+ my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
+ for $f (sort { lc $a cmp lc $b } keys %API) {
+ next unless $f =~ /$match/;
+ print "\n=== $f ===\n\n";
+ my $info = 0;
+ if ($API{$f}{base} || $API{$f}{todo}) {
+ my $base = format_version($API{$f}{base} || $API{$f}{todo});
+ print "Supported at least starting from perl-$base.\n";
+ $info++;
+ }
+ if ($API{$f}{provided}) {
+ my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
+ 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};
+ $info++;
+ }
+ unless ($info) {
+ print "No portability information available.\n";
+ }
+ $count++;
+ }
+ if ($count > 0) {
+ print "\n";
+ }
+ else {
+ print "Found no API matching '$opt{'api-info'}'.\n";
+ }
+ exit 0;
+}
+
+if (exists $opt{'list-provided'}) {
+ my $f;
+ for $f (sort { lc $a cmp lc $b } keys %API) {
+ next unless $API{$f}{provided};
+ my @flags;
+ push @flags, 'explicit' if exists $need{$f};
+ push @flags, 'depend' if exists $depends{$f};
+ push @flags, 'hint' if exists $hints{$f};
+ my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
+ print "$f$flags\n";
+ }
+ exit 0;
+}
+
+my @files;
+my @srcext = qw( xs c h cc cpp );
+my $srcext = join '|', @srcext;
+
+if (@ARGV) {
+ my %seen;
+ @files = grep { -f && !exists $seen{$_} } map { glob $_ } @ARGV;
+}
+else {
+ eval {
+ require File::Find;
+ File::Find::find(sub {
+ $File::Find::name =~ /\.($srcext)$/i
+ and push @files, $File::Find::name;
+ }, '.');
+ };
+ if ($@) {
+ @files = map { glob "*.$_" } @srcext;
+ }
+}
+
+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;
+ push @{ $out ? \@out : \@in }, $_;
+ }
+ if (@ARGV && @out) {
+ warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
+ }
+ @files = @in;
+}
+
+unless (@files) {
+ die "No input files given!\n";
+}
+
+my(%files, %global, %revreplace);
+%revreplace = reverse %replace;
+my $filename;
+my $patch_opened = 0;
+
+for $filename (@files) {
+ unless (open IN, "<$filename") {
+ warn "Unable to read from $filename: $!\n";
+ next;
+ }
+
+ info("Scanning $filename ...");
+
+ my $c = do { local $/; <IN> };
+ close IN;
+
+ my %file = (orig => $c, changes => 0);
+
+ # temporarily remove C comments from the code
+ my @ccom;
+ $c =~ s{
+ (
+ [^"'/]+
+ |
+ (?:"[^"\\]*(?:\\.[^"\\]*)*" [^"'/]*)+
+ |
+ (?:'[^'\\]*(?:\\.[^'\\]*)*' [^"'/]*)+
+ )
+ |
+ (/ (?:
+ \*[^*]*\*+(?:[^$ccs][^*]*\*+)* /
+ |
+ /[^\r\n]*
+ ))
+ }{
+ defined $2 and push @ccom, $2;
+ defined $1 ? $1 : "$ccs$#ccom$cce";
+ }egsx;
+
+ $file{ccom} = \@ccom;
+ $file{code} = $c;
+ $file{has_inc_ppport} = ($c =~ /#.*include.*\Q$ppport\E/);
+
+ my $func;
+
+ for $func (keys %API) {
+ my $match = $func;
+ $match .= "|$revreplace{$func}" if exists $revreplace{$func};
+ if ($c =~ /\b(?:Perl_)?($match)\b/) {
+ $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}) {
+ if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
+ $file{uses}{$func}++;
+ my @deps = rec_depend($func);
+ if (@deps) {
+ $file{uses_deps}{$func} = \@deps;
+ for (@deps) {
+ $file{uses}{$_} = 0 unless exists $file{uses}{$_};
+ }
+ }
+ for ($func, @deps) {
+ if (exists $need{$_}) {
+ $file{needs}{$_} = 'static';
+ }
+ }
+ }
+ }
+ if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
+ if ($c =~ /\b$func\b/) {
+ $file{uses_todo}{$func}++;
+ }
+ }
+ }
+ }
+
+ while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
+ if (exists $need{$2}) {
+ $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
+ }
+ else {
+ warning("Possibly wrong #define $1 in $filename");
+ }
+ }
+
+ for (qw(uses needs uses_todo needed_global needed_static)) {
+ for $func (keys %{$file{$_}}) {
+ push @{$global{$_}{$func}}, $filename;
+ }
+ }
+
+ $files{$filename} = \%file;
+}
+
+# Globally resolve NEED_'s
+my $need;
+for $need (keys %{$global{needs}}) {
+ if (@{$global{needs}{$need}} > 1) {
+ my @targets = @{$global{needs}{$need}};
+ my @t = grep $files{$_}{needed_global}{$need}, @targets;
+ @targets = @t if @t;
+ @t = grep /\.xs$/i, @targets;
+ @targets = @t if @t;
+ my $target = shift @targets;
+ $files{$target}{needs}{$need} = 'global';
+ for (@{$global{needs}{$need}}) {
+ $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
+ }
+ }
+}
+
+for $filename (@files) {
+ exists $files{$filename} or next;
+
+ info("=== Analyzing $filename ===");
+
+ my %file = %{$files{$filename}};
+ my $func;
+ my $c = $file{code};
+
+ 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;
+ }
+ }
+ else {
+ warning("Uses Perl_$func instead of $func");
+ $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
+ {$func$1(}g);
+ }
+ }
+
+ for $func (sort keys %{$file{uses_replace}}) {
+ warning("Uses $func instead of $replace{$func}");
+ $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");
+ }
+ hint($func);
+ }
+
+ for $func (sort keys %{$file{uses_todo}}) {
+ warning("Uses $func, which may not be portable below perl ",
+ format_version($API{$func}{todo}));
+ }
+
+ for $func (sort keys %{$file{needed_static}}) {
+ my $message = '';
+ if (not exists $file{uses}{$func}) {
+ $message = "No need to define NEED_$func if $func is never used";
+ }
+ elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
+ $message = "No need to define NEED_$func when already needed globally";
+ }
+ if ($message) {
+ diag($message);
+ $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
+ }
+ }
+
+ for $func (sort keys %{$file{needed_global}}) {
+ my $message = '';
+ if (not exists $global{uses}{$func}) {
+ $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
+ }
+ elsif (exists $file{needs}{$func}) {
+ if ($file{needs}{$func} eq 'extern') {
+ $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
+ }
+ elsif ($file{needs}{$func} eq 'static') {
+ $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
+ }
+ }
+ if ($message) {
+ diag($message);
+ $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
+ }
+ }
+
+ $file{needs_inc_ppport} = keys %{$file{uses}};
+
+ if ($file{needs_inc_ppport}) {
+ my $pp = '';
+
+ for $func (sort keys %{$file{needs}}) {
+ my $type = $file{needs}{$func};
+ next if $type eq 'extern';
+ my $suffix = $type eq 'global' ? '_GLOBAL' : '';
+ unless (exists $file{"needed_$type"}{$func}) {
+ if ($type eq 'global') {
+ diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
+ }
+ else {
+ diag("File needs $func, adding static request");
+ }
+ $pp .= "#define NEED_$func$suffix\n";
+ }
+ }
+
+ if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
+ $pp = '';
+ $file{changes}++;
+ }
+
+ unless ($file{has_inc_ppport}) {
+ diag("Needs to include '$ppport'");
+ $pp .= qq(#include "$ppport"\n)
+ }
+
+ if ($pp) {
+ $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
+ || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
+ || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
+ || ($c =~ s/^/$pp/);
+ }
+ }
+ else {
+ if ($file{has_inc_ppport}) {
+ diag("No need to include '$ppport'");
+ $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
+ }
+ }
+
+ # put back in our C comments
+ my $ix;
+ my $cppc = 0;
+ my @ccom = @{$file{ccom}};
+ for $ix (0 .. $#ccom) {
+ if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
+ $cppc++;
+ $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
+ }
+ else {
+ $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
+ }
+ }
+
+ if ($cppc) {
+ my $s = $cppc != 1 ? 's' : '';
+ warning("Uses $cppc C++ style comment$s, which is not portable");
+ }
+
+ if ($file{changes}) {
+ if (exists $opt{copy}) {
+ my $newfile = "$filename$opt{copy}";
+ if (-e $newfile) {
+ error("'$newfile' already exists, refusing to write copy of '$filename'");
+ }
+ else {
+ local *F;
+ if (open F, ">$newfile") {
+ info("Writing copy of '$filename' with changes to '$newfile'");
+ print F $c;
+ close F;
+ }
+ else {
+ error("Cannot open '$newfile' for writing: $!");
+ }
+ }
+ }
+ elsif (exists $opt{patch} || $opt{changes}) {
+ if (exists $opt{patch}) {
+ unless ($patch_opened) {
+ if (open PATCH, ">$opt{patch}") {
+ $patch_opened = 1;
+ }
+ else {
+ error("Cannot open '$opt{patch}' for writing: $!");
+ delete $opt{patch};
+ $opt{changes} = 1;
+ goto fallback;
+ }
+ }
+ mydiff(\*PATCH, $filename, $c);
+ }
+ else {
+fallback:
+ info("Suggested changes:");
+ mydiff(\*STDOUT, $filename, $c);
+ }
+ }
+ else {
+ my $s = $file{changes} == 1 ? '' : 's';
+ info("$file{changes} potentially required change$s detected");
+ }
+ }
+ else {
+ info("Looks good");
+ }
+}
+
+close PATCH if $patch_opened;
+
+exit 0;
+
+
+sub mydiff
+{
+ local *F = shift;
+ my($file, $str) = @_;
+ my $diff;
+
+ if (exists $opt{diff}) {
+ $diff = run_diff($opt{diff}, $file, $str);
+ }
+
+ if (!defined $diff and can_use('Text::Diff')) {
+ $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
+ $diff = <<HEADER . $diff;
+--- $file
++++ $file.patched
+HEADER
+ }
+
+ if (!defined $diff) {
+ $diff = run_diff('diff -u', $file, $str);
+ }
+
+ if (!defined $diff) {
+ $diff = run_diff('diff', $file, $str);
+ }
+
+ if (!defined $diff) {
+ error("Cannot generate a diff. Please install Text::Diff or use --copy.");
+ return;
+ }
+
+ print F $diff;
+
+}
+
+sub run_diff
+{
+ my($prog, $file, $str) = @_;
+ my $tmp = 'dppptemp';
+ my $suf = 'aaa';
+ my $diff = '';
+ local *F;
+
+ while (-e "$tmp.$suf") { $suf++ }
+ $tmp = "$tmp.$suf";
+
+ if (open F, ">$tmp") {
+ print F $str;
+ close F;
+
+ if (open F, "$prog $file $tmp |") {
+ while (<F>) {
+ s/\Q$tmp\E/$file.patched/;
+ $diff .= $_;
+ }
+ close F;
+ unlink $tmp;
+ return $diff;
+ }
+
+ unlink $tmp;
+ }
+ else {
+ error("Cannot open '$tmp' for writing: $!");
+ }
+
+ return undef;
+}
+
+sub can_use
+{
+ eval "use @_;";
+ return $@ eq '';
+}
+
+sub rec_depend
+{
+ my $func = shift;
+ my %seen;
+ return () unless exists $depends{$func};
+ grep !$seen{$_}++, map { ($_, rec_depend($_)) } @{$depends{$func}};
+}
+
+sub parse_version
+{
+ my $ver = shift;
+
+ if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
+ return ($1, $2, $3);
+ }
+ elsif ($ver !~ /^\d+\.[\d_]+$/) {
+ die "cannot parse version '$ver'\n";
+ }
+
+ $ver =~ s/_//g;
+ $ver =~ s/$/000000/;
+
+ my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
+
+ $v = int $v;
+ $s = int $s;
+
+ if ($r < 5 || ($r == 5 && $v < 6)) {
+ if ($s % 10) {
+ die "cannot parse version '$ver'\n";
+ }
+ }
+
+ return ($r, $v, $s);
+}
+
+sub format_version
+{
+ my $ver = shift;
+
+ $ver =~ s/$/000000/;
+ my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
+
+ $v = int $v;
+ $s = int $s;
+
+ if ($r < 5 || ($r == 5 && $v < 6)) {
+ if ($s % 10) {
+ die "invalid version '$ver'\n";
+ }
+ $s /= 10;
+
+ $ver = sprintf "%d.%03d", $r, $v;
+ $s > 0 and $ver .= sprintf "_%02d", $s;
+
+ return $ver;
+ }
+
+ return sprintf "%d.%d.%d", $r, $v, $s;
+}
+
+sub info
+{
+ $opt{quiet} and return;
+ print @_, "\n";
+}
+
+sub diag
+{
+ $opt{quiet} and return;
+ $opt{diag} and print @_, "\n";
+}
+
+sub warning
+{
+ $opt{quiet} and return;
+ print "*** ", @_, "\n";
+}
+
+sub error
+{
+ print "*** ERROR: ", @_, "\n";
+}
+
+my %given_hints;
+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;
+}
+
+sub usage
+{
+ my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
+ my %M = ( 'I' => '*' );
+ $usage =~ s/^\s*perl\s+\S+/$^X $0/;
+ $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
+
+ print <<ENDUSAGE;
+
+Usage: $usage
+
+See perldoc $0 for details.
+
+ENDUSAGE
+
+ exit 2;
+}
+
+sub strip
+{
+ my $self = do { local(@ARGV,$/)=($0); <> };
+ my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
+ $copy =~ s/^(?=\S+)/ /gms;
+ $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
+ $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
+if (\@ARGV && \$ARGV[0] eq '--unstrip') {
+ eval { require Devel::PPPort };
+ \$@ and die "Cannot require Devel::PPPort, please install.\\n";
+ if (\$Devel::PPPort::VERSION < $VERSION) {
+ die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
+ . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
+ . "Please install a newer version, or --unstrip will not work.\\n";
+ }
+ Devel::PPPort::WriteFile(\$0);
+ exit 0;
+}
+print <<END;
+
+Sorry, but this is a stripped version of \$0.
+
+To be able to use its original script and doc functionality,
+please try to regenerate this file using:
+
+ \$^X \$0 --unstrip
+
+END
+/ms;
+
+ open OUT, ">$0" or die "cannot strip $0: $!\n";
+ print OUT $self;
+
+ exit 0;
+}
+
+__DATA__
+*/
+
+#ifndef _P_P_PORTABILITY_H_
+#define _P_P_PORTABILITY_H_
+
+#ifndef DPPP_NAMESPACE
+# define DPPP_NAMESPACE DPPP_
+#endif
+
+#define DPPP_CAT2(x,y) CAT2(x,y)
+#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
+
+#ifndef PERL_REVISION
+# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
+# define PERL_PATCHLEVEL_H_IMPLICIT
+# include <patchlevel.h>
+# endif
+# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
+# include <could_not_find_Perl_patchlevel.h>
+# endif
+# ifndef PERL_REVISION
+# define PERL_REVISION (5)
+ /* Replace: 1 */
+# define PERL_VERSION PATCHLEVEL
+# define PERL_SUBVERSION SUBVERSION
+ /* Replace PERL_PATCHLEVEL with PERL_VERSION */
+ /* Replace: 0 */
+# endif
+#endif
+
+#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)
+
+/* It is very unlikely that anyone will try to use this with Perl 6
+ (or greater), but who knows.
+ */
+#if PERL_REVISION != 5
+# error ppport.h only works with Perl version 5
+#endif /* PERL_REVISION != 5 */
+
+#ifdef I_LIMITS
+# include <limits.h>
+#endif
+
+#ifndef PERL_UCHAR_MIN
+# define PERL_UCHAR_MIN ((unsigned char)0)
+#endif
+
+#ifndef PERL_UCHAR_MAX
+# ifdef UCHAR_MAX
+# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
+# else
+# ifdef MAXUCHAR
+# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
+# else
+# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
+# endif
+# endif
+#endif
+
+#ifndef PERL_USHORT_MIN
+# define PERL_USHORT_MIN ((unsigned short)0)
+#endif
+
+#ifndef PERL_USHORT_MAX
+# ifdef USHORT_MAX
+# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
+# else
+# ifdef MAXUSHORT
+# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
+# else
+# ifdef USHRT_MAX
+# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
+# else
+# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
+# endif
+# endif
+# endif
+#endif
+
+#ifndef PERL_SHORT_MAX
+# ifdef SHORT_MAX
+# define PERL_SHORT_MAX ((short)SHORT_MAX)
+# else
+# ifdef MAXSHORT /* Often used in <values.h> */
+# define PERL_SHORT_MAX ((short)MAXSHORT)
+# else
+# ifdef SHRT_MAX
+# define PERL_SHORT_MAX ((short)SHRT_MAX)
+# else
+# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
+# endif
+# endif
+# endif
+#endif
+
+#ifndef PERL_SHORT_MIN
+# ifdef SHORT_MIN
+# define PERL_SHORT_MIN ((short)SHORT_MIN)
+# else
+# ifdef MINSHORT
+# define PERL_SHORT_MIN ((short)MINSHORT)
+# else
+# ifdef SHRT_MIN
+# define PERL_SHORT_MIN ((short)SHRT_MIN)
+# else
+# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
+# endif
+# endif
+# endif
+#endif
+
+#ifndef PERL_UINT_MAX
+# ifdef UINT_MAX
+# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
+# else
+# ifdef MAXUINT
+# define PERL_UINT_MAX ((unsigned int)MAXUINT)
+# else
+# define PERL_UINT_MAX (~(unsigned int)0)
+# endif
+# endif
+#endif
+
+#ifndef PERL_UINT_MIN
+# define PERL_UINT_MIN ((unsigned int)0)
+#endif
+
+#ifndef PERL_INT_MAX
+# ifdef INT_MAX
+# define PERL_INT_MAX ((int)INT_MAX)
+# else
+# ifdef MAXINT /* Often used in <values.h> */
+# define PERL_INT_MAX ((int)MAXINT)
+# else
+# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
+# endif
+# endif
+#endif
+
+#ifndef PERL_INT_MIN
+# ifdef INT_MIN
+# define PERL_INT_MIN ((int)INT_MIN)
+# else
+# ifdef MININT
+# define PERL_INT_MIN ((int)MININT)
+# else
+# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
+# endif
+# endif
+#endif
+
+#ifndef PERL_ULONG_MAX
+# ifdef ULONG_MAX
+# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
+# else
+# ifdef MAXULONG
+# define PERL_ULONG_MAX ((unsigned long)MAXULONG)
+# else
+# define PERL_ULONG_MAX (~(unsigned long)0)
+# endif
+# endif
+#endif
+
+#ifndef PERL_ULONG_MIN
+# define PERL_ULONG_MIN ((unsigned long)0L)
+#endif
+
+#ifndef PERL_LONG_MAX
+# ifdef LONG_MAX
+# define PERL_LONG_MAX ((long)LONG_MAX)
+# else
+# ifdef MAXLONG
+# define PERL_LONG_MAX ((long)MAXLONG)
+# else
+# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
+# endif
+# endif
+#endif
+
+#ifndef PERL_LONG_MIN
+# ifdef LONG_MIN
+# define PERL_LONG_MIN ((long)LONG_MIN)
+# else
+# ifdef MINLONG
+# define PERL_LONG_MIN ((long)MINLONG)
+# else
+# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
+# endif
+# endif
+#endif
+
+#if defined(HAS_QUAD) && (defined(convex) || defined(uts))
+# ifndef PERL_UQUAD_MAX
+# ifdef ULONGLONG_MAX
+# define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
+# else
+# ifdef MAXULONGLONG
+# define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
+# else
+# define PERL_UQUAD_MAX (~(unsigned long long)0)
+# endif
+# endif
+# endif
+
+# ifndef PERL_UQUAD_MIN
+# define PERL_UQUAD_MIN ((unsigned long long)0L)
+# endif
+
+# ifndef PERL_QUAD_MAX
+# ifdef LONGLONG_MAX
+# define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
+# else
+# ifdef MAXLONGLONG
+# define PERL_QUAD_MAX ((long long)MAXLONGLONG)
+# else
+# define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
+# endif
+# endif
+# endif
+
+# ifndef PERL_QUAD_MIN
+# ifdef LONGLONG_MIN
+# define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
+# else
+# ifdef MINLONGLONG
+# define PERL_QUAD_MIN ((long long)MINLONGLONG)
+# else
+# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
+# endif
+# endif
+# endif
+#endif
+
+/* This is based on code from 5.003 perl.h */
+#ifdef HAS_QUAD
+# ifdef cray
+#ifndef IVTYPE
+# define IVTYPE int
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_INT_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_INT_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_UINT_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_UINT_MAX
+#endif
+
+# ifdef INTSIZE
+#ifndef IVSIZE
+# define IVSIZE INTSIZE
+#endif
+
+# endif
+# else
+# if defined(convex) || defined(uts)
+#ifndef IVTYPE
+# define IVTYPE long long
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_QUAD_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_QUAD_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_UQUAD_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_UQUAD_MAX
+#endif
+
+# ifdef LONGLONGSIZE
+#ifndef IVSIZE
+# define IVSIZE LONGLONGSIZE
+#endif
+
+# endif
+# else
+#ifndef IVTYPE
+# define IVTYPE long
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_LONG_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_LONG_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_ULONG_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_ULONG_MAX
+#endif
+
+# ifdef LONGSIZE
+#ifndef IVSIZE
+# define IVSIZE LONGSIZE
+#endif
+
+# endif
+# endif
+# endif
+#ifndef IVSIZE
+# define IVSIZE 8
+#endif
+
+#ifndef PERL_QUAD_MIN
+# define PERL_QUAD_MIN IV_MIN
+#endif
+
+#ifndef PERL_QUAD_MAX
+# define PERL_QUAD_MAX IV_MAX
+#endif
+
+#ifndef PERL_UQUAD_MIN
+# define PERL_UQUAD_MIN UV_MIN
+#endif
+
+#ifndef PERL_UQUAD_MAX
+# define PERL_UQUAD_MAX UV_MAX
+#endif
+
+#else
+#ifndef IVTYPE
+# define IVTYPE long
+#endif
+
+#ifndef IV_MIN
+# define IV_MIN PERL_LONG_MIN
+#endif
+
+#ifndef IV_MAX
+# define IV_MAX PERL_LONG_MAX
+#endif
+
+#ifndef UV_MIN
+# define UV_MIN PERL_ULONG_MIN
+#endif
+
+#ifndef UV_MAX
+# define UV_MAX PERL_ULONG_MAX
+#endif
+
+#endif
+
+#ifndef IVSIZE
+# ifdef LONGSIZE
+# define IVSIZE LONGSIZE
+# else
+# define IVSIZE 4 /* A bold guess, but the best we can make. */
+# endif
+#endif
+#ifndef UVTYPE
+# define UVTYPE unsigned IVTYPE
+#endif
+
+#ifndef UVSIZE
+# define UVSIZE IVSIZE
+#endif
+#ifndef sv_setuv
+# define sv_setuv(sv, uv) \
+ STMT_START { \
+ UV TeMpUv = uv; \
+ if (TeMpUv <= IV_MAX) \
+ sv_setiv(sv, TeMpUv); \
+ else \
+ sv_setnv(sv, (double)TeMpUv); \
+ } STMT_END
+#endif
+#ifndef newSVuv
+# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
+#endif
+#ifndef sv_2uv
+# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
+#endif
+
+#ifndef SvUVX
+# define SvUVX(sv) ((UV)SvIVX(sv))
+#endif
+
+#ifndef SvUVXx
+# define SvUVXx(sv) SvUVX(sv)
+#endif
+
+#ifndef SvUV
+# define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
+#endif
+
+#ifndef SvUVx
+# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
+#endif
+
+/* Hint: sv_uv
+ * Always use the SvUVx() macro instead of sv_uv().
+ */
+#ifndef sv_uv
+# define sv_uv(sv) SvUVx(sv)
+#endif
+#ifndef XST_mUV
+# define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
+#endif
+
+#ifndef XSRETURN_UV
+# define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
+#endif
+#ifndef PUSHu
+# define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
+#endif
+
+#ifndef XPUSHu
+# define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
+#endif
+
+#ifdef HAS_MEMCMP
+#ifndef memNE
+# define memNE(s1,s2,l) (memcmp(s1,s2,l))
+#endif
+
+#ifndef memEQ
+# define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
+#endif
+
+#else
+#ifndef memNE
+# define memNE(s1,s2,l) (bcmp(s1,s2,l))
+#endif
+
+#ifndef memEQ
+# define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
+#endif
+
+#endif
+#ifndef MoveD
+# define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t))
+#endif
+
+#ifndef CopyD
+# define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
+#endif
+
+#ifdef HAS_MEMSET
+#ifndef ZeroD
+# define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t))
+#endif
+
+#else
+#ifndef ZeroD
+# define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d)
+#endif
+
+#endif
+#ifndef PoisonWith
+# define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
+#endif
+
+#ifndef PoisonNew
+# define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB)
+#endif
+
+#ifndef PoisonFree
+# define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF)
+#endif
+
+#ifndef Poison
+# define Poison(d,n,t) PoisonFree(d,n,t)
+#endif
+#ifndef Newx
+# define Newx(v,n,t) New(0,v,n,t)
+#endif
+
+#ifndef Newxc
+# define Newxc(v,n,t,c) Newc(0,v,n,t,c)
+#endif
+
+#ifndef Newxz
+# 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)
+# define PERL_UNUSED_DECL
+# else
+# define PERL_UNUSED_DECL __attribute__((unused))
+# endif
+# else
+# define PERL_UNUSED_DECL
+# endif
+#endif
+
+#ifndef PERL_UNUSED_ARG
+# if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
+# include <note.h>
+# define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
+# else
+# define PERL_UNUSED_ARG(x) ((void)x)
+# endif
+#endif
+
+#ifndef PERL_UNUSED_VAR
+# define PERL_UNUSED_VAR(x) ((void)x)
+#endif
+
+#ifndef PERL_UNUSED_CONTEXT
+# ifdef USE_ITHREADS
+# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
+# else
+# define PERL_UNUSED_CONTEXT
+# endif
+#endif
+#ifndef NOOP
+# define NOOP /*EMPTY*/(void)0
+#endif
+
+#ifndef dNOOP
+# define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
+#endif
+
+#ifndef NVTYPE
+# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
+# define NVTYPE long double
+# else
+# define NVTYPE double
+# endif
+typedef NVTYPE NV;
+#endif
+
+#ifndef INT2PTR
+
+# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
+# define PTRV UV
+# define INT2PTR(any,d) (any)(d)
+# else
+# if PTRSIZE == LONGSIZE
+# define PTRV unsigned long
+# else
+# define PTRV unsigned
+# endif
+# define INT2PTR(any,d) (any)(PTRV)(d)
+# endif
+
+# define NUM2PTR(any,d) (any)(PTRV)(d)
+# define PTR2IV(p) INT2PTR(IV,p)
+# define PTR2UV(p) INT2PTR(UV,p)
+# define PTR2NV(p) NUM2PTR(NV,p)
+
+# if PTRSIZE == LONGSIZE
+# define PTR2ul(p) (unsigned long)(p)
+# else
+# define PTR2ul(p) INT2PTR(unsigned long,p)
+# endif
+
+#endif /* !INT2PTR */
+
+#undef START_EXTERN_C
+#undef END_EXTERN_C
+#undef EXTERN_C
+#ifdef __cplusplus
+# define START_EXTERN_C extern "C" {
+# define END_EXTERN_C }
+# define EXTERN_C extern "C"
+#else
+# define START_EXTERN_C
+# define END_EXTERN_C
+# define EXTERN_C extern
+#endif
+
+#if defined(PERL_GCC_PEDANTIC)
+# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# endif
+#endif
+
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
+# ifndef PERL_USE_GCC_BRACE_GROUPS
+# define PERL_USE_GCC_BRACE_GROUPS
+# endif
+#endif
+
+#undef STMT_START
+#undef STMT_END
+#ifdef PERL_USE_GCC_BRACE_GROUPS
+# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
+# define STMT_END )
+#else
+# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
+# define STMT_START if (1)
+# define STMT_END else (void)0
+# else
+# define STMT_START do
+# define STMT_END while (0)
+# endif
+#endif
+#ifndef boolSV
+# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
+#endif
+
+/* DEFSV appears first in 5.004_56 */
+#ifndef DEFSV
+# define DEFSV GvSV(PL_defgv)
+#endif
+
+#ifndef SAVE_DEFSV
+# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
+#endif
+
+/* Older perls (<=5.003) lack AvFILLp */
+#ifndef AvFILLp
+# define AvFILLp AvFILL
+#endif
+#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
+ * rather ignores it. Portability can only be ensured if the length
+ * parameter is used for speed reasons, but the length can always be
+ * correctly computed from the string argument.
+ */
+#ifndef gv_stashpvn
+# define gv_stashpvn(str,len,create) gv_stashpv(str,create)
+#endif
+
+/* Replace: 1 */
+#ifndef get_cv
+# define get_cv perl_get_cv
+#endif
+
+#ifndef get_sv
+# define get_sv perl_get_sv
+#endif
+
+#ifndef get_av
+# define get_av perl_get_av
+#endif
+
+#ifndef get_hv
+# define get_hv perl_get_hv
+#endif
+
+/* Replace: 0 */
+#ifndef dUNDERBAR
+# define dUNDERBAR dNOOP
+#endif
+
+#ifndef UNDERBAR
+# define UNDERBAR DEFSV
+#endif
+#ifndef dAX
+# define dAX I32 ax = MARK - PL_stack_base + 1
+#endif
+
+#ifndef dITEMS
+# define dITEMS I32 items = SP - MARK
+#endif
+#ifndef dXSTARG
+# define dXSTARG SV * targ = sv_newmortal()
+#endif
+#ifndef dAXMARK
+# define dAXMARK I32 ax = POPMARK; \
+ register SV ** const mark = PL_stack_base + ax++
+#endif
+#ifndef XSprePUSH
+# define XSprePUSH (sp = PL_stack_base + ax - 1)
+#endif
+
+#if ((PERL_VERSION < 5) || ((PERL_VERSION == 5) && (PERL_SUBVERSION < 0)))
+# undef XSRETURN
+# define XSRETURN(off) \
+ STMT_START { \
+ PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
+ return; \
+ } STMT_END
+#endif
+#ifndef PERL_ABS
+# define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
+#endif
+#ifndef dVAR
+# define dVAR dNOOP
+#endif
+#ifndef SVf
+# define SVf "_"
+#endif
+
+#ifndef PERL_SIGNALS_UNSAFE_FLAG
+
+#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
+
+#if defined(NEED_PL_signals)
+static U32 DPPP_(my_PL_signals) = PERL_SIGNALS_UNSAFE_FLAG;
+#elif defined(NEED_PL_signals_GLOBAL)
+U32 DPPP_(my_PL_signals) = PERL_SIGNALS_UNSAFE_FLAG;
+#else
+extern U32 DPPP_(my_PL_signals);
+#endif
+#define PL_signals DPPP_(my_PL_signals)
+
+#endif
+#ifndef dTHR
+# define dTHR dNOOP
+#endif
+#ifndef dTHX
+# define dTHX dNOOP
+#endif
+
+#ifndef dTHXa
+# define dTHXa(x) dNOOP
+#endif
+#ifndef pTHX
+# define pTHX void
+#endif
+
+#ifndef pTHX_
+# define pTHX_
+#endif
+
+#ifndef aTHX
+# define aTHX
+#endif
+
+#ifndef aTHX_
+# define aTHX_
+#endif
+#ifndef dTHXoa
+# define dTHXoa(x) dTHXa(x)
+#endif
+#ifndef PUSHmortal
+# define PUSHmortal PUSHs(sv_newmortal())
+#endif
+
+#ifndef mPUSHp
+# define mPUSHp(p,l) sv_setpvn_mg(PUSHmortal, (p), (l))
+#endif
+
+#ifndef mPUSHn
+# define mPUSHn(n) sv_setnv_mg(PUSHmortal, (NV)(n))
+#endif
+
+#ifndef mPUSHi
+# define mPUSHi(i) sv_setiv_mg(PUSHmortal, (IV)(i))
+#endif
+
+#ifndef mPUSHu
+# define mPUSHu(u) sv_setuv_mg(PUSHmortal, (UV)(u))
+#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
+#endif
+
+#ifndef mXPUSHn
+# define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END
+#endif
+
+#ifndef mXPUSHi
+# define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END
+#endif
+
+#ifndef mXPUSHu
+# define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END
+#endif
+
+/* Replace: 1 */
+#ifndef call_sv
+# define call_sv perl_call_sv
+#endif
+
+#ifndef call_pv
+# define call_pv perl_call_pv
+#endif
+
+#ifndef call_argv
+# define call_argv perl_call_argv
+#endif
+
+#ifndef call_method
+# define call_method perl_call_method
+#endif
+#ifndef eval_sv
+# define eval_sv perl_eval_sv
+#endif
+
+/* Replace: 0 */
+
+/* Replace perl_eval_pv with eval_pv */
+/* eval_pv depends on eval_sv */
+
+#ifndef eval_pv
+#if defined(NEED_eval_pv)
+static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
+static
+#else
+extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
+#endif
+
+#ifdef eval_pv
+# undef eval_pv
+#endif
+#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
+#define Perl_eval_pv DPPP_(my_eval_pv)
+
+#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
+
+SV*
+DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
+{
+ dSP;
+ SV* sv = newSVpv(p, 0);
+
+ PUSHMARK(sp);
+ eval_sv(sv, G_SCALAR);
+ SvREFCNT_dec(sv);
+
+ SPAGAIN;
+ sv = POPs;
+ PUTBACK;
+
+ if (croak_on_error && SvTRUE(GvSV(errgv)))
+ croak(SvPVx(GvSV(errgv), na));
+
+ return sv;
+}
+
+#endif
+#endif
+#ifndef newRV_inc
+# define newRV_inc(sv) newRV(sv) /* Replace */
+#endif
+
+#ifndef newRV_noinc
+#if defined(NEED_newRV_noinc)
+static SV * DPPP_(my_newRV_noinc)(SV *sv);
+static
+#else
+extern SV * DPPP_(my_newRV_noinc)(SV *sv);
+#endif
+
+#ifdef newRV_noinc
+# undef newRV_noinc
+#endif
+#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
+#define Perl_newRV_noinc DPPP_(my_newRV_noinc)
+
+#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
+SV *
+DPPP_(my_newRV_noinc)(SV *sv)
+{
+ SV *rv = (SV *)newRV(sv);
+ SvREFCNT_dec(sv);
+ return rv;
+}
+#endif
+#endif
+
+/* Hint: newCONSTSUB
+ * Returns a CV* as of perl-5.7.1. This return value is not supported
+ * by Devel::PPPort.
+ */
+
+/* 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 defined(NEED_newCONSTSUB)
+static void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
+static
+#else
+extern void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv);
+#endif
+
+#ifdef newCONSTSUB
+# undef newCONSTSUB
+#endif
+#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
+#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
+
+#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
+
+void
+DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
+{
+ U32 oldhints = PL_hints;
+ HV *old_cop_stash = PL_curcop->cop_stash;
+ HV *old_curstash = PL_curstash;
+ line_t oldline = PL_curcop->cop_line;
+ PL_curcop->cop_line = PL_copline;
+
+ PL_hints &= ~HINT_BLOCK_SCOPE;
+ if (stash)
+ PL_curstash = PL_curcop->cop_stash = stash;
+
+ newSUB(
+
+#if ((PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)))
+ start_subparse(),
+#elif ((PERL_VERSION == 3) && (PERL_SUBVERSION == 22))
+ start_subparse(0),
+#else /* 5.003_23 onwards */
+ start_subparse(FALSE, 0),
+#endif
+
+ newSVOP(OP_CONST, 0, newSVpv(name,0)),
+ newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
+ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
+ );
+
+ PL_hints = oldhints;
+ PL_curcop->cop_stash = old_cop_stash;
+ PL_curstash = old_curstash;
+ PL_curcop->cop_line = oldline;
+}
+#endif
+#endif
+
+/*
+ * Boilerplate macros for initializing and accessing interpreter-local
+ * data from C. All statics in extensions should be reworked to use
+ * this, if you want to make the extension thread-safe. See ext/re/re.xs
+ * for an example of the use of these macros.
+ *
+ * Code that uses these macros is responsible for the following:
+ * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
+ * 2. Declare a typedef named my_cxt_t that is a structure that contains
+ * all the data that needs to be interpreter-local.
+ * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
+ * 4. Use the MY_CXT_INIT macro such that it is called exactly once
+ * (typically put in the BOOT: section).
+ * 5. Use the members of the my_cxt_t structure everywhere as
+ * MY_CXT.member.
+ * 6. Use the dMY_CXT macro (a declaration) in all the functions that
+ * access MY_CXT.
+ */
+
+#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
+ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT)
+
+#ifndef START_MY_CXT
+
+/* This must appear in all extensions that define a my_cxt_t structure,
+ * right after the definition (i.e. at file scope). The non-threads
+ * case below uses it to declare the data as static. */
+#define START_MY_CXT
+
+#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 68)))
+/* Fetches the SV that keeps the per-interpreter data. */
+#define dMY_CXT_SV \
+ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
+#else /* >= perl5.004_68 */
+#define dMY_CXT_SV \
+ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \
+ sizeof(MY_CXT_KEY)-1, TRUE)
+#endif /* < perl5.004_68 */
+
+/* This declaration should be used within all functions that use the
+ * interpreter-local data. */
+#define dMY_CXT \
+ dMY_CXT_SV; \
+ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
+
+/* Creates and zeroes the per-interpreter data.
+ * (We allocate my_cxtp in a Perl SV so that it will be released when
+ * the interpreter goes away.) */
+#define MY_CXT_INIT \
+ dMY_CXT_SV; \
+ /* newSV() allocates one more than needed */ \
+ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
+ Zero(my_cxtp, 1, my_cxt_t); \
+ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+
+/* This macro must be used to access members of the my_cxt_t structure.
+ * e.g. MYCXT.some_data */
+#define MY_CXT (*my_cxtp)
+
+/* Judicious use of these macros can reduce the number of times dMY_CXT
+ * is used. Use is similar to pTHX, aTHX etc. */
+#define pMY_CXT my_cxt_t *my_cxtp
+#define pMY_CXT_ pMY_CXT,
+#define _pMY_CXT ,pMY_CXT
+#define aMY_CXT my_cxtp
+#define aMY_CXT_ aMY_CXT,
+#define _aMY_CXT ,aMY_CXT
+
+#endif /* START_MY_CXT */
+
+#ifndef MY_CXT_CLONE
+/* Clones the per-interpreter data. */
+#define MY_CXT_CLONE \
+ dMY_CXT_SV; \
+ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
+ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
+ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+#endif
+
+#else /* single interpreter */
+
+#ifndef START_MY_CXT
+
+#define START_MY_CXT static my_cxt_t my_cxt;
+#define dMY_CXT_SV dNOOP
+#define dMY_CXT dNOOP
+#define MY_CXT_INIT NOOP
+#define MY_CXT my_cxt
+
+#define pMY_CXT void
+#define pMY_CXT_
+#define _pMY_CXT
+#define aMY_CXT
+#define aMY_CXT_
+#define _aMY_CXT
+
+#endif /* START_MY_CXT */
+
+#ifndef MY_CXT_CLONE
+#define MY_CXT_CLONE NOOP
+#endif
+
+#endif
+
+#ifndef IVdf
+# if IVSIZE == LONGSIZE
+# define IVdf "ld"
+# define UVuf "lu"
+# define UVof "lo"
+# define UVxf "lx"
+# define UVXf "lX"
+# else
+# if IVSIZE == INTSIZE
+# define IVdf "d"
+# define UVuf "u"
+# define UVof "o"
+# define UVxf "x"
+# define UVXf "X"
+# endif
+# endif
+#endif
+
+#ifndef NVef
+# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
+ defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */
+# define NVef PERL_PRIeldbl
+# define NVff PERL_PRIfldbl
+# define NVgf PERL_PRIgldbl
+# else
+# define NVef "e"
+# define NVff "f"
+# define NVgf "g"
+# endif
+#endif
+
+#ifndef SvREFCNT_inc
+# ifdef PERL_USE_GCC_BRACE_GROUPS
+# define SvREFCNT_inc(sv) \
+ ({ \
+ SV * const _sv = (SV*)(sv); \
+ if (_sv) \
+ (SvREFCNT(_sv))++; \
+ _sv; \
+ })
+# else
+# define SvREFCNT_inc(sv) \
+ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
+# endif
+#endif
+
+#ifndef SvREFCNT_inc_simple
+# ifdef PERL_USE_GCC_BRACE_GROUPS
+# define SvREFCNT_inc_simple(sv) \
+ ({ \
+ if (sv) \
+ (SvREFCNT(sv))++; \
+ (SV *)(sv); \
+ })
+# else
+# define SvREFCNT_inc_simple(sv) \
+ ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
+# endif
+#endif
+
+#ifndef SvREFCNT_inc_NN
+# ifdef PERL_USE_GCC_BRACE_GROUPS
+# define SvREFCNT_inc_NN(sv) \
+ ({ \
+ SV * const _sv = (SV*)(sv); \
+ SvREFCNT(_sv)++; \
+ _sv; \
+ })
+# else
+# define SvREFCNT_inc_NN(sv) \
+ (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
+# endif
+#endif
+
+#ifndef SvREFCNT_inc_void
+# ifdef PERL_USE_GCC_BRACE_GROUPS
+# define SvREFCNT_inc_void(sv) \
+ ({ \
+ SV * const _sv = (SV*)(sv); \
+ if (_sv) \
+ (void)(SvREFCNT(_sv)++); \
+ })
+# else
+# define SvREFCNT_inc_void(sv) \
+ (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
+# endif
+#endif
+#ifndef SvREFCNT_inc_simple_void
+# define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
+#endif
+
+#ifndef SvREFCNT_inc_simple_NN
+# define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv))
+#endif
+
+#ifndef SvREFCNT_inc_void_NN
+# define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
+#endif
+
+#ifndef SvREFCNT_inc_simple_void_NN
+# define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
+#endif
+
+#ifndef SvPV_nolen
+
+#if defined(NEED_sv_2pv_nolen)
+static char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
+static
+#else
+extern char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
+#endif
+
+#ifdef sv_2pv_nolen
+# undef sv_2pv_nolen
+#endif
+#define sv_2pv_nolen(a) DPPP_(my_sv_2pv_nolen)(aTHX_ a)
+#define Perl_sv_2pv_nolen DPPP_(my_sv_2pv_nolen)
+
+#if defined(NEED_sv_2pv_nolen) || defined(NEED_sv_2pv_nolen_GLOBAL)
+
+char *
+DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv)
+{
+ STRLEN n_a;
+ return sv_2pv(sv, &n_a);
+}
+
+#endif
+
+/* Hint: sv_2pv_nolen
+ * Use the SvPV_nolen() macro instead of sv_2pv_nolen().
+ */
+
+/* SvPV_nolen depends on sv_2pv_nolen */
+#define SvPV_nolen(sv) \
+ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
+ ? SvPVX(sv) : sv_2pv_nolen(sv))
+
+#endif
+
+#ifdef SvPVbyte
+
+/* Hint: SvPVbyte
+ * Does not work in perl-5.6.1, ppport.h implements a version
+ * borrowed from perl-5.7.3.
+ */
+
+#if ((PERL_VERSION < 7) || ((PERL_VERSION == 7) && (PERL_SUBVERSION < 0)))
+
+#if defined(NEED_sv_2pvbyte)
+static char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
+static
+#else
+extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
+#endif
+
+#ifdef sv_2pvbyte
+# undef sv_2pvbyte
+#endif
+#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
+#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
+
+#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
+
+char *
+DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
+{
+ sv_utf8_downgrade(sv,0);
+ return SvPV(sv,*lp);
+}
+
+#endif
+
+/* Hint: sv_2pvbyte
+ * Use the SvPVbyte() macro instead of sv_2pvbyte().
+ */
+
+#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))
+
+#endif
+
+#else
+
+# define SvPVbyte SvPV
+# 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
+#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)
+#endif
+#ifndef SvMAGIC_set
+# define SvMAGIC_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
+ (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
+#endif
+
+#if ((PERL_VERSION < 9) || ((PERL_VERSION == 9) && (PERL_SUBVERSION < 3)))
+#ifndef SvPVX_const
+# define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv)))
+#endif
+
+#ifndef SvPVX_mutable
+# define SvPVX_mutable(sv) (0 + SvPVX(sv))
+#endif
+#ifndef SvRV_set
+# define SvRV_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
+ (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
+#endif
+
+#else
+#ifndef SvPVX_const
+# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
+#endif
+
+#ifndef SvPVX_mutable
+# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
+#endif
+#ifndef SvRV_set
+# define SvRV_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
+ ((sv)->sv_u.svu_rv = (val)); } STMT_END
+#endif
+
+#endif
+#ifndef SvSTASH_set
+# define SvSTASH_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
+ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
+#endif
+
+#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 0)))
+#ifndef SvUV_set
+# define SvUV_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
+ (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
+#endif
+
+#else
+#ifndef SvUV_set
+# define SvUV_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
+ (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
+#endif
+
+#endif
+
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(vnewSVpvf)
+#if defined(NEED_vnewSVpvf)
+static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args);
+static
+#else
+extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args);
+#endif
+
+#ifdef vnewSVpvf
+# undef vnewSVpvf
+#endif
+#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
+#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
+
+#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
+
+SV *
+DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
+{
+ register SV *sv = newSV(0);
+ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
+ return sv;
+}
+
+#endif
+#endif
+
+/* sv_vcatpvf depends on sv_vcatpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !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)
+# 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 defined(NEED_sv_catpvf_mg)
+static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+#endif
+
+#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
+
+#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
+
+void
+DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
+{
+ va_list args;
+ va_start(args, pat);
+ sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#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 defined(NEED_sv_catpvf_mg_nocontext)
+static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+#endif
+
+#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
+#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
+
+#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
+
+void
+DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
+{
+ dTHX;
+ va_list args;
+ va_start(args, pat);
+ sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#endif
+#endif
+#endif
+
+#ifndef sv_catpvf_mg
+# ifdef PERL_IMPLICIT_CONTEXT
+# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
+# else
+# define sv_catpvf_mg Perl_sv_catpvf_mg
+# endif
+#endif
+
+/* sv_vcatpvf_mg depends on sv_vcatpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !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*)); \
+ SvSETMAGIC(sv); \
+ } 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 defined(NEED_sv_setpvf_mg)
+static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...);
+#endif
+
+#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
+
+#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
+
+void
+DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
+{
+ va_list args;
+ va_start(args, pat);
+ sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#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 defined(NEED_sv_setpvf_mg_nocontext)
+static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+static
+#else
+extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...);
+#endif
+
+#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
+#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
+
+#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
+
+void
+DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
+{
+ dTHX;
+ va_list args;
+ va_start(args, pat);
+ sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+ SvSETMAGIC(sv);
+ va_end(args);
+}
+
+#endif
+#endif
+#endif
+
+#ifndef sv_setpvf_mg
+# ifdef PERL_IMPLICIT_CONTEXT
+# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
+# else
+# define sv_setpvf_mg Perl_sv_setpvf_mg
+# endif
+#endif
+
+/* sv_vsetpvf_mg depends on sv_vsetpvfn */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !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 WARN_ALL
+# define WARN_ALL 0
+#endif
+
+#ifndef WARN_CLOSURE
+# define WARN_CLOSURE 1
+#endif
+
+#ifndef WARN_DEPRECATED
+# define WARN_DEPRECATED 2
+#endif
+
+#ifndef WARN_EXITING
+# define WARN_EXITING 3
+#endif
+
+#ifndef WARN_GLOB
+# define WARN_GLOB 4
+#endif
+
+#ifndef WARN_IO
+# define WARN_IO 5
+#endif
+
+#ifndef WARN_CLOSED
+# define WARN_CLOSED 6
+#endif
+
+#ifndef WARN_EXEC
+# define WARN_EXEC 7
+#endif
+
+#ifndef WARN_LAYER
+# define WARN_LAYER 8
+#endif
+
+#ifndef WARN_NEWLINE
+# define WARN_NEWLINE 9
+#endif
+
+#ifndef WARN_PIPE
+# define WARN_PIPE 10
+#endif
+
+#ifndef WARN_UNOPENED
+# define WARN_UNOPENED 11
+#endif
+
+#ifndef WARN_MISC
+# define WARN_MISC 12
+#endif
+
+#ifndef WARN_NUMERIC
+# define WARN_NUMERIC 13
+#endif
+
+#ifndef WARN_ONCE
+# define WARN_ONCE 14
+#endif
+
+#ifndef WARN_OVERFLOW
+# define WARN_OVERFLOW 15
+#endif
+
+#ifndef WARN_PACK
+# define WARN_PACK 16
+#endif
+
+#ifndef WARN_PORTABLE
+# define WARN_PORTABLE 17
+#endif
+
+#ifndef WARN_RECURSION
+# define WARN_RECURSION 18
+#endif
+
+#ifndef WARN_REDEFINE
+# define WARN_REDEFINE 19
+#endif
+
+#ifndef WARN_REGEXP
+# define WARN_REGEXP 20
+#endif
+
+#ifndef WARN_SEVERE
+# define WARN_SEVERE 21
+#endif
+
+#ifndef WARN_DEBUGGING
+# define WARN_DEBUGGING 22
+#endif
+
+#ifndef WARN_INPLACE
+# define WARN_INPLACE 23
+#endif
+
+#ifndef WARN_INTERNAL
+# define WARN_INTERNAL 24
+#endif
+
+#ifndef WARN_MALLOC
+# define WARN_MALLOC 25
+#endif
+
+#ifndef WARN_SIGNAL
+# define WARN_SIGNAL 26
+#endif
+
+#ifndef WARN_SUBSTR
+# define WARN_SUBSTR 27
+#endif
+
+#ifndef WARN_SYNTAX
+# define WARN_SYNTAX 28
+#endif
+
+#ifndef WARN_AMBIGUOUS
+# define WARN_AMBIGUOUS 29
+#endif
+
+#ifndef WARN_BAREWORD
+# define WARN_BAREWORD 30
+#endif
+
+#ifndef WARN_DIGIT
+# define WARN_DIGIT 31
+#endif
+
+#ifndef WARN_PARENTHESIS
+# define WARN_PARENTHESIS 32
+#endif
+
+#ifndef WARN_PRECEDENCE
+# define WARN_PRECEDENCE 33
+#endif
+
+#ifndef WARN_PRINTF
+# define WARN_PRINTF 34
+#endif
+
+#ifndef WARN_PROTOTYPE
+# define WARN_PROTOTYPE 35
+#endif
+
+#ifndef WARN_QW
+# define WARN_QW 36
+#endif
+
+#ifndef WARN_RESERVED
+# define WARN_RESERVED 37
+#endif
+
+#ifndef WARN_SEMICOLON
+# define WARN_SEMICOLON 38
+#endif
+
+#ifndef WARN_TAINT
+# define WARN_TAINT 39
+#endif
+
+#ifndef WARN_THREADS
+# define WARN_THREADS 40
+#endif
+
+#ifndef WARN_UNINITIALIZED
+# define WARN_UNINITIALIZED 41
+#endif
+
+#ifndef WARN_UNPACK
+# define WARN_UNPACK 42
+#endif
+
+#ifndef WARN_UNTIE
+# define WARN_UNTIE 43
+#endif
+
+#ifndef WARN_UTF8
+# define WARN_UTF8 44
+#endif
+
+#ifndef WARN_VOID
+# define WARN_VOID 45
+#endif
+
+#ifndef WARN_ASSERTIONS
+# define WARN_ASSERTIONS 46
+#endif
+#ifndef packWARN
+# define packWARN(a) (a)
+#endif
+
+#ifndef ckWARN
+# ifdef G_WARN_ON
+# define ckWARN(a) (PL_dowarn & G_WARN_ON)
+# else
+# define ckWARN(a) PL_dowarn
+# endif
+#endif
+
+/* warner depends on vnewSVpvf */
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(warner)
+#if defined(NEED_warner)
+static void DPPP_(my_warner)(U32 err, const char *pat, ...);
+static
+#else
+extern void DPPP_(my_warner)(U32 err, const char *pat, ...);
+#endif
+
+#define Perl_warner DPPP_(my_warner)
+
+#if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
+
+void
+DPPP_(my_warner)(U32 err, const char *pat, ...)
+{
+ SV *sv;
+ va_list args;
+
+ PERL_UNUSED_ARG(err);
+
+ va_start(args, pat);
+ sv = vnewSVpvf(pat, &args);
+ va_end(args);
+ sv_2mortal(sv);
+ warn("%s", SvPV_nolen(sv));
+}
+
+#define warner Perl_warner
+
+/* Perl_warner_nocontext depends on warner */
+#define Perl_warner_nocontext Perl_warner
+
+#endif
+#endif
+
+/* concatenating with "" ensures that only literal strings are accepted as argument
+ * note that STR_WITH_LEN() can't be used as argument to macros or functions that
+ * under some configurations might be macros
+ */
+#ifndef STR_WITH_LEN
+# define STR_WITH_LEN(s) (s ""), (sizeof(s)-1)
+#endif
+#ifndef newSVpvs
+# define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1)
+#endif
+
+#ifndef sv_catpvs
+# define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1)
+#endif
+
+#ifndef sv_setpvs
+# define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1)
+#endif
+
+#ifndef hv_fetchs
+# define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval)
+#endif
+
+#ifndef hv_stores
+# define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0)
+#endif
+#ifndef SvGETMAGIC
+# define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
+#endif
+#ifndef PERL_MAGIC_sv
+# define PERL_MAGIC_sv '\0'
+#endif
+
+#ifndef PERL_MAGIC_overload
+# define PERL_MAGIC_overload 'A'
+#endif
+
+#ifndef PERL_MAGIC_overload_elem
+# define PERL_MAGIC_overload_elem 'a'
+#endif
+
+#ifndef PERL_MAGIC_overload_table
+# define PERL_MAGIC_overload_table 'c'
+#endif
+
+#ifndef PERL_MAGIC_bm
+# define PERL_MAGIC_bm 'B'
+#endif
+
+#ifndef PERL_MAGIC_regdata
+# define PERL_MAGIC_regdata 'D'
+#endif
+
+#ifndef PERL_MAGIC_regdatum
+# define PERL_MAGIC_regdatum 'd'
+#endif
+
+#ifndef PERL_MAGIC_env
+# define PERL_MAGIC_env 'E'
+#endif
+
+#ifndef PERL_MAGIC_envelem
+# define PERL_MAGIC_envelem 'e'
+#endif
+
+#ifndef PERL_MAGIC_fm
+# define PERL_MAGIC_fm 'f'
+#endif
+
+#ifndef PERL_MAGIC_regex_global
+# define PERL_MAGIC_regex_global 'g'
+#endif
+
+#ifndef PERL_MAGIC_isa
+# define PERL_MAGIC_isa 'I'
+#endif
+
+#ifndef PERL_MAGIC_isaelem
+# define PERL_MAGIC_isaelem 'i'
+#endif
+
+#ifndef PERL_MAGIC_nkeys
+# define PERL_MAGIC_nkeys 'k'
+#endif
+
+#ifndef PERL_MAGIC_dbfile
+# define PERL_MAGIC_dbfile 'L'
+#endif
+
+#ifndef PERL_MAGIC_dbline
+# define PERL_MAGIC_dbline 'l'
+#endif
+
+#ifndef PERL_MAGIC_mutex
+# define PERL_MAGIC_mutex 'm'
+#endif
+
+#ifndef PERL_MAGIC_shared
+# define PERL_MAGIC_shared 'N'
+#endif
+
+#ifndef PERL_MAGIC_shared_scalar
+# define PERL_MAGIC_shared_scalar 'n'
+#endif
+
+#ifndef PERL_MAGIC_collxfrm
+# define PERL_MAGIC_collxfrm 'o'
+#endif
+
+#ifndef PERL_MAGIC_tied
+# define PERL_MAGIC_tied 'P'
+#endif
+
+#ifndef PERL_MAGIC_tiedelem
+# define PERL_MAGIC_tiedelem 'p'
+#endif
+
+#ifndef PERL_MAGIC_tiedscalar
+# define PERL_MAGIC_tiedscalar 'q'
+#endif
+
+#ifndef PERL_MAGIC_qr
+# define PERL_MAGIC_qr 'r'
+#endif
+
+#ifndef PERL_MAGIC_sig
+# define PERL_MAGIC_sig 'S'
+#endif
+
+#ifndef PERL_MAGIC_sigelem
+# define PERL_MAGIC_sigelem 's'
+#endif
+
+#ifndef PERL_MAGIC_taint
+# define PERL_MAGIC_taint 't'
+#endif
+
+#ifndef PERL_MAGIC_uvar
+# define PERL_MAGIC_uvar 'U'
+#endif
+
+#ifndef PERL_MAGIC_uvar_elem
+# define PERL_MAGIC_uvar_elem 'u'
+#endif
+
+#ifndef PERL_MAGIC_vstring
+# define PERL_MAGIC_vstring 'V'
+#endif
+
+#ifndef PERL_MAGIC_vec
+# define PERL_MAGIC_vec 'v'
+#endif
+
+#ifndef PERL_MAGIC_utf8
+# define PERL_MAGIC_utf8 'w'
+#endif
+
+#ifndef PERL_MAGIC_substr
+# define PERL_MAGIC_substr 'x'
+#endif
+
+#ifndef PERL_MAGIC_defelem
+# define PERL_MAGIC_defelem 'y'
+#endif
+
+#ifndef PERL_MAGIC_glob
+# define PERL_MAGIC_glob '*'
+#endif
+
+#ifndef PERL_MAGIC_arylen
+# define PERL_MAGIC_arylen '#'
+#endif
+
+#ifndef PERL_MAGIC_pos
+# define PERL_MAGIC_pos '.'
+#endif
+
+#ifndef PERL_MAGIC_backref
+# define PERL_MAGIC_backref '<'
+#endif
+
+#ifndef PERL_MAGIC_ext
+# define PERL_MAGIC_ext '~'
+#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
+
+#ifndef sv_catsv_nomg
+# define sv_catsv_nomg sv_catsv
+#endif
+
+#ifndef sv_setsv_nomg
+# define sv_setsv_nomg sv_setsv
+#endif
+
+#ifndef sv_pvn_nomg
+# define sv_pvn_nomg sv_pvn
+#endif
+
+#ifndef SvIV_nomg
+# define SvIV_nomg SvIV
+#endif
+
+#ifndef SvUV_nomg
+# define SvUV_nomg SvUV
+#endif
+
+#ifndef sv_catpv_mg
+# define sv_catpv_mg(sv, ptr) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_catpv(TeMpSv,ptr); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_catpvn_mg
+# define sv_catpvn_mg(sv, ptr, len) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_catpvn(TeMpSv,ptr,len); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_catsv_mg
+# define sv_catsv_mg(dsv, ssv) \
+ STMT_START { \
+ SV *TeMpSv = dsv; \
+ sv_catsv(TeMpSv,ssv); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setiv_mg
+# define sv_setiv_mg(sv, i) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setiv(TeMpSv,i); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setnv_mg
+# define sv_setnv_mg(sv, num) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setnv(TeMpSv,num); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setpv_mg
+# define sv_setpv_mg(sv, ptr) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setpv(TeMpSv,ptr); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setpvn_mg
+# define sv_setpvn_mg(sv, ptr, len) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setpvn(TeMpSv,ptr,len); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setsv_mg
+# define sv_setsv_mg(dsv, ssv) \
+ STMT_START { \
+ SV *TeMpSv = dsv; \
+ sv_setsv(TeMpSv,ssv); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_setuv_mg
+# define sv_setuv_mg(sv, i) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_setuv(TeMpSv,i); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+
+#ifndef sv_usepvn_mg
+# define sv_usepvn_mg(sv, ptr, len) \
+ STMT_START { \
+ SV *TeMpSv = sv; \
+ sv_usepvn(TeMpSv,ptr,len); \
+ SvSETMAGIC(TeMpSv); \
+ } STMT_END
+#endif
+#ifndef SvVSTRING_mg
+# define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
+#endif
+
+#ifdef USE_ITHREADS
+#ifndef CopFILE
+# define CopFILE(c) ((c)->cop_file)
+#endif
+
+#ifndef CopFILEGV
+# define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
+#endif
+
+#ifndef CopFILE_set
+# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
+#endif
+
+#ifndef CopFILESV
+# define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
+#endif
+
+#ifndef CopFILEAV
+# define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
+#endif
+
+#ifndef CopSTASHPV
+# define CopSTASHPV(c) ((c)->cop_stashpv)
+#endif
+
+#ifndef CopSTASHPV_set
+# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
+#endif
+
+#ifndef CopSTASH
+# define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
+#endif
+
+#ifndef CopSTASH_set
+# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
+#endif
+
+#ifndef CopSTASH_eq
+# define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
+ || (CopSTASHPV(c) && HvNAME(hv) \
+ && strEQ(CopSTASHPV(c), HvNAME(hv)))))
+#endif
+
+#else
+#ifndef CopFILEGV
+# define CopFILEGV(c) ((c)->cop_filegv)
+#endif
+
+#ifndef CopFILEGV_set
+# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
+#endif
+
+#ifndef CopFILE_set
+# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
+#endif
+
+#ifndef CopFILESV
+# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
+#endif
+
+#ifndef CopFILEAV
+# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
+#endif
+
+#ifndef CopFILE
+# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
+#endif
+
+#ifndef CopSTASH
+# define CopSTASH(c) ((c)->cop_stash)
+#endif
+
+#ifndef CopSTASH_set
+# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
+#endif
+
+#ifndef CopSTASHPV
+# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
+#endif
+
+#ifndef CopSTASHPV_set
+# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
+#endif
+
+#ifndef CopSTASH_eq
+# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv))
+#endif
+
+#endif /* USE_ITHREADS */
+#ifndef IN_PERL_COMPILETIME
+# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
+#endif
+
+#ifndef IN_LOCALE_RUNTIME
+# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE)
+#endif
+
+#ifndef IN_LOCALE_COMPILETIME
+# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE)
+#endif
+
+#ifndef IN_LOCALE
+# define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
+#endif
+#ifndef IS_NUMBER_IN_UV
+# define IS_NUMBER_IN_UV 0x01
+#endif
+
+#ifndef IS_NUMBER_GREATER_THAN_UV_MAX
+# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02
+#endif
+
+#ifndef IS_NUMBER_NOT_INT
+# define IS_NUMBER_NOT_INT 0x04
+#endif
+
+#ifndef IS_NUMBER_NEG
+# define IS_NUMBER_NEG 0x08
+#endif
+
+#ifndef IS_NUMBER_INFINITY
+# define IS_NUMBER_INFINITY 0x10
+#endif
+
+#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
+#ifndef PERL_SCAN_GREATER_THAN_UV_MAX
+# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02
+#endif
+
+#ifndef PERL_SCAN_SILENT_ILLDIGIT
+# define PERL_SCAN_SILENT_ILLDIGIT 0x04
+#endif
+
+#ifndef PERL_SCAN_ALLOW_UNDERSCORES
+# define PERL_SCAN_ALLOW_UNDERSCORES 0x01
+#endif
+
+#ifndef PERL_SCAN_DISALLOW_PREFIX
+# define PERL_SCAN_DISALLOW_PREFIX 0x02
+#endif
+
+#ifndef grok_numeric_radix
+#if defined(NEED_grok_numeric_radix)
+static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
+static
+#else
+extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
+#endif
+
+#ifdef grok_numeric_radix
+# undef grok_numeric_radix
+#endif
+#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
+#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
+
+#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
+bool
+DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
+{
+#ifdef USE_LOCALE_NUMERIC
+#ifdef PL_numeric_radix_sv
+ if (PL_numeric_radix_sv && IN_LOCALE) {
+ STRLEN len;
+ char* radix = SvPV(PL_numeric_radix_sv, len);
+ if (*sp + len <= send && memEQ(*sp, radix, len)) {
+ *sp += len;
+ return TRUE;
+ }
+ }
+#else
+ /* older perls don't have PL_numeric_radix_sv so the radix
+ * must manually be requested from locale.h
+ */
+#include <locale.h>
+ dTHR; /* needed for older threaded perls */
+ struct lconv *lc = localeconv();
+ char *radix = lc->decimal_point;
+ if (radix && IN_LOCALE) {
+ STRLEN len = strlen(radix);
+ if (*sp + len <= send && memEQ(*sp, radix, len)) {
+ *sp += len;
+ return TRUE;
+ }
+ }
+#endif
+#endif /* USE_LOCALE_NUMERIC */
+ /* always try "." if numeric radix didn't match because
+ * we may have data from different locales mixed */
+ if (*sp < send && **sp == '.') {
+ ++*sp;
+ return TRUE;
+ }
+ return FALSE;
+}
+#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);
+static
+#else
+extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
+#endif
+
+#ifdef grok_number
+# undef grok_number
+#endif
+#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
+#define Perl_grok_number DPPP_(my_grok_number)
+
+#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
+int
+DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
+{
+ const char *s = pv;
+ const char *send = pv + len;
+ const UV max_div_10 = UV_MAX / 10;
+ const char max_mod_10 = UV_MAX % 10;
+ int numtype = 0;
+ int sawinf = 0;
+ int sawnan = 0;
+
+ while (s < send && isSPACE(*s))
+ s++;
+ if (s == send) {
+ return 0;
+ } else if (*s == '-') {
+ s++;
+ numtype = IS_NUMBER_NEG;
+ }
+ else if (*s == '+')
+ s++;
+
+ if (s == send)
+ return 0;
+
+ /* next must be digit or the radix separator or beginning of infinity */
+ if (isDIGIT(*s)) {
+ /* UVs are at least 32 bits, so the first 9 decimal digits cannot
+ overflow. */
+ UV value = *s - '0';
+ /* This construction seems to be more optimiser friendly.
+ (without it gcc does the isDIGIT test and the *s - '0' separately)
+ With it gcc on arm is managing 6 instructions (6 cycles) per digit.
+ In theory the optimiser could deduce how far to unroll the loop
+ before checking for overflow. */
+ if (++s < send) {
+ int digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ digit = *s - '0';
+ if (digit >= 0 && digit <= 9) {
+ value = value * 10 + digit;
+ if (++s < send) {
+ /* Now got 9 digits, so need to check
+ each time for overflow. */
+ digit = *s - '0';
+ while (digit >= 0 && digit <= 9
+ && (value < max_div_10
+ || (value == max_div_10
+ && digit <= max_mod_10))) {
+ value = value * 10 + digit;
+ if (++s < send)
+ digit = *s - '0';
+ else
+ break;
+ }
+ if (digit >= 0 && digit <= 9
+ && (s < send)) {
+ /* value overflowed.
+ skip the remaining digits, don't
+ worry about setting *valuep. */
+ do {
+ s++;
+ } while (s < send && isDIGIT(*s));
+ numtype |=
+ IS_NUMBER_GREATER_THAN_UV_MAX;
+ goto skip_value;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ numtype |= IS_NUMBER_IN_UV;
+ if (valuep)
+ *valuep = value;
+
+ skip_value:
+ if (GROK_NUMERIC_RADIX(&s, send)) {
+ numtype |= IS_NUMBER_NOT_INT;
+ while (s < send && isDIGIT(*s)) /* optional digits after the radix */
+ s++;
+ }
+ }
+ else if (GROK_NUMERIC_RADIX(&s, send)) {
+ numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
+ /* no digits before the radix means we need digits after it */
+ if (s < send && isDIGIT(*s)) {
+ do {
+ s++;
+ } while (s < send && isDIGIT(*s));
+ if (valuep) {
+ /* integer approximation is valid - it's 0. */
+ *valuep = 0;
+ }
+ }
+ else
+ return 0;
+ } else if (*s == 'I' || *s == 'i') {
+ s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
+ s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
+ s++; if (s < send && (*s == 'I' || *s == 'i')) {
+ s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
+ s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
+ s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
+ s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
+ s++;
+ }
+ sawinf = 1;
+ } else if (*s == 'N' || *s == 'n') {
+ /* XXX TODO: There are signaling NaNs and quiet NaNs. */
+ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
+ s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
+ s++;
+ sawnan = 1;
+ } else
+ return 0;
+
+ if (sawinf) {
+ numtype &= IS_NUMBER_NEG; /* Keep track of sign */
+ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
+ } else if (sawnan) {
+ numtype &= IS_NUMBER_NEG; /* Keep track of sign */
+ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
+ } else if (s < send) {
+ /* we can have an optional exponent part */
+ if (*s == 'e' || *s == 'E') {
+ /* The only flag we keep is sign. Blow away any "it's UV" */
+ numtype &= IS_NUMBER_NEG;
+ numtype |= IS_NUMBER_NOT_INT;
+ s++;
+ if (s < send && (*s == '-' || *s == '+'))
+ s++;
+ if (s < send && isDIGIT(*s)) {
+ do {
+ s++;
+ } while (s < send && isDIGIT(*s));
+ }
+ else
+ return 0;
+ }
+ }
+ while (s < send && isSPACE(*s))
+ s++;
+ if (s >= send)
+ return numtype;
+ if (len == 10 && memEQ(pv, "0 but true", 10)) {
+ if (valuep)
+ *valuep = 0;
+ return IS_NUMBER_IN_UV;
+ }
+ return 0;
+}
+#endif
+#endif
+
+/*
+ * The grok_* routines have been modified to use warn() instead of
+ * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
+ * which is why the stack variable has been renamed to 'xdigit'.
+ */
+
+#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
+#else
+extern UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+#endif
+
+#ifdef grok_bin
+# undef grok_bin
+#endif
+#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
+#define Perl_grok_bin DPPP_(my_grok_bin)
+
+#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)
+{
+ const char *s = start;
+ STRLEN len = *len_p;
+ UV value = 0;
+ NV value_nv = 0;
+
+ const UV max_div_2 = UV_MAX / 2;
+ bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ bool overflowed = FALSE;
+
+ if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
+ /* strip off leading b or 0b.
+ for compatibility silently suffer "b" and "0b" as valid binary
+ numbers. */
+ if (len >= 1) {
+ if (s[0] == 'b') {
+ s++;
+ len--;
+ }
+ else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
+ s+=2;
+ len-=2;
+ }
+ }
+ }
+
+ for (; len-- && *s; s++) {
+ char bit = *s;
+ if (bit == '0' || bit == '1') {
+ /* Write it in this wonky order with a goto to attempt to get the
+ compiler to make the common case integer-only loop pretty tight.
+ With gcc seems to be much straighter code than old scan_bin. */
+ redo:
+ if (!overflowed) {
+ if (value <= max_div_2) {
+ value = (value << 1) | (bit - '0');
+ continue;
+ }
+ /* Bah. We're just overflowed. */
+ warn("Integer overflow in binary number");
+ overflowed = TRUE;
+ value_nv = (NV) value;
+ }
+ value_nv *= 2.0;
+ /* If an NV has not enough bits in its mantissa to
+ * represent a UV this summing of small low-order numbers
+ * is a waste of time (because the NV cannot preserve
+ * the low-order bits anyway): we could just remember when
+ * did we overflow and in the end just multiply value_nv by the
+ * right amount. */
+ value_nv += (NV)(bit - '0');
+ continue;
+ }
+ if (bit == '_' && len && allow_underscores && (bit = s[1])
+ && (bit == '0' || bit == '1'))
+ {
+ --len;
+ ++s;
+ goto redo;
+ }
+ if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
+ warn("Illegal binary digit '%c' ignored", *s);
+ break;
+ }
+
+ if ( ( overflowed && value_nv > 4294967295.0)
+#if UVSIZE > 4
+ || (!overflowed && value > 0xffffffff )
+#endif
+ ) {
+ warn("Binary number > 0b11111111111111111111111111111111 non-portable");
+ }
+ *len_p = s - start;
+ if (!overflowed) {
+ *flags = 0;
+ return value;
+ }
+ *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
+ if (result)
+ *result = value_nv;
+ return UV_MAX;
+}
+#endif
+#endif
+
+#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
+#else
+extern UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+#endif
+
+#ifdef grok_hex
+# undef grok_hex
+#endif
+#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
+#define Perl_grok_hex DPPP_(my_grok_hex)
+
+#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)
+{
+ const char *s = start;
+ STRLEN len = *len_p;
+ UV value = 0;
+ NV value_nv = 0;
+
+ const UV max_div_16 = UV_MAX / 16;
+ bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ bool overflowed = FALSE;
+ const char *xdigit;
+
+ if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
+ /* strip off leading x or 0x.
+ for compatibility silently suffer "x" and "0x" as valid hex numbers.
+ */
+ if (len >= 1) {
+ if (s[0] == 'x') {
+ s++;
+ len--;
+ }
+ else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
+ s+=2;
+ len-=2;
+ }
+ }
+ }
+
+ for (; len-- && *s; s++) {
+ xdigit = strchr((char *) PL_hexdigit, *s);
+ if (xdigit) {
+ /* Write it in this wonky order with a goto to attempt to get the
+ compiler to make the common case integer-only loop pretty tight.
+ With gcc seems to be much straighter code than old scan_hex. */
+ redo:
+ if (!overflowed) {
+ if (value <= max_div_16) {
+ value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
+ continue;
+ }
+ warn("Integer overflow in hexadecimal number");
+ overflowed = TRUE;
+ value_nv = (NV) value;
+ }
+ value_nv *= 16.0;
+ /* If an NV has not enough bits in its mantissa to
+ * represent a UV this summing of small low-order numbers
+ * is a waste of time (because the NV cannot preserve
+ * the low-order bits anyway): we could just remember when
+ * did we overflow and in the end just multiply value_nv by the
+ * right amount of 16-tuples. */
+ value_nv += (NV)((xdigit - PL_hexdigit) & 15);
+ continue;
+ }
+ if (*s == '_' && len && allow_underscores && s[1]
+ && (xdigit = strchr((char *) PL_hexdigit, s[1])))
+ {
+ --len;
+ ++s;
+ goto redo;
+ }
+ if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
+ warn("Illegal hexadecimal digit '%c' ignored", *s);
+ break;
+ }
+
+ if ( ( overflowed && value_nv > 4294967295.0)
+#if UVSIZE > 4
+ || (!overflowed && value > 0xffffffff )
+#endif
+ ) {
+ warn("Hexadecimal number > 0xffffffff non-portable");
+ }
+ *len_p = s - start;
+ if (!overflowed) {
+ *flags = 0;
+ return value;
+ }
+ *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
+ if (result)
+ *result = value_nv;
+ return UV_MAX;
+}
+#endif
+#endif
+
+#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
+#else
+extern UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result);
+#endif
+
+#ifdef grok_oct
+# undef grok_oct
+#endif
+#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
+#define Perl_grok_oct DPPP_(my_grok_oct)
+
+#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)
+{
+ const char *s = start;
+ STRLEN len = *len_p;
+ UV value = 0;
+ NV value_nv = 0;
+
+ const UV max_div_8 = UV_MAX / 8;
+ bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
+ bool overflowed = FALSE;
+
+ for (; len-- && *s; s++) {
+ /* gcc 2.95 optimiser not smart enough to figure that this subtraction
+ out front allows slicker code. */
+ int digit = *s - '0';
+ if (digit >= 0 && digit <= 7) {
+ /* Write it in this wonky order with a goto to attempt to get the
+ compiler to make the common case integer-only loop pretty tight.
+ */
+ redo:
+ if (!overflowed) {
+ if (value <= max_div_8) {
+ value = (value << 3) | digit;
+ continue;
+ }
+ /* Bah. We're just overflowed. */
+ warn("Integer overflow in octal number");
+ overflowed = TRUE;
+ value_nv = (NV) value;
+ }
+ value_nv *= 8.0;
+ /* If an NV has not enough bits in its mantissa to
+ * represent a UV this summing of small low-order numbers
+ * is a waste of time (because the NV cannot preserve
+ * the low-order bits anyway): we could just remember when
+ * did we overflow and in the end just multiply value_nv by the
+ * right amount of 8-tuples. */
+ value_nv += (NV)digit;
+ continue;
+ }
+ if (digit == ('_' - '0') && len && allow_underscores
+ && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
+ {
+ --len;
+ ++s;
+ goto redo;
+ }
+ /* Allow \octal to work the DWIM way (that is, stop scanning
+ * as soon as non-octal characters are seen, complain only iff
+ * someone seems to want to use the digits eight and nine). */
+ if (digit == 8 || digit == 9) {
+ if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
+ warn("Illegal octal digit '%c' ignored", *s);
+ }
+ break;
+ }
+
+ if ( ( overflowed && value_nv > 4294967295.0)
+#if UVSIZE > 4
+ || (!overflowed && value > 0xffffffff )
+#endif
+ ) {
+ warn("Octal number > 037777777777 non-portable");
+ }
+ *len_p = s - start;
+ if (!overflowed) {
+ *flags = 0;
+ return value;
+ }
+ *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
+ if (result)
+ *result = value_nv;
+ return UV_MAX;
+}
+#endif
+#endif
+
+#if !defined(my_snprintf)
+#if defined(NEED_my_snprintf)
+static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
+static
+#else
+extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
+#endif
+
+#define my_snprintf DPPP_(my_my_snprintf)
+#define Perl_my_snprintf DPPP_(my_my_snprintf)
+
+#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
+
+int
+DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
+{
+ dTHX;
+ int retval;
+ va_list ap;
+ va_start(ap, format);
+#ifdef HAS_VSNPRINTF
+ retval = vsnprintf(buffer, len, format, ap);
+#else
+ retval = vsprintf(buffer, format, ap);
+#endif
+ va_end(ap);
+ if (retval >= (int)len)
+ Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
+ return retval;
+}
+
+#endif
+#endif
+
+#ifdef NO_XSLOCKS
+# ifdef dJMPENV
+# define dXCPT dJMPENV; int rEtV = 0
+# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
+# define XCPT_TRY_END JMPENV_POP;
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW JMPENV_JUMP(rEtV)
+# else
+# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0
+# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
+# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf);
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW Siglongjmp(top_env, rEtV)
+# endif
+#endif
+
+#if !defined(my_strlcat)
+#if defined(NEED_my_strlcat)
+static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
+static
+#else
+extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
+#endif
+
+#define my_strlcat DPPP_(my_my_strlcat)
+#define Perl_my_strlcat DPPP_(my_my_strlcat)
+
+#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
+
+Size_t
+DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
+{
+ Size_t used, length, copy;
+
+ used = strlen(dst);
+ length = strlen(src);
+ if (size > 0 && used < size - 1) {
+ copy = (length >= size - used) ? size - used - 1 : length;
+ memcpy(dst + used, src, copy);
+ dst[used + copy] = '\0';
+ }
+ return used + length;
+}
+#endif
+#endif
+
+#if !defined(my_strlcpy)
+#if defined(NEED_my_strlcpy)
+static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
+static
+#else
+extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
+#endif
+
+#define my_strlcpy DPPP_(my_my_strlcpy)
+#define Perl_my_strlcpy DPPP_(my_my_strlcpy)
+
+#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
+
+Size_t
+DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
+{
+ Size_t length, copy;
+
+ length = strlen(src);
+ if (size > 0) {
+ copy = (length >= size) ? size - 1 : length;
+ memcpy(dst, src, copy);
+ dst[copy] = '\0';
+ }
+ return length;
+}
+
+#endif
+#endif
+
+#endif /* _P_P_PORTABILITY_H_ */
+
+/* End of File ppport.h */
diff --git a/t/0-load.t b/t/0-load.t
new file mode 100644
index 0000000..f598a60
--- /dev/null
+++ b/t/0-load.t
@@ -0,0 +1,5 @@
+use Test::More tests => 1;
+
+BEGIN {
+ use_ok('Lingua::Stem::Snowball');
+}
diff --git a/t/1-stem.t b/t/1-stem.t
new file mode 100644
index 0000000..f2e99b3
--- /dev/null
+++ b/t/1-stem.t
@@ -0,0 +1,75 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More;
+use Lingua::Stem::Snowball qw(:all);
+
+my @languages = stemmers();
+
+plan tests => scalar(@languages) + 17;
+
+for my $language (@languages) {
+ is( 'Lingua::Stem::Snowball',
+ ref Lingua::Stem::Snowball->new( lang => $language ),
+ "construct stemmer for lang => '$language'"
+ );
+}
+
+my $stemmer;
+
+$stemmer = Lingua::Stem::Snowball->new( lang => $languages[0] );
+is( 'Lingua::Stem::Snowball', ref($stemmer), "constuct a stemmer" );
+is( $stemmer->lang, $languages[0], "stemmer has the expected language" );
+
+$stemmer = Lingua::Stem::Snowball->new();
+is( 'Lingua::Stem::Snowball', ref($stemmer),
+ "Construct stemmer with no args" );
+is( $stemmer->lang, '', "stemmer has empty string for language" );
+$stemmer->lang( $languages[0] );
+is( $stemmer->lang, $languages[0], "reset the language", );
+$stemmer->lang('nothing');
+is( $stemmer->lang, $languages[0],
+ "resetting the language to an invalid value silently fails" );
+$stemmer->lang( uc( $languages[0] ) );
+is( $stemmer->lang, $languages[0],
+ "tolerate uppercase versions of ISO codes" );
+
+$stemmer = Lingua::Stem::Snowball->new();
+is( $stemmer->stem('foo'), undef, "with no lang, stem returns undef" );
+is( $stemmer->stem(), undef, "with no input, stem returns undef" );
+
+# Test for bug #7510 - [ not really, bug 7510 has to do with subclassing ]
+is( stem( 'fr', '�t�' ), '�t�', "functional interface" );
+is( stem( 'en', 'horses' ), 'hors', "functional interface" );
+
+# Tests for bug #7509
+$stemmer = Lingua::Stem::Snowball->new();
+is( 'Lingua::Stem::Snowball', ref($stemmer), "it's a Snowball, alright" );
+is( $stemmer->lang, '', "empty language" );
+$stemmer->lang('nothing');
+is( $@,
+ "Language 'nothing' does not exist",
+ "correct error message for invalid language"
+);
+
+# Test for mixed case words
+is( stem( 'fr', 'AIMERA' ),
+ stem( 'fr', 'aimera' ),
+ "stemmer lowercases uppercase source"
+);
+
+# Test for bug #13900
+$stemmer = Lingua::Stem::Snowball->new( lang => 'en' );
+my @stemmable = ( '', undef, 'foo', 'bar', '' );
+my @stemmed = $stemmer->stem( \@stemmable );
+is( scalar(@stemmable), scalar(@stemmed),
+ "don't strip empty array elements" );
+
+# Test for ticket #13898
+$stemmer = Lingua::Stem::Snowball->new( lang => 'en' );
+ at stemmable = ( 'foo', 'ranger\'s', 'bar' );
+my @stemmed_ok = ( 'foo', 'ranger', 'bar' );
+$stemmer->strip_apostrophes(1);
+ at stemmed = $stemmer->stem( \@stemmable );
+ok( eq_array( \@stemmed_ok, \@stemmed ), "apostrophe s" );
+
diff --git a/t/2-full.t b/t/2-full.t
new file mode 100644
index 0000000..4c82b37
--- /dev/null
+++ b/t/2-full.t
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More tests => 8484;
+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 ( @before, @after );
+ my $encoding;
+
+ # 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_arrays( \@before, \@after, $iso, $encoding );
+
+ # 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 )
+ or die "Couldn't open file '$utf8_voc_path' for reading: $!";
+ $stemmer->encoding($encoding);
+ while (<$utf8_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 );
+
+}
+
+sub test_singles {
+ my ( $raw, $expected, $iso, $encoding ) = @_;
+
+ my $got = $stemmer->stem($raw);
+ is( $got, $expected, "$iso \$s->stem(\$raw)" );
+
+ if ( $encoding ne 'UTF-8' ) {
+ $got = stem( $iso, $raw );
+ is( $got, $expected, "$iso stem(\$lang, \$raw)" );
+ }
+
+ $got = $stemmer->stem( uc($raw) );
+ is( $got, $expected, "$iso \$s->stem(uc(\$raw))" );
+
+ $got = [$raw];
+ $stemmer->stem_in_place($got);
+ is( $got->[0], $expected, "$iso \$s->stem_in_place(\$raw)" );
+}
+
+sub test_arrays {
+ my ( $raw, $expected, $iso, $encoding ) = @_;
+
+ my @got = $stemmer->stem($raw);
+ is_deeply( \@got, $expected, "$iso \$s->stem(\@raw)" );
+
+ if ( $encoding ne 'UTF-8' ) {
+ @got = stem( $iso, $raw );
+ is_deeply( \@got, $expected, "$iso stem(\$lang, \@raw)" );
+ }
+
+ my @uppercased = map {uc} @$raw;
+ @got = $stemmer->stem( \@uppercased );
+ is_deeply( \@got, $expected, "$iso \$s->stem(\@raw) (uc'd)" );
+
+ @got = @$raw;
+ $stemmer->stem_in_place( \@got );
+ is_deeply( \@got, $expected, "$iso \$s->stem_in_place(\@raw)" );
+}
+
diff --git a/t/3-subclass.t b/t/3-subclass.t
new file mode 100644
index 0000000..b57ad27
--- /dev/null
+++ b/t/3-subclass.t
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+
+# Tests for bug #7510
+package MyStem;
+use base qw( Lingua::Stem::Snowball );
+
+package main;
+use strict;
+use Test::More tests => 3;
+
+my $s = MyStem->new( lang => 'fr' );
+ok( 'MyStem', ref($s) );
+
+my $lemm = $s->stem('�t�');
+is( $lemm, '�t�', "stem works" );
+
+$lemm = $s->stem('aimant');
+is( $lemm, 'aim', "stem works" );
diff --git a/t/98-TestPod.t b/t/98-TestPod.t
new file mode 100644
index 0000000..263557c
--- /dev/null
+++ b/t/98-TestPod.t
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+use Test::More;
+plan skip_all => "Test::Pod 1.00 required for testing POD"
+ unless eval "use Test::Pod 1.00; 1";
+all_pod_files_ok();
+
diff --git a/t/99-TestPodCoverage.t b/t/99-TestPodCoverage.t
new file mode 100644
index 0000000..e5415c2
--- /dev/null
+++ b/t/99-TestPodCoverage.t
@@ -0,0 +1,6 @@
+#!/usr/bin/perl
+
+use Test::More;
+plan skip_all => "Test::Pod::Coverage required for testing POD"
+ unless eval "use Test::Pod::Coverage; 1";
+all_pod_coverage_ok();
diff --git a/t/test_voc/da.default_enc b/t/test_voc/da.default_enc
new file mode 100644
index 0000000..122ca9a
--- /dev/null
+++ b/t/test_voc/da.default_enc
@@ -0,0 +1,100 @@
+sonm sonm
+overses overs
+karavane karavan
+trol�st trol�st
+bag bag
+flette flet
+suf suf
+gimzo gimzo
+lammets lam
+overhans overhan
+bortskyller bortskyl
+l�sk�bte l�sk�bt
+s�s s�s
+heruberne herub
+majest�t majest�t
+skalkeskjul skalkeskjul
+beroliget bero
+bragt bragt
+abimael abimael
+fnyste fnyst
+skr�ningerne skr�ning
+vagtsted vagtsted
+evnerikke evnerik
+keros kero
+forel�ses forel�s
+h�jestes h�jest
+sm�byer sm�by
+neris neris
+dybere dyb
+hovedlokker hovedlok
+forbitrelse forbitr
+hebraiske hebraisk
+sf�der sf�d
+forbi forbi
+buna buna
+forkl�de forkl�d
+bogs bog
+urene uren
+dr�n dr�n
+folkets folk
+hine hin
+opholdt ophold
+dedans dedan
+antikrister antikrist
+ruinhobe ruinhob
+skarn skarn
+kuer kuer
+sl�r sl�r
+tr�den tr�d
+opskriv opskriv
+hoben hob
+tilintetg�re tilintetg�r
+skelne skeln
+folkeslags folkeslag
+l�ftesten l�ftest
+pr�sternes pr�st
+folkekampe folkekamp
+hizki hizki
+utugts utug
+ordre ordr
+fineste finest
+tireja tireja
+fik fik
+stridsm�ndene stridsm�nd
+omkring omkring
+hliver hliv
+slagter slagt
+sammenrulles sammenrul
+velse vels
+stangede stanged
+storvind storvind
+blund blund
+tusinder tusind
+klippeborge klippeborg
+huri huri
+slip slip
+byrderne byrd
+overskuede overskued
+engel engel
+kul kul
+opskr�mmer opskr�m
+livstegn livstegn
+landsh�vdinger landsh�vding
+turen tur
+br�nden br�nd
+regering regering
+h�drede h�dred
+lytt lyt
+stamme�versterne stamme�verst
+hersltede herslted
+g�dens g�d
+profeteret profet
+s�gte s�gt
+forlad forlad
+bemandede bemanded
+majest�tens majest�t
+kampskrig kampskr
+syg syg
+sabbatter sabbat
+blad blad
diff --git a/t/test_voc/da.utf8 b/t/test_voc/da.utf8
new file mode 100644
index 0000000..66cf45e
--- /dev/null
+++ b/t/test_voc/da.utf8
@@ -0,0 +1,100 @@
+sonm sonm
+overses overs
+karavane karavan
+troløst troløst
+bag bag
+flette flet
+suf suf
+gimzo gimzo
+lammets lam
+overhans overhan
+bortskyller bortskyl
+løskøbte løskøbt
+sås sås
+heruberne herub
+majestæt majestæt
+skalkeskjul skalkeskjul
+beroliget bero
+bragt bragt
+abimael abimael
+fnyste fnyst
+skråningerne skråning
+vagtsted vagtsted
+evnerikke evnerik
+keros kero
+forelæses forelæs
+højestes højest
+småbyer småby
+neris neris
+dybere dyb
+hovedlokker hovedlok
+forbitrelse forbitr
+hebraiske hebraisk
+sfæder sfæd
+forbi forbi
+buna buna
+forklæde forklæd
+bogs bog
+urene uren
+drøn drøn
+folkets folk
+hine hin
+opholdt ophold
+dedans dedan
+antikrister antikrist
+ruinhobe ruinhob
+skarn skarn
+kuer kuer
+slår slår
+træden træd
+opskriv opskriv
+hoben hob
+tilintetgøre tilintetgør
+skelne skeln
+folkeslags folkeslag
+løftesten løftest
+præsternes præst
+folkekampe folkekamp
+hizki hizki
+utugts utug
+ordre ordr
+fineste finest
+tireja tireja
+fik fik
+stridsmændene stridsmænd
+omkring omkring
+hliver hliv
+slagter slagt
+sammenrulles sammenrul
+velse vels
+stangede stanged
+storvind storvind
+blund blund
+tusinder tusind
+klippeborge klippeborg
+huri huri
+slip slip
+byrderne byrd
+overskuede overskued
+engel engel
+kul kul
+opskræmmer opskræm
+livstegn livstegn
+landshøvdinger landshøvding
+turen tur
+brønden brønd
+regering regering
+hædrede hædred
+lytt lyt
+stammeøversterne stammeøverst
+hersltede herslted
+gådens gåd
+profeteret profet
+søgte søgt
+forlad forlad
+bemandede bemanded
+majestætens majestæt
+kampskrig kampskr
+syg syg
+sabbatter sabbat
+blad blad
diff --git a/t/test_voc/de.default_enc b/t/test_voc/de.default_enc
new file mode 100644
index 0000000..123d67c
--- /dev/null
+++ b/t/test_voc/de.default_enc
@@ -0,0 +1,100 @@
+gleitet gleitet
+felsenkette felsenkett
+satteln satteln
+synodalrat synodalrat
+vorausgeschickt vorausgeschickt
+�ugelchen augelch
+geschwollnen geschwolln
+nationen nation
+unermesslich unermess
+marti marti
+s�het sahet
+bieranstalt bieranstalt
+unruhig unruh
+ertrank ertrank
+spannender spannend
+abgenutzten abgenutzt
+geliebt geliebt
+ermordete ermordet
+katzensprung katzenspr
+wessen wess
+missbrauchsdebatte missbrauchsdebatt
+wiedergefunden wiedergefund
+geheimnisse geheimniss
+kuhpfluge kuhpflug
+heiteren heit
+desolatio desolatio
+widerspenstigsten widerspenst
+qu�lt qualt
+ursache ursach
+neid neid
+bleamerln bleamerln
+dem�tiger demut
+vormittagsimbiss vormittagsimbiss
+empfinde empfind
+zwecke zweck
+herzlichen herzlich
+umschlang umschlang
+verhallte verhallt
+uns�glich unsag
+standpunkte standpunkt
+eintritt eintritt
+eierbrot eierbrot
+stamme stamm
+verheiratetes verheiratet
+h�lzernes holzern
+singen sing
+gleichzeitig gleichzeit
+anderckens anderck
+spannten spannt
+glockensch�nen glockenschon
+zierlicher zierlich
+verwunschenen verwunsch
+umanandhocken umanandhock
+herabl��t herablasst
+verwechselt verwechselt
+gesellschaften gesellschaft
+ausgezeichnetr�ckbesinnung ausgezeichnetruckbesinn
+verschollenen verscholl
+gelees gele
+verdunkelt verdunkelt
+herumsprangen herumsprang
+bewegungsgr�nde bewegungsgrund
+denkbar denkbar
+k�stlich kostlich
+immanent immanent
+schaden schad
+berechnung berechn
+word word
+schwefelgelbem schwefelgelb
+kindische kindisch
+gebratene gebrat
+z�ngchen zangch
+fischern fisch
+hinzuf�gt hinzufugt
+mitf�hrt mitfuhrt
+dreissiger dreissig
+stinkige stinkig
+s�useln sauseln
+erdharzes erdharz
+gebogen gebog
+neubauten neubaut
+wollten wollt
+heimwege heimweg
+gel�bde gelubd
+mi�brauchen missbrauch
+korne korn
+b�rstners burstn
+impressum impressum
+fr�ulein fraulein
+bew�lkten bewolkt
+angfangt angfangt
+ringes ring
+bek�men bekam
+sprichw�rter sprichwort
+br�llte brullt
+beruhigten beruhigt
+trauerte trauert
+vor�berkam voruberkam
+sechsfache sechsfach
+gefastet gefastet
diff --git a/t/test_voc/de.utf8 b/t/test_voc/de.utf8
new file mode 100644
index 0000000..b0f7f7f
--- /dev/null
+++ b/t/test_voc/de.utf8
@@ -0,0 +1,100 @@
+gleitet gleitet
+felsenkette felsenkett
+satteln satteln
+synodalrat synodalrat
+vorausgeschickt vorausgeschickt
+äugelchen augelch
+geschwollnen geschwolln
+nationen nation
+unermesslich unermess
+marti marti
+sähet sahet
+bieranstalt bieranstalt
+unruhig unruh
+ertrank ertrank
+spannender spannend
+abgenutzten abgenutzt
+geliebt geliebt
+ermordete ermordet
+katzensprung katzenspr
+wessen wess
+missbrauchsdebatte missbrauchsdebatt
+wiedergefunden wiedergefund
+geheimnisse geheimniss
+kuhpfluge kuhpflug
+heiteren heit
+desolatio desolatio
+widerspenstigsten widerspenst
+quält qualt
+ursache ursach
+neid neid
+bleamerln bleamerln
+demütiger demut
+vormittagsimbiss vormittagsimbiss
+empfinde empfind
+zwecke zweck
+herzlichen herzlich
+umschlang umschlang
+verhallte verhallt
+unsäglich unsag
+standpunkte standpunkt
+eintritt eintritt
+eierbrot eierbrot
+stamme stamm
+verheiratetes verheiratet
+hölzernes holzern
+singen sing
+gleichzeitig gleichzeit
+anderckens anderck
+spannten spannt
+glockenschönen glockenschon
+zierlicher zierlich
+verwunschenen verwunsch
+umanandhocken umanandhock
+herabläßt herablasst
+verwechselt verwechselt
+gesellschaften gesellschaft
+ausgezeichnetrückbesinnung ausgezeichnetruckbesinn
+verschollenen verscholl
+gelees gele
+verdunkelt verdunkelt
+herumsprangen herumsprang
+bewegungsgründe bewegungsgrund
+denkbar denkbar
+köstlich kostlich
+immanent immanent
+schaden schad
+berechnung berechn
+word word
+schwefelgelbem schwefelgelb
+kindische kindisch
+gebratene gebrat
+zängchen zangch
+fischern fisch
+hinzufügt hinzufugt
+mitführt mitfuhrt
+dreissiger dreissig
+stinkige stinkig
+säuseln sauseln
+erdharzes erdharz
+gebogen gebog
+neubauten neubaut
+wollten wollt
+heimwege heimweg
+gelübde gelubd
+mißbrauchen missbrauch
+korne korn
+bürstners burstn
+impressum impressum
+fräulein fraulein
+bewölkten bewolkt
+angfangt angfangt
+ringes ring
+bekämen bekam
+sprichwörter sprichwort
+brüllte brullt
+beruhigten beruhigt
+trauerte trauert
+vorüberkam voruberkam
+sechsfache sechsfach
+gefastet gefastet
diff --git a/t/test_voc/en.default_enc b/t/test_voc/en.default_enc
new file mode 100644
index 0000000..cb1ed67
--- /dev/null
+++ b/t/test_voc/en.default_enc
@@ -0,0 +1,100 @@
+wi wi
+counter counter
+repair repair
+limes lime
+allies alli
+schemes scheme
+partisans partisan
+unremitting unremit
+gilding gild
+crystallized crystal
+tongs tong
+dustier dustier
+krestovsky krestovski
+confuting confut
+enlightened enlighten
+boundaries boundari
+executors executor
+awaken awaken
+drownded drownd
+upbraiding upbraid
+contending contend
+revolving revolv
+snowflakes snowflak
+reader reader
+yonge yong
+coalitions coalit
+parcels parcel
+mingle mingl
+sterne stern
+energy energi
+jerkily jerkili
+stretched stretch
+draining drain
+clytia clytia
+quart quart
+envenomed envenom
+tolerate toler
+parisians parisian
+mate mate
+goodwood goodwood
+dilemma dilemma
+darker darker
+follering foller
+goodnaturedly goodnatur
+astonishingly astonish
+width width
+inebriated inebri
+convenience conveni
+adultery adulteri
+grossly grossli
+cardinal cardin
+undertakes undertak
+harbour harbour
+reminder remind
+shal shal
+bod bod
+knif knif
+surpasses surpass
+superabundant superabund
+moped mope
+conduce conduc
+crossly crossli
+census census
+ridges ridg
+convicts convict
+interests interest
+broiling broil
+nonchalant nonchal
+resume resum
+civilization civil
+deplore deplor
+clerkship clerkship
+lxii lxii
+headless headless
+curate curat
+hopped hop
+howell howel
+descrip descrip
+shrillness shrill
+applicant applic
+celebrate celebr
+aloe alo
+drink drink
+overtime overtim
+world world
+dowdles dowdl
+obeyed obey
+tommy tommi
+accomplishing accomplish
+nous nous
+remitting remit
+irreconcilable irreconcil
+welveteen welveteen
+cowards coward
+digitated digit
+unpleasantness unpleas
+barge barg
+watkins watkin
+vibration vibrat
+thicken thicken
diff --git a/t/test_voc/en.utf8 b/t/test_voc/en.utf8
new file mode 100644
index 0000000..cb1ed67
--- /dev/null
+++ b/t/test_voc/en.utf8
@@ -0,0 +1,100 @@
+wi wi
+counter counter
+repair repair
+limes lime
+allies alli
+schemes scheme
+partisans partisan
+unremitting unremit
+gilding gild
+crystallized crystal
+tongs tong
+dustier dustier
+krestovsky krestovski
+confuting confut
+enlightened enlighten
+boundaries boundari
+executors executor
+awaken awaken
+drownded drownd
+upbraiding upbraid
+contending contend
+revolving revolv
+snowflakes snowflak
+reader reader
+yonge yong
+coalitions coalit
+parcels parcel
+mingle mingl
+sterne stern
+energy energi
+jerkily jerkili
+stretched stretch
+draining drain
+clytia clytia
+quart quart
+envenomed envenom
+tolerate toler
+parisians parisian
+mate mate
+goodwood goodwood
+dilemma dilemma
+darker darker
+follering foller
+goodnaturedly goodnatur
+astonishingly astonish
+width width
+inebriated inebri
+convenience conveni
+adultery adulteri
+grossly grossli
+cardinal cardin
+undertakes undertak
+harbour harbour
+reminder remind
+shal shal
+bod bod
+knif knif
+surpasses surpass
+superabundant superabund
+moped mope
+conduce conduc
+crossly crossli
+census census
+ridges ridg
+convicts convict
+interests interest
+broiling broil
+nonchalant nonchal
+resume resum
+civilization civil
+deplore deplor
+clerkship clerkship
+lxii lxii
+headless headless
+curate curat
+hopped hop
+howell howel
+descrip descrip
+shrillness shrill
+applicant applic
+celebrate celebr
+aloe alo
+drink drink
+overtime overtim
+world world
+dowdles dowdl
+obeyed obey
+tommy tommi
+accomplishing accomplish
+nous nous
+remitting remit
+irreconcilable irreconcil
+welveteen welveteen
+cowards coward
+digitated digit
+unpleasantness unpleas
+barge barg
+watkins watkin
+vibration vibrat
+thicken thicken
diff --git a/t/test_voc/es.default_enc b/t/test_voc/es.default_enc
new file mode 100644
index 0000000..991b012
--- /dev/null
+++ b/t/test_voc/es.default_enc
@@ -0,0 +1,100 @@
+em em
+encabezado encabez
+migraci�n migracion
+proporcionado proporcion
+conectarse conect
+batallan batall
+walberto walbert
+limpio limpi
+ofrecen ofrec
+acta acta
+anotaciones anot
+pagamos pag
+cl�nico clinic
+urista urist
+resulte result
+reparar repar
+populismo popul
+participante particip
+absorver absorv
+dillo dill
+buick buick
+ciertas ciert
+fukuoka fukuok
+fundamentos fundament
+disfrutar disfrut
+cornejo cornej
+campos camp
+detuvo detuv
+concurri� concurr
+reclamaci�n reclam
+alambre alambr
+administra administr
+insulta insult
+interventores interventor
+bi�logo biolog
+auto aut
+margen marg
+a�reos aere
+resquicio resquici
+harefield harefield
+oralia orali
+policiacas policiac
+vosso voss
+multar mult
+cuidar� cuid
+esperado esper
+adapt�ndose adapt
+ampliarla ampli
+interceptados intercept
+delano delan
+mientan mient
+habitaciones habit
+teaanque teaanqu
+fortuna fortun
+pulmonares pulmonar
+organizan organiz
+coello coell
+abaco abac
+colin colin
+hallamos hall
+leblanc leblanc
+resurgir resurg
+boutiques boutiqu
+citado cit
+renovar renov
+progresista progres
+normatividad normat
+preguntamos pregunt
+luminosas lumin
+para�so parais
+empez� empez
+provocar�n provoc
+pospuso pospus
+claros clar
+puedan pued
+alcanzar� alcanz
+calcetines calcetin
+b�blico biblic
+m�rale miral
+indique indiqu
+alivio alivi
+honradez honradez
+exclusivas exclus
+dinero diner
+tocaban toc
+incertidumbre incertidumbr
+medias medi
+modelos model
+aceptas acept
+capitalino capitalin
+modificaciones modif
+york york
+ancestrales ancestral
+pavimentados paviment
+derredor derredor
+reiter� reiter
+anexos anex
+entrevist� entrevist
+refieren refier
+operas oper
diff --git a/t/test_voc/es.utf8 b/t/test_voc/es.utf8
new file mode 100644
index 0000000..b8276d8
--- /dev/null
+++ b/t/test_voc/es.utf8
@@ -0,0 +1,100 @@
+em em
+encabezado encabez
+migración migracion
+proporcionado proporcion
+conectarse conect
+batallan batall
+walberto walbert
+limpio limpi
+ofrecen ofrec
+acta acta
+anotaciones anot
+pagamos pag
+clínico clinic
+urista urist
+resulte result
+reparar repar
+populismo popul
+participante particip
+absorver absorv
+dillo dill
+buick buick
+ciertas ciert
+fukuoka fukuok
+fundamentos fundament
+disfrutar disfrut
+cornejo cornej
+campos camp
+detuvo detuv
+concurrió concurr
+reclamación reclam
+alambre alambr
+administra administr
+insulta insult
+interventores interventor
+biólogo biolog
+auto aut
+margen marg
+aéreos aere
+resquicio resquici
+harefield harefield
+oralia orali
+policiacas policiac
+vosso voss
+multar mult
+cuidará cuid
+esperado esper
+adaptándose adapt
+ampliarla ampli
+interceptados intercept
+delano delan
+mientan mient
+habitaciones habit
+teaanque teaanqu
+fortuna fortun
+pulmonares pulmonar
+organizan organiz
+coello coell
+abaco abac
+colin colin
+hallamos hall
+leblanc leblanc
+resurgir resurg
+boutiques boutiqu
+citado cit
+renovar renov
+progresista progres
+normatividad normat
+preguntamos pregunt
+luminosas lumin
+paraíso parais
+empezó empez
+provocarán provoc
+pospuso pospus
+claros clar
+puedan pued
+alcanzará alcanz
+calcetines calcetin
+bíblico biblic
+mírale miral
+indique indiqu
+alivio alivi
+honradez honradez
+exclusivas exclus
+dinero diner
+tocaban toc
+incertidumbre incertidumbr
+medias medi
+modelos model
+aceptas acept
+capitalino capitalin
+modificaciones modif
+york york
+ancestrales ancestral
+pavimentados paviment
+derredor derredor
+reiteró reiter
+anexos anex
+entrevistó entrevist
+refieren refier
+operas oper
diff --git a/t/test_voc/fi.default_enc b/t/test_voc/fi.default_enc
new file mode 100644
index 0000000..4379188
--- /dev/null
+++ b/t/test_voc/fi.default_enc
@@ -0,0 +1,100 @@
+imperial imperial
+hattu hatu
+ajolupaa ajolup
+aikoinaan aiko
+alaotsikon alaotsiko
+ahtikari ahtikar
+aeterna aeter
+hy�kk�ysvalmisteluista hy�kk�ysvalmistelu
+erikoisedustaja erikoisedustaj
+budjettiehdotus budjettiehdotus
+h�meenpuistoa h�meenpuisto
+ajokelvottomaksi ajokelvottom
+impola impol
+geneettisen geneettis
+hiipumassa hiipum
+annosmaljoihin annosmalj
+haikeasti haikeast
+ammattikunnalle ammattikun
+arvosanaksi arvosan
+aatetta aate
+ennusmerkeist� ennusmerk
+elvytet��n elvyt
+hali hali
+bogartin bogart
+hyks hyks
+alaik�isten alaik�ist
+hammasl��k�rin� hammasl��k�r
+harkittuaan harkitua
+alalisien alalis
+enteellisesti enteellis
+elokuvamaailman elokuvamaailm
+aprillip�iv�n aprillip�iv
+ilmoitustulot ilmoitustulo
+asettui asetui
+hm hm
+huuska huusk
+hall� hall�
+heikinheimolle heikinheimo
+down dow
+elokuviinsa elokuv
+antautumista antautum
+iltap�iv�kerhoa iltap�iv�kerho
+helmeilee helmeil
+ihmisoikeusj�rjest�jen ihmisoikeusj�rjest�j
+afasialiiton afasialiito
+alkuteksti� alkutekst
+inflatorinen inflatorin
+ep�kiitollista ep�kiitol
+elinaikana elinaik
+gotabankeniin gotabanken
+groznissa grozn
+haukunnalla haukun
+hiipumassa hiipum
+ihastuksen ihastuks
+himanen himan
+huuhdotaan huuhdo
+el�kevakuutuksen el�kevakuutuks
+heitt�ytyneet heitt�ytyn
+hepo hepo
+alabama alabam
+deran dera
+ik�vist� ik�v
+fasismiko fasism
+aateliset aatelis
+appassionato appassionato
+ihmiskehon ihmiskehon
+fhra fhra
+etel�nmatkalle etel�nmatk
+el�misest� el�mis
+ilmaisuja ilmaisu
+iltakoulu iltakoulu
+hajautettu hajautetu
+historiaksi historia
+h�ss�tyst� h�ss�ty
+inflaatioksi inflaatio
+ekumeenisen ekumeenis
+hutulle hutu
+ep�puhtauksia ep�puhtauks
+dolen dole
+el�neiden el�n
+dunbar dunbar
+haltioituneesti haltioitun
+ateriaa ateria
+baskeja baskej
+hillaryn hillary
+estell� est
+galina gal
+flipperi� flipper
+huutokauppakamarin huutokauppakamar
+esittelev�� esittelev
+biomekaniikan biomekaniik
+beste best
+farkkuihin farku
+ikuiseen ikuis
+aktiivivuosina aktiivivuos
+finlandia finland
+holvista holv
+id�nkaupan id�nkaup
+helismaan helism
+atte at
diff --git a/t/test_voc/fi.utf8 b/t/test_voc/fi.utf8
new file mode 100644
index 0000000..d31f623
--- /dev/null
+++ b/t/test_voc/fi.utf8
@@ -0,0 +1,100 @@
+imperial imperial
+hattu hatu
+ajolupaa ajolup
+aikoinaan aiko
+alaotsikon alaotsiko
+ahtikari ahtikar
+aeterna aeter
+hyökkäysvalmisteluista hyökkäysvalmistelu
+erikoisedustaja erikoisedustaj
+budjettiehdotus budjettiehdotus
+hämeenpuistoa hämeenpuisto
+ajokelvottomaksi ajokelvottom
+impola impol
+geneettisen geneettis
+hiipumassa hiipum
+annosmaljoihin annosmalj
+haikeasti haikeast
+ammattikunnalle ammattikun
+arvosanaksi arvosan
+aatetta aate
+ennusmerkeistä ennusmerk
+elvytetään elvyt
+hali hali
+bogartin bogart
+hyks hyks
+alaikäisten alaikäist
+hammaslääkärinä hammaslääkär
+harkittuaan harkitua
+alalisien alalis
+enteellisesti enteellis
+elokuvamaailman elokuvamaailm
+aprillipäivän aprillipäiv
+ilmoitustulot ilmoitustulo
+asettui asetui
+hm hm
+huuska huusk
+hallõ hallõ
+heikinheimolle heikinheimo
+down dow
+elokuviinsa elokuv
+antautumista antautum
+iltapäiväkerhoa iltapäiväkerho
+helmeilee helmeil
+ihmisoikeusjärjestöjen ihmisoikeusjärjestöj
+afasialiiton afasialiito
+alkutekstiä alkutekst
+inflatorinen inflatorin
+epäkiitollista epäkiitol
+elinaikana elinaik
+gotabankeniin gotabanken
+groznissa grozn
+haukunnalla haukun
+hiipumassa hiipum
+ihastuksen ihastuks
+himanen himan
+huuhdotaan huuhdo
+eläkevakuutuksen eläkevakuutuks
+heittäytyneet heittäytyn
+hepo hepo
+alabama alabam
+deran dera
+ikävistä ikäv
+fasismiko fasism
+aateliset aatelis
+appassionato appassionato
+ihmiskehon ihmiskehon
+fhra fhra
+etelänmatkalle etelänmatk
+elämisestä elämis
+ilmaisuja ilmaisu
+iltakoulu iltakoulu
+hajautettu hajautetu
+historiaksi historia
+hössötystä hössöty
+inflaatioksi inflaatio
+ekumeenisen ekumeenis
+hutulle hutu
+epäpuhtauksia epäpuhtauks
+dolen dole
+eläneiden elän
+dunbar dunbar
+haltioituneesti haltioitun
+ateriaa ateria
+baskeja baskej
+hillaryn hillary
+estellä est
+galina gal
+flipperiä flipper
+huutokauppakamarin huutokauppakamar
+esittelevää esittelev
+biomekaniikan biomekaniik
+beste best
+farkkuihin farku
+ikuiseen ikuis
+aktiivivuosina aktiivivuos
+finlandia finland
+holvista holv
+idänkaupan idänkaup
+helismaan helism
+atte at
diff --git a/t/test_voc/fr.default_enc b/t/test_voc/fr.default_enc
new file mode 100644
index 0000000..dc5aace
--- /dev/null
+++ b/t/test_voc/fr.default_enc
@@ -0,0 +1,100 @@
+ch�tier ch�ti
+p�trifi� p�trifi
+�moustiller �moustill
+raidirent raid
+accourir accour
+torrent torrent
+cr�atures cr�atur
+inspiraient inspir
+ruin�s ruin
+comtesse comtess
+c�r�s c�res
+plainte plaint
+accordez accord
+impayable impai
+approchant approch
+bouder boud
+frilair frilair
+signez sign
+notable notabl
+condamne condamn
+conduisent conduisent
+demeurait demeur
+impatient� impatient
+titubant titub
+tra�n� tra�n
+aie aie
+anonymement anonym
+rejoindre rejoindr
+soulev�es soulev
+bu bu
+m�chait m�ch
+obligeant oblig
+ressembl� ressembl
+d�testerez d�test
+cosmopolite cosmopolit
+r�signation r�sign
+rougi roug
+aimables aimabl
+failli faill
+ponctuel ponctuel
+glaces glac
+ladri ladr
+pipes pip
+diction diction
+apparente apparent
+inhalation inhal
+culte cult
+astrologues astrologu
+meubl�e meubl
+d�contenanc� d�contenanc
+tutoiement tutoi
+enregistrer enregistr
+froissa froiss
+offrira offrir
+gentle gentl
+�chut �chut
+statuaire statuair
+install� install
+annales annal
+emp�chez emp�ch
+estafier estafi
+bris�es bris
+travers�e travers
+grilles grill
+devins devin
+persuader persuad
+quelquefois quelquefois
+mormon mormon
+grimer grim
+consid�r� consider
+r�volutionnaires r�volutionnair
+oubliant oubli
+galons galon
+to to
+pouvait pouv
+convenaient conven
+charg�e charg
+tombeaux tombeau
+p�nurie p�nur
+d�tourn� d�tourn
+accost� accost
+rousseau rousseau
+recruter recrut
+demesurement demesur
+coquets coquet
+immoralit� immoral
+lugubres lugubr
+longues longu
+contravention contravent
+bouger boug
+regards regard
+troupes troup
+ressuscit� ressusc
+provoquait provoqu
+patron patron
+pu pu
+confession confess
+sorts sort
+callyan callyan
+conclusion conclus
diff --git a/t/test_voc/fr.utf8 b/t/test_voc/fr.utf8
new file mode 100644
index 0000000..70dd8f0
--- /dev/null
+++ b/t/test_voc/fr.utf8
@@ -0,0 +1,100 @@
+châtier châti
+pétrifié pétrifi
+émoustiller émoustill
+raidirent raid
+accourir accour
+torrent torrent
+créatures créatur
+inspiraient inspir
+ruinés ruin
+comtesse comtess
+cérès céres
+plainte plaint
+accordez accord
+impayable impai
+approchant approch
+bouder boud
+frilair frilair
+signez sign
+notable notabl
+condamne condamn
+conduisent conduisent
+demeurait demeur
+impatienté impatient
+titubant titub
+traîné traîn
+aie aie
+anonymement anonym
+rejoindre rejoindr
+soulevées soulev
+bu bu
+mâchait mâch
+obligeant oblig
+ressemblé ressembl
+détesterez détest
+cosmopolite cosmopolit
+résignation résign
+rougi roug
+aimables aimabl
+failli faill
+ponctuel ponctuel
+glaces glac
+ladri ladr
+pipes pip
+diction diction
+apparente apparent
+inhalation inhal
+culte cult
+astrologues astrologu
+meublée meubl
+décontenancé décontenanc
+tutoiement tutoi
+enregistrer enregistr
+froissa froiss
+offrira offrir
+gentle gentl
+échut échut
+statuaire statuair
+installé install
+annales annal
+empêchez empêch
+estafier estafi
+brisées bris
+traversée travers
+grilles grill
+devins devin
+persuader persuad
+quelquefois quelquefois
+mormon mormon
+grimer grim
+considéré consider
+révolutionnaires révolutionnair
+oubliant oubli
+galons galon
+to to
+pouvait pouv
+convenaient conven
+chargée charg
+tombeaux tombeau
+pénurie pénur
+détourné détourn
+accosté accost
+rousseau rousseau
+recruter recrut
+demesurement demesur
+coquets coquet
+immoralité immoral
+lugubres lugubr
+longues longu
+contravention contravent
+bouger boug
+regards regard
+troupes troup
+ressuscité ressusc
+provoquait provoqu
+patron patron
+pu pu
+confession confess
+sorts sort
+callyan callyan
+conclusion conclus
diff --git a/t/test_voc/it.default_enc b/t/test_voc/it.default_enc
new file mode 100644
index 0000000..d8c7789
--- /dev/null
+++ b/t/test_voc/it.default_enc
@@ -0,0 +1,100 @@
+faccian faccian
+calcistiche calcist
+rolomix rolomix
+nessuno nessun
+verbo verb
+fa fa
+doglia dogl
+butter� butt
+consumare consum
+spegnendo spegn
+pressava press
+segnala segnal
+marpol marpol
+assumer� assum
+voti vot
+me me
+involtati involt
+tristissima tristissim
+strame stram
+flessori flessor
+strascicarono strascic
+tartassati tartass
+colb� colb
+prov� prov
+partono part
+enrico enric
+ingaggi ingagg
+ricalcare ricalc
+interista inter
+particolarmente particolar
+cura cur
+gagliarda gagliard
+ciriaco ciriac
+nastri nastr
+adamo adam
+ricordano ricord
+tendevan tendevan
+caterina caterin
+competesse competess
+portiere port
+chiarimento chiar
+attuazione attuazion
+accatastata accatast
+compromissione compromission
+decidendo decid
+cioccolata cioccol
+carattere caratt
+sensibile sensibil
+osservatore osserv
+compatirsi compat
+introdurvi introdurv
+citavano cit
+alkan alkan
+autostrada autostrad
+adoprerebbe adopr
+crescono cresc
+kladusa kladus
+affrontano affront
+salerno salern
+roccaforte roccafort
+gabinetto gabinett
+convitati convit
+bastandogli bast
+olcese olces
+affar affar
+parchi parc
+contestata contest
+perdendo perd
+assenzio assenz
+brivio briv
+davanzali davanzal
+aggiungeranno aggiung
+borrini borrin
+rimprovera rimprover
+badar bad
+scartafaccio scartafacc
+scambievolmente scambievol
+risolutezza risolutezz
+scalzacane scalzacan
+editto editt
+orientamento orient
+introducendone introduc
+raccostando raccost
+persegue persegu
+successivo success
+prospettata prospett
+accarezzarla accarezz
+lentezza lentezz
+investiti invest
+part part
+aventi avent
+tonini tonin
+ucciderlo uccid
+ipotesi ipotes
+pap� pap
+scompariva scompar
+anno anno
+tocci tocc
+ricompariva ricompar
+sospetto sospett
diff --git a/t/test_voc/it.utf8 b/t/test_voc/it.utf8
new file mode 100644
index 0000000..bbce102
--- /dev/null
+++ b/t/test_voc/it.utf8
@@ -0,0 +1,100 @@
+faccian faccian
+calcistiche calcist
+rolomix rolomix
+nessuno nessun
+verbo verb
+fa fa
+doglia dogl
+butterò butt
+consumare consum
+spegnendo spegn
+pressava press
+segnala segnal
+marpol marpol
+assumerà assum
+voti vot
+me me
+involtati involt
+tristissima tristissim
+strame stram
+flessori flessor
+strascicarono strascic
+tartassati tartass
+colbò colb
+provò prov
+partono part
+enrico enric
+ingaggi ingagg
+ricalcare ricalc
+interista inter
+particolarmente particolar
+cura cur
+gagliarda gagliard
+ciriaco ciriac
+nastri nastr
+adamo adam
+ricordano ricord
+tendevan tendevan
+caterina caterin
+competesse competess
+portiere port
+chiarimento chiar
+attuazione attuazion
+accatastata accatast
+compromissione compromission
+decidendo decid
+cioccolata cioccol
+carattere caratt
+sensibile sensibil
+osservatore osserv
+compatirsi compat
+introdurvi introdurv
+citavano cit
+alkan alkan
+autostrada autostrad
+adoprerebbe adopr
+crescono cresc
+kladusa kladus
+affrontano affront
+salerno salern
+roccaforte roccafort
+gabinetto gabinett
+convitati convit
+bastandogli bast
+olcese olces
+affar affar
+parchi parc
+contestata contest
+perdendo perd
+assenzio assenz
+brivio briv
+davanzali davanzal
+aggiungeranno aggiung
+borrini borrin
+rimprovera rimprover
+badar bad
+scartafaccio scartafacc
+scambievolmente scambievol
+risolutezza risolutezz
+scalzacane scalzacan
+editto editt
+orientamento orient
+introducendone introduc
+raccostando raccost
+persegue persegu
+successivo success
+prospettata prospett
+accarezzarla accarezz
+lentezza lentezz
+investiti invest
+part part
+aventi avent
+tonini tonin
+ucciderlo uccid
+ipotesi ipotes
+papà pap
+scompariva scompar
+anno anno
+tocci tocc
+ricompariva ricompar
+sospetto sospett
diff --git a/t/test_voc/nl.default_enc b/t/test_voc/nl.default_enc
new file mode 100644
index 0000000..cf3863e
--- /dev/null
+++ b/t/test_voc/nl.default_enc
@@ -0,0 +1,100 @@
+vooraanstaande vooraanstaand
+vasteland vasteland
+terugvond terugvond
+wilton wilton
+betrof betrof
+buffer buffer
+mexico mexico
+esva esva
+uitgevaagd uitgevaagd
+aangemerkt aangemerkt
+deinende deinend
+spaargeld spaargeld
+ierland ierland
+uitgewisseld uitgewisseld
+droog drog
+saneringscentra saneringscentra
+kastrup kastrup
+duizelde duizeld
+symboolwerking symboolwerk
+afvalsoort afvalsoort
+wittig wittig
+koperoxyde koperoxyd
+glaswol glaswol
+herhalen herhal
+modale modal
+d�chue dechue
+families families
+schrap schrap
+woonbebouwing woonbebouw
+afgezwakt afgezwakt
+westertocht westertocht
+naliep naliep
+aanhang aanhang
+hoofdproblemen hoofdproblem
+elhorst elhorst
+stroomvoorzieningssysteem stroomvoorzieningssystem
+aardolie aardolie
+voorstelt voorstelt
+reserves reserves
+ladingen lading
+euregio euregio
+ethylbenzeen ethylbenzen
+hydrologische hydrologisch
+rioolbuis rioolbuis
+grelle grell
+vestigde vestigd
+hygi�ne hygien
+flacons flacon
+level level
+concrete concret
+koopkracht koopkracht
+termijnmarkt termijnmarkt
+meeslepen meeslep
+zeehondenjagers zeehondenjager
+proporties proporties
+gefrankeerd gefrankeerd
+praat prat
+afvalstromen afvalstrom
+bruusk bruusk
+haakwerk haakwerk
+verkochten verkocht
+bezoekers bezoeker
+rivierbeheer rivierbeher
+katalytische katalytisch
+flirt flirt
+greater greater
+plafondpanelen plafondpanel
+biomassaproducerende biomassaproducer
+kiesschijf kiesschijf
+mevrouw mevrouw
+opzoekt opzoekt
+heidebrand heidebrand
+nblf nblf
+uitspaart uitspaart
+gemodelleerd gemodelleerd
+waterrecreanten waterrecreant
+batterijhouder batterijhouder
+grijnzen grijnz
+verwazigd verwazigd
+imdmicon imdmicon
+egaliseren egaliser
+injecteert injecteert
+verheugd verheugd
+verlangens verlangen
+waddeninspectie waddeninspectie
+afgeschoten afgeschot
+abatement abatement
+wijkverwarmingsnet wijkverwarmingsnet
+phyteuma phyteuma
+gevaar gevar
+overheidssubsidie overheidssubsidie
+steunen steun
+bouwterreinen bouwterrein
+opwerpen opwerp
+kellner kellner
+fibers fiber
+kostte kost
+verbindingszone verbindingszon
+korrelmix korrelmix
+milieuonvriendelijke milieuonvriend
diff --git a/t/test_voc/nl.utf8 b/t/test_voc/nl.utf8
new file mode 100644
index 0000000..bb60951
--- /dev/null
+++ b/t/test_voc/nl.utf8
@@ -0,0 +1,100 @@
+vooraanstaande vooraanstaand
+vasteland vasteland
+terugvond terugvond
+wilton wilton
+betrof betrof
+buffer buffer
+mexico mexico
+esva esva
+uitgevaagd uitgevaagd
+aangemerkt aangemerkt
+deinende deinend
+spaargeld spaargeld
+ierland ierland
+uitgewisseld uitgewisseld
+droog drog
+saneringscentra saneringscentra
+kastrup kastrup
+duizelde duizeld
+symboolwerking symboolwerk
+afvalsoort afvalsoort
+wittig wittig
+koperoxyde koperoxyd
+glaswol glaswol
+herhalen herhal
+modale modal
+déchue dechue
+families families
+schrap schrap
+woonbebouwing woonbebouw
+afgezwakt afgezwakt
+westertocht westertocht
+naliep naliep
+aanhang aanhang
+hoofdproblemen hoofdproblem
+elhorst elhorst
+stroomvoorzieningssysteem stroomvoorzieningssystem
+aardolie aardolie
+voorstelt voorstelt
+reserves reserves
+ladingen lading
+euregio euregio
+ethylbenzeen ethylbenzen
+hydrologische hydrologisch
+rioolbuis rioolbuis
+grelle grell
+vestigde vestigd
+hygiëne hygien
+flacons flacon
+level level
+concrete concret
+koopkracht koopkracht
+termijnmarkt termijnmarkt
+meeslepen meeslep
+zeehondenjagers zeehondenjager
+proporties proporties
+gefrankeerd gefrankeerd
+praat prat
+afvalstromen afvalstrom
+bruusk bruusk
+haakwerk haakwerk
+verkochten verkocht
+bezoekers bezoeker
+rivierbeheer rivierbeher
+katalytische katalytisch
+flirt flirt
+greater greater
+plafondpanelen plafondpanel
+biomassaproducerende biomassaproducer
+kiesschijf kiesschijf
+mevrouw mevrouw
+opzoekt opzoekt
+heidebrand heidebrand
+nblf nblf
+uitspaart uitspaart
+gemodelleerd gemodelleerd
+waterrecreanten waterrecreant
+batterijhouder batterijhouder
+grijnzen grijnz
+verwazigd verwazigd
+imdmicon imdmicon
+egaliseren egaliser
+injecteert injecteert
+verheugd verheugd
+verlangens verlangen
+waddeninspectie waddeninspectie
+afgeschoten afgeschot
+abatement abatement
+wijkverwarmingsnet wijkverwarmingsnet
+phyteuma phyteuma
+gevaar gevar
+overheidssubsidie overheidssubsidie
+steunen steun
+bouwterreinen bouwterrein
+opwerpen opwerp
+kellner kellner
+fibers fiber
+kostte kost
+verbindingszone verbindingszon
+korrelmix korrelmix
+milieuonvriendelijke milieuonvriend
diff --git a/t/test_voc/no.default_enc b/t/test_voc/no.default_enc
new file mode 100644
index 0000000..138ac0c
--- /dev/null
+++ b/t/test_voc/no.default_enc
@@ -0,0 +1,100 @@
+meld meld
+barnebarn barnebarn
+edw edw
+linjene linj
+nybygging nybygging
+vilk�rene vilk�r
+skattereglane skatteregl
+sl�ret sl�r
+adresser adress
+l�nnsgrunnlag l�nnsgrunnlag
+brukarar brukar
+inntektsbeskatning inntektsbeskatning
+tillatne tillatn
+tolv tolv
+kommersielle kommersiell
+akademikernes akademikern
+samvirkeutvalget samvirkeutvalg
+slangen slang
+menja menj
+dekk dekk
+dr�fta dr�ft
+kontrollere kontroller
+langesundsfjorden langesundsfjord
+vetoet veto
+gjennomf�rte gjennomf�rt
+tidshorisonten tidshorisont
+sj�kart sj�kart
+gutten gutt
+tom tom
+krokrygget krokrygg
+aksjon�r aksjon�r
+�kningene �kning
+gripe grip
+ombygginga ombygging
+fordelane fordel
+veksten vekst
+misvisande misvis
+markeds marked
+kystsoneplan kystsoneplan
+samvirkepreget samvirkepreg
+containervekst containervekst
+same sam
+derigjennom derigjennom
+likviditetsbehov likviditetsbehov
+h�yst h�yst
+borge borg
+spareinnskota spareinnskot
+lilleholt lilleholt
+forsvinne forsvinn
+terminallokalisering terminallokalisering
+omveg omveg
+ferden ferd
+varemedlemmer varemedlemm
+containeriseringsgraden containeriseringsgrad
+yrkesut�var yrkesut�v
+avleggjast avleggj
+kristeleg krist
+snille snill
+heftet heft
+siktes sikt
+ormsundkaia ormsundkai
+tilleggsytelser tilleggsyt
+lese les
+kvalifikasjonar kvalifikasjon
+bustadfornying bustadfornying
+spareinnskota spareinnskot
+sjurs�ya sjurs�y
+sleper slep
+stanser stans
+flakvarpomr�det flakvarpomr�d
+ugjerningsmenn ugjerningsmenn
+arena aren
+trykker trykk
+fjellkl�ft fjellkl�ft
+kredittilsynsloven kredittilsyn
+tilsvarande tilsvar
+dvergen dverg
+presser press
+buskerud buskerud
+gror gror
+styret styr
+inntektsgrunnlag inntektsgrunnlag
+tjene tjen
+pekefinger pekefing
+oppf�ringa oppf�ring
+dagens dag
+skeive skeiv
+roll roll
+refererte referer
+l�ysingar l�ysing
+bel�psgrense bel�psgrens
+utbyggings utbygging
+rastl�sheten rastl�s
+konkurrerande konkurrer
+domstolane domstol
+har har
+l�rene l�r
+summende summ
+stamvegnettet stamvegnett
+svinekj�tt svinekj�tt
diff --git a/t/test_voc/no.utf8 b/t/test_voc/no.utf8
new file mode 100644
index 0000000..58afe7b
--- /dev/null
+++ b/t/test_voc/no.utf8
@@ -0,0 +1,100 @@
+meld meld
+barnebarn barnebarn
+edw edw
+linjene linj
+nybygging nybygging
+vilkårene vilkår
+skattereglane skatteregl
+sløret slør
+adresser adress
+lønnsgrunnlag lønnsgrunnlag
+brukarar brukar
+inntektsbeskatning inntektsbeskatning
+tillatne tillatn
+tolv tolv
+kommersielle kommersiell
+akademikernes akademikern
+samvirkeutvalget samvirkeutvalg
+slangen slang
+menja menj
+dekk dekk
+drøfta drøft
+kontrollere kontroller
+langesundsfjorden langesundsfjord
+vetoet veto
+gjennomførte gjennomført
+tidshorisonten tidshorisont
+sjøkart sjøkart
+gutten gutt
+tom tom
+krokrygget krokrygg
+aksjonær aksjonær
+økningene økning
+gripe grip
+ombygginga ombygging
+fordelane fordel
+veksten vekst
+misvisande misvis
+markeds marked
+kystsoneplan kystsoneplan
+samvirkepreget samvirkepreg
+containervekst containervekst
+same sam
+derigjennom derigjennom
+likviditetsbehov likviditetsbehov
+høyst høyst
+borge borg
+spareinnskota spareinnskot
+lilleholt lilleholt
+forsvinne forsvinn
+terminallokalisering terminallokalisering
+omveg omveg
+ferden ferd
+varemedlemmer varemedlemm
+containeriseringsgraden containeriseringsgrad
+yrkesutøvar yrkesutøv
+avleggjast avleggj
+kristeleg krist
+snille snill
+heftet heft
+siktes sikt
+ormsundkaia ormsundkai
+tilleggsytelser tilleggsyt
+lese les
+kvalifikasjonar kvalifikasjon
+bustadfornying bustadfornying
+spareinnskota spareinnskot
+sjursøya sjursøy
+sleper slep
+stanser stans
+flakvarpområdet flakvarpområd
+ugjerningsmenn ugjerningsmenn
+arena aren
+trykker trykk
+fjellkløft fjellkløft
+kredittilsynsloven kredittilsyn
+tilsvarande tilsvar
+dvergen dverg
+presser press
+buskerud buskerud
+gror gror
+styret styr
+inntektsgrunnlag inntektsgrunnlag
+tjene tjen
+pekefinger pekefing
+oppføringa oppføring
+dagens dag
+skeive skeiv
+roll roll
+refererte referer
+løysingar løysing
+beløpsgrense beløpsgrens
+utbyggings utbygging
+rastløsheten rastløs
+konkurrerande konkurrer
+domstolane domstol
+har har
+lårene lår
+summende summ
+stamvegnettet stamvegnett
+svinekjøtt svinekjøtt
diff --git a/t/test_voc/pt.default_enc b/t/test_voc/pt.default_enc
new file mode 100644
index 0000000..0345b36
--- /dev/null
+++ b/t/test_voc/pt.default_enc
@@ -0,0 +1,100 @@
+beltr�o beltr�
+feixe feix
+media��o media��
+f�sicas f�sic
+transe trans
+cores cor
+fundadoras fundador
+voavam voav
+apostador apost
+atestada atest
+liquide liquid
+hubert hubert
+inalcan��veis inalcanc
+ofere�a oferec
+cyrus cyrus
+tio tio
+cont�gio cont�gi
+mundana mundan
+grape grap
+ir� ir�
+swissbank swissbank
+ousado ous
+fornecedoras fornecedor
+passaram pass
+poltronas poltron
+rotulando rotul
+portanto portant
+finalizado finaliz
+franca franc
+incentivamos incentiv
+tornozelo tornozel
+reproduzir reproduz
+cruzamentos cruzament
+espacial espacial
+qubilah qubilah
+agr�nomo agr�nom
+admira admir
+dessem dess
+infi�is infi
+poupou poup
+ironia iron
+gestor gestor
+amizades amizad
+food food
+encruzilhadas encruzilh
+olh� olh�
+descobrimos descobr
+protetores protetor
+constru��es constru��
+metr�poles metr�pol
+teoricamente teoric
+velas vel
+mick mick
+apologia apolog
+nominalmente nominal
+vistas vist
+pico pic
+boto bot
+implementem implement
+acess�vel acess
+desconhecido desconhec
+argentina argentin
+salgadinhos salgadinh
+adequada adequ
+s�ries s�ri
+zita zit
+acreditavam acredit
+maneira maneir
+interrogando interrog
+ar�sio ar�si
+sucederam suced
+televisiva televis
+tucanos tucan
+torta tort
+falcatruas falcatru
+euforia eufor
+kraft kraft
+contida cont
+custam cust
+fatias fat
+esquecemos esquec
+operamos oper
+corria corr
+atingisse ating
+indica��es indic
+massifica��o massific
+l�dico l�dic
+queda qued
+edmund edmund
+dumont dumont
+cinq�enten�rio cinq�enten�ri
+seres ser
+berimbaus berimbaus
+assassinada assassin
+adriana adrian
+f�rmica f�rmic
+inspecionar inspecion
+realmente realment
+visible visibl
+moramos mor
diff --git a/t/test_voc/pt.utf8 b/t/test_voc/pt.utf8
new file mode 100644
index 0000000..a2cbbbf
--- /dev/null
+++ b/t/test_voc/pt.utf8
@@ -0,0 +1,100 @@
+beltrão beltrã
+feixe feix
+mediação mediaçã
+físicas físic
+transe trans
+cores cor
+fundadoras fundador
+voavam voav
+apostador apost
+atestada atest
+liquide liquid
+hubert hubert
+inalcançáveis inalcanc
+ofereça oferec
+cyrus cyrus
+tio tio
+contágio contági
+mundana mundan
+grape grap
+irã irã
+swissbank swissbank
+ousado ous
+fornecedoras fornecedor
+passaram pass
+poltronas poltron
+rotulando rotul
+portanto portant
+finalizado finaliz
+franca franc
+incentivamos incentiv
+tornozelo tornozel
+reproduzir reproduz
+cruzamentos cruzament
+espacial espacial
+qubilah qubilah
+agrônomo agrônom
+admira admir
+dessem dess
+infiéis infi
+poupou poup
+ironia iron
+gestor gestor
+amizades amizad
+food food
+encruzilhadas encruzilh
+olhá olhá
+descobrimos descobr
+protetores protetor
+construções construçõ
+metrópoles metrópol
+teoricamente teoric
+velas vel
+mick mick
+apologia apolog
+nominalmente nominal
+vistas vist
+pico pic
+boto bot
+implementem implement
+acessível acess
+desconhecido desconhec
+argentina argentin
+salgadinhos salgadinh
+adequada adequ
+séries séri
+zita zit
+acreditavam acredit
+maneira maneir
+interrogando interrog
+arósio arósi
+sucederam suced
+televisiva televis
+tucanos tucan
+torta tort
+falcatruas falcatru
+euforia eufor
+kraft kraft
+contida cont
+custam cust
+fatias fat
+esquecemos esquec
+operamos oper
+corria corr
+atingisse ating
+indicações indic
+massificação massific
+lúdico lúdic
+queda qued
+edmund edmund
+dumont dumont
+cinqüentenário cinqüentenári
+seres ser
+berimbaus berimbaus
+assassinada assassin
+adriana adrian
+fórmica fórmic
+inspecionar inspecion
+realmente realment
+visible visibl
+moramos mor
diff --git a/t/test_voc/ru.default_enc b/t/test_voc/ru.default_enc
new file mode 100644
index 0000000..0de615c
--- /dev/null
+++ b/t/test_voc/ru.default_enc
@@ -0,0 +1,100 @@
+����������� ���������
+������ �����
+������� �����
+��������� �������
+������� ������
+����� ���
+����� �����
+��������� �������
+��������� �������
+������� �����
+�������� ������
+���������� ��������
+�������� �������
+������ �����
+����� �����
+�������� �����
+������������ ����������
+��������� �����
+���� ���
+����������� �������
+���������� �������
+������ ����
+�������� �����
+������� �����
+���������� �����
+��������� ������
+������ ����
+������� �������
+��������� ������
+��������� �������
+��� ��
+������������� �����������
+������������ ���������
+������� ������
+������ ���
+�������� �����
+������� �����
+������� �����
+������� ������
+������ ����
+������ �����
+������ ����
+���� ����
+������ ����
+������� �����
+�������� ������
+����������� ���������
+������������ ����������
+������� �������
+������ ����
+������ ����
+�������� ������
+������� ������
+����������� �������
+������ �����
+����������� ��������
+������ ������
+����������� ���������
+��������� �����
+������� ������
+��������� ���������
+��������������� �������������
+�������� ������
+��������� ��������
+������ ����
+�������� �����
+�������� ��������
+��������� ������
+��������� ������
+�������� �����
+���������� ��������
+������������� ������
+�������� ����
+������ ����
+���������� ��������
+��������� ����
+������������ ��������
+������� ����
+������� ������
+������� �����
+������������ ��������
+�������������� ������������
+��������� ���������
+������ ����
+�������� �������
+�������� ������
+����������� ��������
+������� �����
+����������� ����������
+�������� ������
+����������� ����������
+������ �����
+��������� �������
+������� �����
+������ �����
+�������� ������
+������� �����
+����������� ���������
+������ �����
+�������� �����
diff --git a/t/test_voc/ru.utf8 b/t/test_voc/ru.utf8
new file mode 100644
index 0000000..5c2505d
--- /dev/null
+++ b/t/test_voc/ru.utf8
@@ -0,0 +1,100 @@
+нетерепении нетерепен
+выпита выпит
+намекам намек
+клеверных клеверн
+дремота дремот
+любят люб
+навел навел
+необычный необычн
+дремлющим дремлющ
+внешняя внешн
+железная железн
+переживала пережива
+заставал застава
+потеря потер
+очерк очерк
+гнусными гнусн
+корреджиевой корреджиев
+веселости весел
+моря мор
+отверзалось отверза
+прибавлено прибавл
+впился впил
+быстрого быстр
+париком парик
+избавились избав
+вспомнишь вспомн
+рожком рожк
+троицын троицын
+изысканно изыска
+пропадала пропада
+эру эр
+благоразумная благоразумн
+призадумался призадума
+барышню барышн
+решили реш
+уступить уступ
+семенит семен
+смуглый смугл
+миколки миколк
+свежая свеж
+лошади лошад
+платим плат
+льют льют
+всякие всяк
+отворил отвор
+червовый червов
+выговаривая выговарив
+неизъяснимых неизъясним
+дневник дневник
+семгой семг
+утащил утащ
+пустынна пустын
+публика публик
+поджигающее поджига
+людски людск
+раскаленные раскален
+плевок плевок
+гражданской гражданск
+венчаться венча
+моменты момент
+цирюльник цирюльник
+народонаселения народонаселен
+принятая принят
+вавиловка вавиловк
+зрению зрен
+съездить съезд
+протокол протокол
+задавайте задава
+зачитался зачита
+сватался свата
+сотрясения сотрясен
+повторившееся повтор
+сватаясь сват
+грехов грех
+командиром командир
+заспишься засп
+устраиваются устраива
+длилось длил
+лежанку лежанк
+илистом илист
+вслушиваться вслушива
+неповоротливом неповоротлив
+результат результат
+плавит плав
+пронизан прониза
+запястья запяст
+испорченные испорчен
+дырявые дыряв
+поддерживал поддержива
+свадьбой свадьб
+исповедовал исповедова
+пороху порох
+тщеславии тщеслав
+шоркает шорка
+власти власт
+горевший горевш
+гладкие гладк
+властвовала властвова
+указав указа
+срываешь срыва
diff --git a/t/test_voc/sv.default_enc b/t/test_voc/sv.default_enc
new file mode 100644
index 0000000..276d246
--- /dev/null
+++ b/t/test_voc/sv.default_enc
@@ -0,0 +1,100 @@
+skrubba skrubb
+farmor farm
+f�rl�jliga f�rl�j
+kr�kningar kr�kning
+�gonlock �gonlock
+pl�tslig pl�ts
+hycklare hyckl
+pung pung
+math�mtaren math�mt
+angelal angelal
+leverne levern
+bj�rtat bj�rt
+sofver sofv
+bibeh�lla bibeh�ll
+gudadryck gudadryck
+sokt sokt
+kv�llsvard kv�llsvard
+styvfader styvfad
+�gna �gn
+fodcr fodcr
+plus plus
+br�dd br�dd
+tillbalka tillbalk
+undgick undgick
+hur hur
+uppenbar uppenb
+d�rn�st d�rn�st
+slaktat slakt
+pro pro
+ied ied
+gladlynt gladlynt
+klandra klandr
+v�rmande v�rm
+t�nkarna t�nk
+bog bog
+nosade nos
+framkalladt framkallad
+dragsh�llaren dragsh�ll
+omt�nksamhet omt�nksam
+opel opel
+sloka slok
+pr�vade pr�v
+symbol symbol
+sockenbor sockenb
+familjebjudningarna familjebjudning
+s�ren s�r
+timrar timr
+upptr�dde upptr�d
+tager tag
+toge tog
+drunknade drunkn
+gl�mska gl�msk
+friare friar
+kontraster kontrast
+dalar dal
+i�rde i�rd
+n�mnt n�mnt
+s�rjer s�rj
+minuters minuter
+bro bro
+uppf�dda uppf�d
+vaksamma vaksamm
+fr�jds fr�jd
+behjertat behjert
+m�nga m�ng
+g�mde g�md
+uppfriskande uppfrisk
+forstorad forstor
+sp�rrade sp�rr
+fr�knig fr�kn
+krist krist
+droska drosk
+reta ret
+bortbytt bortbyt
+meddelat meddel
+plumpa plump
+skrynklade skrynkl
+berest berest
+v�lvilliga v�lvil
+d�d d�d
+skilde skild
+h�rdt h�rd
+kyrkog�rdsh�rnet kyrkog�rdsh�rnet
+batar bat
+tr�ttnat tr�ttn
+lydiga lyd
+betala betal
+f�rv�rvt f�rv�rvt
+afsteg afsteg
+honett honet
+v�ggarne v�gg
+v�rkarna v�rk
+b�fvat b�fv
+gymnasiitid gymnasiitid
+handlingss�tt handlingss�t
+s�ndagsf�rmiddag s�ndagsf�rmiddag
+f�rgprakt f�rgprak
+trassel trassel
+kerstins kerstin
+farande far
diff --git a/t/test_voc/sv.utf8 b/t/test_voc/sv.utf8
new file mode 100644
index 0000000..1697832
--- /dev/null
+++ b/t/test_voc/sv.utf8
@@ -0,0 +1,100 @@
+skrubba skrubb
+farmor farm
+förlöjliga förlöj
+krökningar krökning
+ögonlock ögonlock
+plötslig plöts
+hycklare hyckl
+pung pung
+mathämtaren mathämt
+angelal angelal
+leverne levern
+bjärtat bjärt
+sofver sofv
+bibehålla bibehåll
+gudadryck gudadryck
+sokt sokt
+kvällsvard kvällsvard
+styvfader styvfad
+ögna ögn
+fodcr fodcr
+plus plus
+brädd brädd
+tillbalka tillbalk
+undgick undgick
+hur hur
+uppenbar uppenb
+därnäst därnäst
+slaktat slakt
+pro pro
+ied ied
+gladlynt gladlynt
+klandra klandr
+värmande värm
+tänkarna tänk
+bog bog
+nosade nos
+framkalladt framkallad
+dragshållaren dragshåll
+omtänksamhet omtänksam
+opel opel
+sloka slok
+prövade pröv
+symbol symbol
+sockenbor sockenb
+familjebjudningarna familjebjudning
+såren sår
+timrar timr
+uppträdde uppträd
+tager tag
+toge tog
+drunknade drunkn
+glömska glömsk
+friare friar
+kontraster kontrast
+dalar dal
+iörde iörd
+nämnt nämnt
+sörjer sörj
+minuters minuter
+bro bro
+uppfödda uppföd
+vaksamma vaksamm
+fröjds fröjd
+behjertat behjert
+mänga mäng
+gömde gömd
+uppfriskande uppfrisk
+forstorad forstor
+spärrade spärr
+fräknig fräkn
+krist krist
+droska drosk
+reta ret
+bortbytt bortbyt
+meddelat meddel
+plumpa plump
+skrynklade skrynkl
+berest berest
+välvilliga välvil
+död död
+skilde skild
+hårdt hård
+kyrkogårdshörnet kyrkogårdshörnet
+batar bat
+tröttnat tröttn
+lydiga lyd
+betala betal
+förvärvt förvärvt
+afsteg afsteg
+honett honet
+väggarne vägg
+värkarna värk
+bäfvat bäfv
+gymnasiitid gymnasiitid
+handlingssätt handlingssät
+söndagsförmiddag söndagsförmiddag
+färgprakt färgprak
+trassel trassel
+kerstins kerstin
+farande far
--
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