From 8d6120a9cc3d3dcee3662f39a5dede14ae259dae Mon Sep 17 00:00:00 2001
From: Ulrich Drepper <drepper@redhat.com>
Date: Tue, 20 Jun 2000 22:24:45 +0000
Subject: (parse_charmap): Handle UCS names also in width definitions.

---
 locale/programs/charmap.c | 33 +++++++++++++++++++++++++--------
 1 file changed, 25 insertions(+), 8 deletions(-)

(limited to 'locale/programs')

diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c
index dec09a6118..8ffb8a06ea 100644
--- a/locale/programs/charmap.c
+++ b/locale/programs/charmap.c
@@ -624,7 +624,7 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
 	      continue;
 	    }
 
-	  if (nowtok != tok_bsymbol)
+	  if (nowtok != tok_bsymbol && nowtok != tok_ucs4)
 	    {
 	      lr_error (cmfile, _("syntax error in %s definition: %s"),
 			"WIDTH", _("no symbolic name given"));
@@ -636,9 +636,18 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
 	  if (from_name != NULL)
 	    obstack_free (&result->mem_pool, from_name);
 
-	  from_name = (char *) obstack_copy0 (&result->mem_pool,
-					      now->val.str.startmb,
-					      now->val.str.lenmb);
+	  if (nowtok == tok_bsymbol)
+	    from_name = (char *) obstack_copy0 (&result->mem_pool,
+						now->val.str.startmb,
+						now->val.str.lenmb);
+	  else
+	    {
+	      obstack_printf (&result->mem_pool, "U%08X",
+			      cmfile->token.val.ucs4);
+	      obstack_1grow (&result->mem_pool, '\0');
+	      from_name = (char *) obstack_finish (&result->mem_pool);
+	    }
+
 	  to_name = NULL;
 
 	  state = 94;
@@ -670,7 +679,7 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
 	  continue;
 
 	case 95:
-	  if (nowtok != tok_bsymbol)
+	  if (nowtok != tok_bsymbol && nowtok != tok_ucs4)
 	    {
 	      lr_error (cmfile, _("syntax error in %s definition: %s"),
 			"WIDTH", _("no symbolic name given for end of range"));
@@ -681,9 +690,17 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
 	      continue;
 	    }
 
-	  to_name = (char *) obstack_copy0 (&result->mem_pool,
-					    now->val.str.startmb,
-					    now->val.str.lenmb);
+	  if (nowtok == tok_bsymbol)
+	    to_name = (char *) obstack_copy0 (&result->mem_pool,
+					      now->val.str.startmb,
+					      now->val.str.lenmb);
+	  else
+	    {
+	      obstack_printf (&result->mem_pool, "U%08X",
+			      cmfile->token.val.ucs4);
+	      obstack_1grow (&result->mem_pool, '\0');
+	      to_name = (char *) obstack_finish (&result->mem_pool);
+	    }
 
 	  state = 96;
 	  continue;
-- 
cgit v1.2.3-70-g09d2