about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--locale/programs/ld-collate.c265
-rw-r--r--locale/programs/locfile-kw.h604
-rw-r--r--localedata/ChangeLog7
-rw-r--r--localedata/de_DE.in6
-rw-r--r--localedata/locales/de_DE2
-rw-r--r--localedata/locales/iso14651_t1_common4
7 files changed, 591 insertions, 304 deletions
diff --git a/ChangeLog b/ChangeLog
index f80b2f1e0a..7ca024625d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-10-10  Ulrich Drepper  <drepper@redhat.com>
+
+	* locale/programs/locfile-token.h: Remove tok_elif, add tok_elifdef
+	and tok_elifndef.
+	* locale/programs/locfile-kw.gperf: Likewise.
+	* locale/programs/ld-collate.c: Implement primitive preprocessor.
+
 2007-10-10  Jakub Jelinek  <jakub@redhat.com>
 
 	* stdio-common/printf-parse.h: Include string.h and wchar.h.
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index d6c3de0147..6d8f3fb2f0 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -181,6 +181,14 @@ struct symbol_t
 #include "3level.h"
 
 
+/* Simple name list for the preprocessor.  */
+struct name_list
+{
+  struct name_list *next;
+  char str[0];
+};
+
+
 /* The real definition of the struct for the LC_COLLATE locale.  */
 struct locale_collate_t
 {
@@ -240,6 +248,15 @@ struct locale_collate_t
   /* The arrays with the collation sequence order.  */
   unsigned char mbseqorder[256];
   struct collseq_table wcseqorder;
+
+  /* State of the preprocessor.  */
+  enum
+    {
+      else_none = 0,
+      else_ignore,
+      else_seen
+    }
+    else_action;
 };
 
 
@@ -247,6 +264,9 @@ struct locale_collate_t
    LC_COLLATE category descriptions in all files.  */
 static uint32_t nrules;
 
+/* List of defined preprocessor symbols.  */
+static struct name_list *defined;
+
 
 /* We need UTF-8 encoding of numbers.  */
 static inline int
@@ -2622,6 +2642,43 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
 }
 
 
+static enum token_t
+skip_to (struct linereader *ldfile, struct locale_collate_t *collate,
+	 const struct charmap_t *charmap, int to_endif)
+{
+  while (1)
+    {
+      struct token *now = lr_token (ldfile, charmap, NULL, NULL, 0);
+      enum token_t nowtok = now->tok;
+
+      if (nowtok == tok_eof || nowtok == tok_end)
+	return nowtok;
+
+      if (nowtok == tok_ifdef || nowtok == tok_ifndef)
+	{
+	  lr_error (ldfile, _("%s: nested conditionals not supported"),
+		    "LC_COLLATE");
+	  nowtok = skip_to (ldfile, collate, charmap, tok_endif);
+	  if (nowtok == tok_eof || nowtok == tok_end)
+	    return nowtok;
+	}
+      else if ((!to_endif && (nowtok == tok_else || nowtok == tok_elifdef
+			      || nowtok == tok_elifndef))
+	       || nowtok == tok_endif)
+	{
+	  lr_ignore_rest (ldfile, 1);
+	  return nowtok;
+	}
+      else if (nowtok == tok_else)
+	{
+	  lr_error (ldfile, _("%s: more then one 'else'"), "LC_COLLATE");
+	}
+
+      lr_ignore_rest (ldfile, 0);
+    }
+}
+
+
 void
 collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      const struct charmap_t *charmap, const char *repertoire_name,
@@ -2659,6 +2716,38 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
     }
   while (nowtok == tok_eol);
 
