# 26 * Update comments * Fix u8c_decode_utf8_length not validating * Add attribute u8c_DEPRECATED * Deprecate u8c_encode_utf16 and u8c_encode_utf16_length as they're untested (this is not permanent) # 25 * Rename source directory: src => source * Make changelog plain-text * Update CMake style * Rewrite in C99 * Use separate CMake lists * Update copyright and license notices * Use header identifiers instead of keys for include guards * Use ifdef/ifndef * Remove top 'u8c' header (keep uninm) * License under the LGPL * Bump required CMake version * Rename misc header to u8c * Remove assert * Remove attributes: - u8c_attr_abitag - u8c_attr_allocsz - u8c_attr_artif - u8c_attr_cold - u8c_attr_fmt - u8c_attr_malloc - u8c_attr_hot - u8c_attr_pure - u8c_attr_retnonnull - u8c_attr_sect - u8c_attr_used - u8c_attr_noderef - u8c_attr_noesc - u8c_attr_dup * Remove type constant macros * Remove our types * Remove endian-related facilities * Remove memory functions * Remove bytesz and dbg * Fix version number * Remove fmt header * Add new header 'format' * Add new header 'character' * Replace utf header with new 'format' and 'character' headers * Remove math header * Remove impl header * Remove cstr header * Remove arr header * Make functions non-constexpr * Update naming convention * Implement UTF-16 conversions * Split cnv into multiple functions: - encode_utf8 (UTF-32 to UTF-8) - decode_utf8 (UTF-8 to UTF-32) - encode_utf16 (UTF-32 to UTF-16) - decode_utf16 (UTF-16 to UTF-32) * Use caller-provided buffer in conversion functions * Rename u8c::isupper to u8c_is_majuscule * Rename u8c::islower to u8c_is_minuscule * Update code style * Change type of version constant (now uint_least32_t) * Use Git tagging for versioning * Don't throw exceptions * Update warning flags * Update optimisation flags * Rename u8c::unimax to u8c_MAX_CODE_POINT * Remove u8c::uniblk * Clean up code * Don't define functions in headers * Rename u8c::isspace to u8c_is_whitespace * Add more characters to u8c_is_whitespace * Rename u8c::ispunct to u8c_is_punctuation * Add more characters to u8c_is_punctuation * Remove u8c::isalnum * Rename u8c::uninm to u8c_unicode_name * Use caller-provided buffer in u8c_unicode_name * Add constant for the maximum length of a Unicode identifier: u8c_MAXIMUM_NAME_LENGTH * Add functions for determening the length of encodings and decodings: - u8c_decode_utf8_length - u8c_encode_utf8_length - u8c_encode_utf16_length - u8c_decode_utf16_length * Rename u8c_attr_const to u8c_UNSEQUENCED * Rename u8c_attr_inline to u8c_ALWAYS_INLINE * Add new attribute u8c_NO_DISCARD * Validate encodings * Rework readme * Rename u8c::isdigit and u8x::isxdigit to is_numeric and is_hexadecimal_numeric * Rename u8c::isalpha to u8c_is_alphabetic * Rename u8c::iscntrl to u8c_is_control * Rename u8c::issurro to u8c_is_surrogate * Optimise code * Update gitignore # 24 * Remove constructor taking a single value for `u8c::arr`. * Add new overload taking a single value for `u8c::arr::app`. * Add function `u8c::arr::log` to enable logging of array operations *(doesn't currently log a lot)*. * Remove `u8c::trunc`. * Initialise memory allocated by `u8c::arr`. * Add overload taking value used for memory-initialisation for `u8c::arr::alloc`. # 23 * Rewrite for C++ *(read readme for list of current features)*. * Use CMake for building. * Update logo. # 22 * Remove documentation (too hight-maintainence). * Rename `include/u8c/is.h` to `include/u8c/chk.h` * Revert u8c-9 “Remove some optimisations, as they prevent C++ compatibility.”. * Fix #1. * Use binary literals for bitwise operations. * Add more control characters to `u8c_iscntrl`. * Change type of result of the `u8c_is`* functions fromt `uint_least8_t` to `bool`. * Add more characters to `u8c_ispunct`. * Update Makefile. * Revert u8c-21 “Rename `u8c_unimax` to `u8c_u32max` and move it to `u8c/u32.h`.”. * Add function for checking if a character is a surrogate point; `u8c_issurro`. * Split `u8c_isalpha` into `u8c_islower` and `u8c_isupper`, move current mapping to `u8c_islower`. All characters that are neither upper case or lower case must be put in `u8c_isalpha`. * Add function for getting the name of an Unicode codepoint; `u8c_uninm` (has currently only mapped around ⅔% of all Unicode characters). * Revert accidental changes to changelog (please be more careful and observant in the future). * Delete `u8c_errtyp_maxerrtyp` (in favour of `u8c_errtyp_all`). * Switch the arguments of `u8c_seterr`. * Add function for getting the name of the block an Unicode codepoint is located in; `u8c_uniblk` (has currently only mapped around 39% of the Unicode blocks). * Rename all instances of `u32` to `str`. * Optimise for size (`-Os` instead of `-O3`). * Update Readme. * **MAJOR**: Return a tuple (structures) in all returning functions, otherwise void. * Add help screen to test program. * Update Gitignore. * Restructure test program. * Add more characters to `u8c_islower`. * Add more characters to `u8c_isupper`. * Remove the `runtest` target (just use `make && export LD_LIBRARY_PATH=$PWD && ./test`, which can more easily be modified to pass arguments). * Add more characters to `u8c_isalpha`. * Fix incorrect error being set (somewhere, I forgot where). * Fix `SIZE_C`. # 21 * Update readme. * Require C23 (C2x). * Use GCC (has better C23 support). * Cleanup UTF-8 decoder and encoder (using binary literals). * Rename `u8c_unimax` to `u8c_u32max` and move it to `u8c/u32.h`. * Don't clear last error message on calls to `u8c_geterr`. * Restructure source files. * Fix makefile. * Update test program. # 20 * Update documentation. * Optimise `u8c_println`, * Make `u8c_print`, `u8c_println`, and `u8c_vprint` thread-safe (if thread-safe is not disabled). * Create base for UTF-16 related functions: * Add function for allocating UTF-16 strings; `u8c_u16alloc`. * Add function for deallocating UTF-16 strings; `u8c_u16free`. * Restructure headers: * `u8c/SIZE_C.h`: * `SIZE_C` * `u8c/err.h`: * `u8c_errtyp` * `u8c_errhandltyp` * `u8c_geterr` * `u8c_regerrhandl` * `u8c_seterr` * `u8c/fmt`: * `u8c_dbgprint` * `u8c_fmt` * `u8c_fmttyp` * `u8c_print` * `u8c_println` * `u8c_setfmt` * `u8c_vfmt` * `u8c_vprint` * `u8c/is.h`: * `u8c_isalnum` * `u8c_isalpha` * `u8c_iscntrl` * `u8c_isdigit` * `u8c_ispunct` * `u8c_isspace` * `u8c_isxdigit` * `u8c/main.h`: * `u8c_dbg` * `u8c_abrt` * `u8c_end` * `u8c_init` * `u8c_thrdsafe` * `u8c_unimax` * `u8c_ver` * `u8c/u16.h`: * `u8c_u16alloc` * `u8c_u16free` * `u8c/u32.h`: * `u8c_u32alloc` * `u8c_u32cat` * `u8c_u32cmp` * `u8c_u32cp` * `u8c_u32fndchr` * `u8c_u32fndpat` * `u8c_u32free` * `u8c_u32ins` * `u8c_u32substr` * `u8c_u32sz` * `u8c/u8.h`: * `u8c_u8alloc` * `u8c_u8dec` * `u8c_u8enc` * `u8c_u8free` * Disable *-Wpadded*. * Update `SIZE_C`. * Always use character constants (instead of numerical values). # 1↋ * Add more codepoints to `u8c_ispunct`. * Don't use Zstandard for man page compression. Use Gzip. * Remove Zstandard as a dependency. * Update gitignore. # 1↊ * Initialise error handler array. * Initialise and destroy error handler array mutex. * Fix Makefile. * Update gitignore. # 19 * Fix error when compiling with GCC: *src/u8c/dat.c:22:29: error: initializer element is not constant [-Wpedantic]*. * Improve error handling: * Add enumeration type for error types; `u8c_errtyp`. * Add function for registering error handlers; `u8c_regerrhandl` (see `test.c`). * Add function for inserting UTF-32 strings into UTF-32 strings; `u8c_u32ins`. * Enable more warnings. * Add man pages. * Fix `u8c_u32cat` skipping the last character in `lstr`. * Remove the `uninstall` target (it was deemed to unsafe). * Add *Zstandard* as a dependency. # 18 * Update `.gitignore`. * Remove core dump. # 17 * Create new logo. * Update headers. * Invert status values. # 16 * Add function for concatenating UTF-32 strings; `u8c_u32cat`. * Add functions for allocating UTF-32 and UTF-8 strings; `u8c_u32alloc` and `u8c_u8alloc`. * Add function for finding a given codepoint in an UTF-32 string; `u8c_u32fndchr`. * Add function for finding a given pattern (string) in an UTF-32 string; `u8c_u32fndpat`. * Update `SIZE_C`. * Add function for aborting; `u8c_abrt`. * Rename `u8c_debug` to `u8c_dbg`. * Use `bool` (`_Bool`) for return values instead of `uint_least8_t`. * Add more format types. * Fix incorrect unabbreviated names in headers. * Add another function from `ctypes.h`; `u8c_isxdigit`. * Use `char32_t` (from `uchar.h`) instead of `uint_least32_t` in UTF-32. * Use `unsigned char` instead of `uint_least8_t` in UTF-8. * Move all data into `u8c_dat` (of type `struct u8c_dattyp`). * Add function for setting the format (base and endian) of `u8c_fmt` and company; `u8c_setfmt`. * Remove `u8c_txt` in favour of Unicode string literals (much clearer code, but less portable). * Add function for getting a sub-string of an UTF-32 string; `u8c_u32substr`. * Don't count the null-terminator in string sizes. * Add macro for maximum valid Unicode codepoint; `u8c_unimax`. * Remove `txttolit`. * Add function for deallocating UTF-8 strings; `u8c_u8free`. * Turn both `u8c_dbg` and `u8c_thrdsafe` into type `bool` from `uint_least8_t`. * Add more letters to `u8c_isalpha`. # 15 * Add missing include directives to `include/u8c/u32free.h` and `include/u8c/u8free.h`. # 14 * Free error message when `u8c_geterr` is called (after copying, of course). * Update `u8c_freeu8`. * Rename `u8c_freeu32` to and `u8c_u32free` and `u8c_freeu8` to `u8c_u8free`. # 13 * Fix `u8c_txt` in C++. # 12 * Use `u8c_println` instead of `u8c_print` in `u8c_dbgprint`. # 11 * Update README. * Update Makefile. * Use constant variables more. * Create macro for creating human-readable UTF-32 strings; `u8c_txt`. * Add macros for deallocating UTF-32 and UTF-8 strings (use these instead of `free` or `std::free`); `u8c_u32free` and `u8c_u8free`. * Optimisations. # 10 * Make `u8c_seterr` public. * Update logo. # ↋ * Fix `u8c_ver`. * Add Turkish letters to `u8c_isalpha`. # ↊ * Add UTF-32 alternatives to some of the functions from `ctypes.h`; `u8c_isalnum`, `u8c_isalpha`, `u8c_iscntrl`, `u8c_isdigit`, `u8c_isspace`, and `u8c_ispunct`. * Add assertions. * Create new logo (move old logo to `u8c_old.svg`). # 9 * Optimisations. * Remove some optimisations, as they prevent C++ compatibility. * Fix memory leak in test program. * Add function for comparing UTF-32 strings; `u8c_u32cmp`. # 8 * Optimisations. # 7 * Optimisations. # 6 * Remove unneeded include directives. * Update `SIZE_C` to utilise the C++23 `std::size_t` literal suffix (`uz`). * Fix include guard in `include/u8c/stat.h`. * Add more error messages. # 5 * Add logo (`u8c.svg`). * Fix UTF-8 decoder. * Update README. # 4 * Add link to PKGBUILD in README. # 3 * Remove `include/u8c.h`. * Fix minor errors. # 2 * Move PKGBUILD to seperate project. * Create a *master* header that includes every other header. * Create `size_t` constant macro. * Add colour to text formatting. * Specify what file to print to in `u8c_print`. * Add C++ compatibility to headers. * Add functions for initialising and ending *u8c*. * Add dedicated function for text formatting (altough not working at the moment); `u8c_fmt`. * Remove `u8c_free`. * Improve error handling in the form of error messages (which can be retrieved by the programmer via `u8c_geterr`). * Split `u8c_print` into two functions: `u8c_print` and `u8c_println`. * Break the UTF-8 decoder somehow. * Add compile-time option to be thread-safe (requiring C11 threads if enabled). * Add function for copying UTF-32; `u8c_u32cp`. * Add function for getting the size of an UTF-32 array; `u8c_u32sz`. * Add `va_list` alternatives to `u8c_fmt` and `u8c_print`; `u8c_vfmt` and `u8c_vprint`. * Add test-program (run via `make runtest`). * Add program to make human-readable UTF-32 strings machine-readable. * Turn `u8c_ver` into a compile-time macro. * Enable more warnings when compiling. * Add assertions. # 1 * Fix Makefile compiling *u8c.so* instead of *libu8c.so*. * Add global variable for version control. # 0 * Fork from *luma*.