summaryrefslogtreecommitdiff
path: root/locale/programs/charmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'locale/programs/charmap.c')
-rw-r--r--locale/programs/charmap.c45
1 files changed, 32 insertions, 13 deletions
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;