summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/u8c/SIZE_C.h26
-rw-r--r--include/u8c/abrt.h23
-rw-r--r--include/u8c/dbg.h (renamed from include/u8c/debug.h)10
-rw-r--r--include/u8c/dbgprint.h4
-rw-r--r--include/u8c/end.h10
-rw-r--r--include/u8c/fmt.h10
-rw-r--r--include/u8c/fmttyp.h32
-rw-r--r--include/u8c/geterr.h11
-rw-r--r--include/u8c/init.h10
-rw-r--r--include/u8c/isalnum.h12
-rw-r--r--include/u8c/isalpha.h12
-rw-r--r--include/u8c/iscntrl.h12
-rw-r--r--include/u8c/isdigit.h10
-rw-r--r--include/u8c/ispunct.h12
-rw-r--r--include/u8c/isspace.h12
-rw-r--r--include/u8c/isxdigit.h (renamed from include/u8c/txt.h)18
-rw-r--r--include/u8c/print.h11
-rw-r--r--include/u8c/println.h11
-rw-r--r--include/u8c/seterr.h5
-rw-r--r--include/u8c/setfmt.h22
-rw-r--r--include/u8c/thrdsafe.h10
-rw-r--r--include/u8c/u32alloc.h23
-rw-r--r--include/u8c/u32cat.h23
-rw-r--r--include/u8c/u32cmp.h10
-rw-r--r--include/u8c/u32cp.h11
-rw-r--r--include/u8c/u32fndchr.h23
-rw-r--r--include/u8c/u32fndpat.h23
-rw-r--r--include/u8c/u32free.h17
-rw-r--r--include/u8c/u32substr.h23
-rw-r--r--include/u8c/u32sz.h11
-rw-r--r--include/u8c/u8alloc.h22
-rw-r--r--include/u8c/u8dec.h11
-rw-r--r--include/u8c/u8enc.h11
-rw-r--r--include/u8c/u8free.h16
-rw-r--r--include/u8c/unimax.h21
-rw-r--r--include/u8c/ver.h2
-rw-r--r--include/u8c/vfmt.h11
-rw-r--r--include/u8c/vprint.h11
38 files changed, 319 insertions, 233 deletions
diff --git a/include/u8c/SIZE_C.h b/include/u8c/SIZE_C.h
index 1591252..4a8d513 100644
--- a/include/u8c/SIZE_C.h
+++ b/include/u8c/SIZE_C.h
@@ -15,31 +15,17 @@
*/
/* Size constant */
# if !defined(SIZE_C)
-# if !defined(__cplusplus)
# include <limits.h>
-# endif
-# if defined(__cplusplus) && __cplusplus > 0x31512l
-/* C++23 has a size_t suffix. */
-# define SIZE_C(val) val ## uz
+# include <stdint.h>
+# if SIZE_MAX == USHRT_MAX
+# define SIZE_C(val) ((unsigned short)val)
# elif SIZE_MAX == UINT_MAX
# define SIZE_C(val) val
# elif SIZE_MAX == ULONG_MAX
-# define SIZE_C(val) val ## ul
+# define SIZE_C(val) val ## lu
# elif SIZE_MAX == ULLONG_MAX
-# define SIZE_C(val) val ## ull
-# elif SIZE_MAX == UINTMAX_MAX
-# include <stdint.h>
-# define SIZE_C(val) (UINTMAX_C(val))
+# define SIZE_C(val) val ## llu
# else
-/* Cannot match width; construct new element of type "size_t" */
-# if defined(__cplusplus)
-/* C++ has value initialisation. */
-# include <cstddef>
-# define SIZE_C(val) (std::size_t{val})
-# else
-/* C has compound literals. */
-# include <stddef.h>
-# define SIZE_C(val) ((size_t){val})
-# endif
+# define SIZE_C(val) ((size_t)UINTMAX_C(val))
# endif
# endif
diff --git a/include/u8c/abrt.h b/include/u8c/abrt.h
new file mode 100644
index 0000000..a068ff2
--- /dev/null
+++ b/include/u8c/abrt.h
@@ -0,0 +1,23 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* Abort */
+# if !defined(u8c_sym_abrt)
+# define u8c_sym_abrt
+# include <stdbool.h>
+# include <stdnoreturn.h>
+# include <uchar.h>
+extern noreturn bool u8c_abrt(char const * const fl,long long const ln,char const * const fn,char const * const why);
+# endif
diff --git a/include/u8c/debug.h b/include/u8c/dbg.h
index 3bd2dfd..e389195 100644
--- a/include/u8c/debug.h
+++ b/include/u8c/dbg.h
@@ -16,12 +16,6 @@
/* Debug */
# if !defined(u8c_sym_debug)
# define u8c_sym_debug
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t const u8c_debug;
-# if defined(__cplusplus)
-}
-# endif
+# include <stdbool.h>
+extern bool const u8c_dbg;
# endif
diff --git a/include/u8c/dbgprint.h b/include/u8c/dbgprint.h
index 42fcb16..2f974d2 100644
--- a/include/u8c/dbgprint.h
+++ b/include/u8c/dbgprint.h
@@ -16,11 +16,7 @@
/* Debug print */
# if !defined(u8c_dbgprint)
# if defined(NDEBUG)
-# if defined(__cplusplus)
-# define u8c_dbgprint(...) (static_cast<void>(0x0));
-# else
# define u8c_dbgprint(...) ((void)0x0)
-# endif
# else
# include <u8c/println.h>
# include <stdio.h>
diff --git a/include/u8c/end.h b/include/u8c/end.h
index 1322496..01c8c24 100644
--- a/include/u8c/end.h
+++ b/include/u8c/end.h
@@ -16,12 +16,6 @@
/* End */
# if !defined(u8c_sym_end)
# define u8c_sym_end
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_end(void);
-# if defined(__cplusplus)
-}
-# endif
+# include <stdbool.h>
+extern bool u8c_end(void);
# endif
diff --git a/include/u8c/fmt.h b/include/u8c/fmt.h
index 61ee8b2..4f7ed1b 100644
--- a/include/u8c/fmt.h
+++ b/include/u8c/fmt.h
@@ -17,12 +17,6 @@
# if !defined(u8c_sym_fmt)
# define u8c_sym_fmt
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_fmt(size_t * const outsz,uint_least32_t const * * const out,uint_least32_t const * const in,...);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_fmt(size_t * const outsz,char32_t const * * const out,char32_t const * const in,...);
# endif
diff --git a/include/u8c/fmttyp.h b/include/u8c/fmttyp.h
index d9b27de..cce9a2f 100644
--- a/include/u8c/fmttyp.h
+++ b/include/u8c/fmttyp.h
@@ -17,13 +17,33 @@
# if !defined(u8c_sym_fmttyp)
# define u8c_sym_fmttyp
enum u8c_fmttyp {
- u8c_fmttyp_bgcol, /* Background colour */
+ u8c_fmttyp_bgcol, /* Background colour (uint_least32_t) */
u8c_fmttyp_bgcol0, /* Background colour #0 */
- u8c_fmttyp_chr, /* Character */
- u8c_fmttyp_fgcol, /* Foreground colour */
+ u8c_fmttyp_bool, /* Boolean (bool) */
+ u8c_fmttyp_byt, /* Byte (char) */
+ u8c_fmttyp_chr, /* Character (uint_least32_t) */
+ u8c_fmttyp_fgcol, /* Foreground colour (uint_least32_t) */
u8c_fmttyp_fgcol0, /* Foreground colour #0 */
- u8c_fmttyp_int, /* Integer */
- u8c_fmttyp_str, /* String */
- u8c_fmttyp_uint, /* Unsigned integer */
+ u8c_fmttyp_int, /* Integer (int) */
+ u8c_fmttyp_int16, /* Integer 16 bit (int_least16_t) */
+ u8c_fmttyp_int32, /* Integer 32 bit (int_least32_t) */
+ u8c_fmttyp_int64, /* Integer 64 bit (int_least64_t) */
+ u8c_fmttyp_int8, /* Integer 8 bit (int_least8_t) */
+ u8c_fmttyp_llong, /* Long long (long long) */
+ u8c_fmttyp_long, /* Long (long) */
+ u8c_fmttyp_sbyt, /* Signed byte (signed char) */
+ u8c_fmttyp_shrt, /* Short (short) */
+ u8c_fmttyp_str, /* String (char32_t const *) */
+ u8c_fmttyp_sz, /* Size (size_t) */
+ u8c_fmttyp_tm, /* Time (uint_least64_t) */
+ u8c_fmttyp_ubyt, /* Unsigned byte (unsigned char) */
+ u8c_fmttyp_uint, /* Unsigned integer (unsigned int) */
+ u8c_fmttyp_uint16, /* Unsigned integer 16 bit (uint_least16_t) */
+ u8c_fmttyp_uint32, /* Unsigned integer 32 bit (uint_least32_t) */
+ u8c_fmttyp_uint64, /* Unsigned integer 64 bit (uint_least64_t) */
+ u8c_fmttyp_uint8, /* Unsigned integer 8 bit (uint_least8_t) */
+ u8c_fmttyp_ulong, /* Unsigned long (unsigned long) */
+ u8c_fmttyp_ullong, /* Unsigned long long (unsigned long long) */
+ u8c_fmttyp_ushrt, /* Unsigned short (unsigned short) */
};
# endif
diff --git a/include/u8c/geterr.h b/include/u8c/geterr.h
index 45a25ac..70acc4f 100644
--- a/include/u8c/geterr.h
+++ b/include/u8c/geterr.h
@@ -16,13 +16,8 @@
/* Get error */
# if !defined(u8c_sym_geterr)
# define u8c_sym_geterr
+# include <stdbool.h>
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_geterr(size_t * const sz,uint_least32_t const * * const out);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_geterr(size_t * const sz,char32_t const * * const out);
# endif
diff --git a/include/u8c/init.h b/include/u8c/init.h
index 823c1fb..1aa4804 100644
--- a/include/u8c/init.h
+++ b/include/u8c/init.h
@@ -16,12 +16,6 @@
/* Initialise */
# if !defined(u8c_sym_init)
# define u8c_sym_init
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_init(void);
-# if defined(__cplusplus)
-}
-# endif
+# include <stdbool.h>
+extern bool u8c_init(void);
# endif
diff --git a/include/u8c/isalnum.h b/include/u8c/isalnum.h
index 0b61bfd..b951f5e 100644
--- a/include/u8c/isalnum.h
+++ b/include/u8c/isalnum.h
@@ -13,15 +13,11 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Is digit */
+/* Is alphanumeric */
# if !defined(luma_sym_isalnum)
# define luma_sym_isalnum
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_isalnum(uint_least8_t * const res,uint_least32_t const chr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_isalnum(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/isalpha.h b/include/u8c/isalpha.h
index 3493dc0..a43363f 100644
--- a/include/u8c/isalpha.h
+++ b/include/u8c/isalpha.h
@@ -13,15 +13,11 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Is digit */
+/* Is alphabetic */
# if !defined(luma_sym_isalpha)
# define luma_sym_isalpha
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_isalpha(uint_least8_t * const res,uint_least32_t const chr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_isalpha(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/iscntrl.h b/include/u8c/iscntrl.h
index 0f52911..5ffe157 100644
--- a/include/u8c/iscntrl.h
+++ b/include/u8c/iscntrl.h
@@ -13,15 +13,11 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Is digit */
+/* Is control */
# if !defined(luma_sym_iscntrl)
# define luma_sym_iscntrl
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_iscntrl(uint_least8_t * const res,uint_least32_t const chr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_iscntrl(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/isdigit.h b/include/u8c/isdigit.h
index c2053c7..a28dd9a 100644
--- a/include/u8c/isdigit.h
+++ b/include/u8c/isdigit.h
@@ -16,12 +16,8 @@
/* Is digit */
# if !defined(luma_sym_isdigit)
# define luma_sym_isdigit
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_isdigit(uint_least8_t * const res,uint_least32_t const chr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_isdigit(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/ispunct.h b/include/u8c/ispunct.h
index a4da5c9..9834491 100644
--- a/include/u8c/ispunct.h
+++ b/include/u8c/ispunct.h
@@ -13,15 +13,11 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Is digit */
+/* Is punctuation */
# if !defined(luma_sym_ispunct)
# define luma_sym_ispunct
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_ispunct(uint_least8_t * const res,uint_least32_t const chr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_ispunct(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/isspace.h b/include/u8c/isspace.h
index 35f9d4f..78cafea 100644
--- a/include/u8c/isspace.h
+++ b/include/u8c/isspace.h
@@ -13,15 +13,11 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Is digit */
+/* Is space */
# if !defined(luma_sym_isspace)
# define luma_sym_isspace
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_isspace(uint_least8_t * const res,uint_least32_t const chr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_isspace(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/txt.h b/include/u8c/isxdigit.h
index 4959e81..57e1392 100644
--- a/include/u8c/txt.h
+++ b/include/u8c/isxdigit.h
@@ -13,17 +13,11 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Text */
-# if !defined(__STDC_UTF_32__)
-# error UTF-32 is required to use u8c_txt.
-# else
-# if !defined(u8c_txt)
-# if defined(__cplusplus)
-# include <cstdint>
-# define u8c_txt(txt) (reinterpret_cast<std::uint_least32_t const *>(U ## txt))
-# else
+/* Is hexadecimal digit */
+# if !defined(luma_sym_isxdigit)
+# define luma_sym_isxdigit
+# include <stdbool.h>
# include <stdint.h>
-# define u8c_txt(txt) (uint_least32_t const *)U ## txt
-# endif
-# endif
+# include <uchar.h>
+extern bool u8c_isxdigit(uint_least8_t * const res,char32_t const chr);
# endif
diff --git a/include/u8c/print.h b/include/u8c/print.h
index f77875d..f76c942 100644
--- a/include/u8c/print.h
+++ b/include/u8c/print.h
@@ -16,13 +16,8 @@
/* Print */
# if !defined(u8c_sym_print)
# define u8c_sym_print
-# include <stdint.h>
+# include <stdbool.h>
# include <stdio.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_print(FILE * fp,uint_least32_t const * const msg,...);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_print(FILE * fp,char32_t const * const msg,...);
# endif
diff --git a/include/u8c/println.h b/include/u8c/println.h
index d6874de..8d80353 100644
--- a/include/u8c/println.h
+++ b/include/u8c/println.h
@@ -16,13 +16,8 @@
/* Print line */
# if !defined(u8c_sym_println)
# define u8c_sym_println
-# include <stdint.h>
+# include <stdbool.h>
# include <stdio.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_println(FILE * fp,uint_least32_t const * const msg,...);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_println(FILE * fp,char32_t const * const msg,...);
# endif
diff --git a/include/u8c/seterr.h b/include/u8c/seterr.h
index ae2f534..3f3e793 100644
--- a/include/u8c/seterr.h
+++ b/include/u8c/seterr.h
@@ -16,6 +16,7 @@
/* Set error */
# if !defined(u8c_sym_seterr)
# define u8c_sym_seterr
-# include <stdint.h>
-extern uint_least8_t u8c_seterr(uint_least32_t const * const msg);
+# include <stdbool.h>
+# include <uchar.h>
+extern bool u8c_seterr(char32_t const * const msg);
# endif
diff --git a/include/u8c/setfmt.h b/include/u8c/setfmt.h
new file mode 100644
index 0000000..f742bea
--- /dev/null
+++ b/include/u8c/setfmt.h
@@ -0,0 +1,22 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* Set format */
+# if !defined(u8c_sym_setfmt)
+# define u8c_sym_setfmt
+# include <stdbool.h>
+# include <stdint.h>
+extern bool u8c_setfmt(uint_least8_t const base,uint_least8_t const endian);
+# endif
diff --git a/include/u8c/thrdsafe.h b/include/u8c/thrdsafe.h
index 1de6a31..2ab6709 100644
--- a/include/u8c/thrdsafe.h
+++ b/include/u8c/thrdsafe.h
@@ -16,12 +16,6 @@
/* Thread-safe */
# if !defined(u8c_sym_thrdsafe)
# define u8c_sym_thrdsafe
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t const u8c_thrdsafe;
-# if defined(__cplusplus)
-}
-# endif
+# include <stdbool.h>
+extern bool const u8c_thrdsafe;
# endif
diff --git a/include/u8c/u32alloc.h b/include/u8c/u32alloc.h
new file mode 100644
index 0000000..5241ee6
--- /dev/null
+++ b/include/u8c/u32alloc.h
@@ -0,0 +1,23 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* UTF-32 allocate */
+# if !defined(u8c_sym_u32alloc)
+# define u8c_sym_u32alloc
+# include <stdbool.h>
+# include <stddef.h>
+# include <uchar.h>
+extern bool u8c_u32alloc(char32_t * * const u32,size_t const sz);
+# endif
diff --git a/include/u8c/u32cat.h b/include/u8c/u32cat.h
new file mode 100644
index 0000000..7672cb7
--- /dev/null
+++ b/include/u8c/u32cat.h
@@ -0,0 +1,23 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* UTF-32 concatenate */
+# if !defined(luma_sym_u32cat)
+# define luma_sym_u32cat
+# include <stdbool.h>
+# include <stddef.h>
+# include <uchar.h>
+extern bool u8c_u32cat(size_t * const sz,char32_t const * * const out,char32_t const * const lstr,char32_t const * const rstr);
+# endif
diff --git a/include/u8c/u32cmp.h b/include/u8c/u32cmp.h
index 5ca3d5d..ffc2729 100644
--- a/include/u8c/u32cmp.h
+++ b/include/u8c/u32cmp.h
@@ -16,12 +16,8 @@
/* UTF-32 compare */
# if !defined(luma_sym_u32cmp)
# define luma_sym_u32cmp
+# include <stdbool.h>
# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_u32cmp(uint_least8_t * const res,uint_least32_t const * const lstr,uint_least32_t const * const rstr);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_u32cmp(uint_least8_t * const res,char32_t const * const lstr,char32_t const * const rstr);
# endif
diff --git a/include/u8c/u32cp.h b/include/u8c/u32cp.h
index 66cc870..01e2ae1 100644
--- a/include/u8c/u32cp.h
+++ b/include/u8c/u32cp.h
@@ -16,13 +16,8 @@
/* UTF-32 copy */
# if !defined(luma_sym_u32cp)
# define luma_sym_u32cp
+# include <stdbool.h>
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_u32cp(size_t * const sz,uint_least32_t const * * const out,uint_least32_t const * const in);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_u32cp(size_t * const sz,char32_t const * * const out,char32_t const * const in);
# endif
diff --git a/include/u8c/u32fndchr.h b/include/u8c/u32fndchr.h
new file mode 100644
index 0000000..d52682d
--- /dev/null
+++ b/include/u8c/u32fndchr.h
@@ -0,0 +1,23 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* UTF-32 find character */
+# if !defined(luma_sym_u32fndchr)
+# define luma_sym_u32fndchr
+# include <stdbool.h>
+# include <stddef.h>
+# include <uchar.h>
+extern bool u8c_u32fndchr(size_t * const pos,char32_t const * const in,char32_t const chr);
+# endif
diff --git a/include/u8c/u32fndpat.h b/include/u8c/u32fndpat.h
new file mode 100644
index 0000000..a17948b
--- /dev/null
+++ b/include/u8c/u32fndpat.h
@@ -0,0 +1,23 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* UTF-32 find pattern */
+# if !defined(luma_sym_u32fndpat)
+# define luma_sym_u32fndpat
+# include <stdbool.h>
+# include <stddef.h>
+# include <uchar.h>
+extern bool u8c_u32fndpat(size_t * const pos,char32_t const * const in,char32_t const * const pat);
+# endif
diff --git a/include/u8c/u32free.h b/include/u8c/u32free.h
index fd431e0..4525b22 100644
--- a/include/u8c/u32free.h
+++ b/include/u8c/u32free.h
@@ -13,15 +13,10 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Format */
-# if !defined(u8c_u32free)
-# if defined(__cplusplus)
-# include <cstdint>
-# include <cstdlib>
-# define u8c_u32free(u32) (std::free(const_cast<uint_least32_t *>(u32)))
-# else
-# include <stdint.h>
-# include <stdlib.h>
-# define u8c_u32free(u32) (free((uint_least32_t *)u32))
-# endif
+/* UTF-32 free */
+# if !defined(u8c_sym_u32free)
+# define u8c_sym_u32free
+# include <stdbool.h>
+# include <uchar.h>
+extern bool u8c_u32free(char32_t const * * const u32);
# endif
diff --git a/include/u8c/u32substr.h b/include/u8c/u32substr.h
new file mode 100644
index 0000000..e9258a4
--- /dev/null
+++ b/include/u8c/u32substr.h
@@ -0,0 +1,23 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* UTF-32 sub-string */
+# if !defined(luma_sym_u32substr)
+# define luma_sym_u32substr
+# include <stdbool.h>
+# include <stddef.h>
+# include <uchar.h>
+extern bool u8c_u32substr(char32_t const * * const out,size_t const start,size_t const len,char32_t const * const in);
+# endif
diff --git a/include/u8c/u32sz.h b/include/u8c/u32sz.h
index b97ccdb..f182e92 100644
--- a/include/u8c/u32sz.h
+++ b/include/u8c/u32sz.h
@@ -16,13 +16,8 @@
/* UTF-32 size */
# if !defined(u8c_sym_u32sz)
# define u8c_sym_u32sz
+# include <stdbool.h>
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_u32sz(size_t * sz,uint_least32_t const * in);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_u32sz(size_t * sz,char32_t const * in);
# endif
diff --git a/include/u8c/u8alloc.h b/include/u8c/u8alloc.h
new file mode 100644
index 0000000..b5c2516
--- /dev/null
+++ b/include/u8c/u8alloc.h
@@ -0,0 +1,22 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* UTF-8 allocate */
+# if !defined(u8c_sym_u8alloc)
+# define u8c_sym_u8alloc
+# include <stdbool.h>
+# include <stddef.h>
+extern bool u8c_u8alloc(unsigned char * * const u32,size_t const sz);
+# endif
diff --git a/include/u8c/u8dec.h b/include/u8c/u8dec.h
index eed43ae..2b76df8 100644
--- a/include/u8c/u8dec.h
+++ b/include/u8c/u8dec.h
@@ -16,13 +16,8 @@
/* UTF-8 decode */
# if !defined(u8c_sym_dec)
# define u8c_sym_dec
+# include <stdbool.h>
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_u8dec(size_t * const sz,uint_least32_t const * * const out,uint_least8_t const * const in);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_u8dec(size_t * const sz,char32_t const * * const out,unsigned char const * const in);
# endif
diff --git a/include/u8c/u8enc.h b/include/u8c/u8enc.h
index 8040f8d..096e65a 100644
--- a/include/u8c/u8enc.h
+++ b/include/u8c/u8enc.h
@@ -16,13 +16,8 @@
/* UTF-8 encode */
# if !defined(u8c_sym_enc)
# define u8c_sym_enc
+# include <stdbool.h>
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_u8enc(size_t * const sz,uint_least8_t const * * const out,uint_least32_t const * const in);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_u8enc(size_t * const sz,unsigned char const * * const out,char32_t const * const in);
# endif
diff --git a/include/u8c/u8free.h b/include/u8c/u8free.h
index 1ae3242..f1994dd 100644
--- a/include/u8c/u8free.h
+++ b/include/u8c/u8free.h
@@ -13,15 +13,9 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Format */
-# if !defined(u8c_u8free)
-# if defined(__cplusplus)
-# include <cstdint>
-# include <cstdlib>
-# define u8c_u8free(u8) (std::free(const_cast<std::uint_least8_t *>(u8)))
-# else
-# include <stdint.h>
-# include <stdlib.h>
-# define u8c_u8free(u8) (free((uint_least8_t *)u8))
-# endif
+/* UTF-8 free */
+# if !defined(u8c_sym_u8free)
+# define u8c_sym_u8free
+# include <stdbool.h>
+extern bool u8c_u8free(unsigned char const * * const u8);
# endif
diff --git a/include/u8c/unimax.h b/include/u8c/unimax.h
new file mode 100644
index 0000000..10c8be6
--- /dev/null
+++ b/include/u8c/unimax.h
@@ -0,0 +1,21 @@
+/*
+ Copyright 2021 Gabriel Jensen
+
+ This file is part of u8c.
+
+ u8c is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ u8c 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with u8c.
+
+ If not, see <https://www.gnu.org/licenses/>.
+*/
+/* Unicode maximum */
+# if !defined(u8c_unimax)
+# include <stdint.h>
+# include <uchar.h>
+# define u8c_unimax ((char32_t)UINT32_C(0x10FFFF))
+# endif
diff --git a/include/u8c/ver.h b/include/u8c/ver.h
index f10872c..054052d 100644
--- a/include/u8c/ver.h
+++ b/include/u8c/ver.h
@@ -16,5 +16,5 @@
/* Version */
# if !defined(u8c_ver)
# include <stdint.h>
-# define u8c_ver (UINT64_C(0x11))
+# define u8c_ver (UINT64_C(0x12))
# endif
diff --git a/include/u8c/vfmt.h b/include/u8c/vfmt.h
index d4ae9b0..8db9e05 100644
--- a/include/u8c/vfmt.h
+++ b/include/u8c/vfmt.h
@@ -17,13 +17,8 @@
# if !defined(u8c_sym_vfmt)
# define u8c_sym_vfmt
# include <stdarg.h>
+# include <stdbool.h>
# include <stddef.h>
-# include <stdint.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_vfmt(size_t * const sz,uint_least32_t const * * const out,uint_least32_t const * const in,va_list args);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_vfmt(size_t * const sz,char32_t const * * const out,char32_t const * const in,va_list args);
# endif
diff --git a/include/u8c/vprint.h b/include/u8c/vprint.h
index ace9612..41e7e41 100644
--- a/include/u8c/vprint.h
+++ b/include/u8c/vprint.h
@@ -17,13 +17,8 @@
# if !defined(u8c_sym_vprint)
# define u8c_sym_vprint
# include <stdarg.h>
-# include <stdint.h>
+# include <stdbool.h>
# include <stdio.h>
-# if defined(__cplusplus)
-extern "C" {
-# endif
-extern uint_least8_t u8c_vprint(FILE * fp,uint_least32_t const * const msg,va_list args);
-# if defined(__cplusplus)
-}
-# endif
+# include <uchar.h>
+extern bool u8c_vprint(FILE * fp,char32_t const * const msg,va_list args);
# endif