This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use a perfect hash for Unicode property lookups
authorKarl Williamson <khw@cpan.org>
Fri, 20 Apr 2018 05:16:33 +0000 (23:16 -0600)
committerKarl Williamson <khw@cpan.org>
Fri, 20 Apr 2018 07:11:54 +0000 (01:11 -0600)
The previous commits in this series have been preparing to allow the
Devel::Tokenizer::C code to be swapped out for the much smaller perfect
hash code.

MANIFEST
Makefile.SH
charclass_invlists.h
embed.fnc
embed.h
proto.h
regen/mk_invlists.pl
uni_keywords.c [deleted file]
uni_keywords.h [new file with mode: 0644]
utf8.c

index 0f188a9..a3e7c18 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -6069,7 +6069,7 @@ toke.c                            The tokener
 uconfig.h                      Configuration header for microperl
 uconfig.sh                     Configuration script for microperl
 uconfig64.sh                   Configuration script for microperl for LP64
-uni_keywords.c                 Generated file which parses \p{} property names
+uni_keywords.h                 Map unicode property names to numbers
 unicode_constants.h            compile-time macros for Unicode code points
 universal.c                    The default UNIVERSAL package methods
 unixish.h                      Defines that are assumed on Unix
index e125350..cecc53f 100755 (executable)
@@ -508,14 +508,14 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5) $(h6)
 
 c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c
 c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
-c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c uni_keywords.c
+c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
 c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c
 c5 = $(mallocsrc)
 
 c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c opmini.c perlmini.c
 
 obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT) keywords$(OBJ_EXT)
-obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) uni_keywords$(OBJ_EXT)
+obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
 obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT) dquote$(OBJ_EXT) time64$(OBJ_EXT)
 
 # split the objects into 3 exclusive sets: those used by both miniperl and
index ba5a699..32919ab 100644 (file)
@@ -380093,5 +380093,5 @@ static const U8 WB_table[24][24] = {
  * ba5b13123afb59ea004c14fcbac80b5ff428c5b8f1b84bf8602b4ffb7da0407f lib/unicore/mktables
  * 21653d2744fdd071f9ef138c805393901bb9547cf3e777ebf50215a191f986ea lib/unicore/version
  * 913d2f93f3cb6cdf1664db888bf840bc4eb074eef824e082fceda24a9445e60c regen/charset_translations.pl
- * 0f06ebd78d0a3bb934291ab29f490d4cdab06bbb93c078265cf6c92308eab9e5 regen/mk_invlists.pl
+ * dc58b1985cd37ea55f1957a4135d35b3147095e10ff2f64df8a912916ccce3f5 regen/mk_invlists.pl
  * ex: set ro: */
index f6325d9..454a380 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -984,7 +984,6 @@ EMiR        |char*|form_short_octal_warning|NN const char * const s  \
                                |const STRLEN len
 EiRn   |I32    |regcurly       |NN const char *s
 #endif
-Epn    |int    |uniprop_lookup |NN const char * tokstr|const Size_t len
 Apd    |UV     |grok_hex       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
 Apd    |int    |grok_infnan    |NN const char** sp|NN const char *send
 Apd    |int    |grok_number    |NN const char *pv|STRLEN len|NULLOK UV *valuep
diff --git a/embed.h b/embed.h
index 0f03a8e..fb93ebc 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define sv_only_taint_gmagic   S_sv_only_taint_gmagic
 #define swash_fetch(a,b,c)     Perl_swash_fetch(aTHX_ a,b,c)
 #define swash_init(a,b,c,d,e)  Perl_swash_init(aTHX_ a,b,c,d,e)
-#define uniprop_lookup         Perl_uniprop_lookup
 #define utf16_to_utf8(a,b,c,d) Perl_utf16_to_utf8(aTHX_ a,b,c,d)
 #define utf16_to_utf8_reversed(a,b,c,d)        Perl_utf16_to_utf8_reversed(aTHX_ a,b,c,d)
 #define validate_proto(a,b,c,d)        Perl_validate_proto(aTHX_ a,b,c,d)
diff --git a/proto.h b/proto.h
index 556892e..c91141b 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -3755,9 +3755,6 @@ PERL_CALLCONV UV  Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
 
 PERL_CALLCONV bool     Perl_try_amagic_bin(pTHX_ int method, int flags);
 PERL_CALLCONV bool     Perl_try_amagic_un(pTHX_ int method, int flags);
-PERL_CALLCONV int      Perl_uniprop_lookup(const char * tokstr, const Size_t len);
-#define PERL_ARGS_ASSERT_UNIPROP_LOOKUP        \
-       assert(tokstr)
 #ifndef NO_MATHOMS
 PERL_CALLCONV SSize_t  Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags);
 #define PERL_ARGS_ASSERT_UNPACK_STR    \