+  while (nowtok == tok_define)
+    {
+      if (ignore_content)
+	{
+	  lr_ignore_rest (ldfile, 0);
+	  continue;
+	}
+
+      arg = lr_token (ldfile, charmap, result, NULL, verbose);
+      if (arg->tok != tok_ident)
+	SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
+      else
+	{
+	  /* Simply add the new symbol.  */
+	  struct name_list *newsym = xmalloc (sizeof (*newsym)
+					  + arg->val.str.lenmb + 1);
+	  memcpy (newsym->str, arg->val.str.startmb, arg->val.str.lenmb);
+	  newsym->str[arg->val.str.lenmb] = '\0';
+	  newsym->next = defined;
+	  defined = newsym;
+
+	  lr_ignore_rest (ldfile, 1);
+	}
+
+      do
+	{
+	  now = lr_token (ldfile, charmap, result, NULL, verbose);
+	  nowtok = now->tok;
+	}
+      while (nowtok == tok_eol);
+    }
+
   if (nowtok == tok_copy)
     {
       now = lr_token (ldfile, charmap, result, NULL, verbose);
@@ -3798,6 +3887,7 @@ error while adding equivalent collating symbol"));
 	  break;
 
 	case tok_end:
+	seen_end:
 	  /* Next we assume `LC_COLLATE'.  */
 	  if (!ignore_content)
 	    {
@@ -3838,6 +3928,180 @@ error while adding equivalent collating symbol"));
 	  lr_ignore_rest (ldfile, arg->tok == tok_lc_collate);
 	  return;
 
+	case tok_define:
+	  if (ignore_content)
+	    {
+	      lr_ignore_rest (ldfile, 0);
+	      break;
+	    }
+
+	  arg = lr_token (ldfile, charmap, result, NULL, verbose);
+	  if (arg->tok != tok_ident)
+	    goto err_label;
+
+	  /* Simply add the new symbol.  */
+	  struct name_list *newsym = xmalloc (sizeof (*newsym)
+					      + arg->val.str.lenmb + 1);
+	  memcpy (newsym->str, arg->val.str.startmb, arg->val.str.lenmb);
+	  newsym->str[arg->val.str.lenmb] = '\0';
+	  newsym->next = defined;
+	  defined = newsym;
+
+	  lr_ignore_rest (ldfile, 1);
+	  break;
+
+	case tok_undef:
+	  if (ignore_content)
+	    {
+	      lr_ignore_rest (ldfile, 0);
+	      break;
+	    }
+
+	  arg = lr_token (ldfile, charmap, result, NULL, verbose);
+	  if (arg->tok != tok_ident)
+	    goto err_label;
+
+	  /* Remove _all_ occurrences of the symbol from the list.  */
+	  struct name_list *prevdef = NULL;
+	  struct name_list *curdef = defined;
+	  while (curdef != NULL)
+	    if (strncmp (arg->val.str.startmb, curdef->str,
+			 arg->val.str.lenmb) == 0
+		&& curdef->str[arg->val.str.lenmb] == '\0')
+	      {
+		if (prevdef == NULL)
+		  defined = curdef->next;
+		else
+		  prevdef->next = curdef->next;
+
+		struct name_list *olddef = curdef;
+		curdef = curdef->next;
+
+		free (olddef);
+	      }
+	    else
+	      {
+		prevdef = curdef;
+		curdef = curdef->next;
+	      }
+
+	  lr_ignore_rest (ldfile, 1);
+	  break;
+
+	case tok_ifdef:
+	case tok_ifndef:
+	  if (ignore_content)
+	    {
+	      lr_ignore_rest (ldfile, 0);
+	      break;
+	    }
+
+	found_ifdef:
+	  arg = lr_token (ldfile, charmap, result, NULL, verbose);
+	  if (arg->tok != tok_ident)
+	    goto err_label;
+	  lr_ignore_rest (ldfile, 1);
+
+	  if (collate->else_action == else_none)
+	    {
+	      curdef = defined;
+	      while (curdef != NULL)
+		if (strncmp (arg->val.str.startmb, curdef->str,
+			     arg->val.str.lenmb) == 0
+		    && curdef->str[arg->val.str.lenmb] == '\0')
+		  break;
+
+	      if ((nowtok == tok_ifdef && curdef != NULL)
+		  || (nowtok == tok_ifndef && curdef == NULL))
+		{
+		  /* We have to use the if-branch.  */
+		  collate->else_action = else_ignore;
+		}
+	      else
+		{
+		  /* We have to use the else-branch, if there is one.  */
+		  nowtok = skip_to (ldfile, collate, charmap, 0);
+		  if (nowtok == tok_else)
+		    collate->else_action = else_seen;
+		  else if (nowtok == tok_elifdef)
+		    {
+		      nowtok = tok_ifdef;
+		      goto found_ifdef;
+		    }
+		  else if (nowtok == tok_elifndef)
+		    {
+		      nowtok = tok_ifndef;
+		      goto found_ifdef;
+		    }
+		  else if (nowtok == tok_eof)
+		    goto seen_eof;
+		  else if (nowtok == tok_end)
+		    goto seen_end;
+		}
+	    }
+	  else
+	    {
+	      /* XXX Should it really become necessary to support nested
+		 preprocessor handling we will push the state here.  */
+	      lr_error (ldfile, _("%s: nested conditionals not supported"),
+			"LC_COLLATE");
+	      nowtok = skip_to (ldfile, collate, charmap, 1);
+	      if (nowtok == tok_eof)
+		goto seen_eof;
+	      else if (nowtok == tok_end)
+		goto seen_end;
+	    }
+	  break;
+
+	case tok_elifdef:
+	case tok_elifndef:
+	case tok_else:
+	  if (ignore_content)
+	    {
+	      lr_ignore_rest (ldfile, 0);
+	      break;
+	    }
+
+	  lr_ignore_rest (ldfile, 1);
+
+	  if (collate->else_action == else_ignore)
+	    {
+	      /* Ignore everything until the endif.  */
+	      nowtok = skip_to (ldfile, collate, charmap, 1);
+	      if (nowtok == tok_eof)
+		goto seen_eof;
+	      else if (nowtok == tok_end)
+		goto seen_end;
+	    }
+	  else
+	    {
+	      assert (collate->else_action == else_none);
+	      lr_error (ldfile, _("\
+%s: '%s' without matching 'ifdef' or 'ifndef'"), "LC_COLLATE",
+			nowtok == tok_else ? "else"
+			: nowtok == tok_elifdef ? "elifdef" : "elifndef");
+	    }
+	  break;
+
+	case tok_endif:
+	  if (ignore_content)
+	    {
+	      lr_ignore_rest (ldfile, 0);
+	      break;
+	    }
+
+	  lr_ignore_rest (ldfile, 1);
+
+	  if (collate->else_action != else_ignore
+	      && collate->else_action != else_seen)
+	    lr_error (ldfile, _("\
+%s: 'endif' without matching 'ifdef' or 'ifndef'"), "LC_COLLATE");
+
+	  /* XXX If we support nested preprocessor directives we pop
+	     the state here.  */
+	  collate->else_action = else_none;
+	  break;
+
 	default:
 	err_label:
 	  SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
@@ -3848,6 +4112,7 @@ error while adding equivalent collating symbol"));
       nowtok = now->tok;
     }
 
+ seen_eof:
   /* When we come here we reached the end of the file.  */
   lr_error (ldfile, _("%s: premature end of file"), "LC_COLLATE");
 }
diff --git a/locale/programs/locfile-kw.h b/locale/programs/locfile-kw.h
index c883842b3c..c0f9ce7810 100644
--- a/locale/programs/locfile-kw.h
+++ b/locale/programs/locfile-kw.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.2 */
 /* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N locfile_hash locfile-kw.gperf  */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -30,7 +30,7 @@
 
 #line 1 "locfile-kw.gperf"
 
