2000-01-01  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/ld-ctype.c: Implement rest of transliteration
	definition parsing.
	* locale/programs/locfile-kw.gperf: New keyword translit_ignore.
	* locale/programs/locfile-token.h: Add tok_translit_ignore.
This commit is contained in:
Ulrich Drepper 2000-01-01 19:35:36 +00:00
parent ac8295d23b
commit a673fbcb1f
6 changed files with 478 additions and 266 deletions

15
BUGS
View File

@ -1,7 +1,7 @@
List of known bugs (certainly very incomplete)
----------------------------------------------
Time-stamp: <1999-09-13T02:02:34-0700 drepper>
Time-stamp: <1999-12-31T14:42:14-0800 drepper>
This following list contains those bugs which I'm aware of. Please
make sure that bugs you report are not listed here. If you can fix one
@ -24,8 +24,7 @@ situations.
Severity: [ *] to [***]
[** ] Closing shared objects in statically linked binaries most of the
[ **] Closing shared objects in statically linked binaries most of the
times leads to crashes during the dlopen(). Hard to fix.
[ **] There are problems with signal handling when using LinuxThreads.
@ -48,6 +47,16 @@ Severity: [ *] to [***]
[ *] The libm-ieee `scalb' function gives wrong results for
non-integral second parameters.
[ *] Collation symbol and equivalence class handling in regex are not
yet 100% correct.
- [. .] at end of a range does not work
- [. .] and [= =] do not handle collating symbols (where a symbol
stands for multiple character) and multibyte character in
general not correctly.
This is *extremely* hard to fix since regex has to be rewritten
completely.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ulrich Drepper
drepper@cygnus.com

View File

@ -1,3 +1,10 @@
2000-01-01 Ulrich Drepper <drepper@cygnus.com>
* locale/programs/ld-ctype.c: Implement rest of transliteration
definition parsing.
* locale/programs/locfile-kw.gperf: New keyword translit_ignore.
* locale/programs/locfile-token.h: Add tok_translit_ignore.
1999-12-31 Ulrich Drepper <drepper@cygnus.com>
* locale/programs/ld-collate.c (collate_output): Emit correct

View File

@ -85,11 +85,25 @@ struct translit_t
{
uint32_t *from;
const char *fname;
size_t lineno;
struct translit_to_t *to;
struct translit_t *next;
};
struct translit_ignore_t
{
uint32_t from;
uint32_t to;
const char *fname;
size_t lineno;
struct translit_ignore_t *next;
};
/* The real definition of the struct for the LC_CTYPE locale. */
struct locale_ctype_t
@ -138,6 +152,11 @@ struct locale_ctype_t
const char *translit_copy_locale;
const char *translit_copy_repertoire;
struct translit_t *translit;
struct translit_ignore_t *translit_ignore;
uint32_t *default_missing;
const char *default_missing_file;
size_t default_missing_lineno;
/* The arrays for the binary representation. */
uint32_t plane_size;
@ -162,7 +181,7 @@ struct locale_ctype_t
size_t translit_from_tbl_size;
size_t translit_to_tbl_size;
struct obstack mem_pool;
struct obstack mempool;
};
@ -282,7 +301,7 @@ ctype_startup (struct linereader *lr, struct localedef_t *locale,
ctype->map256_collection[1][cnt] = cnt;
}
obstack_init (&ctype->mem_pool);
obstack_init (&ctype->mempool);
}
}
@ -1537,7 +1556,7 @@ read_widestring (struct linereader *ldfile, struct token *now,
else if (now->tok == tok_bsymbol)
{
/* Get the value from the repertoire. */
wstr = xmalloc (2 * sizeof (uint32_t));
wstr = (uint32_t *) xmalloc (2 * sizeof (uint32_t));
wstr[0] = repertoire_find_value (repertoire, now->val.str.startmb,
now->val.str.lenmb);
if (wstr[0] == ILLEGAL_CHAR_VALUE)
@ -1548,7 +1567,7 @@ read_widestring (struct linereader *ldfile, struct token *now,
}
else if (now->tok == tok_ucs4)
{
wstr = xmalloc (2 * sizeof (uint32_t));
wstr = (uint32_t *) xmalloc (2 * sizeof (uint32_t));
wstr[0] = now->val.ucs4;
wstr[1] = 0;
}
@ -1570,14 +1589,14 @@ read_widestring (struct linereader *ldfile, struct token *now,
/* We cannot proceed, we don't know the UCS4 value. */
return NULL;
wstr = xmalloc (2 * sizeof (uint32_t));
wstr = (uint32_t *) xmalloc (2 * sizeof (uint32_t));
wstr[0] = seq->ucs4;
wstr[1] = 0;
}
else if (now->tok == tok_string)
{
wstr = now->val.str.startwc;
if (wstr[0] == 0)
if (wstr == NULL || wstr[0] == 0)
return NULL;
}
else
@ -1600,7 +1619,7 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
uint32_t *from_wstr = read_widestring (ldfile, now, charmap, repertoire);
struct translit_t *result;
struct translit_to_t **top;
struct obstack *ob = &ctype->mem_pool;
struct obstack *ob = &ctype->mempool;
int first;
int ignore;
@ -1611,6 +1630,8 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
result = (struct translit_t *) obstack_alloc (ob,
sizeof (struct translit_t));
result->from = from_wstr;
result->fname = ldfile->fname;
result->lineno = ldfile->lineno;
result->next = NULL;
result->to = NULL;
top = &result->to;
@ -1673,6 +1694,129 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
}
static void
read_translit_ignore_entry (struct linereader *ldfile,
struct locale_ctype_t *ctype,
struct charmap_t *charmap,
struct repertoire_t *repertoire)
{
/* We expect a semicolon-separated list of characters we ignore. We are
only interested in the wide character definitions. These must be
single characters, possibly defining a range when an ellipsis is used. */
while (1)
{
struct token *now = lr_token (ldfile, charmap, repertoire);
struct translit_ignore_t *newp;
uint32_t from;
if (now->tok == tok_eol || now->tok == tok_eof)
{
lr_error (ldfile,
_("premature end of `translit_ignore' definition"));
return;
}
if (now->tok != tok_bsymbol && now->tok != tok_ucs4)
{
lr_error (ldfile, _("syntax error"));
lr_ignore_rest (ldfile, 0);
return;
}
if (now->tok == tok_ucs4)
from = now->val.ucs4;
else
{
/* Try to get the value. */
from = repertoire_find_value (repertoire, now->val.str.startmb,
now->val.str.lenmb);
}
if (from == ILLEGAL_CHAR_VALUE)
{
lr_error (ldfile, "invalid character name");
newp = NULL;
}
else
{
newp = (struct translit_ignore_t *)
obstack_alloc (&ctype->mempool, sizeof (struct translit_ignore_t));
newp->from = from;
newp->to = from;
newp->next = ctype->translit_ignore;
ctype->translit_ignore = newp;
}
/* Now we expect either a semicolon, an ellipsis, or the end of the
line. */
now = lr_token (ldfile, charmap, repertoire);
if (now->tok == tok_ellipsis2)
{
/* XXX Should we bother implementing `....'? `...' certainly
will not be implemented. */
uint32_t to;
now = lr_token (ldfile, charmap, repertoire);
if (now->tok == tok_eol || now->tok == tok_eof)
{
lr_error (ldfile,
_("premature end of `translit_ignore' definition"));
return;
}
if (now->tok != tok_bsymbol && now->tok != tok_ucs4)
{
lr_error (ldfile, _("syntax error"));
lr_ignore_rest (ldfile, 0);
return;
}
if (now->tok == tok_ucs4)
to = now->val.ucs4;
else
{
/* Try to get the value. */
to = repertoire_find_value (repertoire, now->val.str.startmb,
now->val.str.lenmb);
}
if (to == ILLEGAL_CHAR_VALUE)
lr_error (ldfile, "invalid character name");
else
{
/* Make sure the `to'-value is larger. */
if (to >= from)
newp->to = to;
else
lr_error (ldfile, _("\
to-value <U%0*X> of range is smaller than from-value <U%0*X>"),
(to | from) < 65536 ? 4 : 8, to,
(to | from) < 65536 ? 4 : 8, from);
}
/* And the next token. */
now = lr_token (ldfile, charmap, repertoire);
}
if (now->tok == tok_eol || now->tok == tok_eof)
/* We are done. */
return;
if (now->tok == tok_semicolon)
/* Next round. */
continue;
/* If we come here something is wrong. */
lr_error (ldfile, _("syntax error"));
lr_ignore_rest (ldfile, 0);
return;
}
}
/* The parser for the LC_CTYPE section of the locale definition. */
void
ctype_read (struct linereader *ldfile, struct localedef_t *result,
@ -2257,6 +2401,45 @@ with character code range values one must use the absolute ellipsis `...'"));
/* The rest of the line must be empty. */
lr_ignore_rest (ldfile, 1);
/* Make sure the locale is read. */
add_to_readlist (LC_CTYPE, ctype->translit_copy_locale,
repertoire_name, 1);
continue;
}
else if (now->tok == tok_default_missing)
{
uint32_t *wstr;
/* We expect a single character or string as the
argument. */
now = lr_token (ldfile, charmap, NULL);
wstr = read_widestring (ldfile, now, charmap, repertoire);
if (wstr != NULL)
{
if (ctype->default_missing != NULL)
{
lr_error (ldfile, _("\
%s: duplicate `default_missing' definition"), "LC_CTYPE");
error_at_line (0, 0, ctype->default_missing_file,
ctype->default_missing_lineno,
_("previous definition was here"));
}
else
{
ctype->default_missing = wstr;
ctype->default_missing_file = ldfile->fname;
ctype->default_missing_lineno = ldfile->lineno;
}
}
lr_ignore_rest (ldfile, 1);
continue;
}
else if (now->tok == tok_translit_ignore)
{
read_translit_ignore_entry (ldfile, ctype, charmap,
repertoire);
continue;
}

View File

@ -52,6 +52,7 @@ tolower, tok_tolower, 0
map, tok_map, 0
translit_start, tok_translit_start, 0
translit_end, tok_translit_end, 0
translit_ignore, tok_translit_ignore, 0
default_missing, tok_default_missing, 0
LC_COLLATE, tok_lc_collate, 0
coll_weight_max, tok_coll_weight_max, 0

View File

@ -24,12 +24,12 @@
#include "locfile-token.h"
struct keyword_t ;
#define TOTAL_KEYWORDS 172
#define TOTAL_KEYWORDS 173
#define MIN_WORD_LENGTH 3
#define MAX_WORD_LENGTH 22
#define MIN_HASH_VALUE 3
#define MAX_HASH_VALUE 545
/* maximum key range = 543, duplicates = 0 */
#define MAX_HASH_VALUE 645
/* maximum key range = 643, duplicates = 0 */
#ifdef __GNUC__
__inline
@ -39,32 +39,32 @@ hash (register const char *str, register unsigned int len)
{
static const unsigned short asso_values[] =
{
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
5, 0, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 20, 546, 0, 0, 0,
5, 30, 0, 0, 546, 546, 0, 546, 0, 0,
546, 546, 10, 0, 5, 10, 546, 546, 546, 0,
546, 546, 546, 546, 546, 30, 546, 0, 10, 125,
5, 0, 105, 30, 5, 95, 546, 0, 105, 155,
135, 50, 75, 0, 5, 45, 0, 55, 0, 30,
25, 25, 10, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
10, 0, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 15, 646, 0, 0, 0,
10, 20, 0, 0, 646, 646, 0, 646, 0, 5,
646, 646, 10, 0, 10, 5, 646, 646, 646, 20,
646, 646, 646, 646, 646, 30, 646, 0, 25, 110,
5, 0, 25, 0, 5, 105, 646, 20, 125, 85,
175, 0, 75, 10, 5, 125, 0, 135, 45, 15,
10, 75, 0, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
646, 646, 646, 646, 646, 646
};
register int hval = len;
@ -106,285 +106,296 @@ locfile_hash (register const char *str, register unsigned int len)
{"LC_ADDRESS", tok_lc_address, 0},
{""},
{"LC_TELEPHONE", tok_lc_telephone, 0},
{"LC_CTYPE", tok_lc_ctype, 0},
{""},
{"era_t_fmt", tok_era_t_fmt, 0},
{"LC_COLLATE", tok_lc_collate, 0},
{"LC_NUMERIC", tok_lc_numeric, 0},
{"height", tok_height, 0},
{"LC_IDENTIFICATION", tok_lc_identification, 0},
{""},
{"LC_CTYPE", tok_lc_ctype, 0},
{"era_d_fmt", tok_era_d_fmt, 0},
{"LC_NUMERIC", tok_lc_numeric, 0},
{""}, {""}, {""},
{"UNDEFINED", tok_undefined, 0},
{""},
{"reorder-end", tok_reorder_end, 0},
{"graph", tok_graph, 0},
{"order_start", tok_order_start, 0},
{"LC_NAME", tok_lc_name, 0},
{""},
{"UNDEFINED", tok_undefined, 0},
{"LC_COLLATE", tok_lc_collate, 0},
{"reorder-end", tok_reorder_end, 0},
{"tolower", tok_tolower, 0},
{"reorder-after", tok_reorder_after, 0},
{"LC_MEASUREMENT", tok_lc_measurement, 0},
{"order_end", tok_order_end, 0},
{""},
{"LC_MONETARY", tok_lc_monetary, 0},
{""},
{"day", tok_day, 0},
{"week", tok_week, 0},
{"t_fmt", tok_t_fmt, 0},
{"yesstr", tok_yesstr, 0},
{""},
{"LC_PAPER", tok_lc_paper, 0},
{""},
{"d_fmt", tok_d_fmt, 0},
{"LC_MESSAGES", tok_lc_messages, 0},
{""},
{"era_year", tok_era_year, 0},
{""}, {""},
{"LC_PAPER", tok_lc_paper, 0},
{"LC_MEASUREMENT", tok_lc_measurement, 0},
{"t_fmt", tok_t_fmt, 0},
{"IGNORE", tok_ignore, 0},
{""}, {""}, {""},
{"graph", tok_graph, 0},
{""}, {""},
{"backward", tok_backward, 0},
{""}, {""}, {""},
{"address", tok_address, 0},
{"forward", tok_forward, 0},
{"fax", tok_fax, 0},
{"week", tok_week, 0},
{"d_fmt", tok_d_fmt, 0},
{"tel_dom_fmt", tok_tel_dom_fmt, 0},
{""}, {""}, {""}, {""},
{"yesexpr", tok_yesexpr, 0},
{"audience", tok_audience, 0},
{"era_d_t_fmt", tok_era_d_t_fmt, 0},
{""}, {""}, {""}, {""},
{"LC_MONETARY", tok_lc_monetary, 0},
{""},
{"abday", tok_abday, 0},
{""}, {""}, {""}, {""}, {""},
{"order_start", tok_order_start, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
{"order_end", tok_order_end, 0},
{"reorder-sections-end", tok_reorder_sections_end, 0},
{""},
{"reorder-sections-after", tok_reorder_sections_after, 0},
{""}, {""},
{"print", tok_print, 0},
{"backward", tok_backward, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""},
{"d_t_fmt", tok_d_t_fmt, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""},
{"tolower", tok_tolower, 0},
{"day", tok_day, 0},
{""},
{"translit_start", tok_translit_start, 0},
{""}, {""},
{"translit_end", tok_translit_end, 0},
{""}, {""},
{"print", tok_print, 0},
{"yesstr", tok_yesstr, 0},
{"toupper", tok_toupper, 0},
{"grouping", tok_grouping, 0},
{""}, {""}, {""}, {""},
{"era_year", tok_era_year, 0},
{""}, {""}, {""},
{"yesexpr", tok_yesexpr, 0},
{""}, {""}, {""}, {""}, {""},
{"repertoiremap", tok_repertoiremap, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"title", tok_title, 0},
{""}, {""},
{"repertoiremap", tok_repertoiremap, 0},
{"timezone", tok_timezone, 0},
{""},
{"digit", tok_digit, 0},
{""}, {""},
{""},
{"contact", tok_contact, 0},
{""},
{"from", tok_from, 0},
{""},
{"country_ab3", tok_country_ab3, 0},
{""}, {""}, {""},
{"conversion_rate", tok_conversion_rate, 0},
{"xdigit", tok_xdigit, 0},
{"collating-element", tok_collating_element, 0},
{"tel", tok_tel, 0},
{"else", tok_else, 0},
{"alpha", tok_alpha, 0},
{""}, {""},
{"timezone", tok_timezone, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"blank", tok_blank, 0},
{"tel_dom_fmt", tok_tel_dom_fmt, 0},
{""}, {""}, {""},
{"space", tok_space, 0},
{"era_d_t_fmt", tok_era_d_t_fmt, 0},
{"duo_valid_to", tok_duo_valid_to, 0},
{""}, {""}, {""},
{"xdigit", tok_xdigit, 0},
{""},
{"fax", tok_fax, 0},
{""},
{"punct", tok_punct, 0},
{""},
{"toupper", tok_toupper, 0},
{"symbol-equivalence", tok_symbol_equivalence, 0},
{""},
{"width", tok_width, 0},
{"escape_char", tok_escape_char, 0},
{""}, {""},
{"lang_name", tok_lang_name, 0},
{"upper", tok_upper, 0},
{"define", tok_define, 0},
{"d_t_fmt", tok_d_t_fmt, 0},
{"grouping", tok_grouping, 0},
{""}, {""}, {""},
{"lang_ab", tok_lang_ab, 0},
{"lang_lib", tok_lang_lib, 0},
{"territory", tok_territory, 0},
{""}, {""},
{"abbreviation", tok_abbreviation, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
{"alt_digits", tok_alt_digits, 0},
{""},
{"forward", tok_forward, 0},
{"language", tok_language, 0},
{""},
{"lower", tok_lower, 0},
{""}, {""},
{"name_fmt", tok_name_fmt, 0},
{""}, {""}, {""},
{"name_mr", tok_name_mr, 0},
{""}, {""}, {""}, {""},
{"contact", tok_contact, 0},
{"thousands_sep", tok_thousands_sep, 0},
{""}, {""},
{"country_ab3", tok_country_ab3, 0},
{""},
{"category", tok_category, 0},
{""}, {""},
{"country_ab2", tok_country_ab2, 0},
{""}, {""}, {""},
{"width", tok_width, 0},
{""},
{"revision", tok_revision, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"nostr", tok_nostr, 0},
{""}, {""}, {""},
{"copy", tok_copy, 0},
{""}, {""}, {""},
{"outdigit", tok_outdigit, 0},
{"address", tok_address, 0},
{""}, {""},
{"lower", tok_lower, 0},
{"tel_int_fmt", tok_tel_int_fmt, 0},
{""}, {""},
{"elif", tok_elif, 0},
{""}, {""},
{"name_ms", tok_name_ms, 0},
{"name_mrs", tok_name_mrs, 0},
{""}, {""},
{"measurement", tok_measurement, 0},
{"collating-element", tok_collating_element, 0},
{""},
{"p_sep_by_space", tok_p_sep_by_space, 0},
{""},
{"source", tok_source, 0},
{"duo_p_cs_precedes", tok_duo_p_cs_precedes, 0},
{"duo_p_sep_by_space", tok_duo_p_sep_by_space, 0},
{""}, {""}, {""}, {""},
{"map", tok_map, 0},
{"duo_valid_from", tok_duo_valid_from, 0},
{""}, {""}, {""},
{"first_weekday", tok_first_weekday, 0},
{""},
{"conversion_rate", tok_conversion_rate, 0},
{""}, {""},
{"first_workday", tok_first_workday, 0},
{""}, {""}, {""}, {""},
{"decimal_point", tok_decimal_point, 0},
{""}, {""}, {""},
{"duo_int_p_sep_by_space", tok_duo_int_p_sep_by_space, 0},
{""}, {""},
{"duo_frac_digits", tok_duo_frac_digits, 0},
{""},
{"uno_valid_to", tok_uno_valid_to, 0},
{""}, {""},
{"default_missing", tok_default_missing, 0},
{""},
{"country_post", tok_country_post, 0},
{"charconv", tok_charconv, 0},
{"name_miss", tok_name_miss, 0},
{""}, {""}, {""},
{"position", tok_position, 0},
{"from", tok_from, 0},
{"t_fmt_ampm", tok_t_fmt_ampm, 0},
{"noexpr", tok_noexpr, 0},
{""}, {""}, {""},
{"coll_weight_max", tok_coll_weight_max, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"n_sep_by_space", tok_n_sep_by_space, 0},
{"abmon", tok_abmon, 0},
{""},
{"duo_n_cs_precedes", tok_duo_n_cs_precedes, 0},
{"duo_n_sep_by_space", tok_duo_n_sep_by_space, 0},
{""},
{"postal_fmt", tok_postal_fmt, 0},
{"frac_digits", tok_frac_digits, 0},
{"include", tok_include, 0},
{""}, {""}, {""},
{"duo_int_p_cs_precedes", tok_duo_int_p_cs_precedes, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"positive_sign", tok_positive_sign, 0},
{"section-symbol", tok_section_symbol, 0},
{""}, {""}, {""},
{"name_gen", tok_name_gen, 0},
{"duo_currency_symbol", tok_duo_currency_symbol, 0},
{""}, {""},
{"duo_int_n_sep_by_space", tok_duo_int_n_sep_by_space, 0},
{"negative_sign", tok_negative_sign, 0},
{""},
{"duo_p_sign_posn", tok_duo_p_sign_posn, 0},
{"country_car", tok_country_car, 0},
{"comment_char", tok_comment_char, 0},
{"p_cs_precedes", tok_p_cs_precedes, 0},
{""}, {""}, {""},
{"country_name", tok_country_name, 0},
{""},
{"duo_int_frac_digits", tok_duo_int_frac_digits, 0},
{"class", tok_class, 0},
{"collating-symbol", tok_collating_symbol, 0},
{""}, {""}, {""},
{"currency_symbol", tok_currency_symbol, 0},
{"p_sign_posn", tok_p_sign_posn, 0},
{"audience", tok_audience, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
{"mon_thousands_sep", tok_mon_thousands_sep, 0},
{"mon", tok_mon, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"endif", tok_endif, 0},
{"elif", tok_elif, 0},
{""}, {""}, {""}, {""}, {""},
{"reorder-sections-end", tok_reorder_sections_end, 0},
{""},
{"reorder-sections-after", tok_reorder_sections_after, 0},
{"map", tok_map, 0},
{"lang_name", tok_lang_name, 0},
{"coll_weight_max", tok_coll_weight_max, 0},
{""}, {""}, {""}, {""},
{"postal_fmt", tok_postal_fmt, 0},
{""},
{"mon_grouping", tok_mon_grouping, 0},
{""},
{"charclass", tok_charclass, 0},
{"translit_start", tok_translit_start, 0},
{"translit_ignore", tok_translit_ignore, 0},
{""},
{"duo_int_n_cs_precedes", tok_duo_int_n_cs_precedes, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
{"uno_valid_from", tok_uno_valid_from, 0},
{""}, {""}, {""}, {""}, {""},
{"email", tok_email, 0},
{""}, {""}, {""}, {""},
{"duo_n_sign_posn", tok_duo_n_sign_posn, 0},
{""}, {""},
{"n_cs_precedes", tok_n_cs_precedes, 0},
{""}, {""}, {""},
{"mon_decimal_point", tok_mon_decimal_point, 0},
{"translit_end", tok_translit_end, 0},
{"decimal_point", tok_decimal_point, 0},
{""},
{"duo_int_p_sign_posn", tok_duo_int_p_sign_posn, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"n_sign_posn", tok_n_sign_posn, 0},
{""}, {""}, {""}, {""}, {""},
{"int_p_cs_precedes", tok_int_p_cs_precedes, 0},
{"int_p_sep_by_space", tok_int_p_sep_by_space, 0},
{"abday", tok_abday, 0},
{""}, {""}, {""}, {""},
{"cal_direction", tok_cal_direction, 0},
{"duo_int_curr_symbol", tok_duo_int_curr_symbol, 0},
{"undef", tok_undef, 0},
{""}, {""}, {""}, {""},
{"int_select", tok_int_select, 0},
{"application", tok_application, 0},
{""}, {""}, {""},
{"ifdef", tok_ifdef, 0},
{"define", tok_define, 0},
{"lang_ab", tok_lang_ab, 0},
{"lang_lib", tok_lang_lib, 0},
{"copy", tok_copy, 0},
{"nostr", tok_nostr, 0},
{""},
{"country_isbn", tok_country_isbn, 0},
{"mon_decimal_point", tok_mon_decimal_point, 0},
{"category", tok_category, 0},
{""},
{"blank", tok_blank, 0},
{""},
{"country_post", tok_country_post, 0},
{""}, {""},
{"t_fmt_ampm", tok_t_fmt_ampm, 0},
{""},
{"duo_valid_to", tok_duo_valid_to, 0},
{""}, {""},
{"space", tok_space, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"abbreviation", tok_abbreviation, 0},
{"name_fmt", tok_name_fmt, 0},
{""},
{"punct", tok_punct, 0},
{""},
{"name_mr", tok_name_mr, 0},
{"first_weekday", tok_first_weekday, 0},
{""}, {""},
{"escape_char", tok_escape_char, 0},
{""},
{"first_workday", tok_first_workday, 0},
{"p_sep_by_space", tok_p_sep_by_space, 0},
{"upper", tok_upper, 0},
{""}, {""},
{"symbol-equivalence", tok_symbol_equivalence, 0},
{""},
{"endif", tok_endif, 0},
{"measurement", tok_measurement, 0},
{""}, {""}, {""}, {""},
{"country_car", tok_country_car, 0},
{"comment_char", tok_comment_char, 0},
{""}, {""},
{"default_missing", tok_default_missing, 0},
{"source", tok_source, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"outdigit", tok_outdigit, 0},
{""}, {""},
{"collating-symbol", tok_collating_symbol, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"position", tok_position, 0},
{""},
{"am_pm", tok_am_pm, 0},
{"noexpr", tok_noexpr, 0},
{""},
{"mon", tok_mon, 0},
{"territory", tok_territory, 0},
{"alt_digits", tok_alt_digits, 0},
{""}, {""},
{"language", tok_language, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"charconv", tok_charconv, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
{"duo_valid_from", tok_duo_valid_from, 0},
{""},
{"p_sign_posn", tok_p_sign_posn, 0},
{""},
{"positive_sign", tok_positive_sign, 0},
{""}, {""}, {""},
{"country_name", tok_country_name, 0},
{""}, {""},
{"alnum", tok_alnum, 0},
{"frac_digits", tok_frac_digits, 0},
{"mon_thousands_sep", tok_mon_thousands_sep, 0},
{""}, {""}, {""}, {""}, {""},
{"duo_p_sep_by_space", tok_duo_p_sep_by_space, 0},
{""}, {""}, {""}, {""},
{"int_frac_digits", tok_int_frac_digits, 0},
{"revision", tok_revision, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"int_prefix", tok_int_prefix, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"duo_int_n_sign_posn", tok_duo_int_n_sign_posn, 0},
{""},
{"n_sep_by_space", tok_n_sep_by_space, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"lang_term", tok_lang_term, 0},
{"duo_frac_digits", tok_duo_frac_digits, 0},
{""},
{"name_ms", tok_name_ms, 0},
{"name_mrs", tok_name_mrs, 0},
{""},
{"email", tok_email, 0},
{""},
{"duo_int_p_sep_by_space", tok_duo_int_p_sep_by_space, 0},
{"thousands_sep", tok_thousands_sep, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
{"undef", tok_undef, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"uno_valid_to", tok_uno_valid_to, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
{"abmon", tok_abmon, 0},
{"country_num", tok_country_num, 0},
{""},
{"p_cs_precedes", tok_p_cs_precedes, 0},
{""}, {""}, {""},
{"duo_p_cs_precedes", tok_duo_p_cs_precedes, 0},
{"name_gen", tok_name_gen, 0},
{""}, {""},
{"n_sign_posn", tok_n_sign_posn, 0},
{""},
{"negative_sign", tok_negative_sign, 0},
{"duo_currency_symbol", tok_duo_currency_symbol, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
{"country_isbn", tok_country_isbn, 0},
{""}, {""},
{"duo_p_sign_posn", tok_duo_p_sign_posn, 0},
{""}, {""},
{"duo_n_sep_by_space", tok_duo_n_sep_by_space, 0},
{""}, {""}, {""}, {""},
{"cal_direction", tok_cal_direction, 0},
{"duo_int_frac_digits", tok_duo_int_frac_digits, 0},
{"currency_symbol", tok_currency_symbol, 0},
{""}, {""}, {""}, {""}, {""}, {""},
{"include", tok_include, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
{"duo_int_n_sep_by_space", tok_duo_int_n_sep_by_space, 0},
{""}, {""}, {""}, {""}, {""},
{"int_p_sep_by_space", tok_int_p_sep_by_space, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
{"uno_valid_from", tok_uno_valid_from, 0},
{""}, {""}, {""}, {""},
{"name_miss", tok_name_miss, 0},
{""},
{"duo_int_p_cs_precedes", tok_duo_int_p_cs_precedes, 0},
{""}, {""}, {""}, {""},
{"application", tok_application, 0},
{""}, {""}, {""},
{"int_frac_digits", tok_int_frac_digits, 0},
{""}, {""}, {""}, {""},
{"int_prefix", tok_int_prefix, 0},
{""}, {""},
{"n_cs_precedes", tok_n_cs_precedes, 0},
{"charclass", tok_charclass, 0},
{""}, {""},
{"duo_n_cs_precedes", tok_duo_n_cs_precedes, 0},
{""}, {""},
{"class", tok_class, 0},
{""}, {""}, {""},
{"section-symbol", tok_section_symbol, 0},
{""}, {""}, {""}, {""},
{"duo_int_curr_symbol", tok_duo_int_curr_symbol, 0},
{""}, {""}, {""}, {""}, {""},
{"duo_n_sign_posn", tok_duo_n_sign_posn, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"duo_int_p_sign_posn", tok_duo_int_p_sign_posn, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
{"int_select", tok_int_select, 0},
{""},
{"int_p_cs_precedes", tok_int_p_cs_precedes, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
{"cntrl", tok_cntrl, 0},
{""}, {""}, {""}, {""},
{"int_p_sign_posn", tok_int_p_sign_posn, 0},
{""}, {""},
{"int_n_cs_precedes", tok_int_n_cs_precedes, 0},
{"int_n_sep_by_space", tok_int_n_sep_by_space, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""},
{"am_pm", tok_am_pm, 0},
{""}, {""}, {""}, {""},
{"cntrl", tok_cntrl, 0},
{"country_num", tok_country_num, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"int_p_sign_posn", tok_int_p_sign_posn, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
{"int_curr_symbol", tok_int_curr_symbol, 0},
{""}, {""}, {""}, {""}, {""},
{"duo_int_n_cs_precedes", tok_duo_int_n_cs_precedes, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""},
{"duo_int_n_sign_posn", tok_duo_int_n_sign_posn, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
{"int_n_cs_precedes", tok_int_n_cs_precedes, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"int_n_sign_posn", tok_int_n_sign_posn, 0}
};

View File

@ -88,6 +88,7 @@ enum token_t
tok_map,
tok_translit_start,
tok_translit_end,
tok_translit_ignore,
tok_default_missing,
tok_lc_collate,
tok_coll_weight_max,