summaryrefslogtreecommitdiffstats
path: root/gl/lib/unistr
diff options
context:
space:
mode:
Diffstat (limited to 'gl/lib/unistr')
-rw-r--r--gl/lib/unistr/u-cpy.h33
-rw-r--r--gl/lib/unistr/u-pcpy.h22
-rw-r--r--gl/lib/unistr/u-strcat.h26
-rw-r--r--gl/lib/unistr/u-strlen.h26
-rw-r--r--gl/lib/unistr/u32-chr.c32
-rw-r--r--gl/lib/unistr/u32-cpy.c25
-rw-r--r--gl/lib/unistr/u32-pcpy.c26
-rw-r--r--gl/lib/unistr/u32-strcat.c26
-rw-r--r--gl/lib/unistr/u32-strlen.c25
9 files changed, 241 insertions, 0 deletions
diff --git a/gl/lib/unistr/u-cpy.h b/gl/lib/unistr/u-cpy.h
new file mode 100644
index 0000000..4848c14
--- /dev/null
+++ b/gl/lib/unistr/u-cpy.h
@@ -0,0 +1,33 @@
+/* Copy piece of UTF-8/UTF-16/UTF-32 string.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+#include <string.h>
+
+UNIT *
+FUNC (UNIT *dest, const UNIT *src, size_t n)
+{
+#if 0
+ UNIT *destptr = dest;
+
+ for (; n > 0; n--)
+ *destptr++ = *src++;
+#else
+ if (n > 0)
+ memcpy ((char *) dest, (const char *) src, n * sizeof (UNIT));
+#endif
+ return dest;
+}
diff --git a/gl/lib/unistr/u-pcpy.h b/gl/lib/unistr/u-pcpy.h
new file mode 100644
index 0000000..8124197
--- /dev/null
+++ b/gl/lib/unistr/u-pcpy.h
@@ -0,0 +1,22 @@
+/* Copy piece of UTF-8/16/32 string, return pointer after last written unit.
+ Copyright (C) 2020-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2023.
+
+ 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/>. */
+
+UNIT *
+FUNC (UNIT *dest, const UNIT *src, size_t n)
+{
+ return U_CPY (dest, src, n) + n;
+}
diff --git a/gl/lib/unistr/u-strcat.h b/gl/lib/unistr/u-strcat.h
new file mode 100644
index 0000000..a4a4e93
--- /dev/null
+++ b/gl/lib/unistr/u-strcat.h
@@ -0,0 +1,26 @@
+/* Concatenate UTF-8/UTF-16/UTF-32 strings.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+UNIT *
+FUNC (UNIT *dest, const UNIT *src)
+{
+ UNIT *destptr = dest + U_STRLEN (dest);
+
+ for (; (*destptr = *src) != 0; src++, destptr++)
+ ;
+ return dest;
+}
diff --git a/gl/lib/unistr/u-strlen.h b/gl/lib/unistr/u-strlen.h
new file mode 100644
index 0000000..03106a1
--- /dev/null
+++ b/gl/lib/unistr/u-strlen.h
@@ -0,0 +1,26 @@
+/* Determine length of UTF-8/UTF-16/UTF-32 string.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+size_t
+FUNC (const UNIT *s)
+{
+ const UNIT *ptr;
+
+ for (ptr = s; *ptr != 0; ptr++)
+ ;
+ return ptr - s;
+}
diff --git a/gl/lib/unistr/u32-chr.c b/gl/lib/unistr/u32-chr.c
new file mode 100644
index 0000000..65500d8
--- /dev/null
+++ b/gl/lib/unistr/u32-chr.c
@@ -0,0 +1,32 @@
+/* Search character in piece of UTF-32 string.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "unistr.h"
+
+uint32_t *
+u32_chr (const uint32_t *s, size_t n, ucs4_t uc)
+{
+ for (; n > 0; s++, n--)
+ {
+ if (*s == uc)
+ return (uint32_t *) s;
+ }
+ return NULL;
+}
diff --git a/gl/lib/unistr/u32-cpy.c b/gl/lib/unistr/u32-cpy.c
new file mode 100644
index 0000000..a1a840f
--- /dev/null
+++ b/gl/lib/unistr/u32-cpy.c
@@ -0,0 +1,25 @@
+/* Copy piece of UTF-32 string.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "unistr.h"
+
+#define FUNC u32_cpy
+#define UNIT uint32_t
+#include "u-cpy.h"
diff --git a/gl/lib/unistr/u32-pcpy.c b/gl/lib/unistr/u32-pcpy.c
new file mode 100644
index 0000000..922f704
--- /dev/null
+++ b/gl/lib/unistr/u32-pcpy.c
@@ -0,0 +1,26 @@
+/* Copy piece of UTF-32 string, return pointer after last written unit.
+ Copyright (C) 2020-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2023.
+
+ 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/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "unistr.h"
+
+#define FUNC u32_pcpy
+#define UNIT uint32_t
+#define U_CPY u32_cpy
+#include "u-pcpy.h"
diff --git a/gl/lib/unistr/u32-strcat.c b/gl/lib/unistr/u32-strcat.c
new file mode 100644
index 0000000..2da08b1
--- /dev/null
+++ b/gl/lib/unistr/u32-strcat.c
@@ -0,0 +1,26 @@
+/* Concatenate UTF-32 strings.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "unistr.h"
+
+#define FUNC u32_strcat
+#define UNIT uint32_t
+#define U_STRLEN u32_strlen
+#include "u-strcat.h"
diff --git a/gl/lib/unistr/u32-strlen.c b/gl/lib/unistr/u32-strlen.c
new file mode 100644
index 0000000..1c43a30
--- /dev/null
+++ b/gl/lib/unistr/u32-strlen.c
@@ -0,0 +1,25 @@
+/* Determine length of UTF-32 string.
+ Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+ 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/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "unistr.h"
+
+#define FUNC u32_strlen
+#define UNIT uint32_t
+#include "u-strlen.h"