-/* Copyright (C) 1996,1997,1998,1999,2000,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000,2005,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
 
@@ -51,15 +51,15 @@
 #include <string.h>
 
 #include "locfile-token.h"
-#line 23 "locfile-kw.gperf"
+#line 24 "locfile-kw.gperf"
 struct keyword_t ;
 
-#define TOTAL_KEYWORDS 175
+#define TOTAL_KEYWORDS 176
 #define MIN_WORD_LENGTH 3
 #define MAX_WORD_LENGTH 22
 #define MIN_HASH_VALUE 3
-#define MAX_HASH_VALUE 610
-/* maximum key range = 608, duplicates = 0 */
+#define MAX_HASH_VALUE 630
+/* maximum key range = 628, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -73,32 +73,32 @@ hash (register const char *str, register unsigned int len)
 {
   static const unsigned short asso_values[] =
     {
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-        5,   0, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611,   5, 611,   0,   0,   0,
-        0,   0,  10,   0, 611, 611,   0, 611,   0,   5,
-      611, 611,   0,   0,   0,  10, 611, 611, 611,   0,
-      611, 611, 611, 611, 611,   0, 611, 145, 105,  25,
-       15,   0, 190, 110,  10,  35, 611,   0,  80,  65,
-        5, 130,  40,  50,   5,   0,  10,  35,  50,  20,
-        5,  10,   0, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
-      611, 611, 611, 611, 611, 611
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+        5,   0, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631,   5, 631,   0,   0,   0,
+        0,   0,  10,   0, 631, 631,   0, 631,   0,   5,
+      631, 631,   0,   0,   0,  10, 631, 631, 631,   0,
+      631, 631, 631, 631, 631,   0, 631, 145,  80,  25,
+       15,   0, 180, 105,  10,  35, 631,  50,  80, 160,
+        5, 130,  40,  45,   5,   0,  10,  35,  40,  35,
+        5,  10,   0, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+      631, 631, 631, 631, 631, 631
     };
   register int hval = len;
 
@@ -134,470 +134,472 @@ locfile_hash (register const char *str, register unsigned int len)
   static const struct keyword_t wordlist[] =
     {
       {""}, {""}, {""},
-#line 30 "locfile-kw.gperf"
+#line 31 "locfile-kw.gperf"
       {"END",                    tok_end,                    0},
       {""}, {""},
-#line 69 "locfile-kw.gperf"
+#line 70 "locfile-kw.gperf"
       {"IGNORE",                 tok_ignore,                 0},
-#line 127 "locfile-kw.gperf"
+#line 129 "locfile-kw.gperf"
       {"LC_TIME",                tok_lc_time,                0},
-#line 29 "locfile-kw.gperf"
+#line 30 "locfile-kw.gperf"
       {"LC_CTYPE",               tok_lc_ctype,               0},
       {""},
-#line 164 "locfile-kw.gperf"
+#line 166 "locfile-kw.gperf"
       {"LC_ADDRESS",             tok_lc_address,             0},
-#line 149 "locfile-kw.gperf"
+#line 151 "locfile-kw.gperf"
       {"LC_MESSAGES",            tok_lc_messages,            0},
-#line 157 "locfile-kw.gperf"
+#line 159 "locfile-kw.gperf"
       {"LC_NAME",                tok_lc_name,                0},
-#line 154 "locfile-kw.gperf"
+#line 156 "locfile-kw.gperf"
       {"LC_PAPER",               tok_lc_paper,               0},
-#line 182 "locfile-kw.gperf"
+#line 184 "locfile-kw.gperf"
       {"LC_MEASUREMENT",         tok_lc_measurement,         0},
-#line 55 "locfile-kw.gperf"
+#line 56 "locfile-kw.gperf"
       {"LC_COLLATE",             tok_lc_collate,             0},
       {""},
-#line 184 "locfile-kw.gperf"
+#line 186 "locfile-kw.gperf"
       {"LC_IDENTIFICATION",      tok_lc_identification,      0},
-#line 197 "locfile-kw.gperf"
+#line 199 "locfile-kw.gperf"
       {"revision",               tok_revision,               0},
-#line 68 "locfile-kw.gperf"
+#line 69 "locfile-kw.gperf"
       {"UNDEFINED",              tok_undefined,              0},
-#line 123 "locfile-kw.gperf"
+#line 125 "locfile-kw.gperf"
       {"LC_NUMERIC",             tok_lc_numeric,             0},
-#line 80 "locfile-kw.gperf"
+#line 82 "locfile-kw.gperf"
       {"LC_MONETARY",            tok_lc_monetary,            0},
-#line 177 "locfile-kw.gperf"
+#line 179 "locfile-kw.gperf"
       {"LC_TELEPHONE",           tok_lc_telephone,           0},
-      {""},
-#line 130 "locfile-kw.gperf"
-      {"week",                   tok_week,                   0},
-      {""},
-#line 74 "locfile-kw.gperf"
+      {""}, {""}, {""},
+#line 75 "locfile-kw.gperf"
       {"define",                 tok_define,                 0},
-#line 150 "locfile-kw.gperf"
+#line 152 "locfile-kw.gperf"
       {"yesexpr",                tok_yesexpr,                0},
-#line 139 "locfile-kw.gperf"
+#line 141 "locfile-kw.gperf"
       {"era_year",               tok_era_year,               0},
       {""},
-#line 53 "locfile-kw.gperf"
+#line 54 "locfile-kw.gperf"
       {"translit_ignore",        tok_translit_ignore,        0},
-#line 152 "locfile-kw.gperf"
+#line 154 "locfile-kw.gperf"
       {"yesstr",                 tok_yesstr,                 0},
       {""},
-#line 87 "locfile-kw.gperf"
+#line 89 "locfile-kw.gperf"
       {"negative_sign",          tok_negative_sign,          0},
       {""},
-#line 135 "locfile-kw.gperf"
+#line 137 "locfile-kw.gperf"
       {"t_fmt",                  tok_t_fmt,                  0},
-#line 155 "locfile-kw.gperf"
+#line 157 "locfile-kw.gperf"
       {"height",                 tok_height,                 0},
       {""}, {""},
-#line 51 "locfile-kw.gperf"
+#line 52 "locfile-kw.gperf"
       {"translit_start",         tok_translit_start,         0},
-#line 134 "locfile-kw.gperf"
+#line 136 "locfile-kw.gperf"
       {"d_fmt",                  tok_d_fmt,                  0},
       {""},
-#line 52 "locfile-kw.gperf"
+#line 53 "locfile-kw.gperf"
       {"translit_end",           tok_translit_end,           0},
-#line 92 "locfile-kw.gperf"
+#line 94 "locfile-kw.gperf"
       {"n_cs_precedes",          tok_n_cs_precedes,          0},
-#line 142 "locfile-kw.gperf"
+#line 144 "locfile-kw.gperf"
       {"era_t_fmt",              tok_era_t_fmt,              0},
-#line 38 "locfile-kw.gperf"
+#line 39 "locfile-kw.gperf"
       {"space",                  tok_space,                  0},
-#line 71 "locfile-kw.gperf"
-      {"reorder-end",            tok_reorder_end,            0},
 #line 72 "locfile-kw.gperf"
+      {"reorder-end",            tok_reorder_end,            0},
+#line 73 "locfile-kw.gperf"
       {"reorder-sections-after", tok_reorder_sections_after, 0},
       {""},
-#line 140 "locfile-kw.gperf"
+#line 142 "locfile-kw.gperf"
       {"era_d_fmt",              tok_era_d_fmt,              0},
-#line 185 "locfile-kw.gperf"
+#line 187 "locfile-kw.gperf"
       {"title",                  tok_title,                  0},
       {""}, {""},
-#line 147 "locfile-kw.gperf"
+#line 149 "locfile-kw.gperf"
       {"timezone",               tok_timezone,               0},
       {""},
-#line 73 "locfile-kw.gperf"
+#line 74 "locfile-kw.gperf"
       {"reorder-sections-end",   tok_reorder_sections_end,   0},
       {""}, {""}, {""},
-#line 93 "locfile-kw.gperf"
+#line 95 "locfile-kw.gperf"
       {"n_sep_by_space",         tok_n_sep_by_space,         0},
       {""}, {""},
-#line 98 "locfile-kw.gperf"
+#line 100 "locfile-kw.gperf"
       {"int_n_cs_precedes",      tok_int_n_cs_precedes,      0},
       {""}, {""}, {""},
-#line 25 "locfile-kw.gperf"
+#line 26 "locfile-kw.gperf"
       {"escape_char",            tok_escape_char,            0},
       {""},
-#line 27 "locfile-kw.gperf"
+#line 28 "locfile-kw.gperf"
       {"repertoiremap",          tok_repertoiremap,          0},
-#line 45 "locfile-kw.gperf"
+#line 46 "locfile-kw.gperf"
       {"charclass",              tok_charclass,              0},
-#line 42 "locfile-kw.gperf"
-      {"print",                  tok_print,                  0},
 #line 43 "locfile-kw.gperf"
+      {"print",                  tok_print,                  0},
+#line 44 "locfile-kw.gperf"
       {"xdigit",                 tok_xdigit,                 0},
-#line 108 "locfile-kw.gperf"
+#line 110 "locfile-kw.gperf"
       {"duo_n_cs_precedes",      tok_duo_n_cs_precedes,      0},
-#line 125 "locfile-kw.gperf"
+#line 127 "locfile-kw.gperf"
       {"thousands_sep",          tok_thousands_sep,          0},
-#line 193 "locfile-kw.gperf"
+#line 195 "locfile-kw.gperf"
       {"territory",              tok_territory,              0},
-#line 35 "locfile-kw.gperf"
+#line 36 "locfile-kw.gperf"
       {"digit",                  tok_digit,                  0},
       {""}, {""},
-#line 90 "locfile-kw.gperf"
+#line 92 "locfile-kw.gperf"
       {"p_cs_precedes",          tok_p_cs_precedes,          0},
-      {""},
-#line 156 "locfile-kw.gperf"
-      {"width",                  tok_width,                  0},
-#line 61 "locfile-kw.gperf"
+      {""}, {""},
+#line 62 "locfile-kw.gperf"
       {"script",                 tok_script,                 0},
-#line 28 "locfile-kw.gperf"
+#line 29 "locfile-kw.gperf"
       {"include",                tok_include,                0},
       {""},
-#line 77 "locfile-kw.gperf"
+#line 78 "locfile-kw.gperf"
       {"else",                   tok_else,                   0},
-#line 180 "locfile-kw.gperf"
+#line 182 "locfile-kw.gperf"
       {"int_select",             tok_int_select,             0},
-      {""}, {""}, {""}, {""},
-#line 32 "locfile-kw.gperf"
+      {""}, {""}, {""},
+#line 132 "locfile-kw.gperf"
+      {"week",                   tok_week,                   0},
+#line 33 "locfile-kw.gperf"
       {"upper",                  tok_upper,                  0},
       {""}, {""},
-#line 190 "locfile-kw.gperf"
+#line 192 "locfile-kw.gperf"
       {"tel",                    tok_tel,                    0},
-#line 91 "locfile-kw.gperf"
+#line 93 "locfile-kw.gperf"
       {"p_sep_by_space",         tok_p_sep_by_space,         0},
-      {""}, {""},
-#line 96 "locfile-kw.gperf"
+#line 158 "locfile-kw.gperf"
+      {"width",                  tok_width,                  0},
+      {""},
+#line 98 "locfile-kw.gperf"
       {"int_p_cs_precedes",      tok_int_p_cs_precedes,      0},
       {""}, {""},
-#line 40 "locfile-kw.gperf"
+#line 41 "locfile-kw.gperf"
       {"punct",                  tok_punct,                  0},
       {""}, {""},
-#line 99 "locfile-kw.gperf"
+#line 101 "locfile-kw.gperf"
       {"int_n_sep_by_space",     tok_int_n_sep_by_space,     0},
       {""}, {""}, {""},
-#line 106 "locfile-kw.gperf"
+#line 108 "locfile-kw.gperf"
       {"duo_p_cs_precedes",      tok_duo_p_cs_precedes,      0},
-      {""}, {""},
-#line 46 "locfile-kw.gperf"
+#line 48 "locfile-kw.gperf"
+      {"charconv",               tok_charconv,               0},
+      {""},
+#line 47 "locfile-kw.gperf"
       {"class",                  tok_class,                  0},
-#line 112 "locfile-kw.gperf"
+#line 114 "locfile-kw.gperf"
       {"duo_int_n_cs_precedes",  tok_duo_int_n_cs_precedes,  0},
-#line 113 "locfile-kw.gperf"
+#line 115 "locfile-kw.gperf"
       {"duo_int_n_sep_by_space", tok_duo_int_n_sep_by_space, 0},
-#line 109 "locfile-kw.gperf"
+#line 111 "locfile-kw.gperf"
       {"duo_n_sep_by_space",     tok_duo_n_sep_by_space,     0},
-#line 117 "locfile-kw.gperf"
+#line 119 "locfile-kw.gperf"
       {"duo_int_n_sign_posn",    tok_duo_int_n_sign_posn,    0},
-      {""}, {""}, {""},
-#line 47 "locfile-kw.gperf"
-      {"charconv",               tok_charconv,               0},
-      {""}, {""},
-#line 183 "locfile-kw.gperf"
-      {"measurement",            tok_measurement,            0},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 57 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""}, {""}, {""}, {""},
+#line 58 "locfile-kw.gperf"
       {"section-symbol",         tok_section_symbol,         0},
-#line 181 "locfile-kw.gperf"
+#line 183 "locfile-kw.gperf"
       {"int_prefix",             tok_int_prefix,             0},
       {""}, {""}, {""}, {""},
-#line 137 "locfile-kw.gperf"
-      {"t_fmt_ampm",             tok_t_fmt_ampm,             0},
-      {""}, {""},
-#line 97 "locfile-kw.gperf"
-      {"int_p_sep_by_space",     tok_int_p_sep_by_space,     0},
-      {""},
-#line 41 "locfile-kw.gperf"
+#line 42 "locfile-kw.gperf"
       {"graph",                  tok_graph,                  0},
       {""}, {""},
-#line 124 "locfile-kw.gperf"
-      {"decimal_point",          tok_decimal_point,          0},
-      {""}, {""},
-#line 110 "locfile-kw.gperf"
+#line 99 "locfile-kw.gperf"
+      {"int_p_sep_by_space",     tok_int_p_sep_by_space,     0},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 112 "locfile-kw.gperf"
       {"duo_int_p_cs_precedes",  tok_duo_int_p_cs_precedes,  0},
-#line 111 "locfile-kw.gperf"
+#line 113 "locfile-kw.gperf"
       {"duo_int_p_sep_by_space", tok_duo_int_p_sep_by_space, 0},
-#line 107 "locfile-kw.gperf"
+#line 109 "locfile-kw.gperf"
       {"duo_p_sep_by_space",     tok_duo_p_sep_by_space,     0},
-#line 116 "locfile-kw.gperf"
+#line 118 "locfile-kw.gperf"
       {"duo_int_p_sign_posn",    tok_duo_int_p_sign_posn,    0},
-#line 153 "locfile-kw.gperf"
+#line 155 "locfile-kw.gperf"
       {"nostr",                  tok_nostr,                  0},
       {""}, {""},
-#line 138 "locfile-kw.gperf"
+#line 140 "locfile-kw.gperf"
       {"era",                    tok_era,                    0},
       {""},
-#line 82 "locfile-kw.gperf"
+#line 84 "locfile-kw.gperf"
       {"currency_symbol",        tok_currency_symbol,        0},
       {""},
-#line 163 "locfile-kw.gperf"
+#line 165 "locfile-kw.gperf"
       {"name_ms",                tok_name_ms,                0},
-#line 161 "locfile-kw.gperf"
+#line 163 "locfile-kw.gperf"
       {"name_mrs",               tok_name_mrs,               0},
-#line 162 "locfile-kw.gperf"
+#line 164 "locfile-kw.gperf"
       {"name_miss",              tok_name_miss,              0},
-#line 81 "locfile-kw.gperf"
+#line 83 "locfile-kw.gperf"
       {"int_curr_symbol",        tok_int_curr_symbol,        0},
-#line 186 "locfile-kw.gperf"
+#line 188 "locfile-kw.gperf"
       {"source",                 tok_source,                 0},
-#line 160 "locfile-kw.gperf"
+#line 162 "locfile-kw.gperf"
       {"name_mr",                tok_name_mr,                0},
-#line 159 "locfile-kw.gperf"
+#line 161 "locfile-kw.gperf"
       {"name_gen",               tok_name_gen,               0},
-#line 198 "locfile-kw.gperf"
+#line 200 "locfile-kw.gperf"
       {"date",                   tok_date,                   0},
       {""}, {""},
-#line 187 "locfile-kw.gperf"
+#line 189 "locfile-kw.gperf"
       {"address",                tok_address,                0},
-#line 158 "locfile-kw.gperf"
+#line 160 "locfile-kw.gperf"
       {"name_fmt",               tok_name_fmt,               0},
-#line 31 "locfile-kw.gperf"
+#line 32 "locfile-kw.gperf"
       {"copy",                   tok_copy,                   0},
-      {""}, {""},
-#line 49 "locfile-kw.gperf"
-      {"tolower",                tok_tolower,                0},
-#line 129 "locfile-kw.gperf"
-      {"day",                    tok_day,                    0},
 #line 103 "locfile-kw.gperf"
-      {"duo_currency_symbol",    tok_duo_currency_symbol,    0},
-#line 101 "locfile-kw.gperf"
       {"int_n_sign_posn",        tok_int_n_sign_posn,        0},
       {""}, {""},
-#line 148 "locfile-kw.gperf"
+#line 131 "locfile-kw.gperf"
+      {"day",                    tok_day,                    0},
+#line 105 "locfile-kw.gperf"
+      {"duo_currency_symbol",    tok_duo_currency_symbol,    0},
+      {""}, {""}, {""},
+#line 150 "locfile-kw.gperf"
       {"date_fmt",               tok_date_fmt,               0},
-#line 63 "locfile-kw.gperf"
+#line 64 "locfile-kw.gperf"
       {"order_end",              tok_order_end,              0},
-      {""}, {""},
-#line 166 "locfile-kw.gperf"
+#line 117 "locfile-kw.gperf"
+      {"duo_n_sign_posn",        tok_duo_n_sign_posn,        0},
+      {""},
+#line 168 "locfile-kw.gperf"
       {"country_name",           tok_country_name,           0},
-#line 70 "locfile-kw.gperf"
+#line 71 "locfile-kw.gperf"
       {"reorder-after",          tok_reorder_after,          0},
-#line 118 "locfile-kw.gperf"
-      {"uno_valid_from",         tok_uno_valid_from,         0},
-#line 115 "locfile-kw.gperf"
-      {"duo_n_sign_posn",        tok_duo_n_sign_posn,        0},
-#line 151 "locfile-kw.gperf"
+      {""}, {""},
+#line 153 "locfile-kw.gperf"
       {"noexpr",                 tok_noexpr,                 0},
-      {""},
-#line 194 "locfile-kw.gperf"
+#line 50 "locfile-kw.gperf"
+      {"tolower",                tok_tolower,                0},
+#line 196 "locfile-kw.gperf"
       {"audience",               tok_audience,               0},
-      {""},
-#line 44 "locfile-kw.gperf"
-      {"blank",                  tok_blank,                  0},
-      {""},
-#line 48 "locfile-kw.gperf"
+      {""}, {""}, {""},
+#line 49 "locfile-kw.gperf"
       {"toupper",                tok_toupper,                0},
-#line 67 "locfile-kw.gperf"
+#line 68 "locfile-kw.gperf"
       {"position",               tok_position,               0},
-#line 120 "locfile-kw.gperf"
-      {"duo_valid_from",         tok_duo_valid_from,         0},
-#line 39 "locfile-kw.gperf"
+      {""},
+#line 40 "locfile-kw.gperf"
       {"cntrl",                  tok_cntrl,                  0},
       {""},
-#line 26 "locfile-kw.gperf"
+#line 27 "locfile-kw.gperf"
       {"comment_char",           tok_comment_char,           0},
-#line 86 "locfile-kw.gperf"
+#line 88 "locfile-kw.gperf"
       {"positive_sign",          tok_positive_sign,          0},
       {""}, {""}, {""}, {""},
-#line 132 "locfile-kw.gperf"
-      {"mon",                    tok_mon,                    0},
-      {""}, {""},
-#line 171 "locfile-kw.gperf"
-      {"country_car",            tok_country_car,            0},
-      {""},
-#line 60 "locfile-kw.gperf"
+#line 61 "locfile-kw.gperf"
       {"symbol-equivalence",     tok_symbol_equivalence,     0},
+      {""},
 #line 102 "locfile-kw.gperf"
-      {"duo_int_curr_symbol",    tok_duo_int_curr_symbol,    0},
-#line 100 "locfile-kw.gperf"
       {"int_p_sign_posn",        tok_int_p_sign_posn,        0},
-      {""}, {""}, {""}, {""}, {""}, {""},
-#line 172 "locfile-kw.gperf"
+#line 173 "locfile-kw.gperf"
+      {"country_car",            tok_country_car,            0},
+      {""}, {""},
+#line 104 "locfile-kw.gperf"
+      {"duo_int_curr_symbol",    tok_duo_int_curr_symbol,    0},
+      {""}, {""},
+#line 135 "locfile-kw.gperf"
+      {"d_t_fmt",                tok_d_t_fmt,                0},
+      {""}, {""},
+#line 116 "locfile-kw.gperf"
+      {"duo_p_sign_posn",        tok_duo_p_sign_posn,        0},
+#line 185 "locfile-kw.gperf"
+      {"measurement",            tok_measurement,            0},
+#line 174 "locfile-kw.gperf"
       {"country_isbn",           tok_country_isbn,           0},
-#line 36 "locfile-kw.gperf"
+#line 37 "locfile-kw.gperf"
       {"outdigit",               tok_outdigit,               0},
-      {""},
-#line 114 "locfile-kw.gperf"
-      {"duo_p_sign_posn",        tok_duo_p_sign_posn,        0},
-      {""},
-#line 133 "locfile-kw.gperf"
-      {"d_t_fmt",                tok_d_t_fmt,                0},
       {""}, {""},
-#line 33 "locfile-kw.gperf"
+#line 143 "locfile-kw.gperf"
+      {"era_d_t_fmt",            tok_era_d_t_fmt,            0},
+      {""}, {""}, {""},
+#line 34 "locfile-kw.gperf"
       {"lower",                  tok_lower,                  0},
-      {""},
-#line 167 "locfile-kw.gperf"
+#line 181 "locfile-kw.gperf"
+      {"tel_dom_fmt",            tok_tel_dom_fmt,            0},
+#line 169 "locfile-kw.gperf"
       {"country_post",           tok_country_post,           0},
-#line 146 "locfile-kw.gperf"
+#line 148 "locfile-kw.gperf"
       {"cal_direction",          tok_cal_direction,          0},
       {""},
-#line 189 "locfile-kw.gperf"
-      {"email",                  tok_email,                  0},
-#line 141 "locfile-kw.gperf"
-      {"era_d_t_fmt",            tok_era_d_t_fmt,            0},
+#line 139 "locfile-kw.gperf"
+      {"t_fmt_ampm",             tok_t_fmt_ampm,             0},
+#line 91 "locfile-kw.gperf"
+      {"frac_digits",            tok_frac_digits,            0},
       {""}, {""},
-#line 173 "locfile-kw.gperf"
+#line 175 "locfile-kw.gperf"
       {"lang_name",              tok_lang_name,              0},
-      {""},
-#line 179 "locfile-kw.gperf"
-      {"tel_dom_fmt",            tok_tel_dom_fmt,            0},
-      {""}, {""}, {""},
-#line 54 "locfile-kw.gperf"
-      {"default_missing",        tok_default_missing,        0},
-#line 89 "locfile-kw.gperf"
-      {"frac_digits",            tok_frac_digits,            0},
-      {""}, {""}, {""},
-#line 88 "locfile-kw.gperf"
+#line 90 "locfile-kw.gperf"
       {"int_frac_digits",        tok_int_frac_digits,        0},
-#line 170 "locfile-kw.gperf"
-      {"country_num",            tok_country_num,            0},
-#line 119 "locfile-kw.gperf"
+      {""},
+#line 121 "locfile-kw.gperf"
       {"uno_valid_to",           tok_uno_valid_to,           0},
-      {""}, {""}, {""}, {""}, {""},
-#line 50 "locfile-kw.gperf"
-      {"map",                    tok_map,                    0},
+#line 126 "locfile-kw.gperf"
+      {"decimal_point",          tok_decimal_point,          0},
       {""},
-#line 105 "locfile-kw.gperf"
+#line 133 "locfile-kw.gperf"
+      {"abmon",                  tok_abmon,                  0},
+      {""}, {""}, {""}, {""},
+#line 107 "locfile-kw.gperf"
       {"duo_frac_digits",        tok_duo_frac_digits,        0},
-#line 178 "locfile-kw.gperf"
+#line 180 "locfile-kw.gperf"
       {"tel_int_fmt",            tok_tel_int_fmt,            0},
-#line 121 "locfile-kw.gperf"
+#line 123 "locfile-kw.gperf"
       {"duo_valid_to",           tok_duo_valid_to,           0},
-#line 144 "locfile-kw.gperf"
+#line 146 "locfile-kw.gperf"
       {"first_weekday",          tok_first_weekday,          0},
       {""},
-#line 143 "locfile-kw.gperf"
-      {"alt_digits",             tok_alt_digits,             0},
-#line 95 "locfile-kw.gperf"
+#line 130 "locfile-kw.gperf"
+      {"abday",                  tok_abday,                  0},
+      {""},
+#line 198 "locfile-kw.gperf"
+      {"abbreviation",           tok_abbreviation,           0},
+#line 147 "locfile-kw.gperf"
+      {"first_workday",          tok_first_workday,          0},
+      {""}, {""},
+#line 97 "locfile-kw.gperf"
       {"n_sign_posn",            tok_n_sign_posn,            0},
-#line 84 "locfile-kw.gperf"
-      {"mon_thousands_sep",      tok_mon_thousands_sep,      0},
+      {""}, {""}, {""},
 #line 145 "locfile-kw.gperf"
-      {"first_workday",          tok_first_workday,          0},
-#line 64 "locfile-kw.gperf"
-      {"from",                   tok_from,                   0},
-#line 131 "locfile-kw.gperf"
-      {"abmon",                  tok_abmon,                  0},
+      {"alt_digits",             tok_alt_digits,             0},
       {""}, {""},
-#line 192 "locfile-kw.gperf"
-      {"language",               tok_language,               0},
+#line 128 "locfile-kw.gperf"
+      {"grouping",               tok_grouping,               0},
+      {""},
+#line 45 "locfile-kw.gperf"
+      {"blank",                  tok_blank,                  0},
       {""}, {""},
-#line 195 "locfile-kw.gperf"
-      {"application",            tok_application,            0},
+#line 194 "locfile-kw.gperf"
+      {"language",               tok_language,               0},
+#line 120 "locfile-kw.gperf"
+      {"uno_valid_from",         tok_uno_valid_from,         0},
       {""},
-#line 126 "locfile-kw.gperf"
-      {"grouping",               tok_grouping,               0},
-#line 78 "locfile-kw.gperf"
-      {"elif",                   tok_elif,                   0},
-#line 128 "locfile-kw.gperf"
-      {"abday",                  tok_abday,                  0},
+#line 197 "locfile-kw.gperf"
+      {"application",            tok_application,            0},
       {""},
-#line 196 "locfile-kw.gperf"
-      {"abbreviation",           tok_abbreviation,           0},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 56 "locfile-kw.gperf"
+#line 80 "locfile-kw.gperf"
+      {"elifndef",               tok_elifndef,               0},
+      {""}, {""}, {""}, {""}, {""},
+#line 122 "locfile-kw.gperf"
+      {"duo_valid_from",         tok_duo_valid_from,         0},
+#line 57 "locfile-kw.gperf"
       {"coll_weight_max",        tok_coll_weight_max,        0},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 66 "locfile-kw.gperf"
+      {""},
+#line 79 "locfile-kw.gperf"
+      {"elifdef",                tok_elifdef,                0},
+#line 67 "locfile-kw.gperf"
       {"backward",               tok_backward,               0},
-#line 104 "locfile-kw.gperf"
+#line 106 "locfile-kw.gperf"
       {"duo_int_frac_digits",    tok_duo_int_frac_digits,    0},
-      {""},
-#line 94 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""}, {""},
+#line 96 "locfile-kw.gperf"
       {"p_sign_posn",            tok_p_sign_posn,            0},
       {""},
-#line 199 "locfile-kw.gperf"
+#line 201 "locfile-kw.gperf"
       {"category",               tok_category,               0},
+      {""}, {""}, {""}, {""},
+#line 134 "locfile-kw.gperf"
+      {"mon",                    tok_mon,                    0},
       {""},
-#line 122 "locfile-kw.gperf"
+#line 124 "locfile-kw.gperf"
       {"conversion_rate",        tok_conversion_rate,        0},
-      {""},
-#line 83 "locfile-kw.gperf"
-      {"mon_decimal_point",      tok_mon_decimal_point,      0},
-      {""}, {""}, {""},
-#line 62 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""},
+#line 63 "locfile-kw.gperf"
       {"order_start",            tok_order_start,            0},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""},
-#line 188 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""},
+#line 176 "locfile-kw.gperf"
+      {"lang_ab",                tok_lang_ab,                0},
+#line 178 "locfile-kw.gperf"
+      {"lang_lib",               tok_lang_lib,               0},
+      {""}, {""}, {""},
+#line 190 "locfile-kw.gperf"
       {"contact",                tok_contact,                0},
       {""}, {""}, {""},
-#line 169 "locfile-kw.gperf"
+#line 171 "locfile-kw.gperf"
       {"country_ab3",            tok_country_ab3,            0},
-      {""}, {""}, {""}, {""},
-#line 168 "locfile-kw.gperf"
-      {"country_ab2",            tok_country_ab2,            0},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""},
-#line 174 "locfile-kw.gperf"
-      {"lang_ab",                tok_lang_ab,                0},
-#line 176 "locfile-kw.gperf"
-      {"lang_lib",               tok_lang_lib,               0},
-      {""}, {""}, {""}, {""},
+      {""}, {""}, {""},
 #line 191 "locfile-kw.gperf"
+      {"email",                  tok_email,                  0},
+#line 170 "locfile-kw.gperf"
+      {"country_ab2",            tok_country_ab2,            0},
+      {""}, {""}, {""},
+#line 55 "locfile-kw.gperf"
+      {"default_missing",        tok_default_missing,        0},
+      {""}, {""},
+#line 193 "locfile-kw.gperf"
       {"fax",                    tok_fax,                    0},
-      {""},
-#line 136 "locfile-kw.gperf"
-      {"am_pm",                  tok_am_pm,                  0},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 172 "locfile-kw.gperf"
+      {"country_num",            tok_country_num,            0},
+      {""}, {""}, {""}, {""}, {""}, {""},
+#line 51 "locfile-kw.gperf"
+      {"map",                    tok_map,                    0},
+#line 65 "locfile-kw.gperf"
+      {"from",                   tok_from,                   0},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 86 "locfile-kw.gperf"
+      {"mon_thousands_sep",      tok_mon_thousands_sep,      0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""},
-#line 37 "locfile-kw.gperf"
-      {"alnum",                  tok_alnum,                  0},
       {""}, {""}, {""},
-#line 175 "locfile-kw.gperf"
-      {"lang_term",              tok_lang_term,              0},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 79 "locfile-kw.gperf"
+#line 81 "locfile-kw.gperf"
       {"endif",                  tok_endif,                  0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 165 "locfile-kw.gperf"
-      {"postal_fmt",             tok_postal_fmt,             0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""}, {""},
-#line 75 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 76 "locfile-kw.gperf"
       {"undef",                  tok_undef,                  0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""},
-#line 58 "locfile-kw.gperf"
-      {"collating-element",      tok_collating_element,      0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 59 "locfile-kw.gperf"
+      {"collating-element",      tok_collating_element,      0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""},
-#line 85 "locfile-kw.gperf"
-      {"mon_grouping",           tok_mon_grouping,           0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""},
-#line 65 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 66 "locfile-kw.gperf"
       {"forward",                tok_forward,                0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 59 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""},
+#line 85 "locfile-kw.gperf"
+      {"mon_decimal_point",      tok_mon_decimal_point,      0},
+      {""}, {""},
+#line 167 "locfile-kw.gperf"
+      {"postal_fmt",             tok_postal_fmt,             0},
+      {""}, {""}, {""}, {""}, {""},
+#line 60 "locfile-kw.gperf"
       {"collating-symbol",       tok_collating_symbol,       0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""},
-#line 34 "locfile-kw.gperf"
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 35 "locfile-kw.gperf"
       {"alpha",                  tok_alpha,                  0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""},
+#line 38 "locfile-kw.gperf"
+      {"alnum",                  tok_alnum,                  0},
+      {""},
+#line 87 "locfile-kw.gperf"
+      {"mon_grouping",           tok_mon_grouping,           0},
+      {""},
+#line 177 "locfile-kw.gperf"
+      {"lang_term",              tok_lang_term,              0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 77 "locfile-kw.gperf"
+      {"ifdef",                  tok_ifdef,                  0},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 76 "locfile-kw.gperf"
-      {"ifdef",                  tok_ifdef,                  0}
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""}, {""}, {""},
+#line 138 "locfile-kw.gperf"
+      {"am_pm",                  tok_am_pm,                  0}
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index a14908d5a2..934f5d4ee4 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,10 @@
+2007-10-10  Ulrich Drepper  <drepper@redhat.com>
+
+	* locales/iso14651_t1_common: If DIACRIT_FORWARD is defined, define
+	second level of <LATIN> script as forward.
+	* locales/de_DE: Define DIACRIT_FORWARD.
+	* de_DE.in: Revert last change.
+
 2007-10-10  Jakub Jelinek  <jakub@redhat.com>
 
 	* locales/en_US: Add first_weekday and first_workday.
diff --git a/localedata/de_DE.in b/localedata/de_DE.in
index b3b0dac29e..c56f401f64 100644
--- a/localedata/de_DE.in
+++ b/localedata/de_DE.in
@@ -40,8 +40,8 @@ Füße (pl. of "Fuß")              : feet
 Fussel                           : fluff
 fusseln                          : to wear of fluff
 füßeln                           : play footsie [under the table]
-Füssen                           : Füssen (town)
 fußen                            : to be based [on]
+Füssen                           : Füssen (town)
 Füßen (dat. pl. of "Fuß")        : [to the] feet
 in Massen                        : in large numbers
 in Maßen                         : moderately
@@ -49,9 +49,9 @@ Masern                           : measels
 Mass. (Massachusetts)            : Massachusetts (state)
 Maß                              : measure
 Masse                            : mass
+Massé                            : (particular billard stroke)
 Maße (pl. of "Maß")              : measures
 mäße (pres. conj. of "messen")   : take measure (e.g. in indirect speech)
-Massé                            : (particular billard stroke)
 Massen-                          : mass; wholesale; bulk (in compound nouns)
 massig                           : massive
 mäßig                            : moderate; modest
@@ -60,8 +60,8 @@ Miß                              : Miss
 Passe                            : yoke (of dress)
 passé                            : over, gone
 Schlagerforderung                : claim, demanded in a pop song
-Schlägerforderung                : demand of a hooligan
 Schlagerförderung                : promotion of pop music
+Schlägerforderung                : demand of a hooligan
 Schlägerförderung                : promotion of hooliganism :-)
 Schurz                           : apron
 Schürze                          : apron
diff --git a/localedata/locales/de_DE b/localedata/locales/de_DE
index 1298854b01..a694dc2888 100644
--- a/localedata/locales/de_DE
+++ b/localedata/locales/de_DE
@@ -76,6 +76,8 @@ END LC_CTYPE
 
 LC_COLLATE
 
+define DIACRIT_FORWARD
+
 % Copy the template from ISO/IEC 14651
 copy "iso14651_t1"
 
diff --git a/localedata/locales/iso14651_t1_common b/localedata/locales/iso14651_t1_common
index 14b290c666..b5951f9e8c 100644
--- a/localedata/locales/iso14651_t1_common
+++ b/localedata/locales/iso14651_t1_common
@@ -1121,7 +1121,11 @@ order_start <SPECIAL>;forward;backward;forward;forward,position
 <U009E> IGNORE;IGNORE;IGNORE;<U009E>
 <U009F> IGNORE;IGNORE;IGNORE;<U009F>
 
+ifdef DIACRIT_FORWARD
+order_start <LATIN>;forward;forward;forward;forward,position
+else
 order_start <LATIN>;forward;backward;forward;forward,position
+endif
 #
 <U00A0> <U0020>;<BAS>;<MIN>;IGNORE # 170<NBSP>
 #