index c9e05a8..4c11d08 100644 (file)
@@ -2758,49 +2758,26 @@ my @sources = qw(regen/mk_invlists.pl
 
 read_only_bottom_close_and_rename($out_fh, \@sources);
 
-use Devel::Tokenizer::C;
+require './regen/mph.pl';
 
 sub token_name
 {
     my $name = sanitize_name(shift);
     warn "$name contains non-word" if $name =~ /\W/a;
 
-    return "return $table_name_prefix\U$name;\n"
+    return "$table_name_prefix\U$name"
 }
 
-my $t = Devel::Tokenizer::C->new(TokenFunc => \&token_name,
-                                 StringLength  => 'len',
-                                 Strategy      => 'narrow',
-                                 TokenEnd      =>  undef,
-                                 UnknownCode   => 'return 0;',
-        );
-
-$t->add_tokens(lc $_) for @keywords;
-
-my $keywords_fh = open_new('uni_keywords.c', '>',
+my $keywords_fh = open_new('uni_keywords.h', '>',
                  {style => '*', by => 'regen/mk_invlists.pl',
-                  from => "Unicode::UCD"});
-
-print $keywords_fh <<EOF;
-
-#define PERL_IN_UNI_KEYWORDS_C
-
-#include "EXTERN.h"
-#include "perl.h"
-
-int
-Perl_uniprop_lookup(const char * tokstr, const Size_t len)
-{
-
-    PERL_ARGS_ASSERT_UNIPROP_LOOKUP;
-
-EOF
-
-print $keywords_fh $t->generate;
-
-print $keywords_fh <<EOF;
-
+                  from => "mph.pl"});
+my %keyword_hash;
+foreach my $keyword (@keywords) {
+    $keyword_hash{$keyword} = token_name($keyword);
 }
-EOF
 
+my ($second_level, $seed1, $length_all_keys, $smart_blob, $rows) = MinimalPerfectHash::make_mph_from_hash(\%keyword_hash);
+print $keywords_fh MinimalPerfectHash::make_algo($second_level, $seed1, $length_all_keys, $smart_blob, $rows, undef, undef, undef, 'match_uniprop' );
+
+push @sources, 'regen/mph.pl';
 read_only_bottom_close_and_rename($keywords_fh, \@sources);
diff --git a/uni_keywords.c b/uni_keywords.c
deleted file mode 100644 (file)
index d5b1796..0000000
+++ /dev/null
@@ -1,133191 +0,0 @@
-/* -*- buffer-read-only: t -*-
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- * This file is built by regen/mk_invlists.pl from Unicode::UCD.
- * Any changes made here will be lost!
- */
-
-
-#define PERL_IN_UNI_KEYWORDS_C
-
-#include "EXTERN.h"
-#include "perl.h"
-
-int
-Perl_uniprop_lookup(const char * tokstr, const Size_t len)
-{
-
-    PERL_ARGS_ASSERT_UNIPROP_LOOKUP;
-
-switch (len)
-{
-  case 1: /* 7 tokens of length 1 */
-    switch (tokstr[0])
-    {
-      case 'c':
-        {                                         /* c                                                */
-          return PL_C;
-        }
-
-      case 'l':
-        {                                         /* l                                                */
-          return PL_L;
-        }
-
-      case 'm':
-        {                                         /* m                                                */
-          return PL_M;
-        }
-
-      case 'n':
-        {                                         /* n                                                */
-          return PL_N;
-        }
-
-      case 'p':
-        {                                         /* p                                                */
-          return PL_P;
-        }
-
-      case 's':
-        {                                         /* s                                                */
-          return PL_S;
-        }
-
-      case 'z':
-        {                                         /* z                                                */
-          return PL_Z;
-        }
-
-      default:
-        return 0;
-    }
-
-  case 2: /* 41 tokens of length 2 */
-    switch (tokstr[0])
-    {
-      case 'c':
-        switch (tokstr[1])
-        {
-          case 'c':
-            {                                     /* cc                                               */
-              return PL_CC;
-            }
-
-          case 'e':
-            {                                     /* ce                                               */
-              return PL_CE;
-            }
-
-          case 'f':
-            {                                     /* cf                                               */
-              return PL_CF;
-            }
-
-          case 'i':
-            {                                     /* ci                                               */
-              return PL_CI;
-            }
-
-          case 'n':
-            {                                     /* cn                                               */
-              return PL_CN;
-            }
-
-          case 'o':
-            {                                     /* co                                               */
-              return PL_CO;
-            }
-
-          case 's':
-            {                                     /* cs                                               */
-              return PL_CS;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'd':
-        if (tokstr[1] == 'i')
-        {                                         /* di                                               */
-          return PL_DI;
-        }
-
-        return 0;
-
-      case 'l':
-        switch (tokstr[1])
-        {
-          case '&':
-            {                                     /* l&                                               */
-              return PL_L_AMP_;
-            }
-
-          case '_':
-            {                                     /* l_                                               */
-              return PL_L_;
-            }
-
-          case 'c':
-            {                                     /* lc                                               */
-              return PL_LC;
-            }
-
-          case 'l':
-            {                                     /* ll                                               */
-              return PL_LL;
-            }
-
-          case 'm':
-            {                                     /* lm                                               */
-              return PL_LM;
-            }
-
-          case 'o':
-            {                                     /* lo                                               */
-              return PL_LO;
-            }
-
-          case 't':
-            {                                     /* lt                                               */
-              return PL_LT;
-            }
-
-          case 'u':
-            {                                     /* lu                                               */
-              return PL_LU;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'm':
-        switch (tokstr[1])
-        {
-          case 'c':
-            {                                     /* mc                                               */
-              return PL_MC;
-            }
-
-          case 'e':
-            {                                     /* me                                               */
-              return PL_ME;
-            }
-
-          case 'n':
-            {                                     /* mn                                               */
-              return PL_MN;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'n':
-        switch (tokstr[1])
-        {
-          case 'b':
-            {                                     /* nb                                               */
-              return PL_NB;
-            }
-
-          case 'd':
-            {                                     /* nd                                               */
-              return PL_ND;
-            }
-
-          case 'l':
-            {                                     /* nl                                               */
-              return PL_NL;
-            }
-
-          case 'o':
-            {                                     /* no                                               */
-              return PL_NO;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'p':
-        switch (tokstr[1])
-        {
-          case 'c':
-            {                                     /* pc                                               */
-              return PL_PC;
-            }
-
-          case 'd':
-            {                                     /* pd                                               */
-              return PL_PD;
-            }
-
-          case 'e':
-            {                                     /* pe                                               */
-              return PL_PE;
-            }
-
-          case 'f':
-            {                                     /* pf                                               */
-              return PL_PF;
-            }
-
-          case 'i':
-            {                                     /* pi                                               */
-              return PL_PI;
-            }
-
-          case 'o':
-            {                                     /* po                                               */
-              return PL_PO;
-            }
-
-          case 's':
-            {                                     /* ps                                               */
-              return PL_PS;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'r':
-        if (tokstr[1] == 'i')
-        {                                         /* ri                                               */
-          return PL_RI;
-        }
-
-        return 0;
-
-      case 's':
-        switch (tokstr[1])
-        {
-          case 'c':
-            {                                     /* sc                                               */
-              return PL_SC;
-            }
-
-          case 'd':
-            {                                     /* sd                                               */
-              return PL_SD;
-            }
-
-          case 'k':
-            {                                     /* sk                                               */
-              return PL_SK;
-            }
-
-          case 'm':
-            {                                     /* sm                                               */
-              return PL_SM;
-            }
-
-          case 'o':
-            {                                     /* so                                               */
-              return PL_SO;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'v':
-        if (tokstr[1] == 's')
-        {                                         /* vs                                               */
-          return PL_VS;
-        }
-
-        return 0;
-
-      case 'y':
-        if (tokstr[1] == 'i')
-        {                                         /* yi                                               */
-          return PL_YI;
-        }
-
-        return 0;
-
-      case 'z':
-        switch (tokstr[1])
-        {
-          case 'l':
-            {                                     /* zl                                               */
-              return PL_ZL;
-            }
-
-          case 'p':
-            {                                     /* zp                                               */
-              return PL_ZP;
-            }
-
-          case 's':
-            {                                     /* zs                                               */
-              return PL_ZS;
-            }
-
-          default:
-            return 0;
-        }
-
-      default:
-        return 0;
-    }
-
-  case 3: /* 28 tokens of length 3 */
-    switch (tokstr[0])
-    {
-      case 'a':
-        switch (tokstr[1])
-        {
-          case 'l':
-            if (tokstr[2] == 'l')
-            {                                     /* all                                              */
-              return PL_ALL;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[2] == 'y')
-            {                                     /* any                                              */
-              return PL_ANY;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'c':
-        switch (tokstr[1])
-        {
-          case 'j':
-            if (tokstr[2] == 'k')
-            {                                     /* cjk                                              */
-              return PL_CJK;
-            }
-
-            return 0;
-
-          case 'w':
-            switch (tokstr[2])
-            {
-              case 'l':
-                {                                 /* cwl                                              */
-                  return PL_CWL;
-                }
-
-              case 't':
-                {                                 /* cwt                                              */
-                  return PL_CWT;
-                }
-
-              case 'u':
-                {                                 /* cwu                                              */
-                  return PL_CWU;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'd':
-        switch (tokstr[1])
-        {
-          case 'e':
-            if (tokstr[2] == 'p')
-            {                                     /* dep                                              */
-              return PL_DEP;
-            }
-
-            return 0;
-
-          case 'i':
-            if (tokstr[2] == 'a')
-            {                                     /* dia                                              */
-              return PL_DIA;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'e':
-        if (tokstr[1] == 'x' &&
-            tokstr[2] == 't')
-        {                                         /* ext                                              */
-          return PL_EXT;
-        }
-
-        return 0;
-
-      case 'h':
-        switch (tokstr[1])
-        {
-          case 'a':
-            if (tokstr[2] == 'n')
-            {                                     /* han                                              */
-              return PL_HAN;
-            }
-
-            return 0;
-
-          case 'e':
-            if (tokstr[2] == 'x')
-            {                                     /* hex                                              */
-              return PL_HEX;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'i':
-        switch (tokstr[1])
-        {
-          case 'd':
-            switch (tokstr[2])
-            {
-              case 'c':
-                {                                 /* idc                                              */
-                  return PL_IDC;
-                }
-
-              case 's':
-                {                                 /* ids                                              */
-                  return PL_IDS;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            switch (tokstr[2])
-            {
-              case 'c':
-                {                                 /* isc                                              */
-                  return PL_ISC;
-                }
-
-              case 'l':
-                {                                 /* isl                                              */
-                  return PL_ISL;
-                }
-
-              case 'm':
-                {                                 /* ism                                              */
-                  return PL_ISM;
-                }
-
-              case 'n':
-                {                                 /* isn                                              */
-                  return PL_ISN;
-                }
-
-              case 'p':
-                {                                 /* isp                                              */
-                  return PL_ISP;
-                }
-
-              case 's':
-                {                                 /* iss                                              */
-                  return PL_ISS;
-                }
-
-              case 'z':
-                {                                 /* isz                                              */
-                  return PL_ISZ;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'l':
-        switch (tokstr[1])
-        {
-          case 'a':
-            if (tokstr[2] == 'o')
-            {                                     /* lao                                              */
-              return PL_LAO;
-            }
-
-            return 0;
-
-          case 'o':
-            if (tokstr[2] == 'e')
-            {                                     /* loe                                              */
-              return PL_LOE;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'm':
-        if (tokstr[1] == 'r' &&
-            tokstr[2] == 'o')
-        {                                         /* mro                                              */
-          return PL_MRO;
-        }
-
-        return 0;
-
-      case 'n':
-        if (tokstr[1] == 'k' &&
-            tokstr[2] == 'o')
-        {                                         /* nko                                              */
-          return PL_NKO;
-        }
-
-        return 0;
-
-      case 'o':
-        if (tokstr[1] == 'c' &&
-            tokstr[2] == 'r')
-        {                                         /* ocr                                              */
-          return PL_OCR;
-        }
-
-        return 0;
-
-      case 'p':
-        switch (tokstr[1])
-        {
-          case 'c':
-            if (tokstr[2] == 'm')
-            {                                     /* pcm                                              */
-              return PL_PCM;
-            }
-
-            return 0;
-
-          case 'u':
-            if (tokstr[2] == 'a')
-            {                                     /* pua                                              */
-              return PL_PUA;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'v':
-        if (tokstr[1] == 'a' &&
-            tokstr[2] == 'i')
-        {                                         /* vai                                              */
-          return PL_VAI;
-        }
-
-        return 0;
-
-      default:
-        return 0;
-    }
-
-  case 4: /* 272 tokens of length 4 */
-    switch (tokstr[1])
-    {
-      case 'a':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'e':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    {                             /* ea=a                                             */
-                      return PL_EA__A;
-                    }
-
-                  case 'f':
-                    {                             /* ea=f                                             */
-                      return PL_EA__F;
-                    }
-
-                  case 'h':
-                    {                             /* ea=h                                             */
-                      return PL_EA__H;
-                    }
-
-                  case 'n':
-                    {                             /* ea=n                                             */
-                      return PL_EA__N;
-                    }
-
-                  case 'w':
-                    {                             /* ea=w                                             */
-                      return PL_EA__W;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'a':
-            switch (tokstr[0])
-            {
-              case 'q':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* qaac                                             */
-                      return PL_QAAC;
-                    }
-
-                  case 'i':
-                    {                             /* qaai                                             */
-                      return PL_QAAI;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'g':
-            switch (tokstr[0])
-            {
-              case 't':
-                switch (tokstr[3])
-                {
-                  case 'b':
-                    {                             /* tagb                                             */
-                      return PL_TAGB;
-                    }
-
-                  case 's':
-                    {                             /* tags                                             */
-                      return PL_TAGS;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'h':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'j')
-            {                                     /* mahj                                             */
-              return PL_MAHJ;
-            }
-
-            return 0;
-
-          case 'i':
-            if (tokstr[0] == 'v' &&
-                tokstr[3] == 'i')
-            {                                     /* vaii                                             */
-              return PL_VAII;
-            }
-
-            return 0;
-
-          case 'k':
-            switch (tokstr[0])
-            {
-              case 'c':
-                if (tokstr[3] == 'm')
-                {                                 /* cakm                                             */
-                  return PL_CAKM;
-                }
-
-                return 0;
-
-              case 't':
-                if (tokstr[3] == 'r')
-                {                                 /* takr                                             */
-                  return PL_TAKR;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'l':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'i')
-                {                                 /* bali                                             */
-                  return PL_BALI;
-                }
-
-                return 0;
-
-              case 'k':
-                if (tokstr[3] == 'i')
-                {                                 /* kali                                             */
-                  return PL_KALI;
-                }
-
-                return 0;
-
-              case 'p':
-                if (tokstr[3] == 'm')
-                {                                 /* palm                                             */
-                  return PL_PALM;
-                }
-
-                return 0;
-
-              case 't':
-                switch (tokstr[3])
-                {
-                  case 'e':
-                    {                             /* tale                                             */
-                      return PL_TALE;
-                    }
-
-                  case 'u':
-                    {                             /* talu                                             */
-                      return PL_TALU;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'm':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'u')
-                {                                 /* bamu                                             */
-                  return PL_BAMU;
-                }
-
-                return 0;
-
-              case 'j':
-                if (tokstr[3] == 'o')
-                {                                 /* jamo                                             */
-                  return PL_JAMO;
-                }
-
-                return 0;
-
-              case 's':
-                if (tokstr[3] == 'r')
-                {                                 /* samr                                             */
-                  return PL_SAMR;
-                }
-
-                return 0;
-
-              case 't':
-                if (tokstr[3] == 'l')
-                {                                 /* taml                                             */
-                  return PL_TAML;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'c':
-                if (tokstr[3] == 's')
-                {                                 /* cans                                             */
-                  return PL_CANS;
-                }
-
-                return 0;
-
-              case 'h':
-                switch (tokstr[3])
-                {
-                  case 'g':
-                    {                             /* hang                                             */
-                      return PL_HANG;
-                    }
-
-                  case 'i':
-                    {                             /* hani                                             */
-                      return PL_HANI;
-                    }
-
-                  case 'o':
-                    {                             /* hano                                             */
-                      return PL_HANO;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'k':
-                if (tokstr[3] == 'a')
-                {                                 /* kana                                             */
-                  return PL_KANA;
-                }
-
-                return 0;
-
-              case 'l':
-                if (tokstr[3] == 'a')
-                {                                 /* lana                                             */
-                  return PL_LANA;
-                }
-
-                return 0;
-
-              case 'm':
-                switch (tokstr[3])
-                {
-                  case 'd':
-                    {                             /* mand                                             */
-                      return PL_MAND;
-                    }
-
-                  case 'i':
-                    {                             /* mani                                             */
-                      return PL_MANI;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 't':
-                if (tokstr[3] == 'g')
-                {                                 /* tang                                             */
-                  return PL_TANG;
-                }
-
-                return 0;
-
-              case 'z':
-                if (tokstr[3] == 'b')
-                {                                 /* zanb                                             */
-                  return PL_ZANB;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'o':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'o')
-            {                                     /* laoo                                             */
-              return PL_LAOO;
-            }
-
-            return 0;
-
-          case 'r':
-            switch (tokstr[0])
-            {
-              case 'c':
-                if (tokstr[3] == 'i')
-                {                                 /* cari                                             */
-                  return PL_CARI;
-                }
-
-                return 0;
-
-              case 'm':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* marc                                             */
-                      return PL_MARC;
-                    }
-
-                  case 'k':
-                    {                             /* mark                                             */
-                      return PL_MARK;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'n':
-                if (tokstr[3] == 'b')
-                {                                 /* narb                                             */
-                  return PL_NARB;
-                }
-
-                return 0;
-
-              case 's':
-                if (tokstr[3] == 'b')
-                {                                 /* sarb                                             */
-                  return PL_SARB;
-                }
-
-                return 0;
-
-              case 'w':
-                if (tokstr[3] == 'a')
-                {                                 /* wara                                             */
-                  return PL_WARA;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 's')
-                {                                 /* bass                                             */
-                  return PL_BASS;
-                }
-
-                return 0;
-
-              case 'd':
-                if (tokstr[3] == 'h')
-                {                                 /* dash                                             */
-                  return PL_DASH;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 't':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'k')
-                {                                 /* batk                                             */
-                  return PL_BATK;
-                }
-
-                return 0;
-
-              case 'h':
-                if (tokstr[3] == 'r')
-                {                                 /* hatr                                             */
-                  return PL_HATR;
-                }
-
-                return 0;
-
-              case 'l':
-                if (tokstr[3] == 'n')
-                {                                 /* latn                                             */
-                  return PL_LATN;
-                }
-
-                return 0;
-
-              case 'm':
-                if (tokstr[3] == 'h')
-                {                                 /* math                                             */
-                  return PL_MATH;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'u':
-            switch (tokstr[0])
-            {
-              case 'p':
-                if (tokstr[3] == 'c')
-                {                                 /* pauc                                             */
-                  return PL_PAUC;
-                }
-
-                return 0;
-
-              case 's':
-                if (tokstr[3] == 'r')
-                {                                 /* saur                                             */
-                  return PL_SAUR;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'v':
-            switch (tokstr[0])
-            {
-              case 'j':
-                if (tokstr[3] == 'a')
-                {                                 /* java                                             */
-                  return PL_JAVA;
-                }
-
-                return 0;
-
-              case 't':
-                if (tokstr[3] == 't')
-                {                                 /* tavt                                             */
-                  return PL_TAVT;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'b':
-        if (tokstr[0] == 'n' &&
-            tokstr[2] == 'a' &&
-            tokstr[3] == 't')
-        {                                         /* nbat                                             */
-          return PL_NBAT;
-        }
-
-        return 0;
-
-      case 'c':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'b':
-                switch (tokstr[3])
-                {
-                  case 'b':
-                    {                             /* bc=b                                             */
-                      return PL_BC__B;
-                    }
-
-                  case 'l':
-                    {                             /* bc=l                                             */
-                      return PL_BC__L;
-                    }
-
-                  case 'r':
-                    {                             /* bc=r                                             */
-                      return PL_BC__R;
-                    }
-
-                  case 's':
-                    {                             /* bc=s                                             */
-                      return PL_BC__S;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'g':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* gc=c                                             */
-                      return PL_GC__C;
-                    }
-
-                  case 'l':
-                    {                             /* gc=l                                             */
-                      return PL_GC__L;
-                    }
-
-                  case 'm':
-                    {                             /* gc=m                                             */
-                      return PL_GC__M;
-                    }
-
-                  case 'n':
-                    {                             /* gc=n                                             */
-                      return PL_GC__N;
-                    }
-
-                  case 'p':
-                    {                             /* gc=p                                             */
-                      return PL_GC__P;
-                    }
-
-                  case 's':
-                    {                             /* gc=s                                             */
-                      return PL_GC__S;
-                    }
-
-                  case 'z':
-                    {                             /* gc=z                                             */
-                      return PL_GC__Z;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'a':
-            if (tokstr[0] == 'u' &&
-                tokstr[3] == 's')
-            {                                     /* ucas                                             */
-              return PL_UCAS;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'd':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 's':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* sd=f                                             */
-                      return PL_SD__F;
-                    }
-
-                  case 'n':
-                    {                             /* sd=n                                             */
-                      return PL_SD__N;
-                    }
-
-                  case 't':
-                    {                             /* sd=t                                             */
-                      return PL_SD__T;
-                    }
-
-                  case 'y':
-                    {                             /* sd=y                                             */
-                      return PL_SD__Y;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'o')
-            {                                     /* ideo                                             */
-              return PL_IDEO;
-            }
-
-            return 0;
-
-          case 'l':
-            if (tokstr[0] == 'a' &&
-                tokstr[3] == 'm')
-            {                                     /* adlm                                             */
-              return PL_ADLM;
-            }
-
-            return 0;
-
-          case 's':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'b':
-                    {                             /* idsb                                             */
-                      return PL_IDSB;
-                    }
-
-                  case 't':
-                    {                             /* idst                                             */
-                      return PL_IDST;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'e':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'c':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* ce=f                                             */
-                      return PL_CE__F;
-                    }
-
-                  case 'n':
-                    {                             /* ce=n                                             */
-                      return PL_CE__N;
-                    }
-
-                  case 't':
-                    {                             /* ce=t                                             */
-                      return PL_CE__T;
-                    }
-
-                  case 'y':
-                    {                             /* ce=y                                             */
-                      return PL_CE__Y;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'b':
-            if (tokstr[0] == 'h' &&
-                tokstr[3] == 'r')
-            {                                     /* hebr                                             */
-              return PL_HEBR;
-            }
-
-            return 0;
-
-          case 'l':
-            if (tokstr[0] == 't' &&
-                tokstr[3] == 'u')
-            {                                     /* telu                                             */
-              return PL_TELU;
-            }
-
-            return 0;
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'g')
-                {                                 /* beng                                             */
-                  return PL_BENG;
-                }
-
-                return 0;
-
-              case 'm':
-                if (tokstr[3] == 'd')
-                {                                 /* mend                                             */
-                  return PL_MEND;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'o':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'r')
-            {                                     /* geor                                             */
-              return PL_GEOR;
-            }
-
-            return 0;
-
-          case 'p':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'c')
-            {                                     /* lepc                                             */
-              return PL_LEPC;
-            }
-
-            return 0;
-
-          case 'r':
-            switch (tokstr[0])
-            {
-              case 'm':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* merc                                             */
-                      return PL_MERC;
-                    }
-
-                  case 'o':
-                    {                             /* mero                                             */
-                      return PL_MERO;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'p':
-                if (tokstr[3] == 'm')
-                {                                 /* perm                                             */
-                  return PL_PERM;
-                }
-
-                return 0;
-
-              case 't':
-                if (tokstr[3] == 'm')
-                {                                 /* term                                             */
-                  return PL_TERM;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'v':
-            if (tokstr[0] == 'd' &&
-                tokstr[3] == 'a')
-            {                                     /* deva                                             */
-              return PL_DEVA;
-            }
-
-            return 0;
-
-          case 'w':
-            if (tokstr[0] == 'n' &&
-                tokstr[3] == 'a')
-            {                                     /* newa                                             */
-              return PL_NEWA;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'f':
-        if (tokstr[0] == 't' &&
-            tokstr[2] == 'n' &&
-            tokstr[3] == 'g')
-        {                                         /* tfng                                             */
-          return PL_TFNG;
-        }
-
-        return 0;
-
-      case 'g':
-        switch (tokstr[2])
-        {
-          case '=':
-            if (tokstr[0] == 'j' &&
-                tokstr[3] == 'e')
-            {                                     /* jg=e                                             */
-              return PL_JG__E;
-            }
-
-            return 0;
-
-          case 'a':
-            switch (tokstr[0])
-            {
-              case 'o':
-                if (tokstr[3] == 'm')
-                {                                 /* ogam                                             */
-                  return PL_OGAM;
-                }
-
-                return 0;
-
-              case 'u':
-                if (tokstr[3] == 'r')
-                {                                 /* ugar                                             */
-                  return PL_UGAR;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'h':
-            if (tokstr[0] == 'a' &&
-                tokstr[3] == 'b')
-            {                                     /* aghb                                             */
-              return PL_AGHB;
-            }
-
-            return 0;
-
-          case 'l':
-            if (tokstr[0] == 't' &&
-                tokstr[3] == 'g')
-            {                                     /* tglg                                             */
-              return PL_TGLG;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'w')
-            {                                     /* sgnw                                             */
-              return PL_SGNW;
-            }
-
-            return 0;
-
-          case 'y':
-            if (tokstr[0] == 'e' &&
-                tokstr[3] == 'p')
-            {                                     /* egyp                                             */
-              return PL_EGYP;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'h':
-        switch (tokstr[2])
-        {
-          case 'a':
-            switch (tokstr[0])
-            {
-              case 'c':
-                if (tokstr[3] == 'm')
-                {                                 /* cham                                             */
-                  return PL_CHAM;
-                }
-
-                return 0;
-
-              case 'k':
-                if (tokstr[3] == 'r')
-                {                                 /* khar                                             */
-                  return PL_KHAR;
-                }
-
-                return 0;
-
-              case 'p':
-                if (tokstr[3] == 'g')
-                {                                 /* phag                                             */
-                  return PL_PHAG;
-                }
-
-                return 0;
-
-              case 's':
-                if (tokstr[3] == 'w')
-                {                                 /* shaw                                             */
-                  return PL_SHAW;
-                }
-
-                return 0;
-
-              case 't':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    {                             /* thaa                                             */
-                      return PL_THAA;
-                    }
-
-                  case 'i':
-                    {                             /* thai                                             */
-                      return PL_THAI;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            switch (tokstr[0])
-            {
-              case 'a':
-                if (tokstr[3] == 'x')
-                {                                 /* ahex                                             */
-                  return PL_AHEX;
-                }
-
-                return 0;
-
-              case 'c':
-                if (tokstr[3] == 'r')
-                {                                 /* cher                                             */
-                  return PL_CHER;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'k':
-            if (tokstr[0] == 'b' &&
-                tokstr[3] == 's')
-            {                                     /* bhks                                             */
-              return PL_BHKS;
-            }
-
-            return 0;
-
-          case 'l':
-            switch (tokstr[0])
-            {
-              case 'p':
-                switch (tokstr[3])
-                {
-                  case 'i':
-                    {                             /* phli                                             */
-                      return PL_PHLI;
-                    }
-
-                  case 'p':
-                    {                             /* phlp                                             */
-                      return PL_PHLP;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'm':
-            if (tokstr[0] == 'k' &&
-                tokstr[3] == 'r')
-            {                                     /* khmr                                             */
-              return PL_KHMR;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[0] == 'p' &&
-                tokstr[3] == 'x')
-            {                                     /* phnx                                             */
-              return PL_PHNX;
-            }
-
-            return 0;
-
-          case 'o':
-            switch (tokstr[0])
-            {
-              case 'a':
-                if (tokstr[3] == 'm')
-                {                                 /* ahom                                             */
-                  return PL_AHOM;
-                }
-
-                return 0;
-
-              case 'k':
-                if (tokstr[3] == 'j')
-                {                                 /* khoj                                             */
-                  return PL_KHOJ;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'r':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'd')
-            {                                     /* shrd                                             */
-              return PL_SHRD;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'i':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'c':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* ci=f                                             */
-                      return PL_CI__F;
-                    }
-
-                  case 'n':
-                    {                             /* ci=n                                             */
-                      return PL_CI__N;
-                    }
-
-                  case 't':
-                    {                             /* ci=t                                             */
-                      return PL_CI__T;
-                    }
-
-                  case 'y':
-                    {                             /* ci=y                                             */
-                      return PL_CI__Y;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'd':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* di=f                                             */
-                      return PL_DI__F;
-                    }
-
-                  case 'n':
-                    {                             /* di=n                                             */
-                      return PL_DI__N;
-                    }
-
-                  case 't':
-                    {                             /* di=t                                             */
-                      return PL_DI__T;
-                    }
-
-                  case 'y':
-                    {                             /* di=y                                             */
-                      return PL_DI__Y;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'r':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* ri=f                                             */
-                      return PL_RI__F;
-                    }
-
-                  case 'n':
-                    {                             /* ri=n                                             */
-                      return PL_RI__N;
-                    }
-
-                  case 't':
-                    {                             /* ri=t                                             */
-                      return PL_RI__T;
-                    }
-
-                  case 'y':
-                    {                             /* ri=y                                             */
-                      return PL_RI__Y;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'a':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'o')
-            {                                     /* miao                                             */
-              return PL_MIAO;
-            }
-
-            return 0;
-
-          case 'b':
-            if (tokstr[0] == 't' &&
-                tokstr[3] == 't')
-            {                                     /* tibt                                             */
-              return PL_TIBT;
-            }
-
-            return 0;
-
-          case 'd':
-            switch (tokstr[0])
-            {
-              case 's':
-                if (tokstr[3] == 'd')
-                {                                 /* sidd                                             */
-                  return PL_SIDD;
-                }
-
-                return 0;
-
-              case 'x':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* xidc                                             */
-                      return PL_XIDC;
-                    }
-
-                  case 's':
-                    {                             /* xids                                             */
-                      return PL_XIDS;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'i':
-            if (tokstr[0] == 'y' &&
-                tokstr[3] == 'i')
-            {                                     /* yiii                                             */
-              return PL_YIII;
-            }
-
-            return 0;
-
-          case 'm':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'b')
-            {                                     /* limb                                             */
-              return PL_LIMB;
-            }
-
-            return 0;
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'l':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    {                             /* lina                                             */
-                      return PL_LINA;
-                    }
-
-                  case 'b':
-                    {                             /* linb                                             */
-                      return PL_LINB;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 's':
-                switch (tokstr[3])
-                {
-                  case 'd':
-                    {                             /* sind                                             */
-                      return PL_SIND;
-                    }
-
-                  case 'h':
-                    {                             /* sinh                                             */
-                      return PL_SINH;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'z':
-                if (tokstr[3] == 'h')
-                {                                 /* zinh                                             */
-                  return PL_ZINH;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'r':
-            switch (tokstr[0])
-            {
-              case 'h':
-                if (tokstr[3] == 'a')
-                {                                 /* hira                                             */
-                  return PL_HIRA;
-                }
-
-                return 0;
-
-              case 't':
-                if (tokstr[3] == 'h')
-                {                                 /* tirh                                             */
-                  return PL_TIRH;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'u')
-            {                                     /* lisu                                             */
-              return PL_LISU;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'j':
-        if (tokstr[0] == 'r' &&
-            tokstr[2] == 'n' &&
-            tokstr[3] == 'g')
-        {                                         /* rjng                                             */
-          return PL_RJNG;
-        }
-
-        return 0;
-
-      case 'k':
-        if (tokstr[0] == 'n' &&
-            tokstr[2] == 'o' &&
-            tokstr[3] == 'o')
-        {                                         /* nkoo                                             */
-          return PL_NKOO;
-        }
-
-        return 0;
-
-      case 'l':
-        switch (tokstr[2])
-        {
-          case 'a':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'g')
-            {                                     /* glag                                             */
-              return PL_GLAG;
-            }
-
-            return 0;
-
-          case 'b':
-            if (tokstr[0] == 'e' &&
-                tokstr[3] == 'a')
-            {                                     /* elba                                             */
-              return PL_ELBA;
-            }
-
-            return 0;
-
-          case 'c':
-            if (tokstr[0] == 'o' &&
-                tokstr[3] == 'k')
-            {                                     /* olck                                             */
-              return PL_OLCK;
-            }
-
-            return 0;
-
-          case 'r':
-            if (tokstr[0] == 'p' &&
-                tokstr[3] == 'd')
-            {                                     /* plrd                                             */
-              return PL_PLRD;
-            }
-
-            return 0;
-
-          case 'u':
-            if (tokstr[0] == 'h' &&
-                tokstr[3] == 'w')
-            {                                     /* hluw                                             */
-              return PL_HLUW;
-            }
-
-            return 0;
-
-          case 'y':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'm')
-            {                                     /* mlym                                             */
-              return PL_MLYM;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'm':
-        if (tokstr[0] == 'h' &&
-            tokstr[2] == 'n' &&
-            tokstr[3] == 'g')
-        {                                         /* hmng                                             */
-          return PL_HMNG;
-        }
-
-        return 0;
-
-      case 'n':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case '2':
-                    {                             /* in=2                                             */
-                      return PL_IN__2;
-                    }
-
-                  case '3':
-                    {                             /* in=3                                             */
-                      return PL_IN__3;
-                    }
-
-                  case '4':
-                    {                             /* in=4                                             */
-                      return PL_IN__4;
-                    }
-
-                  case '5':
-                    {                             /* in=5                                             */
-                      return PL_IN__5;
-                    }
-
-                  case '6':
-                    {                             /* in=6                                             */
-                      return PL_IN__6;
-                    }
-
-                  case '7':
-                    {                             /* in=7                                             */
-                      return PL_IN__7;
-                    }
-
-                  case '8':
-                    {                             /* in=8                                             */
-                      return PL_IN__8;
-                    }
-
-                  case '9':
-                    {                             /* in=9                                             */
-                      return PL_IN__9;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'd':
-            if (tokstr[0] == 'k' &&
-                tokstr[3] == 'a')
-            {                                     /* knda                                             */
-              return PL_KNDA;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'b')
-            {                                     /* innb                                             */
-              return PL_INNB;
-            }
-
-            return 0;
-
-          case 'v':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 's')
-            {                                     /* invs                                             */
-              return PL_INVS;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'o':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'v':
-                switch (tokstr[3])
-                {
-                  case 'r':
-                    {                             /* vo=r                                             */
-                      return PL_VO__R;
-                    }
-
-                  case 'u':
-                    {                             /* vo=u                                             */
-                      return PL_VO__U;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'd':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'i')
-            {                                     /* modi                                             */
-              return PL_MODI;
-            }
-
-            return 0;
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'g':
-                if (tokstr[3] == 'm')
-                {                                 /* gonm                                             */
-                  return PL_GONM;
-                }
-
-                return 0;
-
-              case 'm':
-                if (tokstr[3] == 'g')
-                {                                 /* mong                                             */
-                  return PL_MONG;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'p':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'o')
-                {                                 /* bopo                                             */
-                  return PL_BOPO;
-                }
-
-                return 0;
-
-              case 'c':
-                if (tokstr[3] == 't')
-                {                                 /* copt                                             */
-                  return PL_COPT;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'r':
-            switch (tokstr[0])
-            {
-              case 's':
-                if (tokstr[3] == 'a')
-                {                                 /* sora                                             */
-                  return PL_SORA;
-                }
-
-                return 0;
-
-              case 'w':
-                if (tokstr[3] == 'd')
-                {                                 /* word                                             */
-                  return PL_WORD;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 't':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'h')
-            {                                     /* goth                                             */
-              return PL_GOTH;
-            }
-
-            return 0;
-
-          case 'y':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'o')
-            {                                     /* soyo                                             */
-              return PL_SOYO;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'p':
-        switch (tokstr[2])
-        {
-          case 'e':
-            if (tokstr[0] == 'x' &&
-                tokstr[3] == 'o')
-            {                                     /* xpeo                                             */
-              return PL_XPEO;
-            }
-
-            return 0;
-
-          case 'r':
-            if (tokstr[0] == 'c' &&
-                tokstr[3] == 't')
-            {                                     /* cprt                                             */
-              return PL_CPRT;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'r':
-        switch (tokstr[2])
-        {
-          case 'a':
-            switch (tokstr[0])
-            {
-              case 'a':
-                if (tokstr[3] == 'b')
-                {                                 /* arab                                             */
-                  return PL_ARAB;
-                }
-
-                return 0;
-
-              case 'b':
-                switch (tokstr[3])
-                {
-                  case 'h':
-                    {                             /* brah                                             */
-                      return PL_BRAH;
-                    }
-
-                  case 'i':
-                    {                             /* brai                                             */
-                      return PL_BRAI;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'g':
-                if (tokstr[3] == 'n')
-                {                                 /* gran                                             */
-                  return PL_GRAN;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'k')
-            {                                     /* grek                                             */
-              return PL_GREK;
-            }
-
-            return 0;
-
-          case 'k':
-            if (tokstr[0] == 'o' &&
-                tokstr[3] == 'h')
-            {                                     /* orkh                                             */
-              return PL_ORKH;
-            }
-
-            return 0;
-
-          case 'm':
-            switch (tokstr[0])
-            {
-              case 'a':
-                switch (tokstr[3])
-                {
-                  case 'i':
-                    {                             /* armi                                             */
-                      return PL_ARMI;
-                    }
-
-                  case 'n':
-                    {                             /* armn                                             */
-                      return PL_ARMN;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'o':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'o')
-            {                                     /* mroo                                             */
-              return PL_MROO;
-            }
-
-            return 0;
-
-          case 't':
-            if (tokstr[0] == 'p' &&
-                tokstr[3] == 'i')
-            {                                     /* prti                                             */
-              return PL_PRTI;
-            }
-
-            return 0;
-
-          case 'y':
-            if (tokstr[0] == 'o' &&
-                tokstr[3] == 'a')
-            {                                     /* orya                                             */
-              return PL_ORYA;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 's':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'v':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* vs=f                                             */
-                      return PL_VS__F;
-                    }
-
-                  case 'n':
-                    {                             /* vs=n                                             */
-                      return PL_VS__N;
-                    }
-
-                  case 't':
-                    {                             /* vs=t                                             */
-                      return PL_VS__T;
-                    }
-
-                  case 'y':
-                    {                             /* vs=y                                             */
-                      return PL_VS__Y;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'c':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* iscc                                             */
-                      return PL_ISCC;
-                    }
-
-                  case 'e':
-                    {                             /* isce                                             */
-                      return PL_ISCE;
-                    }
-
-                  case 'f':
-                    {                             /* iscf                                             */
-                      return PL_ISCF;
-                    }
-
-                  case 'i':
-                    {                             /* isci                                             */
-                      return PL_ISCI;
-                    }
-
-                  case 'n':
-                    {                             /* iscn                                             */
-                      return PL_ISCN;
-                    }
-
-                  case 'o':
-                    {                             /* isco                                             */
-                      return PL_ISCO;
-                    }
-
-                  case 's':
-                    {                             /* iscs                                             */
-                      return PL_ISCS;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'd':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'i')
-            {                                     /* isdi                                             */
-              return PL_ISDI;
-            }
-
-            return 0;
-
-          case 'g':
-            if (tokstr[0] == 'o' &&
-                tokstr[3] == 'e')
-            {                                     /* osge                                             */
-              return PL_OSGE;
-            }
-
-            return 0;
-
-          case 'h':
-            if (tokstr[0] == 'n' &&
-                tokstr[3] == 'u')
-            {                                     /* nshu                                             */
-              return PL_NSHU;
-            }
-
-            return 0;
-
-          case 'l':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case '&':
-                    {                             /* isl&                                             */
-                      return PL_ISL_AMP_;
-                    }
-
-                  case '_':
-                    {                             /* isl_                                             */
-                      return PL_ISL_;
-                    }
-
-                  case 'c':
-                    {                             /* islc                                             */
-                      return PL_ISLC;
-                    }
-
-                  case 'l':
-                    {                             /* isll                                             */
-                      return PL_ISLL;
-                    }
-
-                  case 'm':
-                    {                             /* islm                                             */
-                      return PL_ISLM;
-                    }
-
-                  case 'o':
-                    {                             /* islo                                             */
-                      return PL_ISLO;
-                    }
-
-                  case 't':
-                    {                             /* islt                                             */
-                      return PL_ISLT;
-                    }
-
-                  case 'u':
-                    {                             /* islu                                             */
-                      return PL_ISLU;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'm':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* ismc                                             */
-                      return PL_ISMC;
-                    }
-
-                  case 'e':
-                    {                             /* isme                                             */
-                      return PL_ISME;
-                    }
-
-                  case 'n':
-                    {                             /* ismn                                             */
-                      return PL_ISMN;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'o':
-                if (tokstr[3] == 'a')
-                {                                 /* osma                                             */
-                  return PL_OSMA;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'b':
-                    {                             /* isnb                                             */
-                      return PL_ISNB;
-                    }
-
-                  case 'd':
-                    {                             /* isnd                                             */
-                      return PL_ISND;
-                    }
-
-                  case 'l':
-                    {                             /* isnl                                             */
-                      return PL_ISNL;
-                    }
-
-                  case 'o':
-                    {                             /* isno                                             */
-                      return PL_ISNO;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'p':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* ispc                                             */
-                      return PL_ISPC;
-                    }
-
-                  case 'd':
-                    {                             /* ispd                                             */
-                      return PL_ISPD;
-                    }
-
-                  case 'e':
-                    {                             /* ispe                                             */
-                      return PL_ISPE;
-                    }
-
-                  case 'f':
-                    {                             /* ispf                                             */
-                      return PL_ISPF;
-                    }
-
-                  case 'i':
-                    {                             /* ispi                                             */
-                      return PL_ISPI;
-                    }
-
-                  case 'o':
-                    {                             /* ispo                                             */
-                      return PL_ISPO;
-                    }
-
-                  case 's':
-                    {                             /* isps                                             */
-                      return PL_ISPS;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'r':
-            switch (tokstr[0])
-            {
-              case 'd':
-                if (tokstr[3] == 't')
-                {                                 /* dsrt                                             */
-                  return PL_DSRT;
-                }
-
-                return 0;
-
-              case 'i':
-                if (tokstr[3] == 'i')
-                {                                 /* isri                                             */
-                  return PL_ISRI;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* issc                                             */
-                      return PL_ISSC;
-                    }
-
-                  case 'd':
-                    {                             /* issd                                             */
-                      return PL_ISSD;
-                    }
-
-                  case 'k':
-                    {                             /* issk                                             */
-                      return PL_ISSK;
-                    }
-
-                  case 'm':
-                    {                             /* issm                                             */
-                      return PL_ISSM;
-                    }
-
-                  case 'o':
-                    {                             /* isso                                             */
-                      return PL_ISSO;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'u':
-            if (tokstr[0] == 'x' &&
-                tokstr[3] == 'x')
-            {                                     /* xsux                                             */
-              return PL_XSUX;
-            }
-
-            return 0;
-
-          case 'v':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 's')
-            {                                     /* isvs                                             */
-              return PL_ISVS;
-            }
-
-            return 0;
-
-          case 'y':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'i')
-            {                                     /* isyi                                             */
-              return PL_ISYI;
-            }
-
-            return 0;
-
-          case 'z':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'l':
-                    {                             /* iszl                                             */
-                      return PL_ISZL;
-                    }
-
-                  case 'p':
-                    {                             /* iszp                                             */
-                      return PL_ISZP;
-                    }
-
-                  case 's':
-                    {                             /* iszs                                             */
-                      return PL_ISZS;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 't':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'j':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    {                             /* jt=c                                             */
-                      return PL_JT__C;
-                    }
-
-                  case 'd':
-                    {                             /* jt=d                                             */
-                      return PL_JT__D;
-                    }
-
-                  case 'l':
-                    {                             /* jt=l                                             */
-                      return PL_JT__L;
-                    }
-
-                  case 'r':
-                    {                             /* jt=r                                             */
-                      return PL_JT__R;
-                    }
-
-                  case 't':
-                    {                             /* jt=t                                             */
-                      return PL_JT__T;
-                    }
-
-                  case 'u':
-                    {                             /* jt=u                                             */
-                      return PL_JT__U;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'a':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'l')
-            {                                     /* ital                                             */
-              return PL_ITAL;
-            }
-
-            return 0;
-
-          case 'e':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'i')
-            {                                     /* mtei                                             */
-              return PL_MTEI;
-            }
-
-            return 0;
-
-          case 'h':
-            switch (tokstr[0])
-            {
-              case 'e':
-                if (tokstr[3] == 'i')
-                {                                 /* ethi                                             */
-                  return PL_ETHI;
-                }
-
-                return 0;
-
-              case 'k':
-                if (tokstr[3] == 'i')
-                {                                 /* kthi                                             */
-                  return PL_KTHI;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'u':
-        switch (tokstr[2])
-        {
-          case 'g':
-            if (tokstr[0] == 'b' &&
-                tokstr[3] == 'i')
-            {                                     /* bugi                                             */
-              return PL_BUGI;
-            }
-
-            return 0;
-
-          case 'h':
-            if (tokstr[0] == 'b' &&
-                tokstr[3] == 'd')
-            {                                     /* buhd                                             */
-              return PL_BUHD;
-            }
-
-            return 0;
-
-          case 'j':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'r')
-            {                                     /* gujr                                             */
-              return PL_GUJR;
-            }
-
-            return 0;
-
-          case 'l':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 't')
-            {                                     /* mult                                             */
-              return PL_MULT;
-            }
-
-            return 0;
-
-          case 'm':
-            if (tokstr[0] == 'r' &&
-                tokstr[3] == 'i')
-            {                                     /* rumi                                             */
-              return PL_RUMI;
-            }
-
-            return 0;
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'h':
-                if (tokstr[3] == 'g')
-                {                                 /* hung                                             */
-                  return PL_HUNG;
-                }
-
-                return 0;
-
-              case 'r':
-                if (tokstr[3] == 'r')
-                {                                 /* runr                                             */
-                  return PL_RUNR;
-                }
-
-                return 0;
-
-              case 's':
-                if (tokstr[3] == 'd')
-                {                                 /* sund                                             */
-                  return PL_SUND;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'p':
-            if (tokstr[0] == 'd' &&
-                tokstr[3] == 'l')
-            {                                     /* dupl                                             */
-              return PL_DUPL;
-            }
-
-            return 0;
-
-          case 'r':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'u')
-            {                                     /* guru                                             */
-              return PL_GURU;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'v':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'n':
-                switch (tokstr[3])
-                {
-                  case '0':
-                    {                             /* nv=0                                             */
-                      return PL_NV__0;
-                    }
-
-                  case '1':
-                    {                             /* nv=1                                             */
-                      return PL_NV__1;
-                    }
-
-                  case '2':
-                    {                             /* nv=2                                             */
-                      return PL_NV__2;
-                    }
-
-                  case '3':
-                    {                             /* nv=3                                             */
-                      return PL_NV__3;
-                    }
-
-                  case '4':
-                    {                             /* nv=4                                             */
-                      return PL_NV__4;
-                    }
-
-                  case '5':
-                    {                             /* nv=5                                             */
-                      return PL_NV__5;
-                    }
-
-                  case '6':
-                    {                             /* nv=6                                             */
-                      return PL_NV__6;
-                    }
-
-                  case '7':
-                    {                             /* nv=7                                             */
-                      return PL_NV__7;
-                    }
-
-                  case '8':
-                    {                             /* nv=8                                             */
-                      return PL_NV__8;
-                    }
-
-                  case '9':
-                    {                             /* nv=9                                             */
-                      return PL_NV__9;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            if (tokstr[0] == 'a' &&
-                tokstr[3] == 't')
-            {                                     /* avst                                             */
-              return PL_AVST;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'w':
-        switch (tokstr[2])
-        {
-          case 'c':
-            switch (tokstr[0])
-            {
-              case 'c':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    {                             /* cwcf                                             */
-                      return PL_CWCF;
-                    }
-
-                  case 'm':
-                    {                             /* cwcm                                             */
-                      return PL_CWCM;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'y':
-        switch (tokstr[2])
-        {
-          case 'c':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'i')
-            {                                     /* lyci                                             */
-              return PL_LYCI;
-            }
-
-            return 0;
-
-          case 'd':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'i')
-            {                                     /* lydi                                             */
-              return PL_LYDI;
-            }
-
-            return 0;
-
-          case 'l':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'o')
-            {                                     /* sylo                                             */
-              return PL_SYLO;
-            }
-
-            return 0;
-
-          case 'm':
-            if (tokstr[0] == 'm' &&
-                tokstr[3] == 'r')
-            {                                     /* mymr                                             */
-              return PL_MYMR;
-            }
-
-            return 0;
-
-          case 'r':
-            switch (tokstr[0])
-            {
-              case 'c':
-                if (tokstr[3] == 'l')
-                {                                 /* cyrl                                             */
-                  return PL_CYRL;
-                }
-
-                return 0;
-
-              case 's':
-                if (tokstr[3] == 'c')
-                {                                 /* syrc                                             */
-                  return PL_SYRC;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'y':
-            if (tokstr[0] == 'z' &&
-                tokstr[3] == 'y')
-            {                                     /* zyyy                                             */
-              return PL_ZYYY;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'z':
-        if (tokstr[0] == 'z' &&
-            tokstr[2] == 'z' &&
-            tokstr[3] == 'z')
-        {                                         /* zzzz                                             */
-          return PL_ZZZZ;
-        }
-
-        return 0;
-
-      default:
-        return 0;
-    }
-
-  case 5: /* 322 tokens of length 5 */
-    switch (tokstr[1])
-    {
-      case 'a':
-        switch (tokstr[2])
-        {
-          case '=':
-            if (tokstr[0] == 'e' &&
-                tokstr[3] == 'n' &&
-                tokstr[4] == 'a')
-            {                                     /* ea=na                                            */
-              return PL_EA__NA;
-            }
-
-            return 0;
-
-          case 'i':
-            if (tokstr[0] == 't' &&
-                tokstr[3] == 'l' &&
-                tokstr[4] == 'e')
-            {                                     /* taile                                            */
-              return PL_TAILE;
-            }
-
-            return 0;
-
-          case 'k':
-            if (tokstr[0] == 't' &&
-                tokstr[3] == 'r' &&
-                tokstr[4] == 'i')
-            {                                     /* takri                                            */
-              return PL_TAKRI;
-            }
-
-            return 0;
-
-          case 'm':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'u' &&
-                    tokstr[4] == 'm')
-                {                                 /* bamum                                            */
-                  return PL_BAMUM;
-                }
-
-                return 0;
-
-              case 't':
-                if (tokstr[3] == 'i' &&
-                    tokstr[4] == 'l')
-                {                                 /* tamil                                            */
-                  return PL_TAMIL;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            if (tokstr[0] == 'c' &&
-                tokstr[3] == 'e' &&
-                tokstr[4] == 'd')
-            {                                     /* cased                                            */
-              return PL_CASED;
-            }
-
-            return 0;
-
-          case 't':
-            switch (tokstr[0])
-            {
-              case 'b':
-                if (tokstr[3] == 'a' &&
-                    tokstr[4] == 'k')
-                {                                 /* batak                                            */
-                  return PL_BATAK;
-                }
-
-                return 0;
-
-              case 'l':
-                if (tokstr[3] == 'i' &&
-                    tokstr[4] == 'n')
-                {                                 /* latin                                            */
-                  return PL_LATIN;
-                }
-
-                return 0;
-
-              case 'p':
-                if (tokstr[3] == 'w' &&
-                    tokstr[4] == 's')
-                {                                 /* patws                                            */
-                  return PL_PATWS;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'b':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'l':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    switch (tokstr[4])
-                    {
-                      case 'i':
-                        {                         /* lb=ai                                            */
-                          return PL_LB__AI;
-                        }
-
-                      case 'l':
-                        {                         /* lb=al                                            */
-                          return PL_LB__AL;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'b':
-                    switch (tokstr[4])
-                    {
-                      case '2':
-                        {                         /* lb=b2                                            */
-                          return PL_LB__B2;
-                        }
-
-                      case 'a':
-                        {                         /* lb=ba                                            */
-                          return PL_LB__BA;
-                        }
-
-                      case 'b':
-                        {                         /* lb=bb                                            */
-                          return PL_LB__BB;
-                        }
-
-                      case 'k':
-                        {                         /* lb=bk                                            */
-                          return PL_LB__BK;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'c':
-                    switch (tokstr[4])
-                    {
-                      case 'b':
-                        {                         /* lb=cb                                            */
-                          return PL_LB__CB;
-                        }
-
-                      case 'j':
-                        {                         /* lb=cj                                            */
-                          return PL_LB__CJ;
-                        }
-
-                      case 'l':
-                        {                         /* lb=cl                                            */
-                          return PL_LB__CL;
-                        }
-
-                      case 'm':
-                        {                         /* lb=cm                                            */
-                          return PL_LB__CM;
-                        }
-
-                      case 'p':
-                        {                         /* lb=cp                                            */
-                          return PL_LB__CP;
-                        }
-
-                      case 'r':
-                        {                         /* lb=cr                                            */
-                          return PL_LB__CR;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'e':
-                    switch (tokstr[4])
-                    {
-                      case 'b':
-                        {                         /* lb=eb                                            */
-                          return PL_LB__EB;
-                        }
-
-                      case 'm':
-                        {                         /* lb=em                                            */
-                          return PL_LB__EM;
-                        }
-
-                      case 'x':
-                        {                         /* lb=ex                                            */
-                          return PL_LB__EX;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'g':
-                    if (tokstr[4] == 'l')
-                    {                             /* lb=gl                                            */
-                      return PL_LB__GL;
-                    }
-
-                    return 0;
-
-                  case 'h':
-                    switch (tokstr[4])
-                    {
-                      case '2':
-                        {                         /* lb=h2                                            */
-                          return PL_LB__H2;
-                        }
-
-                      case '3':
-                        {                         /* lb=h3                                            */
-                          return PL_LB__H3;
-                        }
-
-                      case 'l':
-                        {                         /* lb=hl                                            */
-                          return PL_LB__HL;
-                        }
-
-                      case 'y':
-                        {                         /* lb=hy                                            */
-                          return PL_LB__HY;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'i':
-                    switch (tokstr[4])
-                    {
-                      case 'd':
-                        {                         /* lb=id                                            */
-                          return PL_LB__ID;
-                        }
-
-                      case 'n':
-                        {                         /* lb=in                                            */
-                          return PL_LB__IN;
-                        }
-
-                      case 's':
-                        {                         /* lb=is                                            */
-                          return PL_LB__IS;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'j':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* lb=jl                                            */
-                          return PL_LB__JL;
-                        }
-
-                      case 't':
-                        {                         /* lb=jt                                            */
-                          return PL_LB__JT;
-                        }
-
-                      case 'v':
-                        {                         /* lb=jv                                            */
-                          return PL_LB__JV;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'l':
-                    if (tokstr[4] == 'f')
-                    {                             /* lb=lf                                            */
-                      return PL_LB__LF;
-                    }
-
-                    return 0;
-
-                  case 'n':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* lb=nl                                            */
-                          return PL_LB__NL;
-                        }
-
-                      case 's':
-                        {                         /* lb=ns                                            */
-                          return PL_LB__NS;
-                        }
-
-                      case 'u':
-                        {                         /* lb=nu                                            */
-                          return PL_LB__NU;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'o':
-                    if (tokstr[4] == 'p')
-                    {                             /* lb=op                                            */
-                      return PL_LB__OP;
-                    }
-
-                    return 0;
-
-                  case 'p':
-                    switch (tokstr[4])
-                    {
-                      case 'o':
-                        {                         /* lb=po                                            */
-                          return PL_LB__PO;
-                        }
-
-                      case 'r':
-                        {                         /* lb=pr                                            */
-                          return PL_LB__PR;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'q':
-                    if (tokstr[4] == 'u')
-                    {                             /* lb=qu                                            */
-                      return PL_LB__QU;
-                    }
-
-                    return 0;
-
-                  case 'r':
-                    if (tokstr[4] == 'i')
-                    {                             /* lb=ri                                            */
-                      return PL_LB__RI;
-                    }
-
-                    return 0;
-
-                  case 's':
-                    switch (tokstr[4])
-                    {
-                      case 'a':
-                        {                         /* lb=sa                                            */
-                          return PL_LB__SA;
-                        }
-
-                      case 'g':
-                        {                         /* lb=sg                                            */
-                          return PL_LB__SG;
-                        }
-
-                      case 'p':
-                        {                         /* lb=sp                                            */
-                          return PL_LB__SP;
-                        }
-
-                      case 'y':
-                        {                         /* lb=sy                                            */
-                          return PL_LB__SY;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'w':
-                    if (tokstr[4] == 'j')
-                    {                             /* lb=wj                                            */
-                      return PL_LB__WJ;
-                    }
-
-                    return 0;
-
-                  case 'x':
-                    if (tokstr[4] == 'x')
-                    {                             /* lb=xx                                            */
-                      return PL_LB__XX;
-                    }
-
-                    return 0;
-
-                  case 'z':
-                    if (tokstr[4] == 'w')
-                    {                             /* lb=zw                                            */
-                      return PL_LB__ZW;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              case 's':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    if (tokstr[4] == 't')
-                    {                             /* sb=at                                            */
-                      return PL_SB__AT;
-                    }
-
-                    return 0;
-
-                  case 'c':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* sb=cl                                            */
-                          return PL_SB__CL;
-                        }
-
-                      case 'r':
-                        {                         /* sb=cr                                            */
-                          return PL_SB__CR;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'e':
-                    if (tokstr[4] == 'x')
-                    {                             /* sb=ex                                            */
-                      return PL_SB__EX;
-                    }
-
-                    return 0;
-
-                  case 'f':
-                    if (tokstr[4] == 'o')
-                    {                             /* sb=fo                                            */
-                      return PL_SB__FO;
-                    }
-
-                    return 0;
-
-                  case 'l':
-                    switch (tokstr[4])
-                    {
-                      case 'e':
-                        {                         /* sb=le                                            */
-                          return PL_SB__LE;
-                        }
-
-                      case 'f':
-                        {                         /* sb=lf                                            */
-                          return PL_SB__LF;
-                        }
-
-                      case 'o':
-                        {                         /* sb=lo                                            */
-                          return PL_SB__LO;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'n':
-                    if (tokstr[4] == 'u')
-                    {                             /* sb=nu                                            */
-                      return PL_SB__NU;
-                    }
-
-                    return 0;
-
-                  case 's':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* sb=sc                                            */
-                          return PL_SB__SC;
-                        }
-
-                      case 'e':
-                        {                         /* sb=se                                            */
-                          return PL_SB__SE;
-                        }
-
-                      case 'p':
-                        {                         /* sb=sp                                            */
-                          return PL_SB__SP;
-                        }
-
-                      case 't':
-                        {                         /* sb=st                                            */
-                          return PL_SB__ST;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'u':
-                    if (tokstr[4] == 'p')
-                    {                             /* sb=up                                            */
-                      return PL_SB__UP;
-                    }
-
-                    return 0;
-
-                  case 'x':
-                    if (tokstr[4] == 'x')
-                    {                             /* sb=xx                                            */
-                      return PL_SB__XX;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              case 'w':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    if (tokstr[4] == 'r')
-                    {                             /* wb=cr                                            */
-                      return PL_WB__CR;
-                    }
-
-                    return 0;
-
-                  case 'd':
-                    if (tokstr[4] == 'q')
-                    {                             /* wb=dq                                            */
-                      return PL_WB__DQ;
-                    }
-
-                    return 0;
-
-                  case 'e':
-                    switch (tokstr[4])
-                    {
-                      case 'b':
-                        {                         /* wb=eb                                            */
-                          return PL_WB__EB;
-                        }
-
-                      case 'm':
-                        {                         /* wb=em                                            */
-                          return PL_WB__EM;
-                        }
-
-                      case 'x':
-                        {                         /* wb=ex                                            */
-                          return PL_WB__EX;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'f':
-                    if (tokstr[4] == 'o')
-                    {                             /* wb=fo                                            */
-                      return PL_WB__FO;
-                    }
-
-                    return 0;
-
-                  case 'h':
-                    if (tokstr[4] == 'l')
-                    {                             /* wb=hl                                            */
-                      return PL_WB__HL;
-                    }
-
-                    return 0;
-
-                  case 'k':
-                    if (tokstr[4] == 'a')
-                    {                             /* wb=ka                                            */
-                      return PL_WB__KA;
-                    }
-
-                    return 0;
-
-                  case 'l':
-                    switch (tokstr[4])
-                    {
-                      case 'e':
-                        {                         /* wb=le                                            */
-                          return PL_WB__LE;
-                        }
-
-                      case 'f':
-                        {                         /* wb=lf                                            */
-                          return PL_WB__LF;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'm':
-                    switch (tokstr[4])
-                    {
-                      case 'b':
-                        {                         /* wb=mb                                            */
-                          return PL_WB__MB;
-                        }
-
-                      case 'l':
-                        {                         /* wb=ml                                            */
-                          return PL_WB__ML;
-                        }
-
-                      case 'n':
-                        {                         /* wb=mn                                            */
-                          return PL_WB__MN;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'n':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* wb=nl                                            */
-                          return PL_WB__NL;
-                        }
-
-                      case 'u':
-                        {                         /* wb=nu                                            */
-                          return PL_WB__NU;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'r':
-                    if (tokstr[4] == 'i')
-                    {                             /* wb=ri                                            */
-                      return PL_WB__RI;
-                    }
-
-                    return 0;
-
-                  case 's':
-                    if (tokstr[4] == 'q')
-                    {                             /* wb=sq                                            */
-                      return PL_WB__SQ;
-                    }
-
-                    return 0;
-
-                  case 'x':
-                    if (tokstr[4] == 'x')
-                    {                             /* wb=xx                                            */
-                      return PL_WB__XX;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'c':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'b':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* bc=al                                            */
-                          return PL_BC__AL;
-                        }
-
-                      case 'n':
-                        {                         /* bc=an                                            */
-                          return PL_BC__AN;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'b':
-                    if (tokstr[4] == 'n')
-                    {                             /* bc=bn                                            */
-                      return PL_BC__BN;
-                    }
-
-                    return 0;
-
-                  case 'c':
-                    if (tokstr[4] == 's')
-                    {                             /* bc=cs                                            */
-                      return PL_BC__CS;
-                    }
-
-                    return 0;
-
-                  case 'e':
-                    switch (tokstr[4])
-                    {
-                      case 'n':
-                        {                         /* bc=en                                            */
-                          return PL_BC__EN;
-                        }
-
-                      case 's':
-                        {                         /* bc=es                                            */
-                          return PL_BC__ES;
-                        }
-
-                      case 't':
-                        {                         /* bc=et                                            */
-                          return PL_BC__ET;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'o':
-                    if (tokstr[4] == 'n')
-                    {                             /* bc=on                                            */
-                      return PL_BC__ON;
-                    }
-
-                    return 0;
-
-                  case 'w':
-                    if (tokstr[4] == 's')
-                    {                             /* bc=ws                                            */
-                      return PL_BC__WS;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              case 'g':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* gc=cc                                            */
-                          return PL_GC__CC;
-                        }
-
-                      case 'f':
-                        {                         /* gc=cf                                            */
-                          return PL_GC__CF;
-                        }
-
-                      case 'n':
-                        {                         /* gc=cn                                            */
-                          return PL_GC__CN;
-                        }
-
-                      case 'o':
-                        {                         /* gc=co                                            */
-                          return PL_GC__CO;
-                        }
-
-                      case 's':
-                        {                         /* gc=cs                                            */
-                          return PL_GC__CS;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'l':
-                    switch (tokstr[4])
-                    {
-                      case '&':
-                        {                         /* gc=l&                                            */
-                          return PL_GC__L_AMP_;
-                        }
-
-                      case '_':
-                        {                         /* gc=l_                                            */
-                          return PL_GC__L_;
-                        }
-
-                      case 'c':
-                        {                         /* gc=lc                                            */
-                          return PL_GC__LC;
-                        }
-
-                      case 'l':
-                        {                         /* gc=ll                                            */
-                          return PL_GC__LL;
-                        }
-
-                      case 'm':
-                        {                         /* gc=lm                                            */
-                          return PL_GC__LM;
-                        }
-
-                      case 'o':
-                        {                         /* gc=lo                                            */
-                          return PL_GC__LO;
-                        }
-
-                      case 't':
-                        {                         /* gc=lt                                            */
-                          return PL_GC__LT;
-                        }
-
-                      case 'u':
-                        {                         /* gc=lu                                            */
-                          return PL_GC__LU;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'm':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* gc=mc                                            */
-                          return PL_GC__MC;
-                        }
-
-                      case 'e':
-                        {                         /* gc=me                                            */
-                          return PL_GC__ME;
-                        }
-
-                      case 'n':
-                        {                         /* gc=mn                                            */
-                          return PL_GC__MN;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'n':
-                    switch (tokstr[4])
-                    {
-                      case 'd':
-                        {                         /* gc=nd                                            */
-                          return PL_GC__ND;
-                        }
-
-                      case 'l':
-                        {                         /* gc=nl                                            */
-                          return PL_GC__NL;
-                        }
-
-                      case 'o':
-                        {                         /* gc=no                                            */
-                          return PL_GC__NO;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'p':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* gc=pc                                            */
-                          return PL_GC__PC;
-                        }
-
-                      case 'd':
-                        {                         /* gc=pd                                            */
-                          return PL_GC__PD;
-                        }
-
-                      case 'e':
-                        {                         /* gc=pe                                            */
-                          return PL_GC__PE;
-                        }
-
-                      case 'f':
-                        {                         /* gc=pf                                            */
-                          return PL_GC__PF;
-                        }
-
-                      case 'i':
-                        {                         /* gc=pi                                            */
-                          return PL_GC__PI;
-                        }
-
-                      case 'o':
-                        {                         /* gc=po                                            */
-                          return PL_GC__PO;
-                        }
-
-                      case 's':
-                        {                         /* gc=ps                                            */
-                          return PL_GC__PS;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 's':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* gc=sc                                            */
-                          return PL_GC__SC;
-                        }
-
-                      case 'k':
-                        {                         /* gc=sk                                            */
-                          return PL_GC__SK;
-                        }
-
-                      case 'm':
-                        {                         /* gc=sm                                            */
-                          return PL_GC__SM;
-                        }
-
-                      case 'o':
-                        {                         /* gc=so                                            */
-                          return PL_GC__SO;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'z':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* gc=zl                                            */
-                          return PL_GC__ZL;
-                        }
-
-                      case 'p':
-                        {                         /* gc=zp                                            */
-                          return PL_GC__ZP;
-                        }
-
-                      case 's':
-                        {                         /* gc=zs                                            */
-                          return PL_GC__ZS;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 's':
-                if (tokstr[3] == 'y' &&
-                    tokstr[4] == 'i')
-                {                                 /* sc=yi                                            */
-                  return PL_SC__YI;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'b':
-            switch (tokstr[0])
-            {
-              case 'g':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* gcb=l                                            */
-                          return PL_GCB__L;
-                        }
-
-                      case 't':
-                        {                         /* gcb=t                                            */
-                          return PL_GCB__T;
-                        }
-
-                      case 'v':
-                        {                         /* gcb=v                                            */
-                          return PL_GCB__V;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'c':
-            switch (tokstr[0])
-            {
-              case 'c':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case '0':
-                        {                         /* ccc=0                                            */
-                          return PL_CCC__0;
-                        }
-
-                      case '1':
-                        {                         /* ccc=1                                            */
-                          return PL_CCC__1;
-                        }
-
-                      case '7':
-                        {                         /* ccc=7                                            */
-                          return PL_CCC__7;
-                        }
-
-                      case '8':
-                        {                         /* ccc=8                                            */
-                          return PL_CCC__8;
-                        }
-
-                      case '9':
-                        {                         /* ccc=9                                            */
-                          return PL_CCC__9;
-                        }
-
-                      case 'a':
-                        {                         /* ccc=a                                            */
-                          return PL_CCC__A;
-                        }
-
-                      case 'b':
-                        {                         /* ccc=b                                            */
-                          return PL_CCC__B;
-                        }
-
-                      case 'l':
-                        {                         /* ccc=l                                            */
-                          return PL_CCC__L;
-                        }
-
-                      case 'r':
-                        {                         /* ccc=r                                            */
-                          return PL_CCC__R;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'h':
-            if (tokstr[0] == 'n' &&
-                tokstr[3] == 'a' &&
-                tokstr[4] == 'r')
-            {                                     /* nchar                                            */
-              return PL_NCHAR;
-            }
-
-            return 0;
-
-          case 'm':
-            switch (tokstr[0])
-            {
-              case 'p':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* pcm=f                                            */
-                          return PL_PCM__F;
-                        }
-
-                      case 'n':
-                        {                         /* pcm=n                                            */
-                          return PL_PCM__N;
-                        }
-
-                      case 't':
-                        {                         /* pcm=t                                            */
-                          return PL_PCM__T;
-                        }
-
-                      case 'y':
-                        {                         /* pcm=y                                            */
-                          return PL_PCM__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'd':
-        switch (tokstr[2])
-        {
-          case '=':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'n' &&
-                tokstr[4] == 'o')
-            {                                     /* sd=no                                            */
-              return PL_SD__NO;
-            }
-
-            return 0;
-
-          case 'c':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* idc=f                                            */
-                          return PL_IDC__F;
-                        }
-
-                      case 'n':
-                        {                         /* idc=n                                            */
-                          return PL_IDC__N;
-                        }
-
-                      case 't':
-                        {                         /* idc=t                                            */
-                          return PL_IDC__T;
-                        }
-
-                      case 'y':
-                        {                         /* idc=y                                            */
-                          return PL_IDC__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'l':
-            if (tokstr[0] == 'a' &&
-                tokstr[3] == 'a' &&
-                tokstr[4] == 'm')
-            {                                     /* adlam                                            */
-              return PL_ADLAM;
-            }
-
-            return 0;
-
-          case 's':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* ids=f                                            */
-                          return PL_IDS__F;
-                        }
-
-                      case 'n':
-                        {                         /* ids=n                                            */
-                          return PL_IDS__N;
-                        }
-
-                      case 't':
-                        {                         /* ids=t                                            */
-                          return PL_IDS__T;
-                        }
-
-                      case 'y':
-                        {                         /* ids=y                                            */
-                          return PL_IDS__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'e':
-        switch (tokstr[2])
-        {
-          case '=':
-            if (tokstr[0] == 'c' &&
-                tokstr[3] == 'n' &&
-                tokstr[4] == 'o')
-            {                                     /* ce=no                                            */
-              return PL_CE__NO;
-            }
-
-            return 0;
-
-          case 'p':
-            switch (tokstr[0])
-            {
-              case 'd':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* dep=f                                            */
-                          return PL_DEP__F;
-                        }
-
-                      case 'n':
-                        {                         /* dep=n                                            */
-                          return PL_DEP__N;
-                        }
-
-                      case 't':
-                        {                         /* dep=t                                            */
-                          return PL_DEP__T;
-                        }
-
-                      case 'y':
-                        {                         /* dep=y                                            */
-                          return PL_DEP__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'x':
-            switch (tokstr[0])
-            {
-              case 'h':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* hex=f                                            */
-                          return PL_HEX__F;
-                        }
-
-                      case 'n':
-                        {                         /* hex=n                                            */
-                          return PL_HEX__N;
-                        }
-
-                      case 't':
-                        {                         /* hex=t                                            */
-                          return PL_HEX__T;
-                        }
-
-                      case 'y':
-                        {                         /* hex=y                                            */
-                          return PL_HEX__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'g':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'j':
-                switch (tokstr[3])
-                {
-                  case 'f':
-                    if (tokstr[4] == 'e')
-                    {                             /* jg=fe                                            */
-                      return PL_JG__FE;
-                    }
-
-                    return 0;
-
-                  case 'h':
-                    if (tokstr[4] == 'e')
-                    {                             /* jg=he                                            */
-                      return PL_JG__HE;
-                    }
-
-                    return 0;
-
-                  case 'p':
-                    if (tokstr[4] == 'e')
-                    {                             /* jg=pe                                            */
-                      return PL_JG__PE;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            switch (tokstr[0])
-            {
-              case 'a':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case '2':
-                        {                         /* age=2                                            */
-                          return PL_AGE__2;
-                        }
-
-                      case '3':
-                        {                         /* age=3                                            */
-                          return PL_AGE__3;
-                        }
-
-                      case '4':
-                        {                         /* age=4                                            */
-                          return PL_AGE__4;
-                        }
-
-                      case '5':
-                        {                         /* age=5                                            */
-                          return PL_AGE__5;
-                        }
-
-                      case '6':
-                        {                         /* age=6                                            */
-                          return PL_AGE__6;
-                        }
-
-                      case '7':
-                        {                         /* age=7                                            */
-                          return PL_AGE__7;
-                        }
-
-                      case '8':
-                        {                         /* age=8                                            */
-                          return PL_AGE__8;
-                        }
-
-                      case '9':
-                        {                         /* age=9                                            */
-                          return PL_AGE__9;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'h':
-            if (tokstr[0] == 'o' &&
-                tokstr[3] == 'a' &&
-                tokstr[4] == 'm')
-            {                                     /* ogham                                            */
-              return PL_OGHAM;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'h':
-        if (tokstr[0] == 'k' &&
-            tokstr[2] == 'm' &&
-            tokstr[3] == 'e' &&
-            tokstr[4] == 'r')
-        {                                         /* khmer                                            */
-          return PL_KHMER;
-        }
-
-        return 0;
-
-      case 'i':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'c':
-                if (tokstr[3] == 'n' &&
-                    tokstr[4] == 'o')
-                {                                 /* ci=no                                            */
-                  return PL_CI__NO;
-                }
-
-                return 0;
-
-              case 'd':
-                if (tokstr[3] == 'n' &&
-                    tokstr[4] == 'o')
-                {                                 /* di=no                                            */
-                  return PL_DI__NO;
-                }
-
-                return 0;
-
-              case 'r':
-                if (tokstr[3] == 'n' &&
-                    tokstr[4] == 'o')
-                {                                 /* ri=no                                            */
-                  return PL_RI__NO;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'a':
-            switch (tokstr[0])
-            {
-              case 'd':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* dia=f                                            */
-                          return PL_DIA__F;
-                        }
-
-                      case 'n':
-                        {                         /* dia=n                                            */
-                          return PL_DIA__N;
-                        }
-
-                      case 't':
-                        {                         /* dia=t                                            */
-                          return PL_DIA__T;
-                        }
-
-                      case 'y':
-                        {                         /* dia=y                                            */
-                          return PL_DIA__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'd':
-            switch (tokstr[0])
-            {
-              case 'b':
-                switch (tokstr[3])
-                {
-                  case 'i':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* bidic                                            */
-                          return PL_BIDIC;
-                        }
-
-                      case 'm':
-                        {                         /* bidim                                            */
-                          return PL_BIDIM;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              case 'u':
-                if (tokstr[3] == 'e' &&
-                    tokstr[4] == 'o')
-                {                                 /* uideo                                            */
-                  return PL_UIDEO;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'g':
-            if (tokstr[0] == 'd' &&
-                tokstr[3] == 'i' &&
-                tokstr[4] == 't')
-            {                                     /* digit                                            */
-              return PL_DIGIT;
-            }
-
-            return 0;
-
-          case 'm':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'b' &&
-                tokstr[4] == 'u')
-            {                                     /* limbu                                            */
-              return PL_LIMBU;
-            }
-
-            return 0;
-
-          case 't':
-            if (tokstr[0] == 't' &&
-                tokstr[3] == 'l' &&
-                tokstr[4] == 'e')
-            {                                     /* title                                            */
-              return PL_TITLE;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'l':
-        switch (tokstr[2])
-        {
-          case 'a':
-            if (tokstr[0] == 'b' &&
-                tokstr[3] == 'n' &&
-                tokstr[4] == 'k')
-            {                                     /* blank                                            */
-              return PL_BLANK;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[0] == 'a' &&
-                tokstr[3] == 'u' &&
-                tokstr[4] == 'm')
-            {                                     /* alnum                                            */
-              return PL_ALNUM;
-            }
-
-            return 0;
-
-          case 'p':
-            if (tokstr[0] == 'a' &&
-                tokstr[3] == 'h' &&
-                tokstr[4] == 'a')
-            {                                     /* alpha                                            */
-              return PL_ALPHA;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'm':
-        if (tokstr[0] == 'q' &&
-            tokstr[2] == 'a' &&
-            tokstr[3] == 'r' &&
-            tokstr[4] == 'k')
-        {                                         /* qmark                                            */
-          return PL_QMARK;
-        }
-
-        return 0;
-
-      case 'n':
-        switch (tokstr[2])
-        {
-          case '=':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == '1' &&
-                tokstr[4] == '0')
-            {                                     /* in=10                                            */
-              return PL_IN__10;
-            }
-
-            return 0;
-
-          case 'c':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'j' &&
-                tokstr[4] == 'k')
-            {                                     /* incjk                                            */
-              return PL_INCJK;
-            }
-
-            return 0;
-
-          case 'i':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'd' &&
-                tokstr[4] == 'c')
-            {                                     /* inidc                                            */
-              return PL_INIDC;
-            }
-
-            return 0;
-
-          case 'l':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'a' &&
-                tokstr[4] == 'o')
-            {                                     /* inlao                                            */
-              return PL_INLAO;
-            }
-
-            return 0;
-
-          case 'm':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'r' &&
-                tokstr[4] == 'o')
-            {                                     /* inmro                                            */
-              return PL_INMRO;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'k' &&
-                tokstr[4] == 'o')
-            {                                     /* innko                                            */
-              return PL_INNKO;
-            }
-
-            return 0;
-
-          case 'o':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'c' &&
-                tokstr[4] == 'r')
-            {                                     /* inocr                                            */
-              return PL_INOCR;
-            }
-
-            return 0;
-
-          case 'p':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'u' &&
-                tokstr[4] == 'a')
-            {                                     /* inpua                                            */
-              return PL_INPUA;
-            }
-
-            return 0;
-
-          case 't':
-            if (tokstr[0] == 'c' &&
-                tokstr[3] == 'r' &&
-                tokstr[4] == 'l')
-            {                                     /* cntrl                                            */
-              return PL_CNTRL;
-            }
-
-            return 0;
-
-          case 'v':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'a' &&
-                tokstr[4] == 'i')
-            {                                     /* invai                                            */
-              return PL_INVAI;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'o':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'v':
-                switch (tokstr[3])
-                {
-                  case 't':
-                    switch (tokstr[4])
-                    {
-                      case 'r':
-                        {                         /* vo=tr                                            */
-                          return PL_VO__TR;
-                        }
-
-                      case 'u':
-                        {                         /* vo=tu                                            */
-                          return PL_VO__TU;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            switch (tokstr[0])
-            {
-              case 'l':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'f':
-                        {                         /* loe=f                                            */
-                          return PL_LOE__F;
-                        }
-
-                      case 'n':
-                        {                         /* loe=n                                            */
-                          return PL_LOE__N;
-                        }
-
-                      case 't':
-                        {                         /* loe=t                                            */
-                          return PL_LOE__T;
-                        }
-
-                      case 'y':
-                        {                         /* loe=y                                            */
-                          return PL_LOE__Y;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'i':
-            if (tokstr[0] == 'j' &&
-                tokstr[3] == 'n' &&
-                tokstr[4] == 'c')
-            {                                     /* joinc                                            */
-              return PL_JOINC;
-            }
-
-            return 0;
-
-          case 'w':
-            if (tokstr[0] == 'l' &&
-                tokstr[3] == 'e' &&
-                tokstr[4] == 'r')
-            {                                     /* lower                                            */
-              return PL_LOWER;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'p':
-        switch (tokstr[2])
-        {
-          case 'a':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'c' &&
-                tokstr[4] == 'e')
-            {                                     /* space                                            */
-              return PL_SPACE;
-            }
-
-            return 0;
-
-          case 'p':
-            if (tokstr[0] == 'u' &&
-                tokstr[3] == 'e' &&
-                tokstr[4] == 'r')
-            {                                     /* upper                                            */
-              return PL_UPPER;
-            }
-
-            return 0;
-
-          case 't':
-            switch (tokstr[0])
-            {
-              case 'b':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* bpt=c                                            */
-                          return PL_BPT__C;
-                        }
-
-                      case 'n':
-                        {                         /* bpt=n                                            */
-                          return PL_BPT__N;
-                        }
-
-                      case 'o':
-                        {                         /* bpt=o                                            */
-                          return PL_BPT__O;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'r':
-        switch (tokstr[2])
-        {
-          case 'a':
-            if (tokstr[0] == 'g' &&
-                tokstr[3] == 'p' &&
-                tokstr[4] == 'h')
-            {                                     /* graph                                            */
-              return PL_GRAPH;
-            }
-
-            return 0;
-
-          case 'e':
-            switch (tokstr[0])
-            {
-              case 'g':
-                switch (tokstr[3])
-                {
-                  case 'e':
-                    if (tokstr[4] == 'k')
-                    {                             /* greek                                            */
-                      return PL_GREEK;
-                    }
-
-                    return 0;
-
-                  case 'x':
-                    if (tokstr[4] == 't')
-                    {                             /* grext                                            */
-                      return PL_GREXT;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'i':
-            switch (tokstr[0])
-            {
-              case 'o':
-                if (tokstr[3] == 'y' &&
-                    tokstr[4] == 'a')
-                {                                 /* oriya                                            */
-                  return PL_ORIYA;
-                }
-
-                return 0;
-
-              case 'p':
-                if (tokstr[3] == 'n' &&
-                    tokstr[4] == 't')
-                {                                 /* print                                            */
-                  return PL_PRINT;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 's':
-        switch (tokstr[2])
-        {
-          case '=':
-            if (tokstr[0] == 'v' &&
-                tokstr[3] == 'n' &&
-                tokstr[4] == 'o')
-            {                                     /* vs=no                                            */
-              return PL_VS__NO;
-            }
-
-            return 0;
-
-          case 'a':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'l':
-                    if (tokstr[4] == 'l')
-                    {                             /* isall                                            */
-                      return PL_ISALL;
-                    }
-
-                    return 0;
-
-                  case 'n':
-                    if (tokstr[4] == 'y')
-                    {                             /* isany                                            */
-                      return PL_ISANY;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              case 'o':
-                if (tokstr[3] == 'g' &&
-                    tokstr[4] == 'e')
-                {                                 /* osage                                            */
-                  return PL_OSAGE;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 'c':
-            switch (tokstr[0])
-            {
-              case 'a':
-                if (tokstr[3] == 'i' &&
-                    tokstr[4] == 'i')
-                {                                 /* ascii                                            */
-                  return PL_ASCII;
-                }
-
-                return 0;
-
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'j':
-                    if (tokstr[4] == 'k')
-                    {                             /* iscjk                                            */
-                      return PL_ISCJK;
-                    }
-
-                    return 0;
-
-                  case 'w':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* iscwl                                            */
-                          return PL_ISCWL;
-                        }
-
-                      case 't':
-                        {                         /* iscwt                                            */
-                          return PL_ISCWT;
-                        }
-
-                      case 'u':
-                        {                         /* iscwu                                            */
-                          return PL_ISCWU;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'd':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'e':
-                    if (tokstr[4] == 'p')
-                    {                             /* isdep                                            */
-                      return PL_ISDEP;
-                    }
-
-                    return 0;
-
-                  case 'i':
-                    if (tokstr[4] == 'a')
-                    {                             /* isdia                                            */
-                      return PL_ISDIA;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'x' &&
-                tokstr[4] == 't')
-            {                                     /* isext                                            */
-              return PL_ISEXT;
-            }
-
-            return 0;
-
-          case 'h':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    if (tokstr[4] == 'n')
-                    {                             /* ishan                                            */
-                      return PL_ISHAN;
-                    }
-
-                    return 0;
-
-                  case 'e':
-                    if (tokstr[4] == 'x')
-                    {                             /* ishex                                            */
-                      return PL_ISHEX;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'i':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'd':
-                    switch (tokstr[4])
-                    {
-                      case 'c':
-                        {                         /* isidc                                            */
-                          return PL_ISIDC;
-                        }
-
-                      case 's':
-                        {                         /* isids                                            */
-                          return PL_ISIDS;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'l':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'a':
-                    if (tokstr[4] == 'o')
-                    {                             /* islao                                            */
-                      return PL_ISLAO;
-                    }
-
-                    return 0;
-
-                  case 'o':
-                    if (tokstr[4] == 'e')
-                    {                             /* isloe                                            */
-                      return PL_ISLOE;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'm':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'r' &&
-                tokstr[4] == 'o')
-            {                                     /* ismro                                            */
-              return PL_ISMRO;
-            }
-
-            return 0;
-
-          case 'n':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'k' &&
-                tokstr[4] == 'o')
-            {                                     /* isnko                                            */
-              return PL_ISNKO;
-            }
-
-            return 0;
-
-          case 'o':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'c' &&
-                tokstr[4] == 'r')
-            {                                     /* isocr                                            */
-              return PL_ISOCR;
-            }
-
-            return 0;
-
-          case 'p':
-            switch (tokstr[0])
-            {
-              case 'i':
-                switch (tokstr[3])
-                {
-                  case 'c':
-                    if (tokstr[4] == 'm')
-                    {                             /* ispcm                                            */
-                      return PL_ISPCM;
-                    }
-
-                    return 0;
-
-                  case 'u':
-                    if (tokstr[4] == 'a')
-                    {                             /* ispua                                            */
-                      return PL_ISPUA;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            if (tokstr[0] == 'v' &&
-                tokstr[3] == 'u' &&
-                tokstr[4] == 'p')
-            {                                     /* vssup                                            */
-              return PL_VSSUP;
-            }
-
-            return 0;
-
-          case 't':
-            switch (tokstr[0])
-            {
-              case 'h':
-                switch (tokstr[3])
-                {
-                  case '=':
-                    switch (tokstr[4])
-                    {
-                      case 'l':
-                        {                         /* hst=l                                            */
-                          return PL_HST__L;
-                        }
-
-                      case 't':
-                        {                         /* hst=t                                            */
-                          return PL_HST__T;
-                        }
-
-                      case 'v':
-                        {                         /* hst=v                                            */
-                          return PL_HST__V;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'v':
-            if (tokstr[0] == 'i' &&
-                tokstr[3] == 'a' &&
-                tokstr[4] == 'i')
-            {                                     /* isvai                                            */
-              return PL_ISVAI;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 't':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'd':
-                if (tokstr[3] == 'n' &&
-                    tokstr[4] == 'b')
-                {                                 /* dt=nb                                            */
-                  return PL_DT__NB;
-                }
-
-                return 0;
-
-              case 'n':
-                switch (tokstr[3])
-                {
-                  case 'd':
-                    switch (tokstr[4])
-                    {
-                      case 'e':
-                        {                         /* nt=de                                            */
-                          return PL_NT__DE;
-                        }
-
-                      case 'i':
-                        {                         /* nt=di                                            */
-                          return PL_NT__DI;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case 'n':
-                    if (tokstr[4] == 'u')
-                    {                             /* nt=nu                                            */
-                      return PL_NT__NU;
-                    }
-
-                    return 0;
-
-                  default:
-                    return 0;
-                }
-
-              default:
-                return 0;
-            }
-
-          case 'e':
-            if (tokstr[0] == 's' &&
-                tokstr[3] == 'r' &&
-                tokstr[4] == 'm')
-            {                                     /* sterm                                            */
-              return PL_STERM;
-            }
-
-            return 0;
-
-          case 'h':
-            if (tokstr[0] == 'o' &&
-                tokstr[3] == 'e' &&
-                tokstr[4] == 'r')
-            {                                     /* other                                            */
-              return PL_OTHER;
-            }
-
-            return 0;
-
-          default:
-            return 0;
-        }
-
-      case 'u':
-        switch (tokstr[2])
-        {
-          case 'h':
-            if (tokstr[0] == 'b' &&
-                tokstr[3] == 'i' &&
-                tokstr[4] == 'd')
-            {                                     /* buhid                                            */
-              return PL_BUHID;
-            }
-
-            return 0;
-
-          case 'n':
-            switch (tokstr[0])
-            {
-              case 'p':
-                if (tokstr[3] == 'c' &&
-                    tokstr[4] == 't')
-                {                                 /* punct                                            */
-                  return PL_PUNCT;
-                }
-
-                return 0;
-
-              case 'r':
-                if (tokstr[3] == 'i' &&
-                    tokstr[4] == 'c')
-                {                                 /* runic                                            */
-                  return PL_RUNIC;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          case 's':
-            switch (tokstr[0])
-            {
-              case 'm':
-                if (tokstr[3] == 'i' &&
-                    tokstr[4] == 'c')
-                {                                 /* music                                            */
-                  return PL_MUSIC;
-                }
-
-                return 0;
-
-              case 'n':
-                if (tokstr[3] == 'h' &&
-                    tokstr[4] == 'u')
-                {                                 /* nushu                                            */
-                  return PL_NUSHU;
-                }
-
-                return 0;
-
-              default:
-                return 0;
-            }
-
-          default:
-            return 0;
-        }
-
-      case 'v':
-        switch (tokstr[2])
-        {
-          case '=':
-            switch (tokstr[0])
-            {
-              case 'n':
-                switch (tokstr[3])
-                {
-                  case '1':
-                    switch (tokstr[4])
-                    {
-                      case '0':
-                        {                         /* nv=10                                            */
-                          return PL_NV__10;
-                        }
-
-                      case '1':
-                        {                         /* nv=11                                            */
-                          return PL_NV__11;
-                        }
-
-                      case '2':
-                        {                         /* nv=12                                            */
-                          return PL_NV__12;
-                        }
-
-                      case '3':
-                        {                         /* nv=13                                            */
-                          return PL_NV__13;
-                        }
-
-                      case '4':
-                        {                         /* nv=14                                            */
-                          return PL_NV__14;
-                        }
-
-                      case '5':
-                        {                         /* nv=15                                            */
-                          return PL_NV__15;
-                        }
-
-                      case '6':
-                        {                         /* nv=16                                            */
-                          return PL_NV__16;
-                        }
-
-                      case '7':
-                        {                         /* nv=17                                            */
-                          return PL_NV__17;
-                        }
-
-                      case '8':
-                        {                         /* nv=18                                            */
-                          return PL_NV__18;
-                        }
-
-                      case '9':
-                        {                         /* nv=19                                            */
-                          return PL_NV__19;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case '2':
-                    switch (tokstr[4])
-                    {
-                      case '0':
-                        {                         /* nv=20                                            */
-                          return PL_NV__20;
-                        }
-
-                      case '1':
-                        {                         /* nv=21                                            */
-                          return PL_NV__21;
-                        }
-
-                      case '2':
-                        {                         /* nv=22                                            */
-                          return PL_NV__22;
-                        }
-
-                      case '3':
-                        {                         /* nv=23                                            */
-                          return PL_NV__23;
-                        }
-
-                      case '4':
-                        {                         /* nv=24                                            */
-                          return PL_NV__24;
-                        }
-
-                      case '5':
-                        {                         /* nv=25                                            */
-                          return PL_NV__25;
-                        }
-
-                      case '6':
-                        {                         /* nv=26                                            */
-                          return PL_NV__26;
-                        }
-
-                      case '7':
-                        {                         /* nv=27                                            */
-                          return PL_NV__27;
-                        }
-
-                      case '8':
-                        {                         /* nv=28                                            */
-                          return PL_NV__28;
-                        }
-
-                      case '9':
-                        {                         /* nv=29                                            */
-                          return PL_NV__29;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case '3':
-                    switch (tokstr[4])
-                    {
-                      case '0':
-                        {                         /* nv=30                                            */
-                          return PL_NV__30;
-                        }
-
-                      case '1':
-                        {                         /* nv=31                                            */
-                          return PL_NV__31;
-                        }
-
-                      case '2':
-                        {                         /* nv=32                                            */
-                          return PL_NV__32;
-                        }
-
-                      case '3':
-                        {                         /* nv=33                                            */
-                          return PL_NV__33;
-                        }
-
-                      case '4':
-                        {                         /* nv=34                                            */
-                          return PL_NV__34;
-                        }
-
-                      case '5':
-                        {                         /* nv=35                                            */
-                          return PL_NV__35;
-                        }
-
-                      case '6':
-                        {                         /* nv=36                                            */
-                          return PL_NV__36;
-                        }
-
-                      case '7':
-                        {                         /* nv=37                                            */
-                          return PL_NV__37;
-                        }
-
-                      case '8':
-                        {                         /* nv=38                                            */
-                          return PL_NV__38;
-                        }
-
-                      case '9':
-                        {                         /* nv=39                                            */
-                          return PL_NV__39;
-                        }
-
-                      default:
-                        return 0;
-                    }
-
-                  case '4':
-                    switch (tokstr[4])
-                    {
-                      case '0':
-                        {                         /* nv=40                                            */
-                          return PL_NV__40;
-                        }
-
-                      case '1':
-                        {                         /* nv=41                                            */
-                          return PL_NV__41;
-                        }
-
-                      case '2':
-                        {                         /* nv=42                                            */
-                          return PL_NV__42;
-                        }
-
-                      case '3':
-                        {                         /* nv=43                                            */
-                          return PL_NV__43;
-                        }
-
-                      case '4':
-                        {                         /* nv=44                                            */
-                          return PL_NV__44;
-                        }
-
-                      case '5':
-                        {                         /* nv=45                                            */
-                          return PL_NV__45;
-                        }
-
-                      case '6':
-                        {                         /* nv=46                                            */
-                          return PL_NV__46;
-                        }
-
-                      case '7':