[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[PATCH 7/7] localedef: be less strict about keywords ordering in LC_COLLATE section



From: Denis Barbier <bouzim@gmail.com>
Date: Tue, 23 Oct 2007 09:24:51 -0500

Localedef is pretty strict with keywords ordering in LC_COLLATE section.
One consequence is that it is sometimes hard to extend iso14651_t1 template.
For instance, am_ET uses a hack to define a new script, and the patch
sent to BZ686 chokes on this file.
Here is a patch to let localedef be less strict.

Originally from belocs-locales-bin 2.3.3-14, 2005-01-21.

Submitted upstream: BZ690

[clint@debian.org, 2007-10-23: cleanup]

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
That's the end of the series.  I don't expect anything to happen
immediately; just wanted to get these out there so if my copy gets
destroyed the little research I did is not for nothing so there's a
place to put comments as I learn more.

Some of these were marked fixed upstream, some wontfix.

Thanks for keeping the patches directory nicely sorted and readable.

 locale/programs/ld-collate.c |   32 ++++++++++++++++++--------------
 1 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 7d1455a..c433f41 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -2896,14 +2896,23 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
       switch (nowtok)
 	{
 	case tok_copy:
-	  /* Allow copying other locales.  */
+	  /* Ignore the rest of the line if we don't need the input of
+	     this line.  */
+	  if (ignore_content)
+	    {
+	      lr_ignore_rest (ldfile, 0);
+	      break;
+	    }
+
 	  now = lr_token (ldfile, charmap, result, NULL, verbose);
 	  if (now->tok != tok_string)
 	    goto err_label;
 
-	  if (! ignore_content)
-	    load_locale (LC_COLLATE, now->val.str.startmb, repertoire_name,
-			 charmap, result);
+	  if (state == 1 || state == 3 || state == 5)
+	    goto err_label;
+
+	  load_locale (LC_COLLATE, now->val.str.startmb, repertoire_name,
+		       charmap, result);
 
 	  lr_ignore_rest (ldfile, 1);
 	  break;
@@ -2917,9 +2926,6 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      break;
 	    }
 
-	  if (state != 0)
-	    goto err_label;
-
 	  arg = lr_token (ldfile, charmap, result, NULL, verbose);
 	  if (arg->tok != tok_number)
 	    goto err_label;
@@ -2940,7 +2946,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      break;
 	    }
 
-	  if (state != 0)
+	  if (state == 1 || state == 3 || state == 5)
 	    goto err_label;
 
 	  arg = lr_token (ldfile, charmap, result, repertoire, verbose);
@@ -2987,7 +2993,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      break;
 	    }
 
-	  if (state != 0 && state != 2)
+	  if (state == 1 || state == 3 || state == 5)
 	    goto err_label;
 
 	  arg = lr_token (ldfile, charmap, result, repertoire, verbose);
@@ -3053,7 +3059,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      break;
 	    }
 
-	  if (state != 0 && state != 2)
+	  if (state == 1 || state == 3 || state == 5)
 	    goto err_label;
 
 	  arg = lr_token (ldfile, charmap, result, repertoire, verbose);
@@ -3199,7 +3205,7 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
 	      break;
 	    }
 
-	  if (state != 0)
+	  if (state == 1 || state == 3 || state == 5)
 	    goto err_label;
 
 	  arg = lr_token (ldfile, charmap, result, repertoire, verbose);
@@ -3320,7 +3326,7 @@ error while adding equivalent collating symbol"));
 	      break;
 	    }
 
-	  if (state != 0 && state != 1 && state != 2)
+	  if (state == 3 || state == 5)
 	    goto err_label;
 	  state = 1;
 
@@ -3631,8 +3637,6 @@ error while adding equivalent collating symbol"));
 %s: missing `reorder-end' keyword"), "LC_COLLATE"));
 	      state = 4;
 	    }
-	  else if (state != 2 && state != 4)
-	    goto err_label;
 	  state = 5;
 
 	  /* Get the name of the sections we are adding after.  */
-- 
1.7.5.1


Reply to: