summaryrefslogtreecommitdiff
path: root/include/u8c
diff options
context:
space:
mode:
Diffstat (limited to 'include/u8c')
-rw-r--r--include/u8c/SIZE_C.h2
-rw-r--r--include/u8c/chk.h76
-rw-r--r--include/u8c/err.h36
-rw-r--r--include/u8c/fmt.h37
-rw-r--r--include/u8c/intern.h31
-rw-r--r--include/u8c/is.h34
-rw-r--r--include/u8c/main.h37
-rw-r--r--include/u8c/str.h81
-rw-r--r--include/u8c/u16.h13
-rw-r--r--include/u8c/u32.h39
-rw-r--r--include/u8c/u8.h27
11 files changed, 287 insertions, 126 deletions
diff --git a/include/u8c/SIZE_C.h b/include/u8c/SIZE_C.h
index 542ddfd..be253f3 100644
--- a/include/u8c/SIZE_C.h
+++ b/include/u8c/SIZE_C.h
@@ -21,7 +21,7 @@
# elif SIZE_MAX == UINT_LEAST16_MAX
# define SIZE_C(val) UINT16_C(val)
# elif SIZE_MAX == UINT_LEAST32_MAX
-# define SIZE_C(val) UINT32s_C(val)
+# define SIZE_C(val) UINT32_C(val)
# elif SIZE_MAX == UINT_LEAST64_MAX
# define SIZE_C(val) UINT64_C(val)
# else
diff --git a/include/u8c/chk.h b/include/u8c/chk.h
new file mode 100644
index 0000000..03e4ff2
--- /dev/null
+++ b/include/u8c/chk.h
@@ -0,0 +1,76 @@
+/*
+ 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/>.
+*/
+# if !defined(u8c_hdr_chk)
+# define u8c_hdr_chk
+# include <stdbool.h>
+# include <uchar.h>
+/* Enumerations: */
+/* Type definitions: */
+/* Structures: */
+struct u8c_isalnum_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_isalpha_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_iscntrl_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_isdigit_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_islower_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_ispunct_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_isspace_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_issurro_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_isupper_tuple {
+ bool res;
+ bool stat;
+};
+struct u8c_isxdigit_tuple {
+ bool res;
+ bool stat;
+};
+/* Functions: */
+extern struct u8c_isalnum_tuple u8c_isalnum( char32_t const chr); /* Is alphanumeric */
+extern struct u8c_isalpha_tuple u8c_isalpha( char32_t const chr); /* Is alphabetic */
+extern struct u8c_iscntrl_tuple u8c_iscntrl( char32_t const chr); /* Is control character */
+extern struct u8c_isdigit_tuple u8c_isdigit( char32_t const chr); /* Is digit */
+extern struct u8c_islower_tuple u8c_islower( char32_t const chr); /* Is lowercase */
+extern struct u8c_ispunct_tuple u8c_ispunct( char32_t const chr); /* Is punctuation */
+extern struct u8c_isspace_tuple u8c_isspace( char32_t const chr); /* Is space */
+extern struct u8c_issurro_tuple u8c_issurro( char32_t const chr); /* Is surrogate point */
+extern struct u8c_isupper_tuple u8c_isupper( char32_t const chr); /* Is uppercase */
+extern struct u8c_isxdigit_tuple u8c_isxdigit(char32_t const chr); /* Is hexadecimal digit */
+/* Constants & Variables: */
+/* Macros: */
+# endif
diff --git a/include/u8c/err.h b/include/u8c/err.h
index c6b0f9f..26d4b2f 100644
--- a/include/u8c/err.h
+++ b/include/u8c/err.h
@@ -20,22 +20,32 @@
# include <uchar.h>
/* Enumerations: */
enum u8c_errtyp {
- u8c_errtyp_badalloc, /* Bad allocation */
- u8c_errtyp_badio, /* Bad input or output */
- u8c_errtyp_u32oor, /* UTF-32 out of range */
- u8c_errtyp_u8oor, /* UTF-8 out of range */
- u8c_errtyp_deferr, /* Default error */
- u8c_errtyp_untermin, /* Unterminated input */
- u8c_errtyp_maxerrtyp, /* Maximum error type */
- u8c_errtyp_all, /* All */
+ u8c_errtyp_badalloc, /* Bad allocation */
+ u8c_errtyp_badio, /* Bad input or output */
+ u8c_errtyp_stroor, /* UTF-32 out of range */
+ u8c_errtyp_u8oor, /* UTF-8 out of range */
+ u8c_errtyp_deferr, /* Default error */
+ u8c_errtyp_untermin, /* Unterminated input */
+ u8c_errtyp_all, /* All */
};
/* Type definitions: */
-typedef void (* u8c_errhandltyp)(enum u8c_errtyp);
+typedef void (* u8c_errhandltyp)(enum u8c_errtyp); /* Error handler type */
/* Structures: */
-/* Functions */
-extern bool u8c_geterr( size_t * const sz, char32_t const * * const out);
-extern bool u8c_regerrhandl(enum u8c_errtyp typ,u8c_errhandltyp errhandl);
-extern bool u8c_seterr( char32_t const * const msg,enum u8c_errtyp typ);
+struct u8c_geterr_tuple {
+ char32_t const * err;
+ size_t errsz;
+ bool stat;
+};
+struct u8c_regerrhandl_tuple {
+ bool stat;
+};
+struct u8c_seterr_tuple {
+ bool stat;
+};
+/* Functions: */
+extern struct u8c_geterr_tuple u8c_geterr( void); /* Get error */
+extern struct u8c_regerrhandl_tuple u8c_regerrhandl(enum u8c_errtyp typ,u8c_errhandltyp errhandl); /* Register error handler */
+extern struct u8c_seterr_tuple u8c_seterr( enum u8c_errtyp typ,char32_t const * const restrict msg); /* Set error */
/* Constants & Variables: */
/* Macros: */
# endif
diff --git a/include/u8c/fmt.h b/include/u8c/fmt.h
index 138acd6..5ddfb02 100644
--- a/include/u8c/fmt.h
+++ b/include/u8c/fmt.h
@@ -54,13 +54,35 @@ enum u8c_fmttyp {
};
/* Type definitions: */
/* Structures: */
-/* Functions */
-extern bool u8c_fmt( size_t * const outsz,char32_t const * * const out, char32_t const * const in,...);
-extern bool u8c_print( FILE * fp, char32_t const * const msg, ...);
-extern bool u8c_println(FILE * fp, char32_t const * const msg, ...);
-extern bool u8c_setfmt( uint_least8_t const base, uint_least8_t const endian);
-extern bool u8c_vfmt( size_t * const sz, char32_t const * * const out, char32_t const * const in,va_list args);
-extern bool u8c_vprint( FILE * fp, char32_t const * const msg, va_list args);
+struct u8c_fmt_tuple {
+ char32_t const * str;
+ size_t strsz;
+ bool stat;
+};
+struct u8c_print_tuple {
+ bool stat;
+};
+struct u8c_println_tuple {
+ bool stat;
+};
+struct u8c_setfmt_tuple {
+ bool stat;
+};
+struct u8c_vfmt_tuple {
+ char32_t const * str;
+ size_t strsz;
+ bool stat;
+};
+struct u8c_vprint_tuple {
+ bool stat;
+};
+/* Functions: */
+extern struct u8c_fmt_tuple u8c_fmt( char32_t const * const restrict in, ...); /* Format */
+extern struct u8c_print_tuple u8c_print( FILE * restrict fp, char32_t const * const restrict msg, ...); /* Print */
+extern struct u8c_println_tuple u8c_println(FILE * restrict fp, char32_t const * const restrict msg, ...); /* Print line */
+extern struct u8c_setfmt_tuple u8c_setfmt( uint_least8_t const base,bool const endian); /* Set format */
+extern struct u8c_vfmt_tuple u8c_vfmt( char32_t const * const restrict in, va_list args); /* Variadic format */
+extern struct u8c_vprint_tuple u8c_vprint( FILE * restrict fp, char32_t const * const restrict msg, va_list args); /* Variadic print */
/* Constants & Variables: */
static uint_least32_t const u8c_col_azure = UINT32_C(0x3DA9E1);
static uint_least32_t const u8c_col_ash = UINT32_C(0xD2D2CC);
@@ -80,6 +102,7 @@ static uint_least32_t const u8c_col_white = UINT32_C(0xF8F8F1);
static uint_least32_t const u8c_col_yellow = UINT32_C(0xE1E13D);
/* Macros: */
# if defined(NDEBUG)
+/* Debug print */
# define u8c_dbgprint(...) ((void)0x0)
# else
# define u8c_dbgprint(...) u8c_println(stderr,__VA_ARGS__)
diff --git a/include/u8c/intern.h b/include/u8c/intern.h
index 6aeaee2..4549337 100644
--- a/include/u8c/intern.h
+++ b/include/u8c/intern.h
@@ -15,34 +15,35 @@
*/
# if !defined(u8c_sym_dattyp)
# define u8c_sym_dattyp
-# include <stdalign.h>
+# if defined(u8c_bethrdsafe) && defined(__STDC_NO_THREADS__)
+# error u8c is set to be thread-safe, but the implementation does not support multithreading.
+# endif
# include <stdbool.h>
# include <stddef.h>
# include <stdint.h>
-# include <u8c/SIZE_C.h>
-# include <u8c/err.h>
# include <uchar.h>
+# include <u8c/err.h>
# if defined(u8c_bethrdsafe)
# include <threads.h>
# endif
/* Enumerations: */
/* Type definitions: */
/* Structures: */
-struct u8c_dattyp {
- char32_t const * err;
- u8c_errhandltyp errhandls[(size_t)u8c_errtyp_maxerrtyp];
- uint_least8_t fmtbase;
- bool fmtendian;
- uint_least8_t stat;
+struct u8c_dattyp { /* Data type */
+ char32_t const * err; /* Error */
+ u8c_errhandltyp errhandls[(size_t)u8c_errtyp_all]; /* Error handlers */
+ uint_least8_t fmtbase; /* Format base */
+ bool fmtendian; /* Format endian */
+ uint_least8_t stat; /* Status */
# if defined(u8c_bethrdsafe)
- mtx_t errlock;
- mtx_t errhandlslock;
- mtx_t fmtlock;
- mtx_t outlock;
+ mtx_t errhandlslock; /* Error handlers lock */
+ mtx_t errlock; /* Error lock */
+ mtx_t fmtlock; /* Format lock */
+ mtx_t outlock; /* Output lock */
# endif
};
-/* Functions */
+/* Functions: */
/* Constants & Variables: */
-extern struct u8c_dattyp u8c_dat;
+extern struct u8c_dattyp u8c_dat; /* Data */
/* Macros: */
# endif
diff --git a/include/u8c/is.h b/include/u8c/is.h
deleted file mode 100644
index 20097cf..0000000
--- a/include/u8c/is.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- 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/>.
-*/
-# if !defined(u8c_hdr_is)
-# define u8c_hdr_is
-# include <stdbool.h>
-# include <stdint.h>
-# include <uchar.h>
-/* Enumerations: */
-/* Type definitions: */
-/* Structures: */
-/* Functions */
-extern bool u8c_isalnum( uint_least8_t * const res,char32_t const chr);
-extern bool u8c_isalpha( uint_least8_t * const res,char32_t const chr);
-extern bool u8c_iscntrl( uint_least8_t * const res,char32_t const chr);
-extern bool u8c_isdigit( uint_least8_t * const res,char32_t const chr);
-extern bool u8c_ispunct( uint_least8_t * const res,char32_t const chr);
-extern bool u8c_isspace( uint_least8_t * const res,char32_t const chr);
-extern bool u8c_isxdigit(uint_least8_t * const res,char32_t const chr);
-/* Constants & Variables: */
-/* Macros: */
-# endif
diff --git a/include/u8c/main.h b/include/u8c/main.h
index 2a13cc0..4004550 100644
--- a/include/u8c/main.h
+++ b/include/u8c/main.h
@@ -13,24 +13,43 @@
If not, see <https://www.gnu.org/licenses/>.
*/
-/* Abort */
# if !defined(u8c_hdr_main)
# define u8c_hdr_main
# include <stdbool.h>
+# include <stddef.h>
# include <stdint.h>
# include <stdnoreturn.h>
# include <uchar.h>
/* Enumerations: */
/* Type definitions: */
/* Structures: */
-/* Functions */
-extern noreturn bool u8c_abrtfn(char const * const fl,long const ln,char const * const fn,char const * const why);
-extern bool u8c_end( void);
-extern bool u8c_init( void);
+struct u8c_end_tuple {
+ bool stat;
+};
+struct u8c_init_tuple {
+ bool stat;
+};
+struct u8c_uniblk_tuple {
+ char32_t const * blk;
+ size_t blksz;
+ bool stat;
+};
+struct u8c_uninm_tuple {
+ char32_t const * nm;
+ size_t nmsz;
+ bool stat;
+};
+/* Functions: */
+noreturn extern void u8c_abrtfn(char const * const restrict fl, long const ln,char const * const restrict fn,char const * const restrict why); /* Abort function */
+extern struct u8c_end_tuple u8c_end( void); /* End */
+extern struct u8c_init_tuple u8c_init( void); /* Initialise */
+extern struct u8c_uniblk_tuple u8c_uniblk(char32_t const chr); /* Unicode block */
+extern struct u8c_uninm_tuple u8c_uninm( char32_t const chr); /* Unicode name */
/* Constants & Variables: */
-extern bool const u8c_dbg;
-extern bool const u8c_thrdsafe;
-static uint_least64_t const u8c_ver = UINT64_C(0x19);
+extern bool const u8c_dbg; /* Debug */
+extern bool const u8c_thrdsafe; /* Thread-safe */
+static char32_t const u8c_unimax = U'\U0010FFFF'; /* Unicode maximum */
+static uint_least64_t const u8c_ver = UINT64_C(0x1A); /* Version */
/* Macros: */
-# define u8c_abrt(why) u8c_abrtfn(__FILE__,(long)__LINE__,__func__,why)
+# define u8c_abrt(why) u8c_abrtfn(__FILE__,(long)__LINE__,__func__,why) /* Abort */
# endif
diff --git a/include/u8c/str.h b/include/u8c/str.h
new file mode 100644
index 0000000..eecea26
--- /dev/null
+++ b/include/u8c/str.h
@@ -0,0 +1,81 @@
+/*
+ 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/>.
+*/
+# if !defined(u8c_hdr_str)
+# define u8c_hdr_str
+# include <stdbool.h>
+# include <stddef.h>
+# include <stdint.h>
+# include <uchar.h>
+/* Enumerations: */
+/* Type definitions: */
+/* Structures: */
+struct u8c_stralloc_tuple {
+ bool stat;
+ char32_t * str;
+};
+struct u8c_strcat_tuple {
+ bool stat;
+ char32_t const * str;
+ size_t strsz;
+};
+struct u8c_strcmp_tuple {
+ bool stat;
+ uint_least8_t res;
+};
+struct u8c_strcp_tuple {
+ bool stat;
+ char32_t const * str;
+ size_t strsz;
+};
+struct u8c_strfndchr_tuple {
+ size_t pos;
+ bool stat;
+};
+struct u8c_strfndpat_tuple {
+ size_t pos;
+ bool stat;
+};
+struct u8c_strfree_tuple {
+ bool stat;
+};
+struct u8c_strins_tuple {
+ bool stat;
+ char32_t const * str;
+ size_t strsz;
+};
+struct u8c_strsubstr_tuple {
+ bool stat;
+ char32_t const * str;
+ size_t strsz;
+};
+struct u8c_strsz_tuple {
+ bool stat;
+ size_t sz;
+};
+/* Functions: */
+extern struct u8c_stralloc_tuple u8c_stralloc( size_t const sz); /* String allocate */
+extern struct u8c_strcat_tuple u8c_strcat( char32_t const * const restrict str, char32_t const * const rstr); /* String concatenate */
+extern struct u8c_strcmp_tuple u8c_strcmp( char32_t const * const restrict lstr,char32_t const * const restrict rstr); /* String compare */
+extern struct u8c_strcp_tuple u8c_strcp( char32_t const * const restrict in); /* String copy */
+extern struct u8c_strfndchr_tuple u8c_strfndchr(char32_t const * const restrict in, char32_t const chr); /* String find character */
+extern struct u8c_strfndpat_tuple u8c_strfndpat(char32_t const * const restrict in, char32_t const * const restrict pat); /* String find pattern */
+extern struct u8c_strfree_tuple u8c_strfree( char32_t const * const restrict str); /* String free */
+extern struct u8c_strins_tuple u8c_strins( size_t const pos, char32_t const * const restrict str0,char32_t const * const restrict str1); /* String insert */
+extern struct u8c_strsubstr_tuple u8c_strsubstr(size_t const start,size_t const len, char32_t const * const restrict in); /* String sub-string */
+extern struct u8c_strsz_tuple u8c_strsz( char32_t const * const restrict in); /* String size */
+/* Constants & Variables: */
+/* Macros: */
+# endif
diff --git a/include/u8c/u16.h b/include/u8c/u16.h
index 8d81784..629d39a 100644
--- a/include/u8c/u16.h
+++ b/include/u8c/u16.h
@@ -21,9 +21,16 @@
/* Enumerations: */
/* Type definitions: */
/* Structures: */
-/* Functions */
-extern bool u8c_u16alloc(char16_t * * const u16,size_t const sz);
-extern bool u8c_u16free( char16_t const * * const u16);
+struct u8c_u16alloc_tuple {
+ bool stat;
+ char16_t * u16;
+};
+struct u8c_u16free_tuple {
+ bool stat;
+};
+/* Functions: */
+extern struct u8c_u16alloc_tuple u8c_u16alloc(size_t const sz); /* UTF-16 allocate */
+extern struct u8c_u16free_tuple u8c_u16free( char16_t const * const restrict u16); /* UTF-16 free */
/* Constants & Variables: */
/* Macros: */
# endif
diff --git a/include/u8c/u32.h b/include/u8c/u32.h
deleted file mode 100644
index e5567e7..0000000
--- a/include/u8c/u32.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- 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/>.
-*/
-# if !defined(u8c_hdr_u32)
-# define u8c_hdr_u32
-# include <stdbool.h>
-# include <stddef.h>
-# include <stdint.h>
-# include <uchar.h>
-/* Enumerations: */
-/* Type definitions: */
-/* Structures: */
-/* Functions */
-extern bool u8c_u32alloc( char32_t * * const u32,size_t const sz);
-extern bool u8c_u32cat( size_t * const sz, char32_t const * * const out, char32_t const * const lstr,char32_t const * const rstr);
-extern bool u8c_u32cmp( uint_least8_t * const res,char32_t const * const lstr, char32_t const * const rstr);
-extern bool u8c_u32cp( size_t * const sz, char32_t const * * const out, char32_t const * const in);
-extern bool u8c_u32fndchr(size_t * const pos,char32_t const * const in, char32_t const chr);
-extern bool u8c_u32fndpat(size_t * const pos,char32_t const * const in, char32_t const * const pat);
-extern bool u8c_u32free( char32_t const * * const u32);
-extern bool u8c_u32ins( size_t * const sz, char32_t const * * const out, size_t const pos, char32_t const * const str0,char32_t const * const str1);
-extern bool u8c_u32substr(char32_t const * * const out,size_t const start,size_t const len, char32_t const * const in);
-extern bool u8c_u32sz( size_t * sz, char32_t const * in);
-/* Constants & Variables: */
-static char32_t const u8c_u32max = U'\x10FFFF';
-/* Macros: */
-# endif
diff --git a/include/u8c/u8.h b/include/u8c/u8.h
index f47666b..c7b6cc5 100644
--- a/include/u8c/u8.h
+++ b/include/u8c/u8.h
@@ -21,11 +21,28 @@
/* Enumerations: */
/* Type definitions: */
/* Structures: */
-/* Functions */
-extern bool u8c_u8alloc(unsigned char * * const u32,size_t const sz);
-extern bool u8c_u8dec( size_t * const sz, char32_t const * * const out,unsigned char const * const in);
-extern bool u8c_u8enc( size_t * const sz, unsigned char const * * const out,char32_t const * const in);
-extern bool u8c_u8free( unsigned char const * * const u8);
+struct u8c_u8alloc_tuple {
+ bool stat;
+ unsigned char * u8;
+};
+struct u8c_u8dec_tuple {
+ bool stat;
+ char32_t const * str;
+ size_t strsz;
+};
+struct u8c_u8enc_tuple {
+ bool stat;
+ unsigned char const * u8;
+ size_t u8sz;
+};
+struct u8c_u8free_tuple {
+ bool stat;
+};
+/* Functions: */
+extern struct u8c_u8alloc_tuple u8c_u8alloc(size_t const sz); /* UTF-8 allocate */
+extern struct u8c_u8dec_tuple u8c_u8dec( unsigned char const * const restrict u8); /* UTF-8 decode */
+extern struct u8c_u8enc_tuple u8c_u8enc( char32_t const * const restrict u8); /* UTF-8 encode */
+extern struct u8c_u8free_tuple u8c_u8free( unsigned char const * const restrict u8); /* UTF-8 free */
/* Constants & Variables: */
/* Macros: */
# endif