From 2b7a3bbc9fbc0811154d5282be056fe5d2531c43 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 13 Jul 2023 00:50:29 +0200 Subject: [PATCH] c32_apply_type_test: New module. * lib/uchar.in.h (c32_apply_type_test): New declaration. * lib/c32_apply_type_test.c: New file. * m4/uchar_h.m4 (gl_UCHAR_H_REQUIRE_DEFAULTS): Initialize GNULIB_C32_APPLY_TYPE_TEST. * modules/uchar (Makefile.am): Substitute GNULIB_C32_APPLY_TYPE_TEST. * modules/c32_apply_type_test: New file. --- ChangeLog | 8 ++++++++ lib/c32_apply_type_test.c | 39 +++++++++++++++++++++++++++++++++++++ lib/uchar.in.h | 26 ++++++++++++++++++++++++- m4/uchar_h.m4 | 3 ++- modules/c32_apply_type_test | 25 ++++++++++++++++++++++++ modules/uchar | 1 + 6 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 lib/c32_apply_type_test.c create mode 100644 modules/c32_apply_type_test diff --git a/ChangeLog b/ChangeLog index 8327925de9..2c3feef5ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2023-07-12 Bruno Haible + c32_apply_type_test: New module. + * lib/uchar.in.h (c32_apply_type_test): New declaration. + * lib/c32_apply_type_test.c: New file. + * m4/uchar_h.m4 (gl_UCHAR_H_REQUIRE_DEFAULTS): Initialize + GNULIB_C32_APPLY_TYPE_TEST. + * modules/uchar (Makefile.am): Substitute GNULIB_C32_APPLY_TYPE_TEST. + * modules/c32_apply_type_test: New file. + c32_get_type_test: Add tests. * tests/test-c32_get_type_test.c: New file. * modules/c32_get_type_test-tests: New file. diff --git a/lib/c32_apply_type_test.c b/lib/c32_apply_type_test.c new file mode 100644 index 0000000000..f5a844eb02 --- /dev/null +++ b/lib/c32_apply_type_test.c @@ -0,0 +1,39 @@ +/* Apply a 32-bit wide character property test. + 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_TYPE_TEST +/* Specification. */ +#include + +#include +#include + +#if _GL_WCHAR_T_IS_UCS4 +_GL_EXTERN_INLINE +#endif +int +c32_apply_type_test (wint_t wc, c32_type_test_t property) +{ +#if _GL_WCHAR_T_IS_UCS4 + return iswctype (wc, property); +#else + return property (wc); +#endif +} diff --git a/lib/uchar.in.h b/lib/uchar.in.h index 72ec182308..edb6a751fd 100644 --- a/lib/uchar.in.h +++ b/lib/uchar.in.h @@ -669,7 +669,7 @@ _GL_CXXALIASWARN (mbstoc32s); #endif -#if @GNULIB_C32_GET_TYPE_TEST@ +#if @GNULIB_C32_GET_TYPE_TEST@ || @GNULIB_C32_APPLY_TYPE_TEST@ /* A scalar type. Instances of this type, other than (c32_type_test_t) 0, represent a character property, sometimes also viewed as a "character class". It can be applied to 32-bit wide characters. It is the counterpart of @@ -704,6 +704,30 @@ _GL_CXXALIAS_SYS (c32_get_type_test, c32_type_test_t, (const char *name)); _GL_CXXALIASWARN (c32_get_type_test); #endif +/* Test whether a given 32-bit wide character has the specified character + property. + Return non-zero if true, zero if false or if the argument is WEOF. + This function is the counterpart of function 'iswctype' for wide characters. + */ +#if @GNULIB_C32_APPLY_TYPE_TEST@ +# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_APPLY_TYPE_TEST +_GL_BEGIN_C_LINKAGE +_GL_INLINE _GL_ARG_NONNULL ((2)) int +c32_apply_type_test (wint_t wc, c32_type_test_t property) +{ + return iswctype (wc, property); +} +_GL_END_C_LINKAGE +# else +_GL_FUNCDECL_SYS (c32_apply_type_test, int, + (wint_t wc, c32_type_test_t property) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (c32_apply_type_test, int, + (wint_t wc, c32_type_test_t property)); +_GL_CXXALIASWARN (c32_apply_type_test); +#endif + _GL_INLINE_HEADER_END diff --git a/m4/uchar_h.m4 b/m4/uchar_h.m4 index 0fdaf47dbc..2bc52480d1 100644 --- a/m4/uchar_h.m4 +++ b/m4/uchar_h.m4 @@ -1,4 +1,4 @@ -# uchar_h.m4 serial 28 +# uchar_h.m4 serial 29 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_TYPE_TEST]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_GET_TYPE_TEST]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC16]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC32]) diff --git a/modules/c32_apply_type_test b/modules/c32_apply_type_test new file mode 100644 index 0000000000..3477413f86 --- /dev/null +++ b/modules/c32_apply_type_test @@ -0,0 +1,25 @@ +Description: +c32_apply_type_test() function: test whether a 32-bit wide character has +a given property. + +Files: +lib/c32_apply_type_test.c + +Depends-on: +uchar +iswctype + +configure.ac: +gl_UCHAR_MODULE_INDICATOR([c32_apply_type_test]) + +Makefile.am: +lib_SOURCES += c32_apply_type_test.c + +Include: + + +License: +LGPLv2+ + +Maintainer: +all diff --git a/modules/uchar b/modules/uchar index 6c52c7d3f3..1f42c6a08c 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_TYPE_TEST''@/$(GNULIB_C32_APPLY_TYPE_TEST)/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' \ -- 2.39.5