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:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
@@ -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])
|
||||
|
||||
@@ -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
|
||||
@@ -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' \
|
||||
|
||||
Reference in New Issue
Block a user