about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--locale/programs/charmap.c45
2 files changed, 37 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 3ca9b433c4..333ab08bdb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-20  Ulrich Drepper  <drepper@redhat.com>
+
+	* locale/programs/charmap.c (parse_charmap): Handle UCS names also
+	in width definitions.
+
 2000-06-20  Andreas Jaeger  <aj@suse.de>
 
 	* sysdeps/mips/fpu/libm-test-ulps: New file.
diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c
index 8ffb8a06ea..073d458849 100644
--- a/locale/programs/charmap.c
+++ b/locale/programs/charmap.c
@@ -720,7 +720,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_VARIABLE", _("no symbolic name given"));
@@ -733,9 +733,17 @@ 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 = 99;
@@ -753,19 +761,30 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
 	  continue;
 
 	case 100:
-	  if (nowtok != tok_bsymbol)
-	    lr_error (cmfile, _("syntax error in %s definition: %s"),
-		      "WIDTH_VARIABLE",
-		      _("no symbolic name given for end of range"));
+	  if (nowtok != tok_bsymbol && nowtok != tok_ucs4)
+	    {
+	      lr_error (cmfile, _("syntax error in %s definition: %s"),
+			"WIDTH_VARIABLE",
+			_("no symbolic name given for end of range"));
+	      lr_ignore_rest (cmfile, 0);
+	      continue;
+	    }
+
+	  if (nowtok == tok_bsymbol)
+	    to_name = (char *) obstack_copy0 (&result->mem_pool,
+					      now->val.str.startmb,
+					      now->val.str.lenmb);
 	  else
 	    {
-	      to_name = (char *) obstack_copy0 (&result->mem_pool,
-						now->val.str.startmb,
-						now->val.str.lenmb);
-	      /* XXX Enter value into table.  */
+	      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);
 	    }
 
-	  lr_ignore_rest (cmfile, nowtok == tok_bsymbol);
+	  /* XXX Enter value into table.  */
+
+	  lr_ignore_rest (cmfile, 1);
 
 	  state = 98;
 	  continue;