This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

wctrans_l



Hi,

The locale functions with a first-class locale argument are missing the
__wctrans_l function.

__towctrans_l is there, but since its wctrans_t argument must belong to
the same locale, a user must not pass the result of 'wctrans' to
'__towctrans_l'; thus this function is useless if there is no corresponding
'__wctrans_l' function.


2000-07-25  Bruno Haible  <haible@clisp.cons.org>

	* wctype/wctype.h (__wctrans_l): New declaration.
	* wctype/wctrans_l.c: New file.
	* wctype/Makefile (routines): Add wctrans_l.

*** glibc-20000724/wctype/wctype.h.bak	Wed Jul 26 00:32:57 2000
--- glibc-20000724/wctype/wctype.h	Tue Jul 25 00:08:37 2000
***************
*** 378,383 ****
--- 378,388 ----
  /* Converts an lowercase letter to the corresponding uppercase letter.  */
  extern wint_t __towupper_l (wint_t __wc, __locale_t __locale) __THROW;
  
+ /* Construct value that describes a mapping between wide characters
+    identified by the string argument PROPERTY.  */
+ extern wctrans_t __wctrans_l (__const char *__property, __locale_t __locale)
+      __THROW;
+ 
  /* Map the wide character WC using the mapping described by DESC.  */
  extern wint_t __towctrans_l (wint_t __wc, wctrans_t __desc,
  			     __locale_t __locale) __THROW;
*** glibc-20000724/wctype/wctrans_l.c.bak	Tue Jul 25 00:08:37 2000
--- glibc-20000724/wctype/wctrans_l.c	Tue Jul 25 00:08:37 2000
***************
*** 0 ****
--- 1,60 ----
+ /* Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    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.  */
+ 
+ #include <string.h>
+ #include <wctype.h>
+ #include "../locale/localeinfo.h"
+ 
+ wctrans_t
+ __wctrans_l (const char *property, __locale_t locale)
+ {
+   const char *names;
+   size_t cnt;
+ 
+   names = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_NAMES)].string;
+   cnt = 0;
+   while (names[0] != '\0')
+     {
+       if (strcmp (property, names) == 0)
+ 	break;
+ 
+       names = strchr (names, '\0') + 1;
+       ++cnt;
+     }
+ 
+   if (names[0] == '\0')
+     return 0;
+ 
+   if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word == 0)
+     {
+       /* Old locale format.  */
+       if (cnt == 0)
+ 	return (wctrans_t) locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER32)].string;
+       else if (cnt == 1)
+ 	return (wctrans_t) locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER32)].string;
+ 
+       /* We have to search the table.  */
+       return (wctrans_t) (const int32_t *) locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_NUM_LC_CTYPE + cnt - 2)].string;
+     }
+   else
+     {
+       /* New locale format.  */
+       size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + cnt;
+       return (wctrans_t) locale->__locales[LC_CTYPE]->values[i].string;
+     }
+ }
*** glibc-20000724/wctype/Makefile.bak	Tue Sep  7 17:37:36 1999
--- glibc-20000724/wctype/Makefile	Tue Jul 25 00:08:37 2000
***************
*** 24,30 ****
  headers		:= wctype.h
  distribute	:= cname-lookup.h
  routines	:= wcfuncs wctype iswctype wctrans towctrans wcextra \
! 		   wcfuncs_l iswctype_l towctrans_l wctype_l wcextra_l
  
  tests	:= test_wctype test_wcfuncs
  
--- 24,31 ----
  headers		:= wctype.h
  distribute	:= cname-lookup.h
  routines	:= wcfuncs wctype iswctype wctrans towctrans wcextra \
! 		   wcfuncs_l wctype_l iswctype_l wctrans_l towctrans_l \
! 		   wcextra_l
  
  tests	:= test_wctype test_wcfuncs
  

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]