1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-09-01 02:34:55 +00:00

c32_get_mapping: New module.

* lib/uchar.in.h (c32_mapping_t): New type.
(c32_get_mapping): New declaration.
* lib/c32_get_mapping.c: New file, based on lib/wctrans-impl.h.
* m4/uchar_h.m4 (gl_UCHAR_H_REQUIRE_DEFAULTS): Initialize
GNULIB_C32_GET_MAPPING.
* modules/uchar (Makefile.am): Substitute GNULIB_C32_GET_MAPPING.
* modules/c32_get_mapping: New file.
This commit is contained in:
Bruno Haible
2023-07-13 11:15:04 +02:00
parent fdcb6772f8
commit 07edc55417
6 changed files with 132 additions and 1 deletions
+9
View File
@@ -1,5 +1,14 @@
2023-07-13 Bruno Haible <bruno@clisp.org>
c32_get_mapping: New module.
* lib/uchar.in.h (c32_mapping_t): New type.
(c32_get_mapping): New declaration.
* lib/c32_get_mapping.c: New file, based on lib/wctrans-impl.h.
* m4/uchar_h.m4 (gl_UCHAR_H_REQUIRE_DEFAULTS): Initialize
GNULIB_C32_GET_MAPPING.
* modules/uchar (Makefile.am): Substitute GNULIB_C32_GET_MAPPING.
* modules/c32_get_mapping: New file.
towctrans: Relax license.
* modules/towctrans (License): Change to LGPLv2+.
* lib/towctrans.c: Update license notice.
+54
View File
@@ -0,0 +1,54 @@
/* Get descriptor for a 32-bit wide character case conversion.
Copyright (C) 2011-2023 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2023. */
#include <config.h>
#define IN_C32_GET_MAPPING
/* Specification. */
#include <uchar.h>
#include <string.h>
#include <wctype.h>
#if _GL_WCHAR_T_IS_UCS4
_GL_EXTERN_INLINE
#endif
c32_mapping_t
c32_get_mapping (const char *name)
{
#if _GL_WCHAR_T_IS_UCS4
return wctrans (name);
#else
if (name[0] == 't'
&& name[1] == 'o')
switch (name[2])
{
case 'l':
if (strcmp (name + 3, "ower") == 0)
return c32tolower;
break;
case 'u':
if (strcmp (name + 3, "pper") == 0)
return c32toupper;
break;
default:
break;
}
return (c32_mapping_t) 0;
#endif
}
+35
View File
@@ -729,6 +729,41 @@ _GL_CXXALIASWARN (c32_apply_type_test);
#endif
#if @GNULIB_C32_GET_MAPPING@
/* A scalar type. Instances of this type, other than (c32_mapping_t) 0,
represent a character mapping. It can be applied to 32-bit wide characters.
It is the counterpart of type 'wctrans_t' for wide characters.
To apply a certain mapping to a given character, use the function
'c32_apply_mapping'. */
# if _GL_WCHAR_T_IS_UCS4
typedef wctrans_t c32_mapping_t;
# else
typedef wint_t (*c32_mapping_t) (wint_t wc);
# endif
#endif
/* Return a character mapping with the given name, or (c32_mapping_t) 0
if the designated mapping does not exist.
This function is the counterpart of function 'wctrans' for wide characters.
*/
#if @GNULIB_C32_GET_MAPPING@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_MAPPING
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((1)) c32_mapping_t
c32_get_mapping (const char *name)
{
return wctrans (name);
}
_GL_END_C_LINKAGE
# else
_GL_FUNCDECL_SYS (c32_get_mapping, c32_mapping_t, (const char *name)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (c32_get_mapping, c32_mapping_t, (const char *name));
_GL_CXXALIASWARN (c32_get_mapping);
#endif
_GL_INLINE_HEADER_END
#endif /* _@GUARD_PREFIX@_UCHAR_H */
+2 -1
View File
@@ -1,4 +1,4 @@
# uchar_h.m4 serial 29
# uchar_h.m4 serial 30
dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -224,6 +224,7 @@ AC_DEFUN([gl_UCHAR_H_REQUIRE_DEFAULTS],
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SWIDTH])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32TOB])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_APPLY_TYPE_TEST])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_GET_MAPPING])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_GET_TYPE_TEST])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC16])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC32])
+31
View File
@@ -0,0 +1,31 @@
Description:
c32_get_mapping() function: get descriptor for a 32-bit wide character
case conversion.
Files:
lib/c32_get_mapping.c
Depends-on:
uchar
wctrans
c32tolower
c32toupper
configure.ac:
gl_UCHAR_MODULE_INDICATOR([c32_get_mapping])
Makefile.am:
lib_SOURCES += c32_get_mapping.c
Include:
<uchar.h>
Link:
$(LTLIBUNISTRING) when linking with libtool, $(LIBUNISTRING) otherwise
$(LTLIBC32CONV) when linking with libtool, $(LIBC32CONV) otherwise
License:
LGPLv2+
Maintainer:
Bruno Haible
+1
View File
@@ -61,6 +61,7 @@ uchar.h: uchar.in.h $(top_builddir)/config.status $(CXXDEFS_H)
-e 's/@''GNULIB_C32SWIDTH''@/$(GNULIB_C32SWIDTH)/g' \
-e 's/@''GNULIB_C32TOB''@/$(GNULIB_C32TOB)/g' \
-e 's/@''GNULIB_C32_APPLY_TYPE_TEST''@/$(GNULIB_C32_APPLY_TYPE_TEST)/g' \
-e 's/@''GNULIB_C32_GET_MAPPING''@/$(GNULIB_C32_GET_MAPPING)/g' \
-e 's/@''GNULIB_C32_GET_TYPE_TEST''@/$(GNULIB_C32_GET_TYPE_TEST)/g' \
-e 's/@''GNULIB_MBRTOC16''@/$(GNULIB_MBRTOC16)/g' \
-e 's/@''GNULIB_MBRTOC32''@/$(GNULIB_MBRTOC32)/g' \