From 64be6ac85c8dadf67a7d90880e648fb6e053b75a Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 13 Jul 2023 11:30:54 +0200 Subject: [PATCH] c32_apply_mapping: New module. * lib/uchar.in.h (c32_apply_mapping): New declaration. * lib/c32_apply_mapping.c: New file. * m4/uchar_h.m4 (gl_UCHAR_H_REQUIRE_DEFAULTS): Initialize GNULIB_C32_APPLY_MAPPING. * modules/uchar (Makefile.am): Substitute GNULIB_C32_APPLY_MAPPING. * modules/c32_apply_mapping: New file. --- ChangeLog | 8 ++++++++ lib/c32_apply_mapping.c | 39 +++++++++++++++++++++++++++++++++++++++ lib/uchar.in.h | 26 +++++++++++++++++++++++++- m4/uchar_h.m4 | 3 ++- modules/c32_apply_mapping | 25 +++++++++++++++++++++++++ modules/uchar | 1 + 6 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 lib/c32_apply_mapping.c create mode 100644 modules/c32_apply_mapping diff --git a/ChangeLog b/ChangeLog index ac57f26980..bf5caac9da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2023-07-13 Bruno Haible + c32_apply_mapping: New module. + * lib/uchar.in.h (c32_apply_mapping): New declaration. + * lib/c32_apply_mapping.c: New file. + * m4/uchar_h.m4 (gl_UCHAR_H_REQUIRE_DEFAULTS): Initialize + GNULIB_C32_APPLY_MAPPING. + * modules/uchar (Makefile.am): Substitute GNULIB_C32_APPLY_MAPPING. + * modules/c32_apply_mapping: New file. + c32_get_mapping: Add tests. * tests/test-c32_get_mapping.c: New file. * modules/c32_get_mapping-tests: New file. diff --git a/lib/c32_apply_mapping.c b/lib/c32_apply_mapping.c new file mode 100644 index 0000000000..3c8be33fb1 --- /dev/null +++ b/lib/c32_apply_mapping.c @@ -0,0 +1,39 @@ +/* Apply 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 . */ + +/* Written by Bruno Haible , 2023. */ + +#include + +#define IN_C32_APPLY_MAPPING +/* Specification. */ +#include + +#include +#include + +#if _GL_WCHAR_T_IS_UCS4 +_GL_EXTERN_INLINE +#endif +wint_t +c32_apply_mapping (wint_t wc, c32_mapping_t mapping) +{ +#if _GL_WCHAR_T_IS_UCS4 + return towctrans (wc, mapping); +#else + return mapping (wc); +#endif +} diff --git a/lib/uchar.in.h b/lib/uchar.in.h index 28a5bd6244..eed6db3c54 100644 --- a/lib/uchar.in.h +++ b/lib/uchar.in.h @@ -729,7 +729,7 @@ _GL_CXXALIASWARN (c32_apply_type_test); #endif -#if @GNULIB_C32_GET_MAPPING@ +#if @GNULIB_C32_GET_MAPPING@ || @GNULIB_C32_APPLY_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. @@ -763,6 +763,30 @@ _GL_CXXALIAS_SYS (c32_get_mapping, c32_mapping_t, (const char *name)); _GL_CXXALIASWARN (c32_get_mapping); #endif +/* Apply the specified character mapping to a given 32-bit wide character. + Return the result of this mapping. Return the WC argument unchanged if it is + WEOF. + This function is the counterpart of function 'towctrans' for wide characters. + */ +#if @GNULIB_C32_APPLY_MAPPING@ +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_APPLY_MAPPING +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) wint_t +c32_apply_mapping (wint_t wc, c32_mapping_t mapping) +{ + return towctrans (wc, mapping); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32_apply_mapping, wint_t, + (wint_t wc, c32_mapping_t mapping) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32_apply_mapping, wint_t, + (wint_t wc, c32_mapping_t mapping)); +_GL_CXXALIASWARN (c32_apply_mapping); +#endif + _GL_INLINE_HEADER_END diff --git a/m4/uchar_h.m4 b/m4/uchar_h.m4 index 16cce8a468..299075f572 100644 --- a/m4/uchar_h.m4 +++ b/m4/uchar_h.m4 @@ -1,4 +1,4 @@ -# uchar_h.m4 serial 30 +# uchar_h.m4 serial 31 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, @@ -223,6 +223,7 @@ AC_DEFUN([gl_UCHAR_H_REQUIRE_DEFAULTS], gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32STOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32TOB]) + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_APPLY_MAPPING]) 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]) diff --git a/modules/c32_apply_mapping b/modules/c32_apply_mapping new file mode 100644 index 0000000000..49308259d0 --- /dev/null +++ b/modules/c32_apply_mapping @@ -0,0 +1,25 @@ +Description: +c32_apply_mapping() function: convert a 32-bit wide character using a +case mapping. + +Files: +lib/c32_apply_mapping.c + +Depends-on: +uchar +towctrans + +configure.ac: +gl_UCHAR_MODULE_INDICATOR([c32_apply_mapping]) + +Makefile.am: +lib_SOURCES += c32_apply_mapping.c + +Include: + + +License: +LGPLv2+ + +Maintainer: +all diff --git a/modules/uchar b/modules/uchar index 4e4d0ecd69..69ce596869 100644 --- a/modules/uchar +++ b/modules/uchar @@ -60,6 +60,7 @@ uchar.h: uchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) -e 's/@''GNULIB_C32STOMBS''@/$(GNULIB_C32STOMBS)/g' \ -e 's/@''GNULIB_C32SWIDTH''@/$(GNULIB_C32SWIDTH)/g' \ -e 's/@''GNULIB_C32TOB''@/$(GNULIB_C32TOB)/g' \ + -e 's/@''GNULIB_C32_APPLY_MAPPING''@/$(GNULIB_C32_APPLY_MAPPING)/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' \ -- 2.39.5