glibc/locale/programs/locale-spec.c
Ulrich Drepper 4b10dd6c19 Update.
* locale/Makefile (distribute): Add iso-639.def and iso-3166.def.
	Change charset.h to charmap.h.
	(categories): Add new categories.  Leave out collate for now.
	Update build rules.
	* locale/categories.def: Add definitions for new categories.
	* locale/langinfo.h: Likewise.
	* locale/locale.h: Likewise.
	* locale/C-address.c: New file.
	* locale/C-identification.c: New file.
	* locale/C-measurement.c: New file.
	* locale/C-name.c: New file.
	* locale/C-paper.c: New file.
	* locale/C-telephone.c: New file.
	* locale/lc-address.c: Likewise.
	* locale/lc-identification.c: Likewise.
	* locale/lc-measurement.c: Likewise.
	* locale/lc-name.c: Likewise.
	* locale/lc-paper.c: Likewise.
	* locale/lc-telephone.c: Likewise.
	* locale/C-ctype.c: Update for locale rewrite.
	* locale/C-messages.c: Likewise.
	* locale/C-monetary.c: Likewise.
	* locale/C-time.c: Likewise.
	* locale/lc-collate.c: Likewise.
	* locale/lc-ctype.c: Likewise.
	* locale/lc-monetary.c: Likewise.
	* locale/lc-time.c: Likewise.
	* locale/localeinfo.h: Likewise.
	* locale/newlocale.c: Likewise.
	* locale/setlocale.c: Likewise.
	* locale/weight.h: Likewise.
	* locale/findlocale.c: Unconditionally use mmap.
	Handle new categories.
	* locale/loadlocale.c: Likewise.
	* locale/iso-3166.def: New file.
	* locale/iso-639.def: New file.
	* locale/programs/charmap-kw.gperf: Add new keywords.
	* locale/programs/locfile-kw.gperf: Likewise.
	* locale/programs/locfile-token.h: Define new tokens.
	* locale/programs/charmap.c: Rewrite to handle multibyte charsets.
	* locale/programs/charmap.h: New file.
	* locale/programs/charset.h: Removed.
	* locale/programs/config.h: Add __LC_LAST.
	* locale/programs/lc-address.c: New file.
	* locale/programs/lc-identification.c: New file.
	* locale/programs/lc-measurement.c: New file.
	* locale/programs/lc-name.c: New file.
	* locale/programs/lc-paper.c: New file.
	* locale/programs/lc-telephone.c: New file.
	* locale/programs/lc-collate.c: Update for locale rewrite.
	* locale/programs/lc-ctype.c: Likewise.
	* locale/programs/lc-messages.c: Likewise.
	* locale/programs/lc-monetary.c: Likewise.
	* locale/programs/lc-numeric.c: Likewise.
	* locale/programs/lc-time.c: Likewise.
	* locale/programs/locale.c: Likewise.
	* locale/programs/localedef.c: Likewise.
	* locale/programs/locfile.c: Likewise.
	* locale/programs/repertoire.c: Likewise.
	* locale/programs/repertoire.h: Likewise.
	* locale/programs/locfile.c: Update prototypes.
	Update handle_copy definition.
	* locale/programs/linereader.c: Add handling of wide char strings and
	new definition file syntax.
	* locale/programs/linereader.h (struct token): Add elements for wide
	character strings.
	* locale/programs/locale-spec.c: Disable handling of collation
	elements for now.
	* locale/programs/simple-hash.h: Cleanup.
	* locale/programs/stringtrans.h: Handle quite of end of line.
	* string/strcoll.c: Fall back on strcmp for now.
	* string/strxfrm.c: Fall back on strncpy/strlen for now.
	* time/strftime.c: Use new wide character data for wcsftime.
	* time/strptime.c: Remove _nl_C_LC_TIME declaration.
	* wctype/cname-lookup.h: Update for new LC_CTYPE data.
1999-08-31 07:04:41 +00:00

129 lines
3.6 KiB
C

/* Handle special requests.
Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#include "localeinfo.h"
/* We provide support for some special names. This helps debugging
and may be useful for advanced usage of the provided information
outside C. */
void
locale_special (const char *name, int show_category_name,
int show_keyword_name)
{
/* "collate-elements": print collation elements of locale. */
if (strcmp (name, "collate-elements") == 0)
{
size_t nelem = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_ELEM_HASH_SIZE);
if (show_category_name)
puts ("LC_COLLATE");
if (show_keyword_name)
fputs ("collate-elements=", stdout);
if (nelem != 0)
{
int first = 1;
size_t cnt;
for (cnt = 0; cnt < nelem; ++cnt)
if (__collate_element_hash[2 * cnt] != (~((u_int32_t) 0)))
{
size_t idx = __collate_element_hash[2 * cnt];
printf ("%s<%s>", first ? "" : ";",
&__collate_element_strings[idx]);
#if 0
/* We don't print the string. This is only confusing
because only the programs have to know the
encoding. The code is left in place because it
shows how to get the information. */
{
const wchar_t *wp;
idx = __collate_element_hash[2 * cnt + 1];
wp = &__collate_element_values[idx];
while (*wp != L'\0')
{
/********************************************\
|* XXX The element values are really wide *|
|* chars. But we are currently not able to *|
|* print these so fake here. *|
\********************************************/
int ch = wctob (*wp++);
if (ch != EOF)
putchar (ch);
else
fputs ("<??\?>", stdout);
}
putchar ('"');
}
#endif
first = 0;
}
}
putchar ('\n');
return;
}
if (strcmp (name, "collate-classes") == 0)
{
size_t nelem = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZE);
size_t cnt;
int first = 1;
if (show_category_name)
puts ("LC_COLLATE");
if (show_keyword_name)
fputs ("collate-classes=", stdout);
for (cnt = 0; cnt < nelem; ++cnt)
if (__collate_symbol_hash[2 * cnt] != 0xffffffff)
{
printf ("%s<%s>", first ? "" : ",",
&__collate_symbol_strings[__collate_symbol_hash[2 * cnt]]);
#if 0
{
size_t idx = __collate_symbol_hash[2 * cnt + 1];
size_t cls;
putchar ('=');
for (cls = 0; cls < __collate_symbol_classes[idx]; ++cls)
printf ("%s%d", cls == 0 ? "" : ":",
__collate_symbol_classes[idx + 1 + cls]);
}
#endif
first = 0;
}
putchar ('\n');
return;
}
}