From dad4a430af37e67bfea81e860628f3c054a8f440 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:30:51 +0200 Subject: [PATCH 1/8] Add files via upload --- include/tercontrol.h | 443 ++++++ include/utf8/LICENSE | 24 + include/utf8/README.md | 326 +++++ include/utf8/appveyor.yml | 51 + include/utf8/test/CMakeLists.txt | 117 ++ include/utf8/test/main.c | 1669 ++++++++++++++++++++++ include/utf8/test/no_malloc.c | 64 + include/utf8/test/test.c | 33 + include/utf8/test/test.cpp | 78 ++ include/utf8/test/utest.h | 1668 ++++++++++++++++++++++ include/utf8/test/utfmain.exe | Bin 0 -> 327994 bytes include/utf8/utf8.h | 1693 ++++++++++++++++++++++ resources/newtrodit.png | Bin 0 -> 82045 bytes resources/screenshot_main.png | Bin 0 -> 61745 bytes src/dialog.h | 414 +++--- src/fileio.c | 81 ++ src/fileio.h | 1 + src/globals.h | 1012 +++----------- src/gui.h | 0 src/input.h | 408 ++++++ src/line.c | 70 + src/line.h | 6 + src/linux/graphics_linux.c | 168 +++ src/linux/input_linux.c | 123 ++ src/newtrodit.c | 2239 ++---------------------------- src/newtrodit.h | 222 +++ src/newtrodit_gui.c | 795 +++++------ src/newtrodit_gui.h | 17 + src/unicode.c | 58 + src/win32/graphics_win32.c | 139 ++ src/win32/input_win32.c | 89 ++ 31 files changed, 8502 insertions(+), 3506 deletions(-) create mode 100644 include/tercontrol.h create mode 100644 include/utf8/LICENSE create mode 100644 include/utf8/README.md create mode 100644 include/utf8/appveyor.yml create mode 100644 include/utf8/test/CMakeLists.txt create mode 100644 include/utf8/test/main.c create mode 100644 include/utf8/test/no_malloc.c create mode 100644 include/utf8/test/test.c create mode 100644 include/utf8/test/test.cpp create mode 100644 include/utf8/test/utest.h create mode 100644 include/utf8/test/utfmain.exe create mode 100644 include/utf8/utf8.h create mode 100644 resources/newtrodit.png create mode 100644 resources/screenshot_main.png create mode 100644 src/fileio.c create mode 100644 src/fileio.h create mode 100644 src/gui.h create mode 100644 src/input.h create mode 100644 src/line.c create mode 100644 src/line.h create mode 100644 src/linux/graphics_linux.c create mode 100644 src/linux/input_linux.c create mode 100644 src/newtrodit.h create mode 100644 src/newtrodit_gui.h create mode 100644 src/unicode.c create mode 100644 src/win32/graphics_win32.c create mode 100644 src/win32/input_win32.c diff --git a/include/tercontrol.h b/include/tercontrol.h new file mode 100644 index 0000000..7b6d298 --- /dev/null +++ b/include/tercontrol.h @@ -0,0 +1,443 @@ +/********************************************************************************** + + Basic Terminal Control Library + Copyright 2022 Zackery Smith + This library is released under the GPLv3 license + + This library has no dependencies other than the standard C runtime library + +***********************************************************************************/ +#ifndef TC_H +#define TC_H +#endif + +#include +#ifdef _WIN32 +#include +#include // For _getch() function +HANDLE hConsole = INVALID_HANDLE_VALUE, hAlternateScreen = INVALID_HANDLE_VALUE; // WinAPI structures for console +CONSOLE_SCREEN_BUFFER_INFO csbi; +CONSOLE_CURSOR_INFO cci; +#else + +#endif +#include +#include +#include +#include + +#ifdef _WIN32 +#define TC_NRM "" +#else +#define TC_NRM "\x1B[0m" /* Normalize color */ +#endif + +#define TC_RED "\x1B[1;31m" /* Red */ +#define TC_GRN "\x1B[1;32m" /* Green */ +#define TC_YEL "\x1B[1;33m" /* Yellow */ +#define TC_BLU "\x1B[1;34m" /* Blue */ +#define TC_MAG "\x1B[1;35m" /* Magenta */ +#define TC_CYN "\x1B[1;36m" /* Cyan */ +#define TC_WHT "\x1B[1;37m" /* White */ + +#define TC_B_NRM "\x1B[0m" /* Normalize Bright Color */ +#define TC_B_RED "\x1B[0;31m" /* Bright Red */ +#define TC_B_GRN "\x1B[0;32m" /* Bright Green */ +#define TC_B_YEL "\x1B[0;33m" /* Bright Yellow */ +#define TC_B_BLU "\x1B[0;34m" /* Bright Blue */ +#define TC_B_MAG "\x1B[0;35m" /* Bright Magenta */ +#define TC_B_CYN "\x1B[0;36m" /* Bright Cyan */ +#define TC_B_WHT "\x1B[0;37m" /* Bright White */ + +#define TC_BG_NRM "\x1B[40m" /* Normalize Background Color */ +#define TC_BG_RED "\x1B[41m" /* Background Red */ +#define TC_BG_GRN "\x1B[42m" /* Background Green */ +#define TC_BG_YEL "\x1B[43m" /* Background Yellow */ +#define TC_BG_BLU "\x1B[44m" /* Background Blue */ +#define TC_BG_MAG "\x1B[45m" /* Background Magenta*/ +#define TC_BG_CYN "\x1B[46m" /* Background Cyan */ +#define TC_BG_WHT "\x1B[47m" /* Background White */ + +// `asprintf` is usable on any POSIX-2008 compliant system (any modern Linux system) +// My compiler likes to complain about it.. Another way to preform this is with `vfprintf` +// Or maybe I'm just a bad programmer :I + +#ifdef _WIN32 + +char *tc_color_id(uint8_t cid, int l) +{ // "l" flag is ignored, just to make it compatible with the POSIX version + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(hConsole, (cid / 16) << 4 | (cid % 16)); + return ""; +} + +#else + +char *tc_color_id(uint8_t cid, int l) +{ + + char *esc; + if (!l) + { + asprintf(&esc, "\x1B[48;5;%dm", cid); + } + else + { + asprintf(&esc, "\x1B[38;5;%dm", cid); + } + return esc; +} + +////////////////////////////////////////////////////////////////// +// WARNING: WinAPI doesn't natively support 24-bit colors // +// So this function is not available on Windows systems // +////////////////////////////////////////////////////////////////// +char *tc_rgb(int r, int g, int b, int l) +{ + char *esc; + if (!l) + { + asprintf(&esc, "\x1B[48;2;%d;%d;%dm", r, g, b); + } + else + { + asprintf(&esc, "\x1B[38;2;%d;%d;%dm", r, g, b); + } + return esc; +} +#endif + +////////////////////////////////////// +// Additional formatting (ANSI) // +////////////////////////////////////// + +#define TC_BLD "\x1B[1m" /* Bold */ +#define TC_DIM "\x1B[2m" /* Dim */ +#define TC_ITAL "\x1B[3m" /* Standout (italics) */ +#define TC_UNDR "\x1B[4m" /* Underline */ +#define TC_BLNK "\x1B[5m" /* Blink */ +#define TC_REV "\x1B[7m" /* Reverse */ +#define TC_INV "\x1B[8m" /* Invisible */ + +////////////////////////////////////// + +void tc_get_cols_rows(int *cols, int *rows); + +////////////////////////////// +// Common private modes // +////////////////////////////// + +#ifdef _WIN32 + +void tc_hide_cursor() +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + cci.bVisible = FALSE; + SetConsoleCursorInfo(hConsole, &cci); +} +void tc_show_cursor() +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + cci.bVisible = TRUE; + SetConsoleCursorInfo(hConsole, &cci); +} + +void tc_enter_alt_screen() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + hAlternateScreen = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); + SetConsoleActiveScreenBuffer(hAlternateScreen); + SetStdHandle(STD_OUTPUT_HANDLE, hAlternateScreen); +} + +void tc_exit_alt_screen() +{ + if (hConsole == INVALID_HANDLE_VALUE) + { + return; + } + SetConsoleActiveScreenBuffer(hConsole); + CloseHandle(hAlternateScreen); + SetStdHandle(STD_OUTPUT_HANDLE, hConsole); +} + +#else + +#define tc_hide_cursor() puts("\033[?25l") +#define tc_show_cursor() puts("\033[?25h") + +/* These functions don't seem to be doing anything + + #define tc_save_screen() puts("\033[?47h") + #define tc_restore_screen() puts("\033[?47l") + +*/ +#define tc_enter_alt_screen() puts("\033[?1049h\033[H") +#define tc_exit_alt_screen() puts("\033[?1049l") +#endif +////////////////////////////// + +void tc_echo_off(); +void tc_echo_on(); + +void tc_get_cols_rows(int *cols, int *rows) +{ +#ifdef _WIN32 + + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + *cols = csbi.srWindow.Right - csbi.srWindow.Left + 1; + *rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +#else + struct winsize size; + ioctl(1, TIOCGWINSZ, &size); + *cols = size.ws_col; + *rows = size.ws_row; +#endif +} + +#ifdef _WIN32 +void tc_echo_off() // Not intended for user use +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode & (~ENABLE_ECHO_INPUT)); +} +void tc_echo_on() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode | ENABLE_ECHO_INPUT); +} + +void tc_canon_on() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode | ENABLE_ECHO_INPUT); +} + +void tc_canon_off() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode & (~ENABLE_ECHO_INPUT)); +} + +void tc_clear_partial(int x, int y, int width, int height) // Clears a section of the screen +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + DWORD count; + COORD homeCoords = {x, y}; + + if (hConsole == INVALID_HANDLE_VALUE) + { + return; + } + + if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) + { + return; + } + for (int i = 0; i < height; i++) + { + FillConsoleOutputCharacter(hConsole, ' ', width, homeCoords, &count); + FillConsoleOutputAttribute(hConsole, csbi.wAttributes, width, homeCoords, &count); + + homeCoords.Y++; + } + homeCoords.Y = y; + SetConsoleCursorPosition(hConsole, homeCoords); + return; +} + +void tc_get_cursor(int *x, int *y) +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + *x = csbi.dwCursorPosition.X; + *y = csbi.dwCursorPosition.Y; +} +void tc_set_cursor(int x, int y) +{ + COORD pos = {x, y}; + SetConsoleCursorPosition(hConsole, pos); +} + +void tc_move_cursor(int x, int y) +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + int cur_x = csbi.dwCursorPosition.X + x; + int cur_y = csbi.dwCursorPosition.Y + y; + if (cur_x < 0) + { + cur_x = 0; + } + if (cur_y < 0) + { + cur_y = 0; + } + COORD pos = {cur_x, cur_y}; + SetConsoleCursorPosition(hConsole, pos); + +} + +void tc_clear_screen() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + DWORD written; + DWORD bufSize = csbi.dwSize.X * csbi.dwSize.Y; + COORD homeCoords = {0, 0}; // Home coordinates + FillConsoleOutputCharacter(hConsole, ' ', bufSize, homeCoords, &written); +} + +void tc_clear_entire_line() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(0, csbi.dwCursorPosition.Y, csbi.dwSize.X, 1); +} + +void tc_clear_line_till_cursor() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(0, csbi.dwCursorPosition.Y, csbi.dwCursorPosition.X, 1); +} + +void tc_clear_line_from_cursor() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y, csbi.dwSize.X, 1); +} + +void tc_clear_from_top_to_cursor() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(0, 0, csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y); +} + +void tc_clear_from_cursor_to_bottom() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y, csbi.dwSize.X, csbi.dwSize.Y - csbi.dwCursorPosition.Y); +} + +void tc_print(const char *s) +{ + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), s, strlen(s), NULL, NULL); +} + +int tc_getch() +{ + int ch = _getch(); + if(ch == 0 || ch == 0xE0) + { + ch += 255; + } + return ch; +} + +#else + +#define tc_clear_entire_line() puts("\x1B[2K") +#define tc_clear_line_till_cursor() puts("\x1B[1K") +#define tc_clear_line_from_cursor() puts("\x1B[0K") + +void tc_echo_off() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ECHO; + tcsetattr(1, TCSANOW, &term); +} + +void tc_echo_on() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ECHO; + tcsetattr(1, TCSANOW, &term); +} + +void tc_canon_on() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ICANON; + tcsetattr(1, TCSANOW, &term); +} + +void tc_canon_off() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ICANON; + tcsetattr(1, TCSANOW, &term); +} + +void tc_get_cursor(int *X, int *Y) +{ + tc_echo_off(); + tc_canon_off(); + printf("\033[6n"); + scanf("\033[%d;%dR", X, Y); +} +#define tc_set_cursor(X, Y) printf("\033[%d;%dH", Y, X) +void tc_move_cursor(int X, int Y) +{ + if (X > 0) + { + printf("\033[%dC", X); + } + else if (X < 0) + { + printf("\033[%dD", (X * -1)); + } + + if (Y > 0) + { + printf("\033[%dB", Y); + } + else if (Y < 0) + { + printf("\033[%dA", (Y * -1)); + } +} + +#define tc_clear_screen() puts("\x1B[2J") +#define tc_clear_from_top_to_cursor() puts("\x1B[1J") +#define tc_clear_from_cursor_to_bottom() puts("\x1B[0J") + +void tc_clear_partial(int x, int y, int width, int height) +{ + char *buf = (char *)calloc(width + 1, 1); + memset(buf, 32, width); + tc_set_cursor(x, y); + for (int i = 0; i < height; i++) + { + tc_set_cursor(x, y + i); + fwrite(buf, width, 1, stdout); + } + free(buf); +} + +void tc_print(const char *s) +{ + fprintf(stdout, "%s", s); +} + +int tc_getch() // TODO: Implement this +{ + return 0; +} + +#endif diff --git a/include/utf8/LICENSE b/include/utf8/LICENSE new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/include/utf8/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/include/utf8/README.md b/include/utf8/README.md new file mode 100644 index 0000000..fc330f6 --- /dev/null +++ b/include/utf8/README.md @@ -0,0 +1,326 @@ +# 📚 utf8.h + +[![Actions Status](https://github.com/sheredom/utf8.h/workflows/CMake/badge.svg)](https://github.com/sheredom/utf8.h/actions) +[![Build status](https://ci.appveyor.com/api/projects/status/phfjjahhs9j4gxvs?svg=true)](https://ci.appveyor.com/project/sheredom/utf8-h) +[![Sponsor](https://img.shields.io/badge/💜-sponsor-blueviolet)](https://github.com/sponsors/sheredom) + +A simple one header solution to supporting utf8 strings in C and C++. + +Functions provided from the C header string.h but with a utf8* prefix instead of the str* prefix: + +[API function docs](#api-function-docs) + +string.h | utf8.h | complete | C++14 constexpr +---------|--------|---------|--------- +strcat | utf8cat | ✔ | +strchr | utf8chr | ✔ | ✔ +strcmp | utf8cmp | ✔ | ✔ +strcoll | utf8coll | | +strcpy | utf8cpy | ✔ | +strcspn | utf8cspn | ✔ | ✔ +strdup | utf8dup | ✔ | +strfry | utf8fry | | +strlen | utf8len | ✔ | ✔ +strnlen | utf8nlen | ✔ | ✔ +strncat | utf8ncat | ✔ | +strncmp | utf8ncmp | ✔ | ✔ +strncpy | utf8ncpy | ✔ | +strndup | utf8ndup | ✔ | +strpbrk | utf8pbrk | ✔ | ✔ +strrchr | utf8rchr | ✔ | ✔ +strsep | utf8sep | | +strspn | utf8spn | ✔ | ✔ +strstr | utf8str | ✔ | ✔ +strtok | utf8tok | | +strxfrm | utf8xfrm | | + +Functions provided from the C header strings.h but with a utf8* prefix instead of the str* prefix: + +strings.h | utf8.h | complete | C++14 constexpr +----------|--------|---------|--------- +strcasecmp | utf8casecmp | ~~✔~~ | ✔ +strncasecmp | utf8ncasecmp | ~~✔~~ | ✔ +strcasestr | utf8casestr | ~~✔~~ | ✔ + +Functions provided that are unique to utf8.h: + +utf8.h | complete | C++14 constexpr +-------|---------|--------- +utf8codepoint | ✔ | ✔ +utf8rcodepoint | ✔ | ✔ +utf8size | ✔ | ✔ +utf8size\_lazy | ✔ | ✔ +utf8nsize\_lazy | ✔ | ✔ +utf8valid | ✔ | ✔ +utf8nvalid | ✔ | ✔ +utf8makevalid | ✔ | +utf8codepointsize | ✔ | ✔ +utf8catcodepoint | ✔ | +utf8isupper | ~~✔~~ | ✔ +utf8islower | ~~✔~~ | ✔ +utf8lwr | ~~✔~~ | +utf8upr | ~~✔~~ | +utf8lwrcodepoint | ~~✔~~ | ✔ +utf8uprcodepoint | ~~✔~~ | ✔ + +## Usage ## + +Just `#include "utf8.h"` in your code! + +The current supported platforms are Linux, macOS and Windows. + +The current supported compilers are gcc, clang, MSVC's cl.exe, and clang-cl.exe. + +## Design ## + +The utf8.h API matches the string.h API as much as possible by design. There are a few major differences though. + +utf8.h uses char8_t* in C++ 20 instead of char* + +Anywhere in the string.h or strings.h documentation where it refers to 'bytes' I have changed that to utf8 codepoints. For instance, utf8len will return the number of utf8 codepoints in a utf8 string - which does not necessarily equate to the number of bytes. + +## API function docs ## + +```c +int utf8casecmp(const void *src1, const void *src2); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, `src1 == src2`, +`src1 > src2` respectively, case insensitive. + +```c +void *utf8cat(void *dst, const void *src); +``` +Append the utf8 string `src` onto the utf8 string `dst`. + +```c +void *utf8chr(const void *src, utf8_int32_t chr); +``` +Find the first match of the utf8 codepoint `chr` in the utf8 string `src`. + +```c +int utf8cmp(const void *src1, const void *src2); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, +`src1 == src2`, `src1 > src2` respectively. + +```c +void *utf8cpy(void *dst, const void *src); +``` +Copy the utf8 string `src` onto the memory allocated in `dst`. + +```c +size_t utf8cspn(const void *src, const void *reject); +``` +Number of utf8 codepoints in the utf8 string `src` that consists entirely +of utf8 codepoints not from the utf8 string `reject`. + +```c +void *utf8dup(const void *src); +``` +Duplicate the utf8 string `src` by getting its size, `malloc`ing a new buffer +copying over the data, and returning that. Or 0 if `malloc` failed. + +```c +size_t utf8len(const void *str); +``` +Number of utf8 codepoints in the utf8 string `str`, +**excluding** the null terminating byte. + +```c +size_t utf8nlen(const void *str, size_t n); +``` +Similar to `utf8len`, except that only at most `n` bytes of `src` are looked. + +```c +int utf8ncasecmp(const void *src1, const void *src2, size_t n); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, `src1 == src2`, +`src1 > src2` respectively, case insensitive. Checking at most `n` +bytes of each utf8 string. + +```c +void *utf8ncat(void *dst, const void *src, size_t n); +``` +Append the utf8 string `src` onto the utf8 string `dst`, +writing at most `n+1` bytes. Can produce an invalid utf8 +string if `n` falls partway through a utf8 codepoint. + +```c +int utf8ncmp(const void *src1, const void *src2, size_t n); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, +`src1 == src2`, `src1 > src2` respectively. Checking at most `n` +bytes of each utf8 string. + +```c +void *utf8ncpy(void *dst, const void *src, size_t n); +``` +Copy the utf8 string `src` onto the memory allocated in `dst`. +Copies at most `n` bytes. If `n` falls partway through a utf8 +codepoint, or if `dst` doesn't have enough room for a null +terminator, the final string will be cut short to preserve +utf8 validity. + +```c +void *utf8pbrk(const void *str, const void *accept); +``` +Locates the first occurrence in the utf8 string `str` of any byte in the +utf8 string `accept`, or 0 if no match was found. + +```c +void *utf8rchr(const void *src, utf8_int32_t chr); +``` +Find the last match of the utf8 codepoint `chr` in the utf8 string `src`. + +```c +size_t utf8size(const void *str); +``` +Number of bytes in the utf8 string `str`, +including the null terminating byte. + +```c +size_t utf8size_lazy(const void *str); +``` +Similar to `utf8size`, except that the null terminating byte is **excluded**. + +```c +size_t utf8nsize_lazy(const void *str, size_t n); +``` +Similar to `utf8size`, except that only at most `n` bytes of `src` are looked and +the null terminating byte is **excluded**. + +```c +size_t utf8spn(const void *src, const void *accept); +``` +Number of utf8 codepoints in the utf8 string `src` that consists entirely +of utf8 codepoints from the utf8 string `accept`. + +```c +void *utf8str(const void *haystack, const void *needle); +``` +The position of the utf8 string `needle` in the utf8 string `haystack`. + +```c +void *utf8casestr(const void *haystack, const void *needle); +``` +The position of the utf8 string `needle` in the utf8 string `haystack`, +case insensitive. + +```c +void *utf8valid(const void *str); +``` +Return 0 on success, or the position of the invalid utf8 codepoint on failure. + +```c +void *utf8nvalid(const void *str, size_t n); +``` +Similar to `utf8valid`, except that only at most `n` bytes of `src` are looked. + +```c +int utf8makevalid(void *str, utf8_int32_t replacement); +``` +Return 0 on success. Makes the `str` valid by replacing invalid sequences with +the 1-byte `replacement` codepoint. + +```c +void *utf8codepoint(const void *str, utf8_int32_t *out_codepoint); +``` +Sets out_codepoint to the current utf8 codepoint in `str`, and returns the +address of the next utf8 codepoint after the current one in `str`. + +```c +void *utf8rcodepoint(const void *str, utf8_int32_t *out_codepoint); +``` +Sets out_codepoint to the current utf8 codepoint in `str`, and returns the +address of the previous utf8 codepoint before the current one in `str`. + +```c +size_t utf8codepointsize(utf8_int32_t chr); +``` +Returns the size of the given codepoint in bytes. + +```c +void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n); +``` +Write a codepoint to the given string, and return the address to the next +place after the written codepoint. Pass how many bytes left in the buffer to +n. If there is not enough space for the codepoint, this function returns +null. + +```c +int utf8islower(utf8_int32_t chr); +``` +Returns 1 if the given character is lowercase, or 0 if it is not. + +```c +int utf8isupper(utf8_int32_t chr); +``` +Returns 1 if the given character is uppercase, or 0 if it is not. + +```c +void utf8lwr(void *utf8_restrict str); +``` +Transform the given string into all lowercase codepoints. + +```c +void utf8upr(void *utf8_restrict str); +``` +Transform the given string into all uppercase codepoints. + +```c +utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); +``` +Make a codepoint lower case if possible. + +```c +utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); +``` +Make a codepoint upper case if possible. + +## Codepoint Case + +Various functions provided will do case insensitive compares, or transform utf8 +strings from one case to another. Given the vastness of unicode, and the authors +lack of understanding beyond latin codepoints on whether case means anything, +the following categories are the only ones that will be checked in case +insensitive code: + +* [ASCII](https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)) +* [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)) +* [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +* [Latin Extended-B](https://en.wikipedia.org/wiki/Latin_Extended-B) +* [Greek and Coptic](https://en.wikipedia.org/wiki/Greek_and_Coptic) +* [Cyrillic](https://en.wikipedia.org/wiki/Cyrillic_(Unicode_block)) + +## Todo ## + +- Implement utf8coll (akin to strcoll). +- Implement utf8fry (akin to strfry). +- Investigate adding dst buffer sizes for utf8cpy and utf8cat to catch overwrites (as suggested by [@FlohOfWoe](https://twitter.com/FlohOfWoe) in https://twitter.com/FlohOfWoe/status/618669237771608064) + +## License ## + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/include/utf8/appveyor.yml b/include/utf8/appveyor.yml new file mode 100644 index 0000000..cba55a0 --- /dev/null +++ b/include/utf8/appveyor.yml @@ -0,0 +1,51 @@ +version: '{build}' + +skip_tags: true +skip_branch_with_pr: true + +install: [] + +environment: + matrix: + - VSVERSION: Visual Studio 9 2008 + - VSVERSION: Visual Studio 10 2010 + - VSVERSION: Visual Studio 11 2012 + - VSVERSION: Visual Studio 12 2013 + - VSVERSION: Visual Studio 14 2015 + - VSVERSION: Visual Studio 15 2017 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + - VSVERSION: Visual Studio 16 2019 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 + +platform: + - Win32 + - x64 + +matrix: + exclude: + - platform: x64 + VSVERSION: Visual Studio 9 2008 + # VS 2019 / 64-bit is tested in GitHub Actions instead. + - platform: x64 + VSVERSION: Visual Studio 16 2019 + +configuration: + - Debug + # Removed to reduce configuration explosion. + # - RelWithDebInfo + # - MinSizeRel + - Release + +build_script: + - md build + - cd build + - if NOT "%VSVERSION%"=="Visual Studio 16 2019" if "%PLATFORM%"=="x64" cmake -G "%VSVERSION% Win64" ../test + - if NOT "%VSVERSION%"=="Visual Studio 16 2019" if "%PLATFORM%"=="Win32" cmake -G "%VSVERSION%" ../test + - if "%VSVERSION%"=="Visual Studio 16 2019" cmake -G "%VSVERSION%" -A "%PLATFORM%" ../test + - msbuild /m /p:Configuration="%CONFIGURATION%" /p:Platform="%PLATFORM%" utf8.sln + - copy %CONFIGURATION%\utf8_test.exe utf8_test.exe + - copy %CONFIGURATION%\utf8_no_malloc_test.exe utf8_no_malloc_test.exe + +test_script: + - utf8_test.exe + - utf8_no_malloc_test.exe diff --git a/include/utf8/test/CMakeLists.txt b/include/utf8/test/CMakeLists.txt new file mode 100644 index 0000000..a89f926 --- /dev/null +++ b/include/utf8/test/CMakeLists.txt @@ -0,0 +1,117 @@ +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# For more information, please refer to + +project(utf8) +cmake_minimum_required(VERSION 2.8.12) + +set(UTF8_USE_SANITIZER "" CACHE STRING "Set which Clang Sanitizer to use") + +macro(add_sanitizer target) + if(NOT "${UTF8_USE_SANITIZER}" STREQUAL "") + target_compile_options(${target} PUBLIC -fno-omit-frame-pointer -fsanitize=${UTF8_USE_SANITIZER}) + target_link_options(${target} PUBLIC -fno-omit-frame-pointer -fsanitize=${UTF8_USE_SANITIZER}) + endif() +endmacro() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) + +add_executable(utf8_test main.c) +add_sanitizer(utf8_test) + +add_executable(utf8_no_malloc_test no_malloc.c) +add_sanitizer(utf8_no_malloc_test) + +add_executable(utf8_test_c90 test.c) +add_sanitizer(utf8_test_c90) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(utf8_test_c90 PUBLIC "-std=c90") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") + else() + target_compile_options(utf8_test_c90 PUBLIC "-std=c90") + endif() +endif() + +add_executable(utf8_test_c99 test.c) +add_sanitizer(utf8_test_c99) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(utf8_test_c99 PUBLIC "-std=c99") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") + else() + target_compile_options(utf8_test_c99 PUBLIC "-std=c99") + endif() +endif() + +add_executable(utf8_test_c11 test.c) +add_sanitizer(utf8_test_c11) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(utf8_test_c11 PUBLIC "-std=c11") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") + else() + target_compile_options(utf8_test_c11 PUBLIC "-std=c11") + endif() +endif() + +add_executable(utf8_test_cpp11 test.cpp) +add_sanitizer(utf8_test_cpp11) +set_target_properties(utf8_test_cpp11 PROPERTIES CXX_STANDARD 11) + +add_executable(utf8_test_cpp14 test.cpp) +add_sanitizer(utf8_test_cpp14) +set_target_properties(utf8_test_cpp14 PROPERTIES CXX_STANDARD 14) + +add_executable(utf8_test_cpp17 test.cpp) +add_sanitizer(utf8_test_cpp17) +set_target_properties(utf8_test_cpp17 PROPERTIES CXX_STANDARD 17) + +add_executable(utf8_test_cpp20 test.cpp) +add_sanitizer(utf8_test_cpp20) +set_target_properties(utf8_test_cpp20 PROPERTIES CXX_STANDARD 20) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "-Wall -Wextra -Werror" + ) +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "-Wall -Wextra -Weverything -Werror -Wno-c++98-compat" + ) +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "/Wall /WX /wd4514" + ) + if(${MSVC_VERSION} VERSION_GREATER "15.7") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "/Zc:__cplusplus" + ) + endif() +else() + message(WARNING "Unknown compiler '${CMAKE_C_COMPILER_ID}'!") +endif() diff --git a/include/utf8/test/main.c b/include/utf8/test/main.c new file mode 100644 index 0000000..3739fbe --- /dev/null +++ b/include/utf8/test/main.c @@ -0,0 +1,1669 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +// include the unit testing framework +#include "utest.h" + +// include the header we are testing +#include "utf8.h" + +const char data[] = { + '\xce', '\x93', '\xce', '\xb1', '\xce', '\xb6', '\xce', '\xad', '\xce', + '\xb5', '\xcf', '\x82', '\x20', '\xce', '\xba', '\xce', '\xb1', '\xe1', + '\xbd', '\xb6', '\x20', '\xce', '\xbc', '\xcf', '\x85', '\xcf', '\x81', + '\xcf', '\x84', '\xce', '\xb9', '\xe1', '\xbd', '\xb2', '\xcf', '\x82', + '\x20', '\xce', '\xb4', '\xe1', '\xbd', '\xb2', '\xce', '\xbd', '\x20', + '\xce', '\xb8', '\xe1', '\xbd', '\xb0', '\x20', '\xce', '\xb2', '\xcf', + '\x81', '\xe1', '\xbf', '\xb6', '\x20', '\xcf', '\x80', '\xce', '\xb9', + '\xe1', '\xbd', '\xb0', '\x20', '\xcf', '\x83', '\xcf', '\x84', '\xe1', + '\xbd', '\xb8', '\x20', '\xcf', '\x87', '\xcf', '\x81', '\xcf', '\x85', + '\xcf', '\x83', '\xce', '\xb1', '\xcf', '\x86', '\xe1', '\xbd', '\xb6', + '\x20', '\xce', '\xbe', '\xce', '\xad', '\xcf', '\x86', '\xcf', '\x89', + '\xcf', '\x84', '\xce', '\xbf', '\x0a', '\0'}; + +const char cmp[] = {'\xce', '\xbc', '\xcf', '\x85', '\0'}; + +const char lt[] = {'\xce', '\x93', '\xce', '\xb1', '\xce', + '\xb6', '\xce', '\xac', '\0'}; + +const char gt[] = {'\xce', '\x93', '\xce', '\xb1', '\xce', + '\xb6', '\xce', '\xae', '\0'}; + +const char spn[] = {'\xce', '\x93', '\xce', '\xb1', '\xce', '\xb6', + '\xce', '\xad', '\xce', '\xb5', '\xcf', '\x82', + '\x20', '\xce', '\xba', '\0'}; + +const char pbrk[] = {'\xcf', '\x82', '\x20', '\xce', '\xb5', '\0'}; + +const char ascii1[] = "I lIke GOATS YARHAR."; +const char ascii2[] = "i LIKE goats yarHAR."; +const char allascii1[] = "abcdefghijklmnopqrstuvwyzABCDEFGHIJKLMNOPQRSTUVWYZ"; +const char allascii2[] = "ABCDEFGHIJKLMNOPQRSTUVWYZabcdefghijklmnopqrstuvwyz"; +const char haystack[] = "foobar"; +const char needle[] = "oba"; +const char endfailneedle[] = "ra"; +const char cspnmultisearch[] = "another test; string|one more"; +const char cspnmultidelims[] = "|;"; +const char spnasciisearch[] = ",,hello,,world"; +const char spnasciidelims[] = ","; + +struct LowerUpperPair { + int lower; + int upper; +}; + +const struct LowerUpperPair lowupPairs[] = { + /* ascii */ + {0x0061, 0x0041}, + {0x0062, 0x0042}, + {0x0063, 0x0043}, + {0x0064, 0x0044}, + {0x0065, 0x0045}, + {0x0066, 0x0046}, + {0x0067, 0x0047}, + {0x0068, 0x0048}, + {0x0069, 0x0049}, + {0x006a, 0x004a}, + {0x006b, 0x004b}, + {0x006c, 0x004c}, + {0x006d, 0x004d}, + {0x006e, 0x004e}, + {0x006f, 0x004f}, + {0x0070, 0x0050}, + {0x0071, 0x0051}, + {0x0072, 0x0052}, + {0x0073, 0x0053}, + {0x0074, 0x0054}, + {0x0075, 0x0055}, + {0x0076, 0x0056}, + {0x0077, 0x0057}, + {0x0078, 0x0058}, + {0x0079, 0x0059}, + {0x007a, 0x005a}, + + /* Latin-1 Supplement */ + {0x00e0, 0x00c0}, + {0x00e1, 0x00c1}, + {0x00e2, 0x00c2}, + {0x00e3, 0x00c3}, + {0x00e4, 0x00c4}, + {0x00e5, 0x00c5}, + {0x00e6, 0x00c6}, + {0x00e7, 0x00c7}, + {0x00e8, 0x00c8}, + {0x00e9, 0x00c9}, + {0x00ea, 0x00ca}, + {0x00eb, 0x00cb}, + {0x00ec, 0x00cc}, + {0x00ed, 0x00cd}, + {0x00ee, 0x00ce}, + {0x00ef, 0x00cf}, + {0x00f0, 0x00d0}, + {0x00f1, 0x00d1}, + {0x00f2, 0x00d2}, + {0x00f3, 0x00d3}, + {0x00f4, 0x00d4}, + {0x00f5, 0x00d5}, + {0x00f6, 0x00d6}, + {0x00f8, 0x00d8}, + {0x00f9, 0x00d9}, + {0x00fa, 0x00da}, + {0x00fb, 0x00db}, + {0x00fc, 0x00dc}, + {0x00fd, 0x00dd}, + {0x00fe, 0x00de}, + {0x00ff, 0x0178}, + + /* Latin Extended-A */ + {0x0101, 0x0100}, + {0x0103, 0x0102}, + {0x0105, 0x0104}, + {0x0107, 0x0106}, + {0x0109, 0x0108}, + {0x010b, 0x010a}, + {0x010d, 0x010c}, + {0x010f, 0x010e}, + {0x0111, 0x0110}, + {0x0113, 0x0112}, + {0x0115, 0x0114}, + {0x0117, 0x0116}, + {0x0119, 0x0118}, + {0x011b, 0x011a}, + {0x011d, 0x011c}, + {0x011f, 0x011e}, + {0x0121, 0x0120}, + {0x0123, 0x0122}, + {0x0125, 0x0124}, + {0x0127, 0x0126}, + {0x0129, 0x0128}, + {0x012b, 0x012a}, + {0x012d, 0x012c}, + {0x012f, 0x012e}, + {0x0133, 0x0132}, + {0x0135, 0x0134}, + {0x0137, 0x0136}, + {0x013a, 0x0139}, + {0x013c, 0x013b}, + {0x013e, 0x013d}, + {0x0140, 0x013f}, + {0x0142, 0x0141}, + {0x0144, 0x0143}, + {0x0146, 0x0145}, + {0x0148, 0x0147}, + {0x014b, 0x014a}, + {0x014d, 0x014c}, + {0x014f, 0x014e}, + {0x0151, 0x0150}, + {0x0153, 0x0152}, + {0x0155, 0x0154}, + {0x0157, 0x0156}, + {0x0159, 0x0158}, + {0x015b, 0x015a}, + {0x015d, 0x015c}, + {0x015f, 0x015e}, + {0x0161, 0x0160}, + {0x0163, 0x0162}, + {0x0165, 0x0164}, + {0x0167, 0x0166}, + {0x0169, 0x0168}, + {0x016b, 0x016a}, + {0x016d, 0x016c}, + {0x016f, 0x016e}, + {0x0171, 0x0170}, + {0x0173, 0x0172}, + {0x0175, 0x0174}, + {0x0177, 0x0176}, + {0x017a, 0x0179}, + {0x017c, 0x017b}, + {0x017e, 0x017d}, + + /* Latin Extended-B */ + {0x0180, 0x0243}, + {0x01dd, 0x018e}, + {0x019a, 0x023d}, + {0x019e, 0x0220}, + {0x0292, 0x01b7}, + {0x01c6, 0x01c4}, + {0x01c9, 0x01c7}, + {0x01cc, 0x01ca}, + {0x01f3, 0x01f1}, + {0x01bf, 0x01f7}, + {0x0183, 0x0182}, + {0x0185, 0x0184}, + {0x0188, 0x0187}, + {0x018c, 0x018b}, + {0x0192, 0x0191}, + {0x0199, 0x0198}, + {0x01a1, 0x01a0}, + {0x01a3, 0x01a2}, + {0x01a5, 0x01a4}, + {0x01a8, 0x01a7}, + {0x01ad, 0x01ac}, + {0x01b0, 0x01af}, + {0x01b4, 0x01b3}, + {0x01b6, 0x01b5}, + {0x01b9, 0x01b8}, + {0x01bd, 0x01bc}, + {0x01ce, 0x01cd}, + {0x01d0, 0x01cf}, + {0x01d2, 0x01d1}, + {0x01d4, 0x01d3}, + {0x01d6, 0x01d5}, + {0x01d8, 0x01d7}, + {0x01da, 0x01d9}, + {0x01dc, 0x01db}, + {0x01df, 0x01de}, + {0x01e1, 0x01e0}, + {0x01e3, 0x01e2}, + {0x01e5, 0x01e4}, + {0x01e7, 0x01e6}, + {0x01e9, 0x01e8}, + {0x01eb, 0x01ea}, + {0x01ed, 0x01ec}, + {0x01ef, 0x01ee}, + {0x01f5, 0x01f4}, + {0x01f9, 0x01f8}, + {0x01fb, 0x01fa}, + {0x01fd, 0x01fc}, + {0x01ff, 0x01fe}, + {0x0201, 0x0200}, + {0x0203, 0x0202}, + {0x0205, 0x0204}, + {0x0207, 0x0206}, + {0x0209, 0x0208}, + {0x020b, 0x020a}, + {0x020d, 0x020c}, + {0x020f, 0x020e}, + {0x0211, 0x0210}, + {0x0213, 0x0212}, + {0x0215, 0x0214}, + {0x0217, 0x0216}, + {0x0219, 0x0218}, + {0x021b, 0x021a}, + {0x021d, 0x021c}, + {0x021f, 0x021e}, + {0x0223, 0x0222}, + {0x0225, 0x0224}, + {0x0227, 0x0226}, + {0x0229, 0x0228}, + {0x022b, 0x022a}, + {0x022d, 0x022c}, + {0x022f, 0x022e}, + {0x0231, 0x0230}, + {0x0233, 0x0232}, + {0x023c, 0x023b}, + {0x0242, 0x0241}, + {0x0247, 0x0246}, + {0x0249, 0x0248}, + {0x024b, 0x024a}, + {0x024d, 0x024c}, + {0x024f, 0x024e}, + + /* Greek and Coptic */ + {0x037b, 0x03fd}, + {0x037c, 0x03fe}, + {0x037d, 0x03ff}, + + {0x03f3, 0x037f}, + {0x03ac, 0x0386}, + + {0x03ad, 0x0388}, + {0x03ae, 0x0389}, + {0x03af, 0x038a}, + + {0x03cc, 0x038c}, + + {0x03cd, 0x038e}, + {0x03ce, 0x038f}, + + {0x0371, 0x0370}, + {0x0373, 0x0372}, + {0x0377, 0x0376}, + + {0x03B1, 0x0391}, + {0x03B2, 0x0392}, + {0x03B3, 0x0393}, + {0x03B4, 0x0394}, + {0x03B5, 0x0395}, + {0x03B6, 0x0396}, + {0x03B7, 0x0397}, + {0x03B8, 0x0398}, + {0x03B9, 0x0399}, + {0x03BA, 0x039A}, + {0x03BB, 0x039B}, + {0x03BC, 0x039C}, + {0x03BD, 0x039D}, + {0x03BE, 0x039E}, + {0x03BF, 0x039F}, + {0x03C0, 0x03A0}, + {0x03C1, 0x03A1}, + + {0x03C3, 0x03A3}, + {0x03C4, 0x03A4}, + {0x03C5, 0x03A5}, + {0x03C6, 0x03A6}, + {0x03C7, 0x03A7}, + {0x03C8, 0x03A8}, + {0x03C9, 0x03A9}, + {0x03ca, 0x03aa}, + {0x03cb, 0x03ab}, + + {0x03d1, 0x03f4}, + + {0x03d7, 0x03cf}, + + {0x03d9, 0x03d8}, + {0x03db, 0x03da}, + {0x03dd, 0x03dc}, + {0x03df, 0x03de}, + {0x03e1, 0x03e0}, + {0x03e3, 0x03e2}, + {0x03e5, 0x03e4}, + {0x03e7, 0x03e6}, + {0x03e9, 0x03e8}, + {0x03eb, 0x03ea}, + {0x03ed, 0x03ec}, + {0x03ef, 0x03ee}, + + {0x03f2, 0x03f9}, + + {0x03f8, 0x03f7}, + + {0x03fb, 0x03fa}, + + /* Cyrillic */ + {0x0450, 0x0400}, + {0x0451, 0x0401}, + {0x0452, 0x0402}, + {0x0453, 0x0403}, + {0x0454, 0x0404}, + {0x0455, 0x0405}, + {0x0456, 0x0406}, + {0x0457, 0x0407}, + {0x0458, 0x0408}, + {0x0459, 0x0409}, + {0x045a, 0x040a}, + {0x045b, 0x040b}, + {0x045c, 0x040c}, + {0x045d, 0x040d}, + {0x045e, 0x040e}, + {0x045f, 0x040f}, + + {0x0430, 0x0410}, + {0x0431, 0x0411}, + {0x0432, 0x0412}, + {0x0433, 0x0413}, + {0x0434, 0x0414}, + {0x0435, 0x0415}, + {0x0436, 0x0416}, + {0x0437, 0x0417}, + {0x0438, 0x0418}, + {0x0439, 0x0419}, + {0x043a, 0x041a}, + {0x043b, 0x041b}, + {0x043c, 0x041c}, + {0x043d, 0x041d}, + {0x043e, 0x041e}, + {0x043f, 0x041f}, + {0x0440, 0x0420}, + {0x0441, 0x0421}, + {0x0442, 0x0422}, + {0x0443, 0x0423}, + {0x0444, 0x0424}, + {0x0445, 0x0425}, + {0x0446, 0x0426}, + {0x0447, 0x0427}, + {0x0448, 0x0428}, + {0x0449, 0x0429}, + {0x044a, 0x042a}, + {0x044b, 0x042b}, + {0x044c, 0x042c}, + {0x044d, 0x042d}, + {0x044e, 0x042e}, + {0x044f, 0x042f}, + + {0x0461, 0x0460}, + {0x0463, 0x0462}, + {0x0465, 0x0464}, + {0x0467, 0x0466}, + {0x0469, 0x0468}, + {0x046b, 0x046a}, + {0x046d, 0x046c}, + {0x046f, 0x046e}, + {0x0471, 0x0470}, + {0x0473, 0x0472}, + {0x0475, 0x0474}, + {0x0477, 0x0476}, + {0x0479, 0x0478}, + {0x047b, 0x047a}, + {0x047d, 0x047c}, + {0x047f, 0x047e}, + {0x0481, 0x0480}, + + {0x048b, 0x048a}, + {0x048d, 0x048c}, + {0x048f, 0x048e}, + {0x0491, 0x0490}, + {0x0493, 0x0492}, + {0x0495, 0x0494}, + {0x0497, 0x0496}, + {0x0499, 0x0498}, + {0x049b, 0x049a}, + {0x049d, 0x049c}, + {0x049f, 0x049e}, + {0x04a1, 0x04a0}, + {0x04a3, 0x04a2}, + {0x04a5, 0x04a4}, + {0x04a7, 0x04a6}, + {0x04a9, 0x04a8}, + {0x04ab, 0x04aa}, + {0x04ad, 0x04ac}, + {0x04af, 0x04ae}, + {0x04b1, 0x04b0}, + {0x04b3, 0x04b2}, + {0x04b5, 0x04b4}, + {0x04b7, 0x04b6}, + {0x04b9, 0x04b8}, + {0x04bb, 0x04ba}, + {0x04bd, 0x04bc}, + {0x04bf, 0x04be}, + {0x04c1, 0x04c0}, + {0x04c3, 0x04c2}, + {0x04c5, 0x04c4}, + {0x04c7, 0x04c6}, + {0x04c9, 0x04c8}, + {0x04cb, 0x04ca}, + {0x04cd, 0x04cc}, + {0x04cf, 0x04ce}, + {0x04d1, 0x04d0}, + {0x04d3, 0x04d2}, + {0x04d5, 0x04d4}, + {0x04d7, 0x04d6}, + {0x04d9, 0x04d8}, + {0x04db, 0x04da}, + {0x04dd, 0x04dc}, + {0x04df, 0x04de}, + {0x04e1, 0x04e0}, + {0x04e3, 0x04e2}, + {0x04e5, 0x04e4}, + {0x04e7, 0x04e6}, + {0x04e9, 0x04e8}, + {0x04eb, 0x04ea}, + {0x04ed, 0x04ec}, + {0x04ef, 0x04ee}, + {0x04f1, 0x04f0}, + {0x04f3, 0x04f2}, + {0x04f5, 0x04f4}, + {0x04f7, 0x04f6}, + {0x04f9, 0x04f8}, + {0x04fb, 0x04fa}, + {0x04fd, 0x04fc}, + {0x04ff, 0x04fe}, + + // End of array marker + {0, 0}}; + +const char lowersStr[] = { + '\x61', '\x62', '\x63', '\x64', '\x65', '\x66', '\x67', '\x68', '\x69', + '\x6a', '\x6b', '\x6c', '\x6d', '\x6e', '\x6f', '\x70', '\x71', '\x72', + '\x73', '\x74', '\x75', '\x76', '\x77', '\x78', '\x79', '\x7a', '\xc3', + '\xa0', '\xc3', '\xa1', '\xc3', '\xa2', '\xc3', '\xa3', '\xc3', '\xa4', + '\xc3', '\xa5', '\xc3', '\xa6', '\xc3', '\xa7', '\xc3', '\xa8', '\xc3', + '\xa9', '\xc3', '\xaa', '\xc3', '\xab', '\xc3', '\xac', '\xc3', '\xad', + '\xc3', '\xae', '\xc3', '\xaf', '\xc3', '\xb0', '\xc3', '\xb1', '\xc3', + '\xb2', '\xc3', '\xb3', '\xc3', '\xb4', '\xc3', '\xb5', '\xc3', '\xb6', + '\xc3', '\xb8', '\xc3', '\xb9', '\xc3', '\xba', '\xc3', '\xbb', '\xc3', + '\xbc', '\xc3', '\xbd', '\xc3', '\xbe', '\xc3', '\xbf', '\xc4', '\x81', + '\xc4', '\x83', '\xc4', '\x85', '\xc4', '\x87', '\xc4', '\x89', '\xc4', + '\x8b', '\xc4', '\x8d', '\xc4', '\x8f', '\xc4', '\x91', '\xc4', '\x93', + '\xc4', '\x95', '\xc4', '\x97', '\xc4', '\x99', '\xc4', '\x9b', '\xc4', + '\x9d', '\xc4', '\x9f', '\xc4', '\xa1', '\xc4', '\xa3', '\xc4', '\xa5', + '\xc4', '\xa7', '\xc4', '\xa9', '\xc4', '\xab', '\xc4', '\xad', '\xc4', + '\xaf', '\xc4', '\xb3', '\xc4', '\xb5', '\xc4', '\xb7', '\xc4', '\xba', + '\xc4', '\xbc', '\xc4', '\xbe', '\xc5', '\x80', '\xc5', '\x82', '\xc5', + '\x84', '\xc5', '\x86', '\xc5', '\x88', '\xc5', '\x8b', '\xc5', '\x8d', + '\xc5', '\x8f', '\xc5', '\x91', '\xc5', '\x93', '\xc5', '\x95', '\xc5', + '\x97', '\xc5', '\x99', '\xc5', '\x9b', '\xc5', '\x9d', '\xc5', '\x9f', + '\xc5', '\xa1', '\xc5', '\xa3', '\xc5', '\xa5', '\xc5', '\xa7', '\xc5', + '\xa9', '\xc5', '\xab', '\xc5', '\xad', '\xc5', '\xaf', '\xc5', '\xb1', + '\xc5', '\xb3', '\xc5', '\xb5', '\xc5', '\xb7', '\xc5', '\xba', '\xc5', + '\xbc', '\xc5', '\xbe', '\xc6', '\x80', '\xc7', '\x9d', '\xc6', '\x9a', + '\xc6', '\x9e', '\xca', '\x92', '\xc7', '\x86', '\xc7', '\x89', '\xc7', + '\x8c', '\xc7', '\xb3', '\xc6', '\xbf', '\xc6', '\x83', '\xc6', '\x85', + '\xc6', '\x88', '\xc6', '\x8c', '\xc6', '\x92', '\xc6', '\x99', '\xc6', + '\xa1', '\xc6', '\xa3', '\xc6', '\xa5', '\xc6', '\xa8', '\xc6', '\xad', + '\xc6', '\xb0', '\xc6', '\xb4', '\xc6', '\xb6', '\xc6', '\xb9', '\xc6', + '\xbd', '\xc7', '\x8e', '\xc7', '\x90', '\xc7', '\x92', '\xc7', '\x94', + '\xc7', '\x96', '\xc7', '\x98', '\xc7', '\x9a', '\xc7', '\x9c', '\xc7', + '\x9f', '\xc7', '\xa1', '\xc7', '\xa3', '\xc7', '\xa5', '\xc7', '\xa7', + '\xc7', '\xa9', '\xc7', '\xab', '\xc7', '\xad', '\xc7', '\xaf', '\xc7', + '\xb5', '\xc7', '\xb9', '\xc7', '\xbb', '\xc7', '\xbd', '\xc7', '\xbf', + '\xc8', '\x81', '\xc8', '\x83', '\xc8', '\x85', '\xc8', '\x87', '\xc8', + '\x89', '\xc8', '\x8b', '\xc8', '\x8d', '\xc8', '\x8f', '\xc8', '\x91', + '\xc8', '\x93', '\xc8', '\x95', '\xc8', '\x97', '\xc8', '\x99', '\xc8', + '\x9b', '\xc8', '\x9d', '\xc8', '\x9f', '\xc8', '\xa3', '\xc8', '\xa5', + '\xc8', '\xa7', '\xc8', '\xa9', '\xc8', '\xab', '\xc8', '\xad', '\xc8', + '\xaf', '\xc8', '\xb1', '\xc8', '\xb3', '\xc8', '\xbc', '\xc9', '\x82', + '\xc9', '\x87', '\xc9', '\x89', '\xc9', '\x8b', '\xc9', '\x8d', '\xc9', + '\x8f', '\xcd', '\xbb', '\xcd', '\xbc', '\xcd', '\xbd', '\xcf', '\xb3', + '\xce', '\xac', '\xce', '\xad', '\xce', '\xae', '\xce', '\xaf', '\xcf', + '\x8c', '\xcf', '\x8d', '\xcf', '\x8e', '\xcd', '\xb1', '\xcd', '\xb3', + '\xcd', '\xb7', '\xce', '\xb1', '\xce', '\xb2', '\xce', '\xb3', '\xce', + '\xb4', '\xce', '\xb5', '\xce', '\xb6', '\xce', '\xb7', '\xce', '\xb8', + '\xce', '\xb9', '\xce', '\xba', '\xce', '\xbb', '\xce', '\xbc', '\xce', + '\xbd', '\xce', '\xbe', '\xce', '\xbf', '\xcf', '\x80', '\xcf', '\x81', + '\xcf', '\x83', '\xcf', '\x84', '\xcf', '\x85', '\xcf', '\x86', '\xcf', + '\x87', '\xcf', '\x88', '\xcf', '\x89', '\xcf', '\x8a', '\xcf', '\x8b', + '\xcf', '\x97', '\xcf', '\x99', '\xcf', '\x9b', '\xcf', '\x9d', '\xcf', + '\x9f', '\xcf', '\xa1', '\xcf', '\xa3', '\xcf', '\xa5', '\xcf', '\xa7', + '\xcf', '\xa9', '\xcf', '\xab', '\xcf', '\xad', '\xcf', '\xaf', '\xcf', + '\xb2', '\xcf', '\xb8', '\xcf', '\xbb', '\xd0', '\xb0', '\xd0', '\xb1', + '\xd0', '\xb2', '\xd0', '\xb3', '\xd0', '\xb4', '\xd0', '\xb5', '\xd1', + '\x91', '\xd0', '\xb6', '\xd0', '\xb7', '\xd0', '\xb8', '\xd0', '\xb9', + '\xd0', '\xba', '\xd0', '\xbb', '\xd0', '\xbc', '\xd0', '\xbd', '\xd0', + '\xbe', '\xd0', '\xbf', '\xd1', '\x80', '\xd1', '\x81', '\xd1', '\x82', + '\xd1', '\x83', '\xd1', '\x84', '\xd1', '\x85', '\xd1', '\x86', '\xd1', + '\x87', '\xd1', '\x88', '\xd1', '\x89', '\xd1', '\x8a', '\xd1', '\x8b', + '\xd1', '\x8c', '\xd1', '\x8d', '\xd1', '\x8e', '\xd1', '\x8f', '\0'}; + +const char uppersStr[] = { + '\x41', '\x42', '\x43', '\x44', '\x45', '\x46', '\x47', '\x48', '\x49', + '\x4a', '\x4b', '\x4c', '\x4d', '\x4e', '\x4f', '\x50', '\x51', '\x52', + '\x53', '\x54', '\x55', '\x56', '\x57', '\x58', '\x59', '\x5a', '\xc3', + '\x80', '\xc3', '\x81', '\xc3', '\x82', '\xc3', '\x83', '\xc3', '\x84', + '\xc3', '\x85', '\xc3', '\x86', '\xc3', '\x87', '\xc3', '\x88', '\xc3', + '\x89', '\xc3', '\x8a', '\xc3', '\x8b', '\xc3', '\x8c', '\xc3', '\x8d', + '\xc3', '\x8e', '\xc3', '\x8f', '\xc3', '\x90', '\xc3', '\x91', '\xc3', + '\x92', '\xc3', '\x93', '\xc3', '\x94', '\xc3', '\x95', '\xc3', '\x96', + '\xc3', '\x98', '\xc3', '\x99', '\xc3', '\x9a', '\xc3', '\x9b', '\xc3', + '\x9c', '\xc3', '\x9d', '\xc3', '\x9e', '\xc5', '\xb8', '\xc4', '\x80', + '\xc4', '\x82', '\xc4', '\x84', '\xc4', '\x86', '\xc4', '\x88', '\xc4', + '\x8a', '\xc4', '\x8c', '\xc4', '\x8e', '\xc4', '\x90', '\xc4', '\x92', + '\xc4', '\x94', '\xc4', '\x96', '\xc4', '\x98', '\xc4', '\x9a', '\xc4', + '\x9c', '\xc4', '\x9e', '\xc4', '\xa0', '\xc4', '\xa2', '\xc4', '\xa4', + '\xc4', '\xa6', '\xc4', '\xa8', '\xc4', '\xaa', '\xc4', '\xac', '\xc4', + '\xae', '\xc4', '\xb2', '\xc4', '\xb4', '\xc4', '\xb6', '\xc4', '\xb9', + '\xc4', '\xbb', '\xc4', '\xbd', '\xc4', '\xbf', '\xc5', '\x81', '\xc5', + '\x83', '\xc5', '\x85', '\xc5', '\x87', '\xc5', '\x8a', '\xc5', '\x8c', + '\xc5', '\x8e', '\xc5', '\x90', '\xc5', '\x92', '\xc5', '\x94', '\xc5', + '\x96', '\xc5', '\x98', '\xc5', '\x9a', '\xc5', '\x9c', '\xc5', '\x9e', + '\xc5', '\xa0', '\xc5', '\xa2', '\xc5', '\xa4', '\xc5', '\xa6', '\xc5', + '\xa8', '\xc5', '\xaa', '\xc5', '\xac', '\xc5', '\xae', '\xc5', '\xb0', + '\xc5', '\xb2', '\xc5', '\xb4', '\xc5', '\xb6', '\xc5', '\xb9', '\xc5', + '\xbb', '\xc5', '\xbd', '\xc9', '\x83', '\xc6', '\x8e', '\xc8', '\xbd', + '\xc8', '\xa0', '\xc6', '\xb7', '\xc7', '\x84', '\xc7', '\x87', '\xc7', + '\x8a', '\xc7', '\xb1', '\xc7', '\xb7', '\xc6', '\x82', '\xc6', '\x84', + '\xc6', '\x87', '\xc6', '\x8b', '\xc6', '\x91', '\xc6', '\x98', '\xc6', + '\xa0', '\xc6', '\xa2', '\xc6', '\xa4', '\xc6', '\xa7', '\xc6', '\xac', + '\xc6', '\xaf', '\xc6', '\xb3', '\xc6', '\xb5', '\xc6', '\xb8', '\xc6', + '\xbc', '\xc7', '\x8d', '\xc7', '\x8f', '\xc7', '\x91', '\xc7', '\x93', + '\xc7', '\x95', '\xc7', '\x97', '\xc7', '\x99', '\xc7', '\x9b', '\xc7', + '\x9e', '\xc7', '\xa0', '\xc7', '\xa2', '\xc7', '\xa4', '\xc7', '\xa6', + '\xc7', '\xa8', '\xc7', '\xaa', '\xc7', '\xac', '\xc7', '\xae', '\xc7', + '\xb4', '\xc7', '\xb8', '\xc7', '\xba', '\xc7', '\xbc', '\xc7', '\xbe', + '\xc8', '\x80', '\xc8', '\x82', '\xc8', '\x84', '\xc8', '\x86', '\xc8', + '\x88', '\xc8', '\x8a', '\xc8', '\x8c', '\xc8', '\x8e', '\xc8', '\x90', + '\xc8', '\x92', '\xc8', '\x94', '\xc8', '\x96', '\xc8', '\x98', '\xc8', + '\x9a', '\xc8', '\x9c', '\xc8', '\x9e', '\xc8', '\xa2', '\xc8', '\xa4', + '\xc8', '\xa6', '\xc8', '\xa8', '\xc8', '\xaa', '\xc8', '\xac', '\xc8', + '\xae', '\xc8', '\xb0', '\xc8', '\xb2', '\xc8', '\xbb', '\xc9', '\x81', + '\xc9', '\x86', '\xc9', '\x88', '\xc9', '\x8a', '\xc9', '\x8c', '\xc9', + '\x8e', '\xcf', '\xbd', '\xcf', '\xbe', '\xcf', '\xbf', '\xcd', '\xbf', + '\xce', '\x86', '\xce', '\x88', '\xce', '\x89', '\xce', '\x8a', '\xce', + '\x8c', '\xce', '\x8e', '\xce', '\x8f', '\xcd', '\xb0', '\xcd', '\xb2', + '\xcd', '\xb6', '\xce', '\x91', '\xce', '\x92', '\xce', '\x93', '\xce', + '\x94', '\xce', '\x95', '\xce', '\x96', '\xce', '\x97', '\xce', '\x98', + '\xce', '\x99', '\xce', '\x9a', '\xce', '\x9b', '\xce', '\x9c', '\xce', + '\x9d', '\xce', '\x9e', '\xce', '\x9f', '\xce', '\xa0', '\xce', '\xa1', + '\xce', '\xa3', '\xce', '\xa4', '\xce', '\xa5', '\xce', '\xa6', '\xce', + '\xa7', '\xce', '\xa8', '\xce', '\xa9', '\xce', '\xaa', '\xce', '\xab', + '\xcf', '\x8f', '\xcf', '\x98', '\xcf', '\x9a', '\xcf', '\x9c', '\xcf', + '\x9e', '\xcf', '\xa0', '\xcf', '\xa2', '\xcf', '\xa4', '\xcf', '\xa6', + '\xcf', '\xa8', '\xcf', '\xaa', '\xcf', '\xac', '\xcf', '\xae', '\xcf', + '\xb9', '\xcf', '\xb7', '\xcf', '\xba', '\xd0', '\x90', '\xd0', '\x91', + '\xd0', '\x92', '\xd0', '\x93', '\xd0', '\x94', '\xd0', '\x95', '\xd0', + '\x81', '\xd0', '\x96', '\xd0', '\x97', '\xd0', '\x98', '\xd0', '\x99', + '\xd0', '\x9a', '\xd0', '\x9b', '\xd0', '\x9c', '\xd0', '\x9d', '\xd0', + '\x9e', '\xd0', '\x9f', '\xd0', '\xa0', '\xd0', '\xa1', '\xd0', '\xa2', + '\xd0', '\xa3', '\xd0', '\xa4', '\xd0', '\xa5', '\xd0', '\xa6', '\xd0', + '\xa7', '\xd0', '\xa8', '\xd0', '\xa9', '\xd0', '\xaa', '\xd0', '\xab', + '\xd0', '\xac', '\xd0', '\xad', '\xd0', '\xae', '\xd0', '\xaf', '\0'}; + +UTEST(utf8len, data) { ASSERT_EQ(53, utf8len(data)); } + +UTEST(utf8nlen, data) { ASSERT_EQ(52, utf8nlen(data, 103)); } + +UTEST(utf8cat, empty_cat_data) { + char cat[512] = {'\0'}; + + ASSERT_EQ(0, utf8len(cat)); + + ASSERT_EQ(53, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, one_byte_cat_data) { + char cat[512]; + + cat[0] = 'a'; + cat[1] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, two_bytes_cat_data) { + char cat[512]; + + cat[0] = '\xce'; + cat[1] = '\x93'; + cat[2] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, three_bytes_cat_data) { + char cat[512]; + + cat[0] = '\xe1'; + cat[1] = '\xbd'; + cat[2] = '\xb6'; + cat[3] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, four_bytes_cat_data) { + char cat[512]; + + cat[0] = '\xf0'; + cat[1] = '\x90'; + cat[2] = '\x8d'; + cat[3] = '\x88'; + cat[4] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, cat_data_data) { + char cat[512] = {'\0'}; + + ASSERT_EQ(0, utf8len(cat)); + + ASSERT_EQ(106, utf8len(utf8cat(utf8cat(cat, data), data))); +} + +UTEST(utf8str, cmp) { ASSERT_EQ(data + 21, utf8str(data, cmp)); } + +UTEST(utf8str, test) { ASSERT_EQ((void *)0, utf8str(data, "test")); } + +UTEST(utf8str, empty) { ASSERT_EQ(data, utf8str(data, "")); } + +UTEST(utf8str, partial) { ASSERT_EQ(haystack + 2, utf8str(haystack, needle)); } + +UTEST(utf8str, endfail) { + ASSERT_EQ((void *)0, utf8str(haystack, endfailneedle)); +} + +UTEST(utf8casestr, cmp) { ASSERT_EQ(data + 21, utf8casestr(data, cmp)); } + +UTEST(utf8casestr, test) { ASSERT_EQ((void *)0, utf8casestr(data, "test")); } + +UTEST(utf8casestr, empty) { ASSERT_EQ(data, utf8casestr(data, "")); } + +UTEST(utf8casestr, partial) { + ASSERT_EQ(haystack + 2, utf8casestr(haystack, needle)); +} + +UTEST(utf8casestr, endfail) { + ASSERT_EQ((void *)0, utf8casestr(haystack, endfailneedle)); +} + +UTEST(utf8casestr, latin) { + ASSERT_EQ(lowersStr, utf8casestr(lowersStr, uppersStr)); +} + +UTEST(utf8chr, a) { ASSERT_EQ(data + 21, utf8chr(data, 0x3bc)); } + +UTEST(utf8chr, b) { ASSERT_EQ(NULL, utf8chr(data, 0x20ac)); } + +UTEST(utf8chr, null_terminator) { ASSERT_EQ(data + 104, utf8chr(data, '\0')); } + +UTEST(utf8chr, 0x20) { ASSERT_EQ(data + 12, utf8chr(data, 0x20)); } + +UTEST(utf8cmp, lt) { ASSERT_LT(0, utf8cmp(data, lt)); } + +UTEST(utf8cmp, eq) { ASSERT_EQ(0, utf8cmp(data, data)); } + +UTEST(utf8cmp, gt) { ASSERT_GT(0, utf8cmp(data, gt)); } + +UTEST(utf8cpy, data) { + char cpy[512] = {'\0'}; + + ASSERT_EQ(53, utf8len(utf8cpy(cpy, data))); +} + +// Matches \xce\x93 \xce\xb1 \xce\xb6 \xce\xad \xce\xb5 \xcf\x82 \x20 \xce\xba +// \xce\xb1 +UTEST(utf8spn, spn) { ASSERT_EQ(9, utf8spn(data, spn)); } + +UTEST(utf8spn, data) { ASSERT_EQ(53, utf8spn(data, data)); } + +UTEST(utf8spn, ascii) { ASSERT_EQ(0, utf8spn(data, "ab")); } + +UTEST(utf8spn, spnasciisearch) { + ASSERT_EQ(2, utf8spn(spnasciisearch, spnasciidelims)); +} + +UTEST(utf8cspn, spn) { ASSERT_EQ(0, utf8cspn(data, spn)); } + +UTEST(utf8cspn, data) { ASSERT_EQ(0, utf8cspn(data, data)); } + +UTEST(utf8cspn, ascii) { ASSERT_EQ(53, utf8cspn(data, "ab")); } + +UTEST(utf8cspn, cspnmultisearch) { + ASSERT_EQ(12, utf8cspn(cspnmultisearch, cspnmultidelims)); +} + +UTEST(utf8rchr, a) { ASSERT_EQ(data + 21, utf8rchr(data, 0x3bc)); } + +UTEST(utf8rchr, b) { ASSERT_EQ(NULL, utf8rchr(data, 0x20ac)); } + +UTEST(utf8rchr, null_terminator) { + ASSERT_EQ(data + 104, utf8rchr(data, '\0')); +} + +UTEST(utf8rchr, 0x20) { ASSERT_EQ(data + 90, utf8rchr(data, 0x20)); } + +UTEST(utf8rchr, overrun) { + const char ascii[] = "Hello\0Hello "; + ASSERT_EQ(4, utf8rchr(ascii, 'o') - ascii); +} + +UTEST(utf8rchr, underrun) { + const char ascii[] = "Helloo"; + ASSERT_EQ(5, utf8rchr(ascii, 'o') - ascii); +} + +UTEST(utf8dup, data) { + void *const dup = utf8dup(data); + ASSERT_TRUE(dup); + ASSERT_EQ(53, utf8len(dup)); + free(dup); +} + +UTEST(utf8dup, ascii) { + void *const dup = utf8dup("ab"); + ASSERT_TRUE(dup); + ASSERT_EQ(2, utf8len(dup)); + free(dup); +} + +UTEST(utf8dup, empty) { + void *const dup = utf8dup(""); + ASSERT_TRUE(dup); + ASSERT_EQ(0, utf8len(dup)); + free(dup); +} + +UTEST(utf8ndup, ascii) { + void *const dup = utf8ndup("1234567890", 4); + ASSERT_TRUE(dup); + ASSERT_EQ(4, utf8len(dup)); + free(dup); +} + +UTEST(utf8ndup, ascii_larger) { + void *const dup = utf8ndup("1234567890", 100); + ASSERT_TRUE(dup); + ASSERT_EQ(10, utf8len(dup)); + free(dup); +} + +static utf8_int8_t *allocate_from_buffer(utf8_int8_t *user_data, size_t n) { + return user_data; +} + +UTEST(utf8dup_ex, ascii) { + char user_data[1024]; + void *const dup = utf8dup_ex("1234567890", allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(10, utf8len(dup)); +} + +UTEST(utf8ndup_ex, ascii) { + char user_data[1024]; + void *const dup = + utf8ndup_ex("1234567890", 4, allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(4, utf8len(dup)); +} + +UTEST(utf8size, data) { ASSERT_EQ(105, utf8size(data)); } + +UTEST(utf8size, ascii) { ASSERT_EQ(3, utf8size("ab")); } + +UTEST(utf8size, empty) { ASSERT_EQ(1, utf8size("")); } + +UTEST(utf8size_lazy, data) { ASSERT_EQ(104, utf8size_lazy(data)); } + +UTEST(utf8size_lazy, ascii) { ASSERT_EQ(2, utf8size_lazy("ab")); } + +UTEST(utf8size_lazy, empty) { ASSERT_EQ(0, utf8size_lazy("")); } + +UTEST(utf8nsize_lazy, data) { ASSERT_EQ(50, utf8nsize_lazy(data, 50)); } + +UTEST(utf8nsize_lazy, ascii) { ASSERT_EQ(2, utf8nsize_lazy("ab", 50)); } + +UTEST(utf8nsize_lazy, empty) { ASSERT_EQ(0, utf8nsize_lazy("", 50)); } + +UTEST(utf8valid, a) { + char invalid[6]; + + invalid[0] = '\xf0'; + invalid[1] = '\x8f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, b) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, c) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, d) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\x3f'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, e) { + char invalid[6]; + + invalid[0] = '\xe0'; + invalid[1] = '\x9f'; + invalid[2] = '\xbf'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, f) { + char invalid[6]; + + invalid[0] = '\xef'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, g) { + char invalid[6]; + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, h) { + char invalid[6]; + + invalid[0] = '\xc1'; + invalid[1] = '\xbf'; + invalid[2] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, i) { + char invalid[6]; + + invalid[0] = '\xdf'; + invalid[1] = '\x3f'; + invalid[2] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, j) { + char invalid[6]; + + invalid[0] = '\x80'; + invalid[1] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, k) { + char invalid[6]; + + invalid[0] = '\xf8'; + invalid[1] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, l) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\xbf'; + invalid[5] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, m) { + char invalid[6]; + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, n) { + char invalid[6]; + + invalid[0] = '\xdf'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, data) { ASSERT_EQ(NULL, utf8valid(data)); } + +UTEST(utf8valid, ascii) { ASSERT_EQ(NULL, utf8valid("ab")); } + +UTEST(utf8valid, empty) { ASSERT_EQ(NULL, utf8valid("")); } + +UTEST(utf8nvalid, a) { + char valid[3]; + + const char *invalid = valid; + const size_t invalid_size = 1; + + valid[0] = '\xc2'; + valid[1] = '\x80'; + valid[2] = '\0'; + + ASSERT_EQ(invalid, utf8nvalid(valid, invalid_size)); +} + +UTEST(utf8nvalid, b) { + char valid[4]; + + const char *invalid = valid; + const size_t invalid_size = 2; + + valid[0] = '\xe0'; + valid[1] = '\x80'; + valid[2] = '\x80'; + valid[3] = '\0'; + + ASSERT_EQ(invalid, utf8nvalid(valid, invalid_size)); +} + +UTEST(utf8nvalid, c) { + char valid[5]; + + const char *invalid = valid; + const size_t invalid_size = 3; + + valid[0] = '\xf0'; + valid[1] = '\x80'; + valid[2] = '\x80'; + valid[3] = '\x80'; + valid[4] = '\0'; + ASSERT_EQ(invalid, utf8nvalid(valid, invalid_size)); +} + +UTEST(utf8nvalid, data) { ASSERT_EQ(NULL, utf8nvalid(data, 105)); } + +UTEST(utf8nvalid, ascii) { ASSERT_EQ(NULL, utf8nvalid("ab", 3)); } + +UTEST(utf8nvalid, empty) { ASSERT_EQ(NULL, utf8nvalid("", 1)); } + +UTEST(utf8ncat, ascii_cat_data) { + char cat[512] = {'\0'}; + cat[0] = 'a'; + cat[1] = '\0'; + ASSERT_EQ(2, utf8len(utf8ncat(cat, data, 2))); +} + +UTEST(utf8ncat, cat_data) { + char cat[512] = {'\0'}; + ASSERT_EQ(53, utf8len(utf8ncat(cat, data, 40000))); +} + +UTEST(utf8ncat, bad_cat) { + char cat[512] = {'\0'}; + ASSERT_EQ(cat, utf8valid(utf8ncat(cat, data, 1))); +} + +UTEST(utf8ncat, zero_n) { + char cat[512] = {'\0'}; + ASSERT_EQ(NULL, utf8valid(utf8ncat(cat, data, 0))); +} + +UTEST(utf8ncmp, lt_large) { ASSERT_LT(0, utf8ncmp(data, lt, 4000)); } + +UTEST(utf8ncmp, lt_small) { ASSERT_EQ(0, utf8ncmp(data, lt, 7)); } + +UTEST(utf8ncmp, eq_large) { ASSERT_EQ(0, utf8ncmp(data, data, 4000)); } + +UTEST(utf8ncmp, eq_small) { ASSERT_EQ(0, utf8ncmp(data, data, 7)); } + +UTEST(utf8ncmp, gt_large) { ASSERT_GT(0, utf8ncmp(data, gt, 4000)); } + +UTEST(utf8ncmp, gt_small) { ASSERT_EQ(0, utf8ncmp(data, gt, 7)); } + +UTEST(utf8ncpy, data_null_terminated) { + char cpy[512] = {'\0'}; + ASSERT_EQ('\0', *((char *)utf8ncpy(cpy, data, 106) + 105)); +} + +UTEST(utf8ncpy, data) { + char cpy[512] = {'\0'}; + ASSERT_EQ(53, utf8len(utf8ncpy(cpy, data, 105))); +} + +UTEST(utf8ncpy, check_no_buffer_overflow) { + utf8_int32_t i; + char buffer[11] = {0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd}; + ASSERT_EQ(buffer, utf8ncpy(buffer, "foo", 10)); + + ASSERT_EQ('f', buffer[0]); + ASSERT_EQ('o', buffer[1]); + ASSERT_EQ('o', buffer[2]); + + for (i = 3; 10 != i; i++) { + ASSERT_EQ(0, buffer[i]); + } + + ASSERT_EQ((char)0xdd, buffer[10]); +} + +UTEST(utf8ncpy, check_no_n_overflow) { + char buffer[4] = {1, 2, 3, 4}; + ASSERT_EQ(buffer, utf8ncpy(buffer, "foo", 2)); + + ASSERT_EQ('f', buffer[0]); + ASSERT_EQ('o', buffer[1]); + ASSERT_EQ(3, buffer[2]); + ASSERT_EQ(4, buffer[3]); +} + +UTEST(utf8ncpy, truncated_copy_valid) { + char cpy1[32] = {'\0'}; + char cpy2[3] = {'\0'}; + char cpy3[1] = {'\0'}; + + utf8ncpy(cpy1, data, 32); + ASSERT_EQ(NULL, utf8valid(cpy1)); + + utf8ncpy(cpy2, data, 3); + ASSERT_EQ(NULL, utf8valid(cpy2)); + + utf8ncpy(cpy3, data, 1); + ASSERT_EQ(NULL, utf8valid(cpy3)); +} + +UTEST(utf8ncpy, truncated_copy_null_terminated) { + char cpy1[32] = {'\0'}; + char cpy2[2] = {'\0'}; + char cpy3[3] = {'\0'}; + + utf8ncpy(cpy1, data, 32); + ASSERT_EQ('\0', cpy1[31]); + + utf8ncpy(cpy2, data, 2); + ASSERT_EQ('\0', cpy2[0]); + + utf8ncpy(cpy3, data, 3); + ASSERT_EQ('\0', cpy3[2]); +} + +UTEST(utf8pbrk, pbrk) { ASSERT_EQ(data + 8, utf8pbrk(data, pbrk)); } + +UTEST(utf8pbrk, data) { ASSERT_EQ(data, utf8pbrk(data, data)); } + +UTEST(utf8casecmp, ascii) { ASSERT_EQ(0, utf8casecmp(ascii1, ascii2)); } +UTEST(utf8casecmp, latin_upvslow) { + ASSERT_EQ(0, utf8casecmp(lowersStr, uppersStr)); +} +UTEST(utf8casecmp, latin_lowvsup) { + ASSERT_EQ(0, utf8casecmp(uppersStr, lowersStr)); +} + +UTEST(utf8casecmp, allascii) { + ASSERT_EQ(0, utf8casecmp(allascii1, allascii2)); +} + +UTEST(utf8casecmp, data_lt) { ASSERT_LT(0, utf8casecmp(data, lt)); } + +UTEST(utf8casecmp, data_eq) { ASSERT_EQ(0, utf8casecmp(data, data)); } + +UTEST(utf8casecmp, data_gt) { ASSERT_GT(0, utf8casecmp(data, gt)); } + +UTEST(utf8ncasecmp, lt_large) { ASSERT_LT(0, utf8ncasecmp(data, lt, 4000)); } + +UTEST(utf8ncasecmp, lt_small) { ASSERT_EQ(0, utf8ncasecmp(data, lt, 7)); } + +UTEST(utf8ncasecmp, eq_large) { ASSERT_EQ(0, utf8ncasecmp(data, data, 4000)); } + +UTEST(utf8ncasecmp, eq_small) { ASSERT_EQ(0, utf8ncasecmp(data, data, 7)); } + +UTEST(utf8ncasecmp, gt_large) { ASSERT_GT(0, utf8ncasecmp(data, gt, 4000)); } + +UTEST(utf8ncasecmp, gt_small) { ASSERT_EQ(0, utf8ncasecmp(data, gt, 7)); } + +UTEST(utf8ncasecmp, ascii) { ASSERT_EQ(0, utf8ncasecmp(ascii1, ascii2, 4)); } +UTEST(utf8ncasecmp, latin_upvslow) { + ASSERT_EQ(0, utf8ncasecmp(lowersStr, uppersStr, 120)); +} +UTEST(utf8ncasecmp, latin_lowvsup) { + ASSERT_EQ(0, utf8ncasecmp(uppersStr, lowersStr, 120)); +} + +UTEST(utf8ncasecmp, basic_ascii) { + ASSERT_EQ(-15, utf8ncasecmp(".gdoc", ".GSHeeT", 5)); + ASSERT_EQ(-4, utf8ncasecmp(".gsheet", ".gSLiDe", 7)); + +#ifndef _MSC_VER + ASSERT_EQ(strcasecmp(".gdoc", ".GSHeeT"), + utf8ncasecmp(".gdoc", ".GSHeeT", 5)); + ASSERT_EQ(strcasecmp(".gsheet", ".gSLiDe"), + utf8ncasecmp(".gsheet", ".gSLiDe", 7)); +#endif +} + +UTEST(utf8ncasecmp, latin_extended_a) { + ASSERT_EQ(96, utf8ncasecmp("Camón Romasan", "camu", 4)); +} + +UTEST(utf8codepoint, data) { + utf8_int32_t codepoint; + void *v; + size_t expected_length = utf8len(data) - 1; + for (v = utf8codepoint(data, &codepoint); codepoint; + v = utf8codepoint(v, &codepoint)) { + ASSERT_EQ(expected_length, utf8len(v)); + expected_length -= 1; + } +} + +UTEST(utf8codepointcalcsize, data) { + const char *v; + // No -1 here since we start at the beginning + size_t expected_length = utf8len(data); + for (v = data; *v; v += utf8codepointcalcsize(v)) { + ASSERT_EQ(expected_length, utf8len(v)); + expected_length -= 1; + } +} + +UTEST(utf8codepointsize, size_1) { ASSERT_EQ(1, utf8codepointsize('A')); } + +UTEST(utf8codepointsize, size_4) { ASSERT_EQ(4, utf8codepointsize(0x20C78)); } + +UTEST(utf8catcodepoint, data) { + char buffer[129]; + char *p = buffer; + long cp; + int i; + memset(buffer, 0, 129); + for (i = 0; i < 128; i++) { + cp = (i % 2 == 0 ? 'A' : 0x20C78); + p = utf8catcodepoint(p, cp, 128 - (p - buffer)); + if (!p) { + break; + } + } + ASSERT_EQ(51, utf8len(buffer)); +} + +UTEST(utf8islower, upper) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(0, utf8islower(lowupPairs[i].upper)); + } +} + +UTEST(utf8islower, lower) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(1, utf8islower(lowupPairs[i].lower)); + } +} + +UTEST(utf8isupper, upper) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(1, utf8isupper(lowupPairs[i].upper)); + } +} + +UTEST(utf8isupper, lower) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(0, utf8isupper(lowupPairs[i].lower)); + } +} + +UTEST(utf8lwr, ascii) { + size_t sz; + char *str; + sz = strlen(ascii1); + str = (char *)malloc(sz + 1); + memcpy(str, ascii1, sz + 1); + utf8lwr(str); + ASSERT_EQ(0, strcmp(str, "i like goats yarhar.")); + free(str); +} + +UTEST(utf8lwr, latin_lower) { + size_t sz; + void *str; + sz = utf8size(lowersStr); + str = malloc(sz); + memcpy(str, lowersStr, sz); + utf8lwr(str); + ASSERT_EQ(0, utf8cmp(str, lowersStr)); + free(str); +} + +UTEST(utf8lwr, latin_upper) { + size_t sz; + void *str; + sz = utf8size(uppersStr); + str = malloc(sz); + memcpy(str, uppersStr, sz); + utf8lwr(str); + ASSERT_EQ(0, utf8cmp(str, lowersStr)); + free(str); +} + +UTEST(utf8upr, ascii) { + size_t sz; + char *str; + sz = strlen(ascii1); + str = (char *)malloc(sz + 1); + memcpy(str, ascii1, sz + 1); + utf8upr(str); + ASSERT_EQ(0, strcmp(str, "I LIKE GOATS YARHAR.")); + free(str); +} + +UTEST(utf8upr, latin_lower) { + size_t sz; + void *str; + sz = utf8size(lowersStr); + str = malloc(sz); + memcpy(str, lowersStr, sz); + utf8upr(str); + ASSERT_EQ(0, utf8cmp(str, uppersStr)); + free(str); +} + +UTEST(utf8upr, latin_upper) { + size_t sz; + void *str; + sz = utf8size(uppersStr); + str = malloc(sz); + memcpy(str, uppersStr, sz); + utf8upr(str); + ASSERT_EQ(0, utf8cmp(str, uppersStr)); + free(str); +} + +UTEST(utf8casecmp, basic_ascii) { + ASSERT_EQ(-15, utf8casecmp(".gdoc", ".GSHeeT")); + ASSERT_EQ(-4, utf8casecmp(".gsheet", ".gSLiDe")); + +#ifndef _MSC_VER + ASSERT_EQ(strcasecmp(".gdoc", ".GSHeeT"), utf8casecmp(".gdoc", ".GSHeeT")); + ASSERT_EQ(strcasecmp(".gsheet", ".gSLiDe"), + utf8casecmp(".gsheet", ".gSLiDe")); +#endif +} + +UTEST(utf8lwr, greek_capital_theta) { + const char ref[] = {'\xce', '\xb8', '\xce', '\xb8', '\xce', + '\xb8', '\xcf', '\x91', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + utf8lwr(str); + + ASSERT_EQ(0, utf8cmp(str, ref)); +} + +UTEST(utf8upr, greek_capital_theta) { + const char ref[] = {'\xcf', '\xb4', '\xce', '\x98', '\xce', + '\x98', '\xce', '\x98', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + utf8upr(str); + + ASSERT_EQ(0, utf8cmp(str, ref)); +} + +UTEST(utf8casecmp, greek_capital_theta) { + const char ref[] = {'\xcf', '\xb4', '\xce', '\x98', '\xce', + '\x98', '\xce', '\x98', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + ASSERT_EQ(0, utf8casecmp(ref, str)); +} + +UTEST(utf8ncasecmp, greek_capital_theta) { + const char ref[] = {'\xcf', '\xb4', '\xce', '\x98', '\xce', + '\x98', '\xce', '\x98', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + ASSERT_EQ(0, utf8ncasecmp(ref, str, 8)); +} + +UTEST(utf8rcodepoint, ascii) { + utf8_int32_t codepoint; + + ASSERT_EQ(ascii1, utf8rcodepoint(ascii1 + 1, &codepoint)); + + ASSERT_EQ(ascii1[1], codepoint); +} + +UTEST(utf8rcodepoint, latin) { + utf8_int32_t codepoint; + + ASSERT_EQ(data, utf8rcodepoint(data + 2, &codepoint)); + + ASSERT_EQ(0x3B1, codepoint); +} + +UTEST(utf8makevalid, a) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf0'; + invalid[1] = '\x8f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xef'); +} + +UTEST(utf8makevalid, b) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, c) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, d) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\x3f'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, e) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xe0'; + invalid[1] = '\x9f'; + invalid[2] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xdf'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '\0'); +} + +UTEST(utf8makevalid, f) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xef'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '\0'); +} + +UTEST(utf8makevalid, g) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '\0'); +} + +UTEST(utf8makevalid, h) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xc1'; + invalid[1] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\x7f'); + ASSERT_EQ(invalid[1], '\0'); +} + +UTEST(utf8makevalid, i) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xdf'; + invalid[1] = '\x3f'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '\0'); +} + +UTEST(utf8makevalid, j) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\x80'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '\0'); +} + +UTEST(utf8makevalid, k) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf8'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '\0'); +} + +UTEST(utf8makevalid, l) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xf1'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '\xbf'); + ASSERT_EQ(invalid[3], '\xbf'); + ASSERT_EQ(invalid[4], '?'); + ASSERT_EQ(invalid[5], '\0'); +} + +UTEST(utf8makevalid, m) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xef'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '\xbf'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, n) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xdf'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xdf'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '\0'); +} + +UTEST(utf8makevalid, invalid_replacement) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xdf'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + + ASSERT_NE(0, utf8makevalid(invalid, 0x80)); +} + +UTEST(utf8nvalid, exactly_2_bytes) { + const char terminated[] = "\xc2\xa3"; + ASSERT_EQ(utf8nvalid(terminated, 2), NULL); +} + +UTEST(utf8nvalid, exactly_3_bytes) { + const char terminated[] = "\xe1\xbd\xb6"; + ASSERT_EQ(utf8nvalid(terminated, 3), NULL); +} + +UTEST(utf8nvalid, exactly_4_bytes) { + const char terminated[] = "\xf0\x90\x8d\x88"; + ASSERT_EQ(utf8nvalid(terminated, 4), NULL); +} + +UTEST_MAIN(); diff --git a/include/utf8/test/no_malloc.c b/include/utf8/test/no_malloc.c new file mode 100644 index 0000000..b0d4a05 --- /dev/null +++ b/include/utf8/test/no_malloc.c @@ -0,0 +1,64 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +// include the unit testing framework +#include "utest.h" + +// include the header we are testing +#define UTF8_NO_STD_MALLOC +#include "utf8.h" + +UTEST(no_malloc_utf8dup, ascii) { + void *const dup = utf8dup("1234567890"); + ASSERT_FALSE(dup); +} + +UTEST(no_malloc_utf8ndup, ascii) { + void *const dup = utf8ndup("1234567890", 4); + ASSERT_FALSE(dup); +} + +static utf8_int8_t *allocate_from_buffer(utf8_int8_t *user_data, size_t n) { + return user_data; +} + +UTEST(no_malloc_utf8dup_ex, ascii) { + char user_data[1024]; + void *const dup = utf8dup_ex("1234567890", allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(10, utf8len(dup)); +} + +UTEST(no_malloc_utf8ndup_ex, ascii) { + char user_data[1024]; + void *const dup = + utf8ndup_ex("1234567890", 4, allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(4, utf8len(dup)); +} + +UTEST_MAIN(); diff --git a/include/utf8/test/test.c b/include/utf8/test/test.c new file mode 100644 index 0000000..397bcdc --- /dev/null +++ b/include/utf8/test/test.c @@ -0,0 +1,33 @@ +/* This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * For more information, please refer to + */ + +#include "utf8.h" + +int main(const int argc, const char *const argv[]) { + (void)argc; + (void)argv; + return 0; +} diff --git a/include/utf8/test/test.cpp b/include/utf8/test/test.cpp new file mode 100644 index 0000000..81900b1 --- /dev/null +++ b/include/utf8/test/test.cpp @@ -0,0 +1,78 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +#include "utf8.h" + +// We don't care about the results. We only want to check compilation + +#if defined(__clang__) +#pragma clang diagnostic push + +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +#if defined(__cplusplus) && __cplusplus >= 201402L +constexpr void test() { + constexpr utf8_int8_t in_str[20]{}; + constexpr utf8_int32_t in_chr{}; + utf8_int32_t out_chr{}; + + utf8codepoint(in_str, &out_chr); + utf8rcodepoint(in_str + 1, &out_chr); + static_assert(utf8chr(in_str, utf8_int32_t{}), "utf8 constexpr fail"); + static_assert(utf8cmp(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8cspn(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8len(in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8nlen(in_str, 1) == 0, "utf8 constexpr fail"); + static_assert(utf8ncmp(in_str, in_str, 1) == 0, "utf8 constexpr fail"); + static_assert(utf8pbrk(in_str, in_str) == nullptr, "utf8 constexpr fail"); + static_assert(utf8rchr(in_str, 1) == nullptr, "utf8 constexpr fail"); + static_assert(utf8spn(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8str(in_str, in_str), "utf8 constexpr fail"); + static_assert(utf8casecmp(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8ncasecmp(in_str, in_str, 1) == 0, "utf8 constexpr fail"); + static_assert(utf8casestr(in_str, in_str), "utf8 constexpr fail"); + static_assert(utf8size(in_str), "utf8 constexpr fail"); + static_assert(utf8size_lazy(in_str) == 0, "utf8 constexpr faillazy;"); + static_assert(utf8nsize_lazy(in_str, 1) == 0, "utf8 constexpr faillazy;"); + static_assert(utf8valid(in_str) == nullptr, "utf8 constexpr fail"); + static_assert(utf8nvalid(in_str, 1) == nullptr, "utf8 constexpr fail"); + static_assert(utf8codepointsize(in_chr), "utf8 constexpr fail"); + static_assert(utf8isupper(in_chr) == false, "utf8 constexpr fail"); + static_assert(utf8islower(in_chr) == false, "utf8 constexpr fail"); + static_assert(utf8lwrcodepoint(in_chr) == in_chr, "utf8 constexpr fail"); + static_assert(utf8uprcodepoint(in_chr) == in_chr, "utf8 constexpr fail"); +} +#else +static void test() {} +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +int main() { test(); } diff --git a/include/utf8/test/utest.h b/include/utf8/test/utest.h new file mode 100644 index 0000000..8767600 --- /dev/null +++ b/include/utf8/test/utest.h @@ -0,0 +1,1668 @@ +/* + The latest version of this library is available on GitHub; + https://github.com/sheredom/utest.h +*/ + +/* + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +*/ + +#ifndef SHEREDOM_UTEST_H_INCLUDED +#define SHEREDOM_UTEST_H_INCLUDED + +#ifdef _MSC_VER +/* + Disable warning about not inlining 'inline' functions. +*/ +#pragma warning(disable : 4710) + +/* + Disable warning about inlining functions that are not marked 'inline'. +*/ +#pragma warning(disable : 4711) + +/* + Disable warning for alignment padding added +*/ +#pragma warning(disable : 4820) + +#if _MSC_VER > 1900 +/* + Disable warning about preprocessor macros not being defined in MSVC headers. +*/ +#pragma warning(disable : 4668) + +/* + Disable warning about no function prototype given in MSVC headers. +*/ +#pragma warning(disable : 4255) + +/* + Disable warning about pointer or reference to potentially throwing function. +*/ +#pragma warning(disable : 5039) + +/* + Disable warning about macro expansion producing 'defined' has undefined + behavior. +*/ +#pragma warning(disable : 5105) +#endif + +#if _MSC_VER > 1930 +/* + Disable warning about 'const' variable is not used. +*/ +#pragma warning(disable : 5264) +#endif + +#pragma warning(push, 1) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +typedef __int64 utest_int64_t; +typedef unsigned __int64 utest_uint64_t; +typedef unsigned __int32 utest_uint32_t; +#else +#include +typedef int64_t utest_int64_t; +typedef uint64_t utest_uint64_t; +typedef uint32_t utest_uint32_t; +#endif + +#include +#include +#include +#include +#include + +#if defined(__cplusplus) +#if defined(_MSC_VER) && !defined(_CPPUNWIND) +/* We're on MSVC and the compiler is compiling without exception support! */ +#elif !defined(_MSC_VER) && !defined(__EXCEPTIONS) +/* We're on a GCC/Clang compiler that doesn't have exception support! */ +#else +#define UTEST_HAS_EXCEPTIONS 1 +#endif +#endif + +#if defined(UTEST_HAS_EXCEPTIONS) +#include +#endif + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(__cplusplus) +#define UTEST_C_FUNC extern "C" +#else +#define UTEST_C_FUNC +#endif + +#define UTEST_TEST_PASSED (0) +#define UTEST_TEST_FAILURE (1) +#define UTEST_TEST_SKIPPED (2) + +#if defined(__TINYC__) +#define UTEST_ATTRIBUTE(a) __attribute((a)) +#else +#define UTEST_ATTRIBUTE(a) __attribute__((a)) +#endif + +#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__) + +#if defined(__MINGW64__) || defined(__MINGW32__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpragmas" +#pragma GCC diagnostic ignored "-Wunknown-pragmas" +#endif + +#if defined(_WINDOWS_) || defined(_WINDOWS_H) +typedef LARGE_INTEGER utest_large_integer; +#else +// use old QueryPerformanceCounter definitions (not sure is this needed in some +// edge cases or not) on Win7 with VS2015 these extern declaration cause "second +// C linkage of overloaded function not allowed" error +typedef union { + struct { + unsigned long LowPart; + long HighPart; + } DUMMYSTRUCTNAME; + struct { + unsigned long LowPart; + long HighPart; + } u; + utest_int64_t QuadPart; +} utest_large_integer; + +UTEST_C_FUNC __declspec(dllimport) int __stdcall QueryPerformanceCounter( + utest_large_integer *); +UTEST_C_FUNC __declspec(dllimport) int __stdcall QueryPerformanceFrequency( + utest_large_integer *); + +#if defined(__MINGW64__) || defined(__MINGW32__) +#pragma GCC diagnostic pop +#endif +#endif + +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__DragonFly__) || defined(__sun__) || \ + defined(__HAIKU__) +/* + slightly obscure include here - we need to include glibc's features.h, but + we don't want to just include a header that might not be defined for other + c libraries like musl. Instead we include limits.h, which we know on all + glibc distributions includes features.h +*/ +#include + +#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) +#include + +#if ((2 < __GLIBC__) || ((2 == __GLIBC__) && (17 <= __GLIBC_MINOR__))) +/* glibc is version 2.17 or above, so we can just use clock_gettime */ +#define UTEST_USE_CLOCKGETTIME +#else +#include +#include +#endif +#else // Other libc implementations +#include +#define UTEST_USE_CLOCKGETTIME +#endif + +#elif defined(__APPLE__) +#include +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +#define UTEST_PRId64 "I64d" +#define UTEST_PRIu64 "I64u" +#else +#include + +#define UTEST_PRId64 PRId64 +#define UTEST_PRIu64 PRIu64 +#endif + +#if defined(__cplusplus) +#define UTEST_INLINE inline + +#if defined(__clang__) +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wglobal-constructors\"") + +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS _Pragma("clang diagnostic pop") +#else +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS +#endif + +#define UTEST_INITIALIZER(f) \ + struct f##_cpp_struct { \ + f##_cpp_struct(); \ + }; \ + UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS static f##_cpp_struct \ + f##_cpp_global UTEST_INITIALIZER_END_DISABLE_WARNINGS; \ + f##_cpp_struct::f##_cpp_struct() +#elif defined(_MSC_VER) +#define UTEST_INLINE __forceinline + +#if defined(_WIN64) +#define UTEST_SYMBOL_PREFIX +#else +#define UTEST_SYMBOL_PREFIX "_" +#endif + +#if defined(__clang__) +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wmissing-variable-declarations\"") + +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS _Pragma("clang diagnostic pop") +#else +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS +#endif + +#pragma section(".CRT$XCU", read) +#define UTEST_INITIALIZER(f) \ + static void __cdecl f(void); \ + UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + __pragma(comment(linker, "/include:" UTEST_SYMBOL_PREFIX #f "_")) \ + UTEST_C_FUNC __declspec(allocate(".CRT$XCU")) void(__cdecl * \ + f##_)(void) = f; \ + UTEST_INITIALIZER_END_DISABLE_WARNINGS \ + static void __cdecl f(void) +#else +#if defined(__linux__) +#if defined(__clang__) +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif +#endif + +#define __STDC_FORMAT_MACROS 1 + +#if defined(__clang__) +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic pop +#endif +#endif +#endif + +#define UTEST_INLINE inline + +#define UTEST_INITIALIZER(f) \ + static void f(void) UTEST_ATTRIBUTE(constructor); \ + static void f(void) +#endif + +#if defined(__cplusplus) +#define UTEST_CAST(type, x) static_cast(x) +#define UTEST_PTR_CAST(type, x) reinterpret_cast(x) +#define UTEST_EXTERN extern "C" +#define UTEST_NULL NULL +#else +#define UTEST_CAST(type, x) ((type)(x)) +#define UTEST_PTR_CAST(type, x) ((type)(x)) +#define UTEST_EXTERN extern +#define UTEST_NULL 0 +#endif + +#ifdef _MSC_VER +/* + io.h contains definitions for some structures with natural padding. This is + uninteresting, but for some reason MSVC's behaviour is to warn about + including this system header. That *is* interesting +*/ +#pragma warning(disable : 4820) +#pragma warning(push, 1) +#include +#pragma warning(pop) +#define UTEST_COLOUR_OUTPUT() (_isatty(_fileno(stdout))) +#else +#if defined(__EMSCRIPTEN__) +#include +#define UTEST_COLOUR_OUTPUT() false +#else +#include +#define UTEST_COLOUR_OUTPUT() (isatty(STDOUT_FILENO)) +#endif +#endif + +static UTEST_INLINE void *utest_realloc(void *const pointer, size_t new_size) { + void *const new_pointer = realloc(pointer, new_size); + + if (UTEST_NULL == new_pointer) { + free(new_pointer); + } + + return new_pointer; +} + +static UTEST_INLINE utest_int64_t utest_ns(void) { +#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__) + utest_large_integer counter; + utest_large_integer frequency; + QueryPerformanceCounter(&counter); + QueryPerformanceFrequency(&frequency); + return UTEST_CAST(utest_int64_t, + (counter.QuadPart * 1000000000) / frequency.QuadPart); +#elif defined(__linux__) && defined(__STRICT_ANSI__) + return UTEST_CAST(utest_int64_t, clock()) * 1000000000 / CLOCKS_PER_SEC; +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__DragonFly__) || defined(__sun__) || \ + defined(__HAIKU__) + struct timespec ts; +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(__HAIKU__) + timespec_get(&ts, TIME_UTC); +#else + const clockid_t cid = CLOCK_REALTIME; +#if defined(UTEST_USE_CLOCKGETTIME) + clock_gettime(cid, &ts); +#else + syscall(SYS_clock_gettime, cid, &ts); +#endif +#endif + return UTEST_CAST(utest_int64_t, ts.tv_sec) * 1000 * 1000 * 1000 + ts.tv_nsec; +#elif __APPLE__ + return UTEST_CAST(utest_int64_t, clock_gettime_nsec_np(CLOCK_UPTIME_RAW)); +#elif __EMSCRIPTEN__ + return emscripten_performance_now() * 1000000.0; +#else +#error Unsupported platform! +#endif +} + +typedef void (*utest_testcase_t)(int *, size_t); + +struct utest_test_state_s { + utest_testcase_t func; + size_t index; + char *name; +}; + +struct utest_state_s { + struct utest_test_state_s *tests; + size_t tests_length; + FILE *output; +}; + +/* extern to the global state utest needs to execute */ +UTEST_EXTERN struct utest_state_s utest_state; + +#if defined(_MSC_VER) +#define UTEST_WEAK __forceinline +#elif defined(__MINGW32__) || defined(__MINGW64__) +#define UTEST_WEAK static UTEST_ATTRIBUTE(used) +#elif defined(__clang__) || defined(__GNUC__) || defined(__TINYC__) +#define UTEST_WEAK UTEST_ATTRIBUTE(weak) +#else +#error Non clang, non gcc, non MSVC, non tcc compiler found! +#endif + +#if defined(_MSC_VER) +#define UTEST_UNUSED +#else +#define UTEST_UNUSED UTEST_ATTRIBUTE(unused) +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wvariadic-macros" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#define UTEST_PRINTF(...) \ + if (utest_state.output) { \ + fprintf(utest_state.output, __VA_ARGS__); \ + } \ + printf(__VA_ARGS__) +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wvariadic-macros" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +#ifdef _MSC_VER +#define UTEST_SNPRINTF(BUFFER, N, ...) _snprintf_s(BUFFER, N, N, __VA_ARGS__) +#else +#define UTEST_SNPRINTF(...) snprintf(__VA_ARGS__) +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#if defined(__cplusplus) +/* if we are using c++ we can use overloaded methods (its in the language) */ +#define UTEST_OVERLOADABLE +#elif defined(__clang__) +/* otherwise, if we are using clang with c - use the overloadable attribute */ +#define UTEST_OVERLOADABLE UTEST_ATTRIBUTE(overloadable) +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +#include + +template ::value> +struct utest_type_deducer final { + static void _(const T t); +}; + +template <> struct utest_type_deducer { + static void _(const signed char c) { + UTEST_PRINTF("%d", static_cast(c)); + } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned char c) { + UTEST_PRINTF("%u", static_cast(c)); + } +}; + +template <> struct utest_type_deducer { + static void _(const short s) { UTEST_PRINTF("%d", static_cast(s)); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned short s) { + UTEST_PRINTF("%u", static_cast(s)); + } +}; + +template <> struct utest_type_deducer { + static void _(const float f) { UTEST_PRINTF("%f", static_cast(f)); } +}; + +template <> struct utest_type_deducer { + static void _(const double d) { UTEST_PRINTF("%f", d); } +}; + +template <> struct utest_type_deducer { + static void _(const long double d) { +#if defined(__MINGW32__) || defined(__MINGW64__) + /* MINGW is weird - doesn't like LF at all?! */ + UTEST_PRINTF("%f", (double)d); +#else + UTEST_PRINTF("%Lf", d); +#endif + } +}; + +template <> struct utest_type_deducer { + static void _(const int i) { UTEST_PRINTF("%d", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned int i) { UTEST_PRINTF("%u", i); } +}; + +template <> struct utest_type_deducer { + static void _(const long i) { UTEST_PRINTF("%ld", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned long i) { UTEST_PRINTF("%lu", i); } +}; + +template <> struct utest_type_deducer { + static void _(const long long i) { UTEST_PRINTF("%lld", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned long long i) { UTEST_PRINTF("%llu", i); } +}; + +template struct utest_type_deducer { + static void _(const T *t) { + UTEST_PRINTF("%p", static_cast(const_cast(t))); + } +}; + +template struct utest_type_deducer { + static void _(T *t) { UTEST_PRINTF("%p", static_cast(t)); } +}; + +template struct utest_type_deducer { + static void _(const T t) { + UTEST_PRINTF("%llu", static_cast(t)); + } +}; + +template +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const T t) { + utest_type_deducer::_(t); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#elif defined(UTEST_OVERLOADABLE) + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(signed char c); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(signed char c) { + UTEST_PRINTF("%d", UTEST_CAST(int, c)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned char c); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned char c) { + UTEST_PRINTF("%u", UTEST_CAST(unsigned int, c)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(float f); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(float f) { + UTEST_PRINTF("%f", UTEST_CAST(double, f)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(double d); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(double d) { + UTEST_PRINTF("%f", d); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long double d); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long double d) { +#if defined(__MINGW32__) || defined(__MINGW64__) + /* MINGW is weird - doesn't like LF at all?! */ + UTEST_PRINTF("%f", (double)d); +#else + UTEST_PRINTF("%Lf", d); +#endif +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(int i) { + UTEST_PRINTF("%d", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned int i) { + UTEST_PRINTF("%u", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long int i) { + UTEST_PRINTF("%ld", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long unsigned int i) { + UTEST_PRINTF("%lu", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const void *p); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const void *p) { + UTEST_PRINTF("%p", p); +} + +/* + long long is a c++11 extension +*/ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || \ + defined(__cplusplus) && (__cplusplus >= 201103L) || \ + (defined(__MINGW32__) || defined(__MINGW64__)) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long int i) { + UTEST_PRINTF("%lld", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void +utest_type_printer(long long unsigned int i) { + UTEST_PRINTF("%llu", i); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !(defined(__MINGW32__) || defined(__MINGW64__)) || \ + defined(__TINYC__) +#define utest_type_printer(val) \ + UTEST_PRINTF(_Generic((val), signed char \ + : "%d", unsigned char \ + : "%u", short \ + : "%d", unsigned short \ + : "%u", int \ + : "%d", long \ + : "%ld", long long \ + : "%lld", unsigned \ + : "%u", unsigned long \ + : "%lu", unsigned long long \ + : "%llu", float \ + : "%f", double \ + : "%f", long double \ + : "%Lf", default \ + : _Generic((val - val), ptrdiff_t \ + : "%p", default \ + : "undef")), \ + (val)) +#else +/* + we don't have the ability to print the values we got, so we create a macro + to tell our users we can't do anything fancy +*/ +#define utest_type_printer(...) UTEST_PRINTF("undef") +#endif + +#if defined(_MSC_VER) +#define UTEST_SURPRESS_WARNING_BEGIN \ + __pragma(warning(push)) __pragma(warning(disable : 4127)) \ + __pragma(warning(disable : 4571)) __pragma(warning(disable : 4130)) +#define UTEST_SURPRESS_WARNING_END __pragma(warning(pop)) +#else +#define UTEST_SURPRESS_WARNING_BEGIN +#define UTEST_SURPRESS_WARNING_END +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) +#define UTEST_AUTO(x) auto +#elif !defined(__cplusplus) + +#if defined(__clang__) +/* clang-format off */ +/* had to disable clang-format here because it malforms the pragmas */ +#define UTEST_AUTO(x) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wgnu-auto-type\"") __auto_type \ + _Pragma("clang diagnostic pop") +/* clang-format on */ +#else +#define UTEST_AUTO(x) __typeof__(x + 0) +#endif + +#else +#define UTEST_AUTO(x) typeof(x + 0) +#endif + +#if defined(__clang__) +#define UTEST_STRNCMP(x, y, size) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdisabled-macro-expansion\"") \ + strncmp(x, y, size) _Pragma("clang diagnostic pop") +#else +#define UTEST_STRNCMP(x, y, size) strncmp(x, y, size) +#endif + +#if defined(_MSC_VER) +#define UTEST_STRNCPY(x, y, size) strcpy_s(x, size, y) +#elif !defined(__clang__) && defined(__GNUC__) +static UTEST_INLINE char * +utest_strncpy_gcc(char *const dst, const char *const src, const size_t size) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" + return strncpy(dst, src, size); +#pragma GCC diagnostic pop +} + +#define UTEST_STRNCPY(x, y, size) utest_strncpy_gcc(x, y, size) +#else +#define UTEST_STRNCPY(x, y, size) strncpy(x, y, size) +#endif + +#define UTEST_SKIP(msg) \ + do { \ + UTEST_PRINTF(" Skipped : '%s'\n", (msg)); \ + *utest_result = UTEST_TEST_SKIPPED; \ + return; \ + } while (0) + +#if defined(__clang__) +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wlanguage-extension-token\"") \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") \ + _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") \ + UTEST_AUTO(x) xEval = (x); \ + UTEST_AUTO(y) yEval = (y); \ + if (!((xEval)cond(yEval))) { \ + _Pragma("clang diagnostic pop") \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : ("); \ + UTEST_PRINTF(#x ") " #cond " (" #y); \ + UTEST_PRINTF(")\n"); \ + UTEST_PRINTF(" Actual : "); \ + utest_type_printer(xEval); \ + UTEST_PRINTF(" vs "); \ + utest_type_printer(yEval); \ + UTEST_PRINTF("\n"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#elif defined(__GNUC__) || defined(__TINYC__) +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + UTEST_AUTO(x) xEval = (x); \ + UTEST_AUTO(y) yEval = (y); \ + if (!((xEval)cond(yEval))) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : ("); \ + UTEST_PRINTF(#x ") " #cond " (" #y); \ + UTEST_PRINTF(")\n"); \ + UTEST_PRINTF(" Actual : "); \ + utest_type_printer(xEval); \ + UTEST_PRINTF(" vs "); \ + utest_type_printer(yEval); \ + UTEST_PRINTF("\n"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#else +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + if (!((x)cond(y))) { \ + UTEST_PRINTF("%s:%i: Failure (Expected " #cond " Actual)", __FILE__, \ + __LINE__); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s", msg); \ + } \ + UTEST_PRINTF("\n"); \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#endif + +#define EXPECT_EQ(x, y) UTEST_COND(x, y, ==, "", 0) +#define EXPECT_EQ_MSG(x, y, msg) UTEST_COND(x, y, ==, msg, 0) +#define ASSERT_EQ(x, y) UTEST_COND(x, y, ==, "", 1) +#define ASSERT_EQ_MSG(x, y, msg) UTEST_COND(x, y, ==, msg, 1) + +#define EXPECT_NE(x, y) UTEST_COND(x, y, !=, "", 0) +#define EXPECT_NE_MSG(x, y, msg) UTEST_COND(x, y, !=, msg, 0) +#define ASSERT_NE(x, y) UTEST_COND(x, y, !=, "", 1) +#define ASSERT_NE_MSG(x, y, msg) UTEST_COND(x, y, !=, msg, 1) + +#define EXPECT_LT(x, y) UTEST_COND(x, y, <, "", 0) +#define EXPECT_LT_MSG(x, y, msg) UTEST_COND(x, y, <, msg, 0) +#define ASSERT_LT(x, y) UTEST_COND(x, y, <, "", 1) +#define ASSERT_LT_MSG(x, y, msg) UTEST_COND(x, y, <, msg, 1) + +#define EXPECT_LE(x, y) UTEST_COND(x, y, <=, "", 0) +#define EXPECT_LE_MSG(x, y, msg) UTEST_COND(x, y, <=, msg, 0) +#define ASSERT_LE(x, y) UTEST_COND(x, y, <=, "", 1) +#define ASSERT_LE_MSG(x, y, msg) UTEST_COND(x, y, <=, msg, 1) + +#define EXPECT_GT(x, y) UTEST_COND(x, y, >, "", 0) +#define EXPECT_GT_MSG(x, y, msg) UTEST_COND(x, y, >, msg, 0) +#define ASSERT_GT(x, y) UTEST_COND(x, y, >, "", 1) +#define ASSERT_GT_MSG(x, y, msg) UTEST_COND(x, y, >, msg, 1) + +#define EXPECT_GE(x, y) UTEST_COND(x, y, >=, "", 0) +#define EXPECT_GE_MSG(x, y, msg) UTEST_COND(x, y, >=, msg, 0) +#define ASSERT_GE(x, y) UTEST_COND(x, y, >=, "", 1) +#define ASSERT_GE_MSG(x, y, msg) UTEST_COND(x, y, >=, msg, 1) + +#define UTEST_TRUE(x, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const int xEval = !!(x); \ + if (!(xEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : true\n"); \ + UTEST_PRINTF(" Actual : %s\n", (xEval) ? "true" : "false"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_TRUE(x) UTEST_TRUE(x, "", 0) +#define EXPECT_TRUE_MSG(x, msg) UTEST_TRUE(x, msg, 0) +#define ASSERT_TRUE(x) UTEST_TRUE(x, "", 1) +#define ASSERT_TRUE_MSG(x, msg) UTEST_TRUE(x, msg, 1) + +#define UTEST_FALSE(x, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const int xEval = !!(x); \ + if (xEval) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : false\n"); \ + UTEST_PRINTF(" Actual : %s\n", (xEval) ? "true" : "false"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_FALSE(x) UTEST_FALSE(x, "", 0) +#define EXPECT_FALSE_MSG(x, msg) UTEST_FALSE(x, msg, 0) +#define ASSERT_FALSE(x) UTEST_FALSE(x, "", 1) +#define ASSERT_FALSE_MSG(x, msg) UTEST_FALSE(x, msg, 1) + +#define UTEST_STREQ(x, y, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 != strcmp(xEval, yEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%s\"\n", xEval); \ + UTEST_PRINTF(" Actual : \"%s\"\n", yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STREQ(x, y) UTEST_STREQ(x, y, "", 0) +#define EXPECT_STREQ_MSG(x, y, msg) UTEST_STREQ(x, y, msg, 0) +#define ASSERT_STREQ(x, y) UTEST_STREQ(x, y, "", 1) +#define ASSERT_STREQ_MSG(x, y, msg) UTEST_STREQ(x, y, msg, 1) + +#define UTEST_STRNE(x, y, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 == strcmp(xEval, yEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%s\"\n", xEval); \ + UTEST_PRINTF(" Actual : \"%s\"\n", yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNE(x, y) UTEST_STRNE(x, y, "", 0) +#define EXPECT_STRNE_MSG(x, y, msg) UTEST_STRNE(x, y, msg, 0) +#define ASSERT_STRNE(x, y) UTEST_STRNE(x, y, "", 1) +#define ASSERT_STRNE_MSG(x, y, msg) UTEST_STRNE(x, y, msg, 1) + +#define UTEST_STRNEQ(x, y, n, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + const size_t nEval = UTEST_CAST(size_t, n); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 != UTEST_STRNCMP(xEval, yEval, nEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%.*s\"\n", UTEST_CAST(int, nEval), xEval); \ + UTEST_PRINTF(" Actual : \"%.*s\"\n", UTEST_CAST(int, nEval), yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNEQ(x, y, n) UTEST_STRNEQ(x, y, n, "", 0) +#define EXPECT_STRNEQ_MSG(x, y, n, msg) UTEST_STRNEQ(x, y, n, msg, 0) +#define ASSERT_STRNEQ(x, y, n) UTEST_STRNEQ(x, y, n, "", 1) +#define ASSERT_STRNEQ_MSG(x, y, n, msg) UTEST_STRNEQ(x, y, n, msg, 1) + +#define UTEST_STRNNE(x, y, n, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + const size_t nEval = UTEST_CAST(size_t, n); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 == UTEST_STRNCMP(xEval, yEval, nEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%.*s\"\n", UTEST_CAST(int, nEval), xEval); \ + UTEST_PRINTF(" Actual : \"%.*s\"\n", UTEST_CAST(int, nEval), yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNNE(x, y, n) UTEST_STRNNE(x, y, n, "", 0) +#define EXPECT_STRNNE_MSG(x, y, n, msg) UTEST_STRNNE(x, y, n, msg, 0) +#define ASSERT_STRNNE(x, y, n) UTEST_STRNNE(x, y, n, "", 1) +#define ASSERT_STRNNE_MSG(x, y, n, msg) UTEST_STRNNE(x, y, n, msg, 1) + +#define UTEST_NEAR(x, y, epsilon, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const double diff = \ + utest_fabs(UTEST_CAST(double, x) - UTEST_CAST(double, y)); \ + if (diff > UTEST_CAST(double, epsilon) || utest_isnan(diff)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %f\n", UTEST_CAST(double, x)); \ + UTEST_PRINTF(" Actual : %f\n", UTEST_CAST(double, y)); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_NEAR(x, y, epsilon) UTEST_NEAR(x, y, epsilon, "", 0) +#define EXPECT_NEAR_MSG(x, y, epsilon, msg) UTEST_NEAR(x, y, epsilon, msg, 0) +#define ASSERT_NEAR(x, y, epsilon) UTEST_NEAR(x, y, epsilon, "", 1) +#define ASSERT_NEAR_MSG(x, y, epsilon, msg) UTEST_NEAR(x, y, epsilon, msg, 1) + +#if defined(UTEST_HAS_EXCEPTIONS) +#define UTEST_EXCEPTION(x, exception_type, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + int exception_caught = 0; \ + try { \ + x; \ + } catch (const exception_type &) { \ + exception_caught = 1; \ + } catch (...) { \ + exception_caught = 2; \ + } \ + if (1 != exception_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception\n", #exception_type); \ + UTEST_PRINTF(" Actual : %s\n", (2 == exception_caught) \ + ? "Unexpected exception" \ + : "No exception"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_EXCEPTION(x, exception_type) \ + UTEST_EXCEPTION(x, exception_type, "", 0) +#define EXPECT_EXCEPTION_MSG(x, exception_type, msg) \ + UTEST_EXCEPTION(x, exception_type, msg, 0) +#define ASSERT_EXCEPTION(x, exception_type) \ + UTEST_EXCEPTION(x, exception_type, "", 1) +#define ASSERT_EXCEPTION_MSG(x, exception_type, msg) \ + UTEST_EXCEPTION(x, exception_type, msg, 1) + +#define UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, \ + msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + int exception_caught = 0; \ + char *message_caught = UTEST_NULL; \ + try { \ + x; \ + } catch (const exception_type &e) { \ + const char *const what = e.what(); \ + exception_caught = 1; \ + if (0 != \ + UTEST_STRNCMP(what, exception_message, strlen(exception_message))) { \ + const size_t message_size = strlen(what) + 1; \ + message_caught = UTEST_PTR_CAST(char *, malloc(message_size)); \ + UTEST_STRNCPY(message_caught, what, message_size); \ + } \ + } catch (...) { \ + exception_caught = 2; \ + } \ + if (1 != exception_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception\n", #exception_type); \ + UTEST_PRINTF(" Actual : %s\n", (2 == exception_caught) \ + ? "Unexpected exception" \ + : "No exception"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } else if (UTEST_NULL != message_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception with message %s\n", \ + #exception_type, exception_message); \ + UTEST_PRINTF(" Actual message : %s\n", message_caught); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + free(message_caught); \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, "", 0) +#define EXPECT_EXCEPTION_WITH_MESSAGE_MSG(x, exception_type, \ + exception_message, msg) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, msg, 0) +#define ASSERT_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, "", 1) +#define ASSERT_EXCEPTION_WITH_MESSAGE_MSG(x, exception_type, \ + exception_message, msg) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, msg, 1) +#endif + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#define UTEST_SURPRESS_WARNINGS_BEGIN \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wunsafe-buffer-usage\"") +#define UTEST_SURPRESS_WARNINGS_END _Pragma("clang diagnostic pop") +#else +#define UTEST_SURPRESS_WARNINGS_BEGIN +#define UTEST_SURPRESS_WARNINGS_END +#endif +#elif defined(__GNUC__) && __GNUC__ >= 8 && defined(__cplusplus) +#define UTEST_SURPRESS_WARNINGS_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wclass-memaccess\"") +#define UTEST_SURPRESS_WARNINGS_END _Pragma("GCC diagnostic pop") +#else +#define UTEST_SURPRESS_WARNINGS_BEGIN +#define UTEST_SURPRESS_WARNINGS_END +#endif + +#define UTEST(SET, NAME) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_run_##SET##_##NAME(int *utest_result); \ + static void utest_##SET##_##NAME(int *utest_result, size_t utest_index) { \ + (void)utest_index; \ + utest_run_##SET##_##NAME(utest_result); \ + } \ + UTEST_INITIALIZER(utest_register_##SET##_##NAME) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #SET "." #NAME; \ + const size_t name_size = strlen(name_part) + 1; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_##SET##_##NAME; \ + utest_state.tests[index].name = name; \ + utest_state.tests[index].index = 0; \ + UTEST_SNPRINTF(name, name_size, "%s", name_part); \ + } else if (name) { \ + free(name); \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##SET##_##NAME(int *utest_result) + +#define UTEST_F_SETUP(FIXTURE) \ + static void utest_f_setup_##FIXTURE(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_F_TEARDOWN(FIXTURE) \ + static void utest_f_teardown_##FIXTURE(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_F(FIXTURE, NAME) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_f_setup_##FIXTURE(int *, struct FIXTURE *); \ + static void utest_f_teardown_##FIXTURE(int *, struct FIXTURE *); \ + static void utest_run_##FIXTURE##_##NAME(int *, struct FIXTURE *); \ + static void utest_f_##FIXTURE##_##NAME(int *utest_result, \ + size_t utest_index) { \ + struct FIXTURE fixture; \ + (void)utest_index; \ + memset(&fixture, 0, sizeof(fixture)); \ + utest_f_setup_##FIXTURE(utest_result, &fixture); \ + if (UTEST_TEST_PASSED != *utest_result) { \ + return; \ + } \ + utest_run_##FIXTURE##_##NAME(utest_result, &fixture); \ + utest_f_teardown_##FIXTURE(utest_result, &fixture); \ + } \ + UTEST_INITIALIZER(utest_register_##FIXTURE##_##NAME) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #FIXTURE "." #NAME; \ + const size_t name_size = strlen(name_part) + 1; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_f_##FIXTURE##_##NAME; \ + utest_state.tests[index].name = name; \ + UTEST_SNPRINTF(name, name_size, "%s", name_part); \ + } else if (name) { \ + free(name); \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##FIXTURE##_##NAME(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_I_SETUP(FIXTURE) \ + static void utest_i_setup_##FIXTURE( \ + int *utest_result, struct FIXTURE *utest_fixture, size_t utest_index) + +#define UTEST_I_TEARDOWN(FIXTURE) \ + static void utest_i_teardown_##FIXTURE( \ + int *utest_result, struct FIXTURE *utest_fixture, size_t utest_index) + +#define UTEST_I(FIXTURE, NAME, INDEX) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_run_##FIXTURE##_##NAME##_##INDEX(int *, struct FIXTURE *); \ + static void utest_i_##FIXTURE##_##NAME##_##INDEX(int *utest_result, \ + size_t index) { \ + struct FIXTURE fixture; \ + memset(&fixture, 0, sizeof(fixture)); \ + utest_i_setup_##FIXTURE(utest_result, &fixture, index); \ + if (UTEST_TEST_PASSED != *utest_result) { \ + return; \ + } \ + utest_run_##FIXTURE##_##NAME##_##INDEX(utest_result, &fixture); \ + utest_i_teardown_##FIXTURE(utest_result, &fixture, index); \ + } \ + UTEST_INITIALIZER(utest_register_##FIXTURE##_##NAME##_##INDEX) { \ + size_t i; \ + utest_uint64_t iUp; \ + for (i = 0; i < (INDEX); i++) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #FIXTURE "." #NAME; \ + const size_t name_size = strlen(name_part) + 32; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_i_##FIXTURE##_##NAME##_##INDEX; \ + utest_state.tests[index].index = i; \ + utest_state.tests[index].name = name; \ + iUp = UTEST_CAST(utest_uint64_t, i); \ + UTEST_SNPRINTF(name, name_size, "%s/%" UTEST_PRIu64, name_part, iUp); \ + } else if (name) { \ + free(name); \ + } \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##FIXTURE##_##NAME##_##INDEX(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +UTEST_WEAK +double utest_fabs(double d); +UTEST_WEAK +double utest_fabs(double d) { + union { + double d; + utest_uint64_t u; + } both; + both.d = d; + both.u &= 0x7fffffffffffffffu; + return both.d; +} + +UTEST_WEAK +int utest_isnan(double d); +UTEST_WEAK +int utest_isnan(double d) { + union { + double d; + utest_uint64_t u; + } both; + both.d = d; + both.u &= 0x7fffffffffffffffu; + return both.u > 0x7ff0000000000000u; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +UTEST_WEAK +int utest_should_filter_test(const char *filter, const char *testcase); +UTEST_WEAK int utest_should_filter_test(const char *filter, + const char *testcase) { + if (filter) { + const char *filter_cur = filter; + const char *testcase_cur = testcase; + const char *filter_wildcard = UTEST_NULL; + + while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) { + if ('*' == *filter_cur) { + /* store the position of the wildcard */ + filter_wildcard = filter_cur; + + /* skip the wildcard character */ + filter_cur++; + + while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) { + if ('*' == *filter_cur) { + /* + we found another wildcard (filter is something like *foo*) so we + exit the current loop, and return to the parent loop to handle + the wildcard case + */ + break; + } else if (*filter_cur != *testcase_cur) { + /* otherwise our filter didn't match, so reset it */ + filter_cur = filter_wildcard; + } + + /* move testcase along */ + testcase_cur++; + + /* move filter along */ + filter_cur++; + } + + if (('\0' == *filter_cur) && ('\0' == *testcase_cur)) { + return 0; + } + + /* if the testcase has been exhausted, we don't have a match! */ + if ('\0' == *testcase_cur) { + return 1; + } + } else { + if (*testcase_cur != *filter_cur) { + /* test case doesn't match filter */ + return 1; + } else { + /* move our filter and testcase forward */ + testcase_cur++; + filter_cur++; + } + } + } + + if (('\0' != *filter_cur) || + (('\0' != *testcase_cur) && + ((filter == filter_cur) || ('*' != filter_cur[-1])))) { + /* we have a mismatch! */ + return 1; + } + } + + return 0; +} + +static UTEST_INLINE FILE *utest_fopen(const char *filename, const char *mode) { +#ifdef _MSC_VER + FILE *file; + if (0 == fopen_s(&file, filename, mode)) { + return file; + } else { + return UTEST_NULL; + } +#else + return fopen(filename, mode); +#endif +} + +static UTEST_INLINE int utest_main(int argc, const char *const argv[]); +int utest_main(int argc, const char *const argv[]) { + utest_uint64_t failed = 0; + utest_uint64_t skipped = 0; + size_t index = 0; + size_t *failed_testcases = UTEST_NULL; + size_t failed_testcases_length = 0; + size_t *skipped_testcases = UTEST_NULL; + size_t skipped_testcases_length = 0; + const char *filter = UTEST_NULL; + utest_uint64_t ran_tests = 0; + int enable_mixed_units = 0; + int random_order = 0; + utest_uint32_t seed = 0; + + enum colours { RESET, GREEN, RED, YELLOW }; + + const int use_colours = UTEST_COLOUR_OUTPUT(); + const char *colours[] = {"\033[0m", "\033[32m", "\033[31m", "\033[33m"}; + + if (!use_colours) { + for (index = 0; index < sizeof colours / sizeof colours[0]; index++) { + colours[index] = ""; + } + } + /* loop through all arguments looking for our options */ + for (index = 1; index < UTEST_CAST(size_t, argc); index++) { + /* Informational switches */ + const char help_str[] = "--help"; + const char list_str[] = "--list-tests"; + /* Test config switches */ + const char filter_str[] = "--filter="; + const char output_str[] = "--output="; + const char enable_mixed_units_str[] = "--enable-mixed-units"; + const char random_order_str[] = "--random-order"; + const char random_order_with_seed_str[] = "--random-order="; + + if (0 == UTEST_STRNCMP(argv[index], help_str, strlen(help_str))) { + printf("utest.h - the single file unit testing solution for C/C++!\n" + "Command line Options:\n" + " --help Show this message and exit.\n" + " --filter= Filter the test cases to run (EG. " + "MyTest*.a would run MyTestCase.a but not MyTestCase.b).\n" + " --list-tests List testnames, one per line. Output " + "names can be passed to --filter.\n"); + printf(" --output= Output an xunit XML file to the file " + "specified in .\n" + " --enable-mixed-units Enable the per-test output to contain " + "mixed units (s/ms/us/ns).\n" + " --random-order[=] Randomize the order that the tests are " + "ran in. If the optional argument is not provided, then a " + "random starting seed is used.\n"); + goto cleanup; + } else if (0 == + UTEST_STRNCMP(argv[index], filter_str, strlen(filter_str))) { + /* user wants to filter what test cases run! */ + filter = argv[index] + strlen(filter_str); + } else if (0 == + UTEST_STRNCMP(argv[index], output_str, strlen(output_str))) { + utest_state.output = utest_fopen(argv[index] + strlen(output_str), "w+"); + } else if (0 == UTEST_STRNCMP(argv[index], list_str, strlen(list_str))) { + for (index = 0; index < utest_state.tests_length; index++) { + UTEST_PRINTF("%s\n", utest_state.tests[index].name); + } + /* when printing the test list, don't actually run the tests */ + return 0; + } else if (0 == UTEST_STRNCMP(argv[index], enable_mixed_units_str, + strlen(enable_mixed_units_str))) { + enable_mixed_units = 1; + } else if (0 == UTEST_STRNCMP(argv[index], random_order_with_seed_str, + strlen(random_order_with_seed_str))) { + seed = + UTEST_CAST(utest_uint32_t, + strtoul(argv[index] + strlen(random_order_with_seed_str), + UTEST_NULL, 10)); + random_order = 1; + } else if (0 == UTEST_STRNCMP(argv[index], random_order_str, + strlen(random_order_str))) { + const utest_int64_t ns = utest_ns(); + + // Some really poor pseudo-random using the current time. I do this + // because I really want to avoid using C's rand() because that'd mean our + // random would be affected by any srand() usage by the user (which I + // don't want). + seed = UTEST_CAST(utest_uint32_t, ns >> 32) * 31 + + UTEST_CAST(utest_uint32_t, ns & 0xffffffff); + random_order = 1; + } + } + + if (random_order) { + // Use Fisher-Yates with the Durstenfield's version to randomly re-order the + // tests. + for (index = utest_state.tests_length; index > 1; index--) { + // For the random order we'll use PCG. + const utest_uint32_t state = seed; + const utest_uint32_t word = + ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + const utest_uint32_t next = + ((word >> 22u) ^ word) % UTEST_CAST(utest_uint32_t, index); + + // Swap the randomly chosen element into the last location. + const struct utest_test_state_s copy = utest_state.tests[index - 1]; + utest_state.tests[index - 1] = utest_state.tests[next]; + utest_state.tests[next] = copy; + + // Move the seed onwards. + seed = seed * 747796405u + 2891336453u; + } + } + + for (index = 0; index < utest_state.tests_length; index++) { + if (utest_should_filter_test(filter, utest_state.tests[index].name)) { + continue; + } + + ran_tests++; + } + + printf("%s[==========]%s Running %" UTEST_PRIu64 " test cases.\n", + colours[GREEN], colours[RESET], UTEST_CAST(utest_uint64_t, ran_tests)); + + if (utest_state.output) { + fprintf(utest_state.output, "\n"); + fprintf(utest_state.output, + "\n", + UTEST_CAST(utest_uint64_t, ran_tests)); + fprintf(utest_state.output, + "\n", + UTEST_CAST(utest_uint64_t, ran_tests)); + } + + for (index = 0; index < utest_state.tests_length; index++) { + int result = UTEST_TEST_PASSED; + utest_int64_t ns = 0; + + if (utest_should_filter_test(filter, utest_state.tests[index].name)) { + continue; + } + + printf("%s[ RUN ]%s %s\n", colours[GREEN], colours[RESET], + utest_state.tests[index].name); + + if (utest_state.output) { + fprintf(utest_state.output, "", + utest_state.tests[index].name); + } + + ns = utest_ns(); + errno = 0; +#if defined(UTEST_HAS_EXCEPTIONS) + UTEST_SURPRESS_WARNING_BEGIN + try { + utest_state.tests[index].func(&result, utest_state.tests[index].index); + } catch (const std::exception &err) { + printf(" Exception : %s\n", err.what()); + result = UTEST_TEST_FAILURE; + } catch (...) { + printf(" Exception : Unknown\n"); + result = UTEST_TEST_FAILURE; + } + UTEST_SURPRESS_WARNING_END +#else + utest_state.tests[index].func(&result, utest_state.tests[index].index); +#endif + ns = utest_ns() - ns; + + if (utest_state.output) { + fprintf(utest_state.output, "\n"); + } + + // Record the failing test. + if (UTEST_TEST_FAILURE == result) { + const size_t failed_testcase_index = failed_testcases_length++; + failed_testcases = UTEST_PTR_CAST( + size_t *, utest_realloc(UTEST_PTR_CAST(void *, failed_testcases), + sizeof(size_t) * failed_testcases_length)); + if (UTEST_NULL != failed_testcases) { + failed_testcases[failed_testcase_index] = index; + } + failed++; + } else if (UTEST_TEST_SKIPPED == result) { + const size_t skipped_testcase_index = skipped_testcases_length++; + skipped_testcases = UTEST_PTR_CAST( + size_t *, utest_realloc(UTEST_PTR_CAST(void *, skipped_testcases), + sizeof(size_t) * skipped_testcases_length)); + if (UTEST_NULL != skipped_testcases) { + skipped_testcases[skipped_testcase_index] = index; + } + skipped++; + } + + { + const char *const units[] = {"ns", "us", "ms", "s", UTEST_NULL}; + unsigned int unit_index = 0; + utest_int64_t time = ns; + + if (enable_mixed_units) { + for (unit_index = 0; UTEST_NULL != units[unit_index]; unit_index++) { + if (10000 > time) { + break; + } + + time /= 1000; + } + } + + if (UTEST_TEST_FAILURE == result) { + printf("%s[ FAILED ]%s %s (%" UTEST_PRId64 "%s)\n", colours[RED], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } else if (UTEST_TEST_SKIPPED == result) { + printf("%s[ SKIPPED ]%s %s (%" UTEST_PRId64 "%s)\n", colours[YELLOW], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } else { + printf("%s[ OK ]%s %s (%" UTEST_PRId64 "%s)\n", colours[GREEN], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } + } + } + + printf("%s[==========]%s %" UTEST_PRIu64 " test cases ran.\n", colours[GREEN], + colours[RESET], ran_tests); + printf("%s[ PASSED ]%s %" UTEST_PRIu64 " tests.\n", colours[GREEN], + colours[RESET], ran_tests - failed - skipped); + + if (0 != skipped) { + printf("%s[ SKIPPED ]%s %" UTEST_PRIu64 " tests, listed below:\n", + colours[YELLOW], colours[RESET], skipped); + for (index = 0; index < skipped_testcases_length; index++) { + printf("%s[ SKIPPED ]%s %s\n", colours[YELLOW], colours[RESET], + utest_state.tests[skipped_testcases[index]].name); + } + } + + if (0 != failed) { + printf("%s[ FAILED ]%s %" UTEST_PRIu64 " tests, listed below:\n", + colours[RED], colours[RESET], failed); + for (index = 0; index < failed_testcases_length; index++) { + printf("%s[ FAILED ]%s %s\n", colours[RED], colours[RESET], + utest_state.tests[failed_testcases[index]].name); + } + } + + if (utest_state.output) { + fprintf(utest_state.output, "\n\n"); + } + +cleanup: + for (index = 0; index < utest_state.tests_length; index++) { + free(UTEST_PTR_CAST(void *, utest_state.tests[index].name)); + } + + free(UTEST_PTR_CAST(void *, skipped_testcases)); + free(UTEST_PTR_CAST(void *, failed_testcases)); + free(UTEST_PTR_CAST(void *, utest_state.tests)); + + if (utest_state.output) { + fclose(utest_state.output); + } + + return UTEST_CAST(int, failed); +} + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic pop +#endif +#endif + +/* + we need, in exactly one source file, define the global struct that will hold + the data we need to run utest. This macro allows the user to declare the + data without having to use the UTEST_MAIN macro, thus allowing them to write + their own main() function. +*/ +#define UTEST_STATE() struct utest_state_s utest_state = {0, 0, 0} + +/* + define a main() function to call into utest.h and start executing tests! A + user can optionally not use this macro, and instead define their own main() + function and manually call utest_main. The user must, in exactly one source + file, use the UTEST_STATE macro to declare a global struct variable that + utest requires. +*/ +#define UTEST_MAIN() \ + UTEST_STATE(); \ + int main(int argc, const char *const argv[]) { \ + return utest_main(argc, argv); \ + } + +#endif /* SHEREDOM_UTEST_H_INCLUDED */ diff --git a/include/utf8/test/utfmain.exe b/include/utf8/test/utfmain.exe new file mode 100644 index 0000000000000000000000000000000000000000..ba54a2222ec3129da1335798953712667e76683d GIT binary patch literal 327994 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
  • ^@%k*@6tgu~+I2?mHN+Sf_ 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%0An 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 XHG7a^ziUf$tFJhi<>)r=cjo^GCc~J_ literal 0 HcmV?d00001 diff --git a/include/utf8/utf8.h b/include/utf8/utf8.h new file mode 100644 index 0000000..5652fe2 --- /dev/null +++ b/include/utf8/utf8.h @@ -0,0 +1,1693 @@ +/* The latest version of this library is available on GitHub; + * https://github.com/sheredom/utf8.h */ + +/* This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * For more information, please refer to */ + +#ifndef SHEREDOM_UTF8_H_INCLUDED +#define SHEREDOM_UTF8_H_INCLUDED + +#if defined(_MSC_VER) +#pragma warning(push) + +/* disable warning: no function prototype given: converting '()' to '(void)' */ +#pragma warning(disable : 4255) + +/* disable warning: '__cplusplus' is not defined as a preprocessor macro, + * replacing with '0' for '#if/#elif' */ +#pragma warning(disable : 4668) + +/* disable warning: bytes padding added after construct */ +#pragma warning(disable : 4820) +#endif + +#include +#include + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +typedef __int32 utf8_int32_t; +#else +#include +typedef int32_t utf8_int32_t; +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wcast-qual" + +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_MSC_VER) +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict __restrict +#define utf8_weak __inline +#elif defined(__clang__) || defined(__GNUC__) +#define utf8_nonnull __attribute__((nonnull)) +#define utf8_pure __attribute__((pure)) +#define utf8_restrict __restrict__ +#define utf8_weak __attribute__((weak)) +#else +#error Non clang, non gcc, non MSVC compiler found! +#endif + +#ifdef __cplusplus +#define utf8_null NULL +#else +#define utf8_null 0 +#endif + +#if (defined(__cplusplus) && __cplusplus >= 201402L) +#define utf8_constexpr14 constexpr +#define utf8_constexpr14_impl constexpr +#else +/* constexpr and weak are incompatible. so only enable one of them */ +#define utf8_constexpr14 utf8_weak +#define utf8_constexpr14_impl +#endif + +#if defined(__cplusplus) && __cplusplus >= 202002L +using utf8_int8_t = char8_t; /* Introduced in C++20 */ +#else +typedef char utf8_int8_t; +#endif + +/* Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > + * src2 respectively, case insensitive. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8casecmp(const utf8_int8_t *src1, const utf8_int8_t *src2); + +/* Append the utf8 string src onto the utf8 string dst. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8cat(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src); + +/* Find the first match of the utf8 codepoint chr in the utf8 string src. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8chr(const utf8_int8_t *src, utf8_int32_t chr); + +/* Return less than 0, 0, greater than 0 if src1 < src2, + * src1 == src2, src1 > src2 respectively. */ +utf8_constexpr14 utf8_nonnull utf8_pure int utf8cmp(const utf8_int8_t *src1, + const utf8_int8_t *src2); + +/* Copy the utf8 string src onto the memory allocated in dst. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8cpy(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src); + +/* Number of utf8 codepoints in the utf8 string src that consists entirely + * of utf8 codepoints not from the utf8 string reject. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8cspn(const utf8_int8_t *src, const utf8_int8_t *reject); + +/* Duplicate the utf8 string src by getting its size, malloc'ing a new buffer + * copying over the data, and returning that. Or 0 if malloc failed. */ +utf8_weak utf8_int8_t *utf8dup(const utf8_int8_t *src); + +/* Number of utf8 codepoints in the utf8 string str, + * excluding the null terminating byte. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8len(const utf8_int8_t *str); + +/* Similar to utf8len, except that only at most n bytes of src are looked. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8nlen(const utf8_int8_t *str, + size_t n); + +/* Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > + * src2 respectively, case insensitive. Checking at most n bytes of each utf8 + * string. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8ncasecmp(const utf8_int8_t *src1, const utf8_int8_t *src2, size_t n); + +/* Append the utf8 string src onto the utf8 string dst, + * writing at most n+1 bytes. Can produce an invalid utf8 + * string if n falls partway through a utf8 codepoint. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8ncat(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src, + size_t n); + +/* Return less than 0, 0, greater than 0 if src1 < src2, + * src1 == src2, src1 > src2 respectively. Checking at most n + * bytes of each utf8 string. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8ncmp(const utf8_int8_t *src1, const utf8_int8_t *src2, size_t n); + +/* Copy the utf8 string src onto the memory allocated in dst. + * Copies at most n bytes. If n falls partway through a utf8 + * codepoint, or if dst doesn't have enough room for a null + * terminator, the final string will be cut short to preserve + * utf8 validity. */ + +utf8_nonnull utf8_weak utf8_int8_t * +utf8ncpy(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src, + size_t n); + +/* Similar to utf8dup, except that at most n bytes of src are copied. If src is + * longer than n, only n bytes are copied and a null byte is added. + * + * Returns a new string if successful, 0 otherwise */ +utf8_weak utf8_int8_t *utf8ndup(const utf8_int8_t *src, size_t n); + +/* Locates the first occurrence in the utf8 string str of any byte in the + * utf8 string accept, or 0 if no match was found. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8pbrk(const utf8_int8_t *str, const utf8_int8_t *accept); + +/* Find the last match of the utf8 codepoint chr in the utf8 string src. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8rchr(const utf8_int8_t *src, int chr); + +/* Number of bytes in the utf8 string str, + * including the null terminating byte. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8size(const utf8_int8_t *str); + +/* Similar to utf8size, except that the null terminating byte is excluded. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8size_lazy(const utf8_int8_t *str); + +/* Similar to utf8size, except that only at most n bytes of src are looked and + * the null terminating byte is excluded. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8nsize_lazy(const utf8_int8_t *str, size_t n); + +/* Number of utf8 codepoints in the utf8 string src that consists entirely + * of utf8 codepoints from the utf8 string accept. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8spn(const utf8_int8_t *src, const utf8_int8_t *accept); + +/* The position of the utf8 string needle in the utf8 string haystack. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8str(const utf8_int8_t *haystack, const utf8_int8_t *needle); + +/* The position of the utf8 string needle in the utf8 string haystack, case + * insensitive. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8casestr(const utf8_int8_t *haystack, const utf8_int8_t *needle); + +/* Return 0 on success, or the position of the invalid + * utf8 codepoint on failure. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8valid(const utf8_int8_t *str); + +/* Similar to utf8valid, except that only at most n bytes of src are looked. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8nvalid(const utf8_int8_t *str, size_t n); + +/* Given a null-terminated string, makes the string valid by replacing invalid + * codepoints with a 1-byte replacement. Returns 0 on success. */ +utf8_nonnull utf8_weak int utf8makevalid(utf8_int8_t *str, + const utf8_int32_t replacement); + +/* Sets out_codepoint to the current utf8 codepoint in str, and returns the + * address of the next utf8 codepoint after the current one in str. */ +utf8_constexpr14 utf8_nonnull utf8_int8_t * +utf8codepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +/* Calculates the size of the next utf8 codepoint in str. */ +utf8_constexpr14 utf8_nonnull size_t +utf8codepointcalcsize(const utf8_int8_t *str); + +/* Returns the size of the given codepoint in bytes. */ +utf8_constexpr14 size_t utf8codepointsize(utf8_int32_t chr); + +/* Write a codepoint to the given string, and return the address to the next + * place after the written codepoint. Pass how many bytes left in the buffer to + * n. If there is not enough space for the codepoint, this function returns + * null. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8catcodepoint(utf8_int8_t *str, utf8_int32_t chr, size_t n); + +/* Returns 1 if the given character is lowercase, or 0 if it is not. */ +utf8_constexpr14 int utf8islower(utf8_int32_t chr); + +/* Returns 1 if the given character is uppercase, or 0 if it is not. */ +utf8_constexpr14 int utf8isupper(utf8_int32_t chr); + +/* Transform the given string into all lowercase codepoints. */ +utf8_nonnull utf8_weak void utf8lwr(utf8_int8_t *utf8_restrict str); + +/* Transform the given string into all uppercase codepoints. */ +utf8_nonnull utf8_weak void utf8upr(utf8_int8_t *utf8_restrict str); + +/* Make a codepoint lower case if possible. */ +utf8_constexpr14 utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); + +/* Make a codepoint upper case if possible. */ +utf8_constexpr14 utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); + +/* Sets out_codepoint to the current utf8 codepoint in str, and returns the + * address of the previous utf8 codepoint before the current one in str. */ +utf8_constexpr14 utf8_nonnull utf8_int8_t * +utf8rcodepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +/* Duplicate the utf8 string src by getting its size, calling alloc_func_ptr to + * copy over data to a new buffer, and returning that. Or 0 if alloc_func_ptr + * returned null. */ +utf8_weak utf8_int8_t *utf8dup_ex(const utf8_int8_t *src, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, + size_t), + utf8_int8_t *user_data); + +/* Similar to utf8dup, except that at most n bytes of src are copied. If src is + * longer than n, only n bytes are copied and a null byte is added. + * + * Returns a new string if successful, 0 otherwise. */ +utf8_weak utf8_int8_t *utf8ndup_ex(const utf8_int8_t *src, size_t n, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, + size_t), + utf8_int8_t *user_data); + +#undef utf8_weak +#undef utf8_pure +#undef utf8_nonnull + +utf8_constexpr14_impl int utf8casecmp(const utf8_int8_t *src1, + const utf8_int8_t *src2) { + utf8_int32_t src1_lwr_cp = 0, src2_lwr_cp = 0, src1_upr_cp = 0, + src2_upr_cp = 0, src1_orig_cp = 0, src2_orig_cp = 0; + + for (;;) { + src1 = utf8codepoint(src1, &src1_orig_cp); + src2 = utf8codepoint(src2, &src2_orig_cp); + + /* lower the srcs if required */ + src1_lwr_cp = utf8lwrcodepoint(src1_orig_cp); + src2_lwr_cp = utf8lwrcodepoint(src2_orig_cp); + + /* lower the srcs if required */ + src1_upr_cp = utf8uprcodepoint(src1_orig_cp); + src2_upr_cp = utf8uprcodepoint(src2_orig_cp); + + /* check if the lowered codepoints match */ + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if ((src1_lwr_cp == src2_lwr_cp) || (src1_upr_cp == src2_upr_cp)) { + continue; + } + + /* if they don't match, then we return the difference between the characters + */ + return src1_lwr_cp - src2_lwr_cp; + } +} + +utf8_int8_t *utf8cat(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src) { + utf8_int8_t *d = dst; + /* find the null terminating byte in dst */ + while ('\0' != *d) { + d++; + } + + /* overwriting the null terminating byte in dst, append src byte-by-byte */ + while ('\0' != *src) { + *d++ = *src++; + } + + /* write out a new null terminating byte into dst */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl utf8_int8_t *utf8chr(const utf8_int8_t *src, + utf8_int32_t chr) { + utf8_int8_t c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + /* being asked to return position of null terminating byte, so + * just run s to the end, and return! */ + while ('\0' != *src) { + src++; + } + return (utf8_int8_t *)src; + } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + c[0] = (utf8_int8_t)chr; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)(chr >> 6)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)(chr >> 12)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)(chr >> 18)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } + + /* we've made c into a 2 utf8 codepoint string, one for the chr we are + * seeking, another for the null terminating byte. Now use utf8str to + * search */ + return utf8str(src, c); +} + +utf8_constexpr14_impl int utf8cmp(const utf8_int8_t *src1, + const utf8_int8_t *src2) { + while (('\0' != *src1) || ('\0' != *src2)) { + if (*src1 < *src2) { + return -1; + } else if (*src1 > *src2) { + return 1; + } + + src1++; + src2++; + } + + /* both utf8 strings matched */ + return 0; +} + +utf8_constexpr14_impl int utf8coll(const utf8_int8_t *src1, + const utf8_int8_t *src2); + +utf8_int8_t *utf8cpy(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src) { + utf8_int8_t *d = dst; + + /* overwriting anything previously in dst, write byte-by-byte + * from src */ + while ('\0' != *src) { + *d++ = *src++; + } + + /* append null terminating byte */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl size_t utf8cspn(const utf8_int8_t *src, + const utf8_int8_t *reject) { + size_t chars = 0; + + while ('\0' != *src) { + const utf8_int8_t *r = reject; + size_t offset = 0; + + while ('\0' != *r) { + /* checking that if *r is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *r)) && (0 < offset)) { + return chars; + } else { + if (*r == src[offset]) { + /* part of a utf8 codepoint matched, so move our checking + * onwards to the next byte */ + offset++; + r++; + } else { + /* r could be in the middle of an unmatching utf8 code point, + * so we need to march it on to the next character beginning, */ + + do { + r++; + } while (0x80 == (0xc0 & *r)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* found a match at the end of *r, so didn't get a chance to test it */ + if (0 < offset) { + return chars; + } + + /* the current utf8 codepoint in src did not match reject, but src + * could have been partway through a utf8 codepoint, so we need to + * march it onto the next utf8 codepoint starting byte */ + do { + src++; + } while ((0x80 == (0xc0 & *src))); + chars++; + } + + return chars; +} + +utf8_int8_t *utf8dup(const utf8_int8_t *src) { + return utf8dup_ex(src, utf8_null, utf8_null); +} + +utf8_int8_t *utf8dup_ex(const utf8_int8_t *src, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, size_t), + utf8_int8_t *user_data) { + utf8_int8_t *n = utf8_null; + + /* figure out how many bytes (including the terminator) we need to copy first + */ + size_t bytes = utf8size(src); + + if (alloc_func_ptr) { + n = alloc_func_ptr(user_data, bytes); + } else { +#if !defined(UTF8_NO_STD_MALLOC) + n = (utf8_int8_t *)malloc(bytes); +#else + return utf8_null; +#endif + } + + if (utf8_null == n) { + /* out of memory so we bail */ + return utf8_null; + } else { + bytes = 0; + + /* copy src byte-by-byte into our new utf8 string */ + while ('\0' != src[bytes]) { + n[bytes] = src[bytes]; + bytes++; + } + + /* append null terminating byte */ + n[bytes] = '\0'; + return n; + } +} + +utf8_constexpr14_impl utf8_int8_t *utf8fry(const utf8_int8_t *str); + +utf8_constexpr14_impl size_t utf8len(const utf8_int8_t *str) { + return utf8nlen(str, SIZE_MAX); +} + +utf8_constexpr14_impl size_t utf8nlen(const utf8_int8_t *str, size_t n) { + const utf8_int8_t *t = str; + size_t length = 0; + + while ((size_t)(str - t) < n && '\0' != *str) { + if (0xf0 == (0xf8 & *str)) { + /* 4-byte utf8 code point (began with 0b11110xxx) */ + str += 4; + } else if (0xe0 == (0xf0 & *str)) { + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + str += 3; + } else if (0xc0 == (0xe0 & *str)) { + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + str += 2; + } else { /* if (0x00 == (0x80 & *s)) { */ + /* 1-byte ascii (began with 0b0xxxxxxx) */ + str += 1; + } + + /* no matter the bytes we marched s forward by, it was + * only 1 utf8 codepoint */ + length++; + } + + if ((size_t)(str - t) > n) { + length--; + } + return length; +} + +utf8_constexpr14_impl int utf8ncasecmp(const utf8_int8_t *src1, + const utf8_int8_t *src2, size_t n) { + utf8_int32_t src1_lwr_cp = 0, src2_lwr_cp = 0, src1_upr_cp = 0, + src2_upr_cp = 0, src1_orig_cp = 0, src2_orig_cp = 0; + + do { + const utf8_int8_t *const s1 = src1; + const utf8_int8_t *const s2 = src2; + + /* first check that we have enough bytes left in n to contain an entire + * codepoint */ + if (0 == n) { + return 0; + } + + if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { + const utf8_int32_t c1 = (0xe0 & *s1); + const utf8_int32_t c2 = (0xe0 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { + const utf8_int32_t c1 = (0xf0 & *s1); + const utf8_int32_t c2 = (0xf0 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { + const utf8_int32_t c1 = (0xf8 & *s1); + const utf8_int32_t c2 = (0xf8 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + src1 = utf8codepoint(src1, &src1_orig_cp); + src2 = utf8codepoint(src2, &src2_orig_cp); + n -= utf8codepointsize(src1_orig_cp); + + src1_lwr_cp = utf8lwrcodepoint(src1_orig_cp); + src2_lwr_cp = utf8lwrcodepoint(src2_orig_cp); + + src1_upr_cp = utf8uprcodepoint(src1_orig_cp); + src2_upr_cp = utf8uprcodepoint(src2_orig_cp); + + /* check if the lowered codepoints match */ + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if ((src1_lwr_cp == src2_lwr_cp) || (src1_upr_cp == src2_upr_cp)) { + continue; + } + + /* if they don't match, then we return the difference between the characters + */ + return src1_lwr_cp - src2_lwr_cp; + } while (0 < n); + + /* both utf8 strings matched */ + return 0; +} + +utf8_int8_t *utf8ncat(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src, size_t n) { + utf8_int8_t *d = dst; + + /* find the null terminating byte in dst */ + while ('\0' != *d) { + d++; + } + + /* overwriting the null terminating byte in dst, append src byte-by-byte + * stopping if we run out of space */ + while (('\0' != *src) && (0 != n--)) { + *d++ = *src++; + } + + /* write out a new null terminating byte into dst */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl int utf8ncmp(const utf8_int8_t *src1, + const utf8_int8_t *src2, size_t n) { + while ((0 != n--) && (('\0' != *src1) || ('\0' != *src2))) { + if (*src1 < *src2) { + return -1; + } else if (*src1 > *src2) { + return 1; + } + + src1++; + src2++; + } + + /* both utf8 strings matched */ + return 0; +} + +utf8_int8_t *utf8ncpy(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src, size_t n) { + utf8_int8_t *d = dst; + size_t index = 0, check_index = 0; + + if (n == 0) { + return dst; + } + + /* overwriting anything previously in dst, write byte-by-byte + * from src */ + for (index = 0; index < n; index++) { + d[index] = src[index]; + if ('\0' == src[index]) { + break; + } + } + + for (check_index = index - 1; + check_index > 0 && 0x80 == (0xc0 & d[check_index]); check_index--) { + /* just moving the index */ + } + + if (check_index < index && + ((index - check_index) < utf8codepointcalcsize(&d[check_index]) || + (index - check_index) == n)) { + index = check_index; + } + + /* append null terminating byte */ + for (; index < n; index++) { + d[index] = 0; + } + + return dst; +} + +utf8_int8_t *utf8ndup(const utf8_int8_t *src, size_t n) { + return utf8ndup_ex(src, n, utf8_null, utf8_null); +} + +utf8_int8_t *utf8ndup_ex(const utf8_int8_t *src, size_t n, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, size_t), + utf8_int8_t *user_data) { + utf8_int8_t *c = utf8_null; + size_t bytes = 0; + + /* Find the end of the string or stop when n is reached */ + while ('\0' != src[bytes] && bytes < n) { + bytes++; + } + + /* In case bytes is actually less than n, we need to set it + * to be used later in the copy byte by byte. */ + n = bytes; + + if (alloc_func_ptr) { + c = alloc_func_ptr(user_data, bytes + 1); + } else { +#if !defined(UTF8_NO_STD_MALLOC) + c = (utf8_int8_t *)malloc(bytes + 1); +#else + c = utf8_null; +#endif + } + + if (utf8_null == c) { + /* out of memory so we bail */ + return utf8_null; + } + + bytes = 0; + + /* copy src byte-by-byte into our new utf8 string */ + while ('\0' != src[bytes] && bytes < n) { + c[bytes] = src[bytes]; + bytes++; + } + + /* append null terminating byte */ + c[bytes] = '\0'; + return c; +} + +utf8_constexpr14_impl utf8_int8_t *utf8rchr(const utf8_int8_t *src, int chr) { + + utf8_int8_t *match = utf8_null; + utf8_int8_t c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + /* being asked to return position of null terminating byte, so + * just run s to the end, and return! */ + while ('\0' != *src) { + src++; + } + return (utf8_int8_t *)src; + } else if (0 == ((int)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + c[0] = (utf8_int8_t)chr; + } else if (0 == ((int)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)(chr >> 6)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else if (0 == ((int)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)(chr >> 12)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)(chr >> 18)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } + + /* we've created a 2 utf8 codepoint string in c that is + * the utf8 character asked for by chr, and a null + * terminating byte */ + + while ('\0' != *src) { + size_t offset = 0; + + while ((src[offset] == c[offset]) && ('\0' != src[offset])) { + offset++; + } + + if ('\0' == c[offset]) { + /* we found a matching utf8 code point */ + match = (utf8_int8_t *)src; + src += offset; + + if ('\0' == *src) { + break; + } + } else { + src += offset; + + /* need to march s along to next utf8 codepoint start + * (the next byte that doesn't match 0b10xxxxxx) */ + if ('\0' != *src) { + do { + src++; + } while (0x80 == (0xc0 & *src)); + } + } + } + + /* return the last match we found (or 0 if no match was found) */ + return match; +} + +utf8_constexpr14_impl utf8_int8_t *utf8pbrk(const utf8_int8_t *str, + const utf8_int8_t *accept) { + while ('\0' != *str) { + const utf8_int8_t *a = accept; + size_t offset = 0; + + while ('\0' != *a) { + /* checking that if *a is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + return (utf8_int8_t *)str; + } else { + if (*a == str[offset]) { + /* part of a utf8 codepoint matched, so move our checking + * onwards to the next byte */ + offset++; + a++; + } else { + /* r could be in the middle of an unmatching utf8 code point, + * so we need to march it on to the next character beginning, */ + + do { + a++; + } while (0x80 == (0xc0 & *a)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* we found a match on the last utf8 codepoint */ + if (0 < offset) { + return (utf8_int8_t *)str; + } + + /* the current utf8 codepoint in src did not match accept, but src + * could have been partway through a utf8 codepoint, so we need to + * march it onto the next utf8 codepoint starting byte */ + do { + str++; + } while ((0x80 == (0xc0 & *str))); + } + + return utf8_null; +} + +utf8_constexpr14_impl size_t utf8size(const utf8_int8_t *str) { + return utf8size_lazy(str) + 1; +} + +utf8_constexpr14_impl size_t utf8size_lazy(const utf8_int8_t *str) { + return utf8nsize_lazy(str, SIZE_MAX); +} + +utf8_constexpr14_impl size_t utf8nsize_lazy(const utf8_int8_t *str, size_t n) { + size_t size = 0; + while (size < n && '\0' != str[size]) { + size++; + } + return size; +} + +utf8_constexpr14_impl size_t utf8spn(const utf8_int8_t *src, + const utf8_int8_t *accept) { + size_t chars = 0; + + while ('\0' != *src) { + const utf8_int8_t *a = accept; + size_t offset = 0; + + while ('\0' != *a) { + /* checking that if *r is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + /* found a match, so increment the number of utf8 codepoints + * that have matched and stop checking whether any other utf8 + * codepoints in a match */ + chars++; + src += offset; + offset = 0; + break; + } else { + if (*a == src[offset]) { + offset++; + a++; + } else { + /* a could be in the middle of an unmatching utf8 codepoint, + * so we need to march it on to the next character beginning, */ + do { + a++; + } while (0x80 == (0xc0 & *a)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* found a match at the end of *a, so didn't get a chance to test it */ + if (0 < offset) { + chars++; + src += offset; + continue; + } + + /* if a got to its terminating null byte, then we didn't find a match. + * Return the current number of matched utf8 codepoints */ + if ('\0' == *a) { + return chars; + } + } + + return chars; +} + +utf8_constexpr14_impl utf8_int8_t *utf8str(const utf8_int8_t *haystack, + const utf8_int8_t *needle) { + utf8_int32_t throwaway_codepoint = 0; + + /* if needle has no utf8 codepoints before the null terminating + * byte then return haystack */ + if ('\0' == *needle) { + return (utf8_int8_t *)haystack; + } + + while ('\0' != *haystack) { + const utf8_int8_t *maybeMatch = haystack; + const utf8_int8_t *n = needle; + + while (*haystack == *n && (*haystack != '\0' && *n != '\0')) { + n++; + haystack++; + } + + if ('\0' == *n) { + /* we found the whole utf8 string for needle in haystack at + * maybeMatch, so return it */ + return (utf8_int8_t *)maybeMatch; + } else { + /* h could be in the middle of an unmatching utf8 codepoint, + * so we need to march it on to the next character beginning + * starting from the current character */ + haystack = utf8codepoint(maybeMatch, &throwaway_codepoint); + } + } + + /* no match */ + return utf8_null; +} + +utf8_constexpr14_impl utf8_int8_t *utf8casestr(const utf8_int8_t *haystack, + const utf8_int8_t *needle) { + /* if needle has no utf8 codepoints before the null terminating + * byte then return haystack */ + if ('\0' == *needle) { + return (utf8_int8_t *)haystack; + } + + for (;;) { + const utf8_int8_t *maybeMatch = haystack; + const utf8_int8_t *n = needle; + utf8_int32_t h_cp = 0, n_cp = 0; + + /* Get the next code point and track it */ + const utf8_int8_t *nextH = haystack = utf8codepoint(haystack, &h_cp); + n = utf8codepoint(n, &n_cp); + + while ((0 != h_cp) && (0 != n_cp)) { + h_cp = utf8lwrcodepoint(h_cp); + n_cp = utf8lwrcodepoint(n_cp); + + /* if we find a mismatch, bail out! */ + if (h_cp != n_cp) { + break; + } + + haystack = utf8codepoint(haystack, &h_cp); + n = utf8codepoint(n, &n_cp); + } + + if (0 == n_cp) { + /* we found the whole utf8 string for needle in haystack at + * maybeMatch, so return it */ + return (utf8_int8_t *)maybeMatch; + } + + if (0 == h_cp) { + /* no match */ + return utf8_null; + } + + /* Roll back to the next code point in the haystack to test */ + haystack = nextH; + } +} + +utf8_constexpr14_impl utf8_int8_t *utf8valid(const utf8_int8_t *str) { + return utf8nvalid(str, SIZE_MAX); +} + +utf8_constexpr14_impl utf8_int8_t *utf8nvalid(const utf8_int8_t *str, + size_t n) { + const utf8_int8_t *t = str; + size_t consumed = 0; + + while ((void)(consumed = (size_t)(str - t)), consumed < n && '\0' != *str) { + const size_t remaining = n - consumed; + + if (0xf0 == (0xf8 & *str)) { + /* ensure that there's 4 bytes or more remaining */ + if (remaining < 4) { + return (utf8_int8_t *)str; + } + + /* ensure each of the 3 following bytes in this 4-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & str[1])) || (0x80 != (0xc0 & str[2])) || + (0x80 != (0xc0 & str[3]))) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 4 bytes */ + if ((remaining != 4) && (0x80 == (0xc0 & str[4]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 5 bits of this 4-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if ((0 == (0x07 & str[0])) && (0 == (0x30 & str[1]))) { + return (utf8_int8_t *)str; + } + + /* 4-byte utf8 code point (began with 0b11110xxx) */ + str += 4; + } else if (0xe0 == (0xf0 & *str)) { + /* ensure that there's 3 bytes or more remaining */ + if (remaining < 3) { + return (utf8_int8_t *)str; + } + + /* ensure each of the 2 following bytes in this 3-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & str[1])) || (0x80 != (0xc0 & str[2]))) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 3 bytes */ + if ((remaining != 3) && (0x80 == (0xc0 & str[3]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 5 bits of this 3-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if ((0 == (0x0f & str[0])) && (0 == (0x20 & str[1]))) { + return (utf8_int8_t *)str; + } + + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + str += 3; + } else if (0xc0 == (0xe0 & *str)) { + /* ensure that there's 2 bytes or more remaining */ + if (remaining < 2) { + return (utf8_int8_t *)str; + } + + /* ensure the 1 following byte in this 2-byte + * utf8 codepoint began with 0b10xxxxxx */ + if (0x80 != (0xc0 & str[1])) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 2 bytes */ + if ((remaining != 2) && (0x80 == (0xc0 & str[2]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 4 bits of this 2-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if (0 == (0x1e & str[0])) { + return (utf8_int8_t *)str; + } + + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + str += 2; + } else if (0x00 == (0x80 & *str)) { + /* 1-byte ascii (began with 0b0xxxxxxx) */ + str += 1; + } else { + /* we have an invalid 0b1xxxxxxx utf8 code point entry */ + return (utf8_int8_t *)str; + } + } + + return utf8_null; +} + +int utf8makevalid(utf8_int8_t *str, const utf8_int32_t replacement) { + utf8_int8_t *read = str; + utf8_int8_t *write = read; + const utf8_int8_t r = (utf8_int8_t)replacement; + utf8_int32_t codepoint = 0; + + if (replacement > 0x7f) { + return -1; + } + + while ('\0' != *read) { + if (0xf0 == (0xf8 & *read)) { + /* ensure each of the 3 following bytes in this 4-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & read[1])) || (0x80 != (0xc0 & read[2])) || + (0x80 != (0xc0 & read[3]))) { + *write++ = r; + read++; + continue; + } + + /* 4-byte utf8 code point (began with 0b11110xxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 4); + } else if (0xe0 == (0xf0 & *read)) { + /* ensure each of the 2 following bytes in this 3-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & read[1])) || (0x80 != (0xc0 & read[2]))) { + *write++ = r; + read++; + continue; + } + + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 3); + } else if (0xc0 == (0xe0 & *read)) { + /* ensure the 1 following byte in this 2-byte + * utf8 codepoint began with 0b10xxxxxx */ + if (0x80 != (0xc0 & read[1])) { + *write++ = r; + read++; + continue; + } + + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 2); + } else if (0x00 == (0x80 & *read)) { + /* 1-byte ascii (began with 0b0xxxxxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 1); + } else { + /* if we got here then we've got a dangling continuation (0b10xxxxxx) */ + *write++ = r; + read++; + continue; + } + } + + *write = '\0'; + + return 0; +} + +utf8_constexpr14_impl utf8_int8_t * +utf8codepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) { + if (0xf0 == (0xf8 & str[0])) { + /* 4 byte utf8 codepoint */ + *out_codepoint = ((0x07 & str[0]) << 18) | ((0x3f & str[1]) << 12) | + ((0x3f & str[2]) << 6) | (0x3f & str[3]); + str += 4; + } else if (0xe0 == (0xf0 & str[0])) { + /* 3 byte utf8 codepoint */ + *out_codepoint = + ((0x0f & str[0]) << 12) | ((0x3f & str[1]) << 6) | (0x3f & str[2]); + str += 3; + } else if (0xc0 == (0xe0 & str[0])) { + /* 2 byte utf8 codepoint */ + *out_codepoint = ((0x1f & str[0]) << 6) | (0x3f & str[1]); + str += 2; + } else { + /* 1 byte utf8 codepoint otherwise */ + *out_codepoint = str[0]; + str += 1; + } + + return (utf8_int8_t *)str; +} + +utf8_constexpr14_impl size_t utf8codepointcalcsize(const utf8_int8_t *str) { + if (0xf0 == (0xf8 & str[0])) { + /* 4 byte utf8 codepoint */ + return 4; + } else if (0xe0 == (0xf0 & str[0])) { + /* 3 byte utf8 codepoint */ + return 3; + } else if (0xc0 == (0xe0 & str[0])) { + /* 2 byte utf8 codepoint */ + return 2; + } + + /* 1 byte utf8 codepoint otherwise */ + return 1; +} + +utf8_constexpr14_impl size_t utf8codepointsize(utf8_int32_t chr) { + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + return 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + return 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + return 3; + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + return 4; + } +} + +utf8_int8_t *utf8catcodepoint(utf8_int8_t *str, utf8_int32_t chr, size_t n) { + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + if (n < 1) { + return utf8_null; + } + str[0] = (utf8_int8_t)chr; + str += 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + if (n < 2) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)((chr >> 6) & 0x1f)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + if (n < 3) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)((chr >> 12) & 0x0f)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + str[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 3; + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + if (n < 4) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)((chr >> 18) & 0x07)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + str[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + str[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 4; + } + + return str; +} + +utf8_constexpr14_impl int utf8islower(utf8_int32_t chr) { + return chr != utf8uprcodepoint(chr); +} + +utf8_constexpr14_impl int utf8isupper(utf8_int32_t chr) { + return chr != utf8lwrcodepoint(chr); +} + +void utf8lwr(utf8_int8_t *utf8_restrict str) { + utf8_int32_t cp = 0; + utf8_int8_t *pn = utf8codepoint(str, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(str, lwr_cp, size); + } + + str = pn; + pn = utf8codepoint(str, &cp); + } +} + +void utf8upr(utf8_int8_t *utf8_restrict str) { + utf8_int32_t cp = 0; + utf8_int8_t *pn = utf8codepoint(str, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(str, lwr_cp, size); + } + + str = pn; + pn = utf8codepoint(str, &cp); + } +} + +utf8_constexpr14_impl utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) { + if (((0x0041 <= cp) && (0x005a >= cp)) || + ((0x00c0 <= cp) && (0x00d6 >= cp)) || + ((0x00d8 <= cp) && (0x00de >= cp)) || + ((0x0391 <= cp) && (0x03a1 >= cp)) || + ((0x03a3 <= cp) && (0x03ab >= cp)) || + ((0x0410 <= cp) && (0x042f >= cp))) { + cp += 32; + } else if ((0x0400 <= cp) && (0x040f >= cp)) { + cp += 80; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp)) || + ((0x0460 <= cp) && (0x0481 >= cp)) || + ((0x048a <= cp) && (0x04ff >= cp))) { + cp |= 0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp += 1; + cp &= ~0x1; + } else { + switch (cp) { + default: + break; + case 0x0178: + cp = 0x00ff; + break; + case 0x0243: + cp = 0x0180; + break; + case 0x018e: + cp = 0x01dd; + break; + case 0x023d: + cp = 0x019a; + break; + case 0x0220: + cp = 0x019e; + break; + case 0x01b7: + cp = 0x0292; + break; + case 0x01c4: + cp = 0x01c6; + break; + case 0x01c7: + cp = 0x01c9; + break; + case 0x01ca: + cp = 0x01cc; + break; + case 0x01f1: + cp = 0x01f3; + break; + case 0x01f7: + cp = 0x01bf; + break; + case 0x0187: + cp = 0x0188; + break; + case 0x018b: + cp = 0x018c; + break; + case 0x0191: + cp = 0x0192; + break; + case 0x0198: + cp = 0x0199; + break; + case 0x01a7: + cp = 0x01a8; + break; + case 0x01ac: + cp = 0x01ad; + break; + case 0x01b8: + cp = 0x01b9; + break; + case 0x01bc: + cp = 0x01bd; + break; + case 0x01f4: + cp = 0x01f5; + break; + case 0x023b: + cp = 0x023c; + break; + case 0x0241: + cp = 0x0242; + break; + case 0x03fd: + cp = 0x037b; + break; + case 0x03fe: + cp = 0x037c; + break; + case 0x03ff: + cp = 0x037d; + break; + case 0x037f: + cp = 0x03f3; + break; + case 0x0386: + cp = 0x03ac; + break; + case 0x0388: + cp = 0x03ad; + break; + case 0x0389: + cp = 0x03ae; + break; + case 0x038a: + cp = 0x03af; + break; + case 0x038c: + cp = 0x03cc; + break; + case 0x038e: + cp = 0x03cd; + break; + case 0x038f: + cp = 0x03ce; + break; + case 0x0370: + cp = 0x0371; + break; + case 0x0372: + cp = 0x0373; + break; + case 0x0376: + cp = 0x0377; + break; + case 0x03f4: + cp = 0x03b8; + break; + case 0x03cf: + cp = 0x03d7; + break; + case 0x03f9: + cp = 0x03f2; + break; + case 0x03f7: + cp = 0x03f8; + break; + case 0x03fa: + cp = 0x03fb; + break; + } + } + + return cp; +} + +utf8_constexpr14_impl utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) { + if (((0x0061 <= cp) && (0x007a >= cp)) || + ((0x00e0 <= cp) && (0x00f6 >= cp)) || + ((0x00f8 <= cp) && (0x00fe >= cp)) || + ((0x03b1 <= cp) && (0x03c1 >= cp)) || + ((0x03c3 <= cp) && (0x03cb >= cp)) || + ((0x0430 <= cp) && (0x044f >= cp))) { + cp -= 32; + } else if ((0x0450 <= cp) && (0x045f >= cp)) { + cp -= 80; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp)) || + ((0x0460 <= cp) && (0x0481 >= cp)) || + ((0x048a <= cp) && (0x04ff >= cp))) { + cp &= ~0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp -= 1; + cp |= 0x1; + } else { + switch (cp) { + default: + break; + case 0x00ff: + cp = 0x0178; + break; + case 0x0180: + cp = 0x0243; + break; + case 0x01dd: + cp = 0x018e; + break; + case 0x019a: + cp = 0x023d; + break; + case 0x019e: + cp = 0x0220; + break; + case 0x0292: + cp = 0x01b7; + break; + case 0x01c6: + cp = 0x01c4; + break; + case 0x01c9: + cp = 0x01c7; + break; + case 0x01cc: + cp = 0x01ca; + break; + case 0x01f3: + cp = 0x01f1; + break; + case 0x01bf: + cp = 0x01f7; + break; + case 0x0188: + cp = 0x0187; + break; + case 0x018c: + cp = 0x018b; + break; + case 0x0192: + cp = 0x0191; + break; + case 0x0199: + cp = 0x0198; + break; + case 0x01a8: + cp = 0x01a7; + break; + case 0x01ad: + cp = 0x01ac; + break; + case 0x01b9: + cp = 0x01b8; + break; + case 0x01bd: + cp = 0x01bc; + break; + case 0x01f5: + cp = 0x01f4; + break; + case 0x023c: + cp = 0x023b; + break; + case 0x0242: + cp = 0x0241; + break; + case 0x037b: + cp = 0x03fd; + break; + case 0x037c: + cp = 0x03fe; + break; + case 0x037d: + cp = 0x03ff; + break; + case 0x03f3: + cp = 0x037f; + break; + case 0x03ac: + cp = 0x0386; + break; + case 0x03ad: + cp = 0x0388; + break; + case 0x03ae: + cp = 0x0389; + break; + case 0x03af: + cp = 0x038a; + break; + case 0x03cc: + cp = 0x038c; + break; + case 0x03cd: + cp = 0x038e; + break; + case 0x03ce: + cp = 0x038f; + break; + case 0x0371: + cp = 0x0370; + break; + case 0x0373: + cp = 0x0372; + break; + case 0x0377: + cp = 0x0376; + break; + case 0x03d1: + cp = 0x0398; + break; + case 0x03d7: + cp = 0x03cf; + break; + case 0x03f2: + cp = 0x03f9; + break; + case 0x03f8: + cp = 0x03f7; + break; + case 0x03fb: + cp = 0x03fa; + break; + } + } + + return cp; +} + +utf8_constexpr14_impl utf8_int8_t * +utf8rcodepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) { + const utf8_int8_t *s = (const utf8_int8_t *)str; + + if (0xf0 == (0xf8 & s[0])) { + /* 4 byte utf8 codepoint */ + *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | + ((0x3f & s[2]) << 6) | (0x3f & s[3]); + } else if (0xe0 == (0xf0 & s[0])) { + /* 3 byte utf8 codepoint */ + *out_codepoint = + ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); + } else if (0xc0 == (0xe0 & s[0])) { + /* 2 byte utf8 codepoint */ + *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); + } else { + /* 1 byte utf8 codepoint otherwise */ + *out_codepoint = s[0]; + } + + do { + s--; + } while ((0 != (0x80 & s[0])) && (0x80 == (0xc0 & s[0]))); + + return (utf8_int8_t *)s; +} + +#undef utf8_restrict +#undef utf8_constexpr14 +#undef utf8_null + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif /* SHEREDOM_UTF8_H_INCLUDED */ diff --git a/resources/newtrodit.png b/resources/newtrodit.png new file mode 100644 index 0000000000000000000000000000000000000000..134d219176c68f1d797b41eb24b24df8048029ca GIT binary patch literal 82045 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 - -*/ - -// Errors - -char NEWTRODIT_ERROR_UNKNOWN[] = "Unknown error."; -char NEWTRODIT_ERROR_CLIPBOARD_COPY[] = "Cannot copy string to clipboard."; -char NEWTRODIT_ERROR_CLIPBOARD_PASTE[] = "Cannot paste string from clipboard."; - -char NEWTRODIT_ERROR_INVALID_XPOS[] = "Invalid X position for cursor."; -char NEWTRODIT_ERROR_INVALID_YPOS[] = "Invalid row position."; -char NEWTRODIT_ERROR_MANUAL_INVALID_LINE[] = "Invalid line (maximum line number is %d)"; // I could use NEWTRODIT_ERROR_INVALID_YPOS but I prefer more specific errors (or messages) -char NEWTRODIT_ERROR_INVALID_POS_RESET[] = "Invalid position for cursor detected. Resetting coordinates."; -char NEWTRODIT_ERROR_WINDOW_TOO_SMALL[] = "Console window is too small. Please resize it."; -char NEWTRODIT_ERROR_MANUAL_TOO_BIG[] = "Manual file is too big."; -char NEWTRODIT_ERROR_MISSING_MANUAL[] = "Manual file is missing: "; -char NEWTRODIT_ERROR_INVALID_MANUAL[] = "Invalid manual file: "; -char NEWTRODIT_ERROR_LOADING_MANUAL[] = "Error loading manual file. This might be caused due to an outdated OS version "; - -char NEWTRODIT_ERROR_INVALID_INBOUND[] = "Invalid inbound key combination: %s"; -char NEWTRODIT_ERROR_RELOAD_SETTINGS[] = "Cannot reload settings. Settings file doesn't exist or it's corrupt."; -char NEWTRODIT_ERROR_OUT_OF_MEMORY[] = "Out of memory."; -char NEWTRODIT_ERROR_ALLOCATION_FAILED[] = "Memory allocation failed."; -char NEWTRODIT_ERROR_INVALID_SYNTAX[] = "Invalid syntax highlighting file: "; -char NEWTRODIT_ERROR_SYNTAX_RULES[] = "No syntax highlighting rules found."; -char NEWTRODIT_ERROR_FAILED_PROCESS_START[] = "Failed to start the process: "; -char NEWTRODIT_ERROR_FAILED_CLOSE_FILE[] = "Failed to close the file '%s'"; - -char NEWTRODIT_ERROR_INVALID_MACRO[] = "Invalid macro: "; -char NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE[] = "Invalid Unicode byte sequence."; -char NEWTRODIT_ERROR_TOO_MANY_FILES_OPEN[] = "Too many files open."; -char NEWTRODIT_ERROR_CANNOT_OPEN_DEVICE[] = "Cannot open device file: "; -char NEWTRODIT_ERROR_CONSOLE_HANDLE[] = "Cannot get console handle."; -char NEWTRODIT_ERROR_UNKNOWN_COMMAND[] = "Unknown command: '%s'"; -char NEWTRODIT_LICENSE_INVALID_LICENSE[] = "Detected an invalid or outdated license file."; -char NEWTRODIT_LICENSE_MISSING_LICENSE[] = "License file is missing: "; -char NEWTRODIT_ERROR_INVALID_FILE_INDEX[] = "Invalid file index. Switching to the first file."; -char NEWTRODIT_ERROR_NEW_FILE[] = "Failed to open a new file."; -char NEWTRODIT_ERROR_REDIRECTED_TTY[] = "Newtrodit cannot be redirected to a file."; - - -// Internal errors -char NEWTRODIT_INTERNAL_EXPECTED_NULL[] = "Internal error: expected a non-null string"; - -// Crashes - -char NEWTRODIT_CRASH_INVALID_SETTINGS[] = "Invalid settings file."; -char NEWTRODIT_CRASH_UNKNOWN_EXCEPTION[] = "Unknown exception."; - - -// Warnings -char NEWTRODIT_WARNING_SYNTAX_TOO_BIG[] = "Warning: Syntax highlighting file is too big. Using the first keywords."; -char NEWTRODIT_WARNING_READONLY_FILE[] = "Warning: File has read-only attribute."; - -// Command-line arguments -char NEWTRODIT_ERROR_MISSING_ARGUMENT[] = "Missing argument. See 'newtrodit --help'"; -char NEWTRODIT_ERROR_INVALID_COLOR[] = "Invalid color. Color range is between 0 and F."; - -// File IO error/info dialogs -char NEWTRODIT_FS_FILE_TOO_LARGE[] = "File too large: "; -char NEWTRODIT_FS_FILE_OPEN_ERR[] = "Failed to open the file: %s"; -char NEWTRODIT_FS_FILE_SAVE_ERR[] = "Cannot save the file."; -char NEWTRODIT_FS_FILE_INVALID_NAME[] = "Invalid file name: "; -char NEWTRODIT_FS_FILE_NAME_TOO_LONG[] = "File name too long: "; -char NEWTRODIT_FS_FILE_NOT_FOUND[] = "File not found: "; -char NEWTRODIT_FS_DIR_NOT_FOUND[] = "Directory not found: %s"; - -char NEWTRODIT_FS_FILE_RENAME[] = "Cannot rename the file."; -char NEWTRODIT_FS_FILE_DELETE[] = "Failed to delete the file: "; -char NEWTRODIT_FS_SAME_FILE[] = "Cannot open the same file."; -char NEWTRODIT_FS_FOUND_FILES[] = "Showing %d of %d files matching the search pattern."; -char NEWTRODIT_FS_READONLY_SAVE[] = "Cannot write to a read-only file."; -char NEWTRODIT_FS_IS_A_DIRECTORY[] = "Is a directory: "; -char NEWTRODIT_FS_NOT_A_DIRECTORY[] = "Not a directory: %s"; -char NEWTRODIT_FS_NO_FILES_FOUND[] = "No files found matching the specified criteria."; - - - -char NEWTRODIT_FS_DISK_FULL[] = "Disk is full."; -char NEWTRODIT_FS_ACCESS_DENIED[] = "Access is denied: "; - -// Prompts - -char NEWTRODIT_PROMPT_FIND_STRING[] = "String to find: "; -char NEWTRODIT_PROMPT_FIND_STRING_INSENSITIVE[] = "String to find (case insensitive): "; -char NEWTRODIT_PROMPT_REPLACE_STRING[] = "String to replace: "; -char NEWTRODIT_PROMPT_FOPEN[] = "File to open: "; -char NEWTRODIT_PROMPT_ALREADY_OPEN_TAB[] = "'%s' is already open in another tab. Do you want to switch to it? (y/n)"; - -char NEWTRODIT_PROMPT_GOTO_LINE[] = "Line number: "; -char NEWTRODIT_PROMPT_GOTO_COLUMN[] = "Column number: "; -char NEWTRODIT_PROMPT_RENAME_FILE[] = "New file name: "; -char NEWTRODIT_PROMPT_LOCATE_FILE[] = "File to locate: "; - -char NEWTRODIT_PROMPT_OVERWRITE[] = "File already exists. Overwrite? (y/n)"; -char NEWTRODIT_PROMPT_QUIT[] = "Are you sure you want to quit Newtrodit? (y/n)"; -char NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE[] = "File has been modified. Save changes? (y/n)"; -char NEWTRODIT_PROMPT_NEW_FILE[] = "Are you sure you want to create a new file? (y/n)"; -char NEWTRODIT_PROMPT_CLOSE_FILE[] = "Are you sure you want to close the file? (y/n)"; -char NEWTRODIT_PROMPT_RELOAD_FILE[] = "Are you sure you want to reload the file? (y/n)"; -char NEWTRODIT_PROMPT_RELOAD_SETTINGS[] = "Are you sure you want to reload the settings? (y/n)"; -char NEWTRODIT_PROMPT_FILE_CREATING[] = " doesn't exist. Do you want to create it? (y/n)"; // Must be added using join() later -char NEWTRODIT_PROMPT_REOPEN_FILE[] = "Do you want to reopen the file? (y/n)"; -char NEWTRODIT_PROMPT_MODIFIED_FILE_DISK[] = "File has been modified on disk. Do you want to reload it? (y/n)"; -char NEWTRODIT_PROMPT_SAVE_FILE[] = "File to save: "; -char NEWTRODIT_PROMPT_SAVE_FILE_AS[] = "Save file as: "; -char NEWTRODIT_PROMPT_CREATE_MACRO[] = "Macro command line: "; -char NEWTRODIT_PROMPT_SYNTAX_FILE[] = "Syntax highligthing file: "; -char NEWTRODIT_PROMPT_COMMAND_PALETTE[] = "Command palette: "; - - -char NEWTRODIT_PROMPT_FIRST_FILE_COMPARE[] = "First file to compare: "; -char NEWTRODIT_PROMPT_SECOND_FILE_COMPARE[] = "Second file to compare: "; - -// Informational dialogs -char NEWTRODIT_NO_ERROR[] = "No error."; -char NEWTRODIT_FILE_SAVED[] = "File saved successfully."; -char NEWTRODIT_FILE_RELOADED[] = "File reloaded successfully."; -char NEWTRODIT_NEW_FILE_CREATED[] = "New file created successfully."; -char NEWTRODIT_FILE_CLOSED[] = "File closed successfully."; -char NEWTRODIT_FILE_RENAMED[] = "File renamed successfully to: "; -char NEWTRODIT_FILE_WROTE_BUFFER[] = "Wrote the buffer content to: "; -char NEWTRODIT_SETTINGS_RELOADED[] = "Settings reloaded successfully."; -char NEWTRODIT_SYNTAX_HIGHLIGHTING_LOADED[] = "Syntax highlighting rules for %s language successfully loaded."; -char NEWTRODIT_SYNTAX_HIGHLIGHTING_FAILED[] = "Failed to load syntax highlighting rules."; -char NEWTRODIT_LOCATE_END_REACHED[] = "End of directory reached."; - - -char NEWTRODIT_FIND_STRING_NOT_FOUND[] = "String not found: "; -char NEWTRODIT_FIND_CASE_SENSITIVE[] = "Case sensitive search: "; -char NEWTRODIT_FIND_MATCH_WHOLE_WORD[] = "Match whole word: "; -char NEWTRODIT_FIND_NO_MORE_MATCHES[] = "No more matches."; - -char NEWTRODIT_DEV_TOOLS[] = "Developer tools: "; -char NEWTRODIT_TAB_CONVERSION[] = "Tab conversion: "; -char NEWTRODIT_NULL_CONVERSION[] = "Null character to spaces conversion: "; -char NEWTRODIT_LINE_COUNT[] = "Line count: "; -char NEWTRODIT_SYNTAX_HIGHLIGHTING[] = "Syntax highlighting: "; -char NEWTRODIT_MACRO_SET[] = "Macro set: "; -char NEWTRODIT_OLD_KEYBINDINGS[] = "Old keybindings: "; -char NEWTRODIT_AUTO_SYNTAX_LOAD[] = "Automatically load syntax highlighting rules for supported languages: "; -char NEWTRODIT_FILE_COMPARE_DIFF[] = "Difference found in byte number "; -char NEWTRODIT_FILE_COMPARE_NODIFF[] = "No difference found between files."; -char NEWTRODIT_LOADING_COMPARING_FILES[] = "Comparing files '%s' and '%s'. This may take a while."; -char NEWTRODIT_CURRENT_FILE_SWITCHED[] = "Editing now: "; -char NEWTRODIT_MOUSE[] = "Mouse: "; - -char NEWTRODIT_SHOWING_PREVIOUS_FILE[] = "Showing previous file"; -char NEWTRODIT_SHOWING_NEXT_FILE[] = "Showing next file"; -char NEWTRODIT_SWITCHING_FILE[] = "Switching to file"; -char NEWTRODIT_INFO_NO_FILES_TO_SWITCH[] = "No files to switch to."; -char NEWTRODIT_CLIPBOARD_COPIED[] = "Path copied to the system's clipboard (%s)"; - -// Other dialogs - -char NEWTRODIT_DIALOG_BOTTOM_HELP[] = "For help, press F1 | "; -char NEWTRODIT_DIALOG_MANUAL[] = "Ctrl-X Close help | Alt-F4 Quit Newtrodit"; -char NEWTRODIT_DIALOG_MANUAL_TITLE[] = " Newtrodit help"; -char NEWTRODIT_DIALOG_BOTTOM_LOCATE[] = " | Space Next page | Ctrl-B Go back | Ctrl-D Go to dir | Ctrl-X Quit"; -char NEWTRODIT_DIALOG_LOCATE_POS[] = "Showing %d-%d out of %d files (%llu total bytes)"; - - -char NEWTRODIT_DIALOG_ENABLED[] = "Enabled"; -char NEWTRODIT_DIALOG_DISABLED[] = "Disabled"; -char NEWTRODIT_FUNCTION_ABORTED[] = "Function aborted."; - -// Constants used internally - -char NEWTRODIT_MANUAL_MAGIC_NUMBER[] = "$NEWTRODIT_MANUAL"; - -char NEWTRODIT_SYNTAX_CAPITAL[] = "$CAPITAL"; -char NEWTRODIT_SYNTAX_CAPITAL_COLOR[] = "$CAPITAL_COLOR"; -char NEWTRODIT_SYNTAX_CAPITAL_MIN[] = "$CAPITAL_MIN"; -char NEWTRODIT_SYNTAX_COMMENT[] = "$COMMENT"; -char NEWTRODIT_SYNTAX_COMMENT_COLOR[] = "$COMMENT_COLOR"; -char NEWTRODIT_SYNTAX_DEFAULT_COLOR[] = "$DEFAULT_COLOR"; -char NEWTRODIT_SYNTAX_LANGUAGE[] = "$LANGUAGE"; -char NEWTRODIT_SYNTAX_MAGIC_NUMBER[] = "$NEWTRODIT_SYNTAX"; -char NEWTRODIT_SYNTAX_NUMBER_COLOR[] = "$NUMBER_COLOR"; -char NEWTRODIT_SYNTAX_QUOTE_COLOR[] = "$QUOTE_COLOR"; -char NEWTRODIT_SYNTAX_SEPARATORS[] = "$SEPARATORS"; -char NEWTRODIT_SYNTAX_SINGLE_QUOTES[] = "$SINGLE_QUOTES"; -char NEWTRODIT_SYNTAX_FINISH_QUOTES[] = "$FINISH_QUOTES"; - - -char NEWTRODIT_MACRO_CURRENT_FILE[] = "$FILE"; -char NEWTRODIT_MACRO_FULL_PATH[] = "$PATH"; -char NEWTRODIT_MACRO_CURRENT_DIR[] = "$DIR"; -char NEWTRODIT_MACRO_CURRENT_EXTENSION[] = "$EXT"; -char NEWTRODIT_MACRO_CURRENT_BASENAME[] = "$BASENAME"; -char NEWTRODIT_MACRO_CURRENT_DRIVE[] = "$DRIVE"; -char NEWTRODIT_SYNTAX_ENCLOSING[] = "$ENCLOSING"; +/* + Newtrodit: A console text editor + Copyright (C) 2021-2023 anic17 Software + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see + +*/ + +// Errors + +char NEWTRODIT_ERROR_UNKNOWN[] = "Unknown error."; +char NEWTRODIT_ERROR_CLIPBOARD_COPY[] = "Cannot copy string to clipboard."; +char NEWTRODIT_ERROR_CLIPBOARD_PASTE[] = "Cannot paste string from clipboard."; + +char NEWTRODIT_ERROR_INVALID_XPOS[] = "Invalid X cursor position."; +char NEWTRODIT_ERROR_INVALID_YPOS[] = "Invalid row position."; +char NEWTRODIT_ERROR_MANUAL_INVALID_LINE[] = "Invalid line (maximum line number is %d)"; // I could use NEWTRODIT_ERROR_INVALID_YPOS but I prefer more specific errors (or messages) +char NEWTRODIT_ERROR_INVALID_POS_RESET[] = "Invalid position for cursor detected. Resetting coordinates."; +char NEWTRODIT_ERROR_WINDOW_TOO_SMALL[] = "Console window is too small. Please resize it."; +char NEWTRODIT_ERROR_MANUAL_TOO_BIG[] = "Manual file is too big."; +char NEWTRODIT_ERROR_MISSING_MANUAL[] = "Manual file is missing: "; +char NEWTRODIT_ERROR_INVALID_MANUAL[] = "Invalid manual file: "; +char NEWTRODIT_ERROR_LOADING_MANUAL[] = "Error loading manual file. This might be caused due to an outdated OS version "; + +char NEWTRODIT_ERROR_INVALID_INBOUND[] = "Invalid inbound key combination: %s"; +char NEWTRODIT_ERROR_RELOAD_SETTINGS[] = "Cannot reload settings. Settings file doesn't exist or it's corrupt."; +char NEWTRODIT_ERROR_OUT_OF_MEMORY[] = "Out of memory."; +char NEWTRODIT_ERROR_ALLOCATION_FAILED[] = "Memory allocation failed."; +char NEWTRODIT_ERROR_INVALID_SYNTAX[] = "Invalid syntax highlighting file: "; +char NEWTRODIT_ERROR_SYNTAX_RULES[] = "No syntax highlighting rules found."; +char NEWTRODIT_ERROR_FAILED_PROCESS_START[] = "Failed to start the process: "; +char NEWTRODIT_ERROR_FAILED_CLOSE_FILE[] = "Failed to close the file '%s'"; + +char NEWTRODIT_ERROR_INVALID_MACRO[] = "Invalid macro: "; +char NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE[] = "Invalid Unicode byte sequence."; +char NEWTRODIT_ERROR_TOO_MANY_FILES_OPEN[] = "Too many files open."; +char NEWTRODIT_ERROR_CANNOT_OPEN_DEVICE[] = "Cannot open device file: "; +char NEWTRODIT_ERROR_CONSOLE_HANDLE[] = "Cannot get console handle."; +char NEWTRODIT_ERROR_UNKNOWN_COMMAND[] = "Unknown command: '%s'"; +char NEWTRODIT_ERROR_INVALID_FILE_INDEX[] = "Invalid file index. Switching to the first file."; +char NEWTRODIT_ERROR_NEW_FILE[] = "Failed to open a new file."; +char NEWTRODIT_ERROR_REDIRECTED_TTY[] = "Newtrodit cannot be redirected to a file."; + + +// Internal errors +char NEWTRODIT_INTERNAL_EXPECTED_NULL[] = "Internal error: expected a non-null string"; + +// Crashes + +char NEWTRODIT_CRASH_INVALID_SETTINGS[] = "Invalid settings file."; +char NEWTRODIT_CRASH_UNKNOWN_EXCEPTION[] = "Unknown exception."; + + +// Warnings +char NEWTRODIT_WARNING_SYNTAX_TOO_BIG[] = "Warning: Syntax highlighting file is too big. Using the first keywords."; +char NEWTRODIT_WARNING_READONLY_FILE[] = "Warning: File has read-only attribute."; + +// Command-line arguments +char NEWTRODIT_ERROR_MISSING_ARGUMENT[] = "Missing argument. See 'newtrodit --help'"; +char NEWTRODIT_ERROR_INVALID_COLOR[] = "Invalid color. Color range is between 0 and F."; + +// File IO error/info dialogs +char NEWTRODIT_FS_FILE_TOO_LARGE[] = "File too large: "; +char NEWTRODIT_FS_FILE_OPEN_ERR[] = "Failed to open the file: %s"; +char NEWTRODIT_FS_FILE_SAVE_ERR[] = "Failed to save the file: %s"; +char NEWTRODIT_FS_FILE_INVALID_NAME[] = "Invalid file name: "; +char NEWTRODIT_FS_FILE_NAME_TOO_LONG[] = "File name too long: "; +char NEWTRODIT_FS_FILE_NOT_FOUND[] = "File not found: "; +char NEWTRODIT_FS_DIR_NOT_FOUND[] = "Directory not found: %s"; + +char NEWTRODIT_FS_FILE_RENAME[] = "Cannot rename the file."; +char NEWTRODIT_FS_FILE_DELETE[] = "Failed to delete the file: "; +char NEWTRODIT_FS_SAME_FILE[] = "Cannot open the same file."; +char NEWTRODIT_FS_FOUND_FILES[] = "Showing %d of %d files matching the search pattern."; +char NEWTRODIT_FS_READONLY_SAVE[] = "Cannot write to a read-only file."; +char NEWTRODIT_FS_IS_A_DIRECTORY[] = "Is a directory: "; +char NEWTRODIT_FS_NOT_A_DIRECTORY[] = "Not a directory: %s"; +char NEWTRODIT_FS_NO_FILES_FOUND[] = "No files found matching the specified criteria."; + + + +char NEWTRODIT_FS_DISK_FULL[] = "Disk is full."; +char NEWTRODIT_FS_ACCESS_DENIED[] = "Access is denied: "; + +// Prompts + +char NEWTRODIT_PROMPT_FIND_STRING[] = "String to find: "; +char NEWTRODIT_PROMPT_FIND_STRING_INSENSITIVE[] = "String to find (case insensitive): "; +char NEWTRODIT_PROMPT_REPLACE_STRING[] = "String to replace: "; +char NEWTRODIT_PROMPT_FOPEN[] = "File to open: "; +char NEWTRODIT_PROMPT_ALREADY_OPEN_TAB[] = "'%s' is already open in another tab. Do you want to switch to it? (y/n)"; + +char NEWTRODIT_PROMPT_GOTO_LINE[] = "Line number: "; +char NEWTRODIT_PROMPT_GOTO_COLUMN[] = "Column number: "; +char NEWTRODIT_PROMPT_RENAME_FILE[] = "New file name: "; +char NEWTRODIT_PROMPT_LOCATE_FILE[] = "File to locate: "; + +char NEWTRODIT_PROMPT_OVERWRITE[] = "File already exists. Overwrite? (y/n)"; +char NEWTRODIT_PROMPT_QUIT[] = "Are you sure you want to quit Newtrodit? (y/n)"; +char NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE[] = "File has been modified. Save changes? (y/n)"; +char NEWTRODIT_PROMPT_NEW_FILE[] = "Are you sure you want to create a new file? (y/n)"; +char NEWTRODIT_PROMPT_CLOSE_FILE[] = "Are you sure you want to close the file? (y/n)"; +char NEWTRODIT_PROMPT_RELOAD_FILE[] = "Are you sure you want to reload the file? (y/n)"; +char NEWTRODIT_PROMPT_RELOAD_SETTINGS[] = "Are you sure you want to reload the settings? (y/n)"; +char NEWTRODIT_PROMPT_FILE_CREATING[] = " doesn't exist. Do you want to create it? (y/n)"; // Must be added using join() later +char NEWTRODIT_PROMPT_REOPEN_FILE[] = "Do you want to reopen the file? (y/n)"; +char NEWTRODIT_PROMPT_MODIFIED_FILE_DISK[] = "File has been modified on disk. Do you want to reload it? (y/n)"; +char NEWTRODIT_PROMPT_SAVE_FILE[] = "File to save: "; +char NEWTRODIT_PROMPT_SAVE_FILE_AS[] = "Save file as: "; +char NEWTRODIT_PROMPT_CREATE_MACRO[] = "Macro command line: "; +char NEWTRODIT_PROMPT_SYNTAX_FILE[] = "Syntax highligthing file: "; +char NEWTRODIT_PROMPT_COMMAND_PALETTE[] = "Command palette: "; + + +char NEWTRODIT_PROMPT_FIRST_FILE_COMPARE[] = "First file to compare: "; +char NEWTRODIT_PROMPT_SECOND_FILE_COMPARE[] = "Second file to compare: "; + +// Informational dialogs +char NEWTRODIT_NO_ERROR[] = "No error."; +char NEWTRODIT_FILE_SAVED[] = "File saved successfully."; +char NEWTRODIT_FILE_RELOADED[] = "File reloaded successfully."; +char NEWTRODIT_NEW_FILE_CREATED[] = "New file created successfully."; +char NEWTRODIT_FILE_CLOSED[] = "File closed successfully."; +char NEWTRODIT_FILE_RENAMED[] = "File renamed successfully to: "; +char NEWTRODIT_FILE_WROTE_BUFFER[] = "Wrote the buffer content to: "; +char NEWTRODIT_SETTINGS_RELOADED[] = "Settings reloaded successfully."; +char NEWTRODIT_SYNTAX_HIGHLIGHTING_LOADED[] = "Syntax highlighting rules for %s language successfully loaded."; +char NEWTRODIT_SYNTAX_HIGHLIGHTING_FAILED[] = "Failed to load syntax highlighting rules."; +char NEWTRODIT_LOCATE_END_REACHED[] = "End of directory reached."; + + +char NEWTRODIT_FIND_STRING_NOT_FOUND[] = "String not found: "; +char NEWTRODIT_FIND_CASE_SENSITIVE[] = "Case sensitive search: "; +char NEWTRODIT_FIND_MATCH_WHOLE_WORD[] = "Match whole word: "; +char NEWTRODIT_FIND_NO_MORE_MATCHES[] = "No more matches."; + +char NEWTRODIT_DEV_TOOLS[] = "Developer tools: "; +char NEWTRODIT_TAB_CONVERSION[] = "Tab conversion: "; +char NEWTRODIT_NULL_CONVERSION[] = "Null character to spaces conversion: "; +char NEWTRODIT_LINE_COUNT[] = "Line count: "; +char NEWTRODIT_SYNTAX_HIGHLIGHTING[] = "Syntax highlighting: "; +char NEWTRODIT_MACRO_SET[] = "Macro set: "; +char NEWTRODIT_OLD_KEYBINDINGS[] = "Old keybindings: "; +char NEWTRODIT_AUTO_SYNTAX_LOAD[] = "Automatically load syntax highlighting rules for supported languages: "; +char NEWTRODIT_FILE_COMPARE_DIFF[] = "Difference found in byte number "; +char NEWTRODIT_FILE_COMPARE_NODIFF[] = "No difference found between files."; +char NEWTRODIT_LOADING_COMPARING_FILES[] = "Comparing files '%s' and '%s'. This may take a while."; +char NEWTRODIT_CURRENT_FILE_SWITCHED[] = "Editing now: "; +char NEWTRODIT_MOUSE[] = "Mouse: "; + +char NEWTRODIT_SHOWING_PREVIOUS_FILE[] = "Showing previous file"; +char NEWTRODIT_SHOWING_NEXT_FILE[] = "Showing next file"; +char NEWTRODIT_SWITCHING_FILE[] = "Switching to file"; +char NEWTRODIT_INFO_NO_FILES_TO_SWITCH[] = "No files to switch to."; +char NEWTRODIT_CLIPBOARD_COPIED[] = "Path copied to the system's clipboard (%s)"; + +// Other dialogs + +char NEWTRODIT_DIALOG_BOTTOM_HELP[] = "For help, press F1 | "; +char NEWTRODIT_DIALOG_MANUAL[] = "Ctrl-X Close help | Alt-F4 Quit Newtrodit"; +char NEWTRODIT_DIALOG_MANUAL_TITLE[] = " Newtrodit help"; +char NEWTRODIT_DIALOG_BOTTOM_LOCATE[] = " | Space Next page | Ctrl-B Go back | Ctrl-D Go to dir | Ctrl-X Quit"; +char NEWTRODIT_DIALOG_LOCATE_POS[] = "Showing %d-%d out of %d files (%llu total bytes)"; + + +char NEWTRODIT_DIALOG_ENABLED[] = "Enabled"; +char NEWTRODIT_DIALOG_DISABLED[] = "Disabled"; +char NEWTRODIT_FUNCTION_ABORTED[] = "Function aborted."; + +// Constants used internally + +char NEWTRODIT_MANUAL_MAGIC_NUMBER[] = "$NEWTRODIT_MANUAL"; + +char NEWTRODIT_SYNTAX_CAPITAL[] = "$CAPITAL"; +char NEWTRODIT_SYNTAX_CAPITAL_COLOR[] = "$CAPITAL_COLOR"; +char NEWTRODIT_SYNTAX_CAPITAL_MIN[] = "$CAPITAL_MIN"; +char NEWTRODIT_SYNTAX_COMMENT[] = "$COMMENT"; +char NEWTRODIT_SYNTAX_COMMENT_COLOR[] = "$COMMENT_COLOR"; +char NEWTRODIT_SYNTAX_DEFAULT_COLOR[] = "$DEFAULT_COLOR"; +char NEWTRODIT_SYNTAX_LANGUAGE[] = "$LANGUAGE"; +char NEWTRODIT_SYNTAX_MAGIC_NUMBER[] = "$NEWTRODIT_SYNTAX"; +char NEWTRODIT_SYNTAX_NUMBER_COLOR[] = "$NUMBER_COLOR"; +char NEWTRODIT_SYNTAX_QUOTE_COLOR[] = "$QUOTE_COLOR"; +char NEWTRODIT_SYNTAX_SEPARATORS[] = "$SEPARATORS"; +char NEWTRODIT_SYNTAX_SINGLE_QUOTES[] = "$SINGLE_QUOTES"; +char NEWTRODIT_SYNTAX_FINISH_QUOTES[] = "$FINISH_QUOTES"; + + +char NEWTRODIT_MACRO_CURRENT_FILE[] = "$FILE"; +char NEWTRODIT_MACRO_FULL_PATH[] = "$PATH"; +char NEWTRODIT_MACRO_CURRENT_DIR[] = "$DIR"; +char NEWTRODIT_MACRO_CURRENT_EXTENSION[] = "$EXT"; +char NEWTRODIT_MACRO_CURRENT_BASENAME[] = "$BASENAME"; +char NEWTRODIT_MACRO_CURRENT_DRIVE[] = "$DRIVE"; +char NEWTRODIT_SYNTAX_ENCLOSING[] = "$ENCLOSING"; \ No newline at end of file diff --git a/src/fileio.c b/src/fileio.c new file mode 100644 index 0000000..bc6f57a --- /dev/null +++ b/src/fileio.c @@ -0,0 +1,81 @@ + +int check_file(char *filename) +{ +#ifdef WIN32 + return (((_access(filename, 0)) != -1 && (_access(filename, 6)) != -1)) ? 0 : 1; +#else + return 1; +#endif +} + +int open_file(File *tstack) +{ + return 1; +} + +int load_file(File *tstack) +{ + return 1; +} + +int write_file(File *tstack, FILE *fp) +{ + for (size_t i = 0; i < tstack->linecount; i++) + { + fputs(tstack->line[i]->str, fp); + if (i < tstack->linecount - 1) + { + fputs(tstack->newline, fp); + } + } + return 1; +} + +int save_file(File *tstack, char *savefile, bool saveDialog) +{ + char *tmp_filename = calloc(MAX_PATH + 1, sizeof(utf8_int32_t)); + if (savefile) + utf8cpy(tmp_filename, savefile); + + if (tstack->file_flags & IS_UNTITLED || saveDialog) + { + + print_message(NEWTRODIT_PROMPT_SAVE_FILE); + fgets(tmp_filename, MAX_PATH, stdin); + + tmp_filename[utf8cspn(tmp_filename, "\r\n")] = L'\0'; + + if (tmp_filename[0] == '\0') + { + // FunctionAborted(tstack, tmp_filename); + return 0; + } + + remove_quotes(tmp_filename); + + if (!valid_file_name(tmp_filename)) + { + print_message("%s%s", NEWTRODIT_FS_FILE_INVALID_NAME, tmp_filename); + getch_n(); + return 0; + } + } + + FILE *savefp = fopen(tmp_filename, "wb"); + if (!savefp) + { + print_message(NEWTRODIT_FS_FILE_SAVE_ERR, tmp_filename); + getch_n(); + return 0; + } + for (size_t i = 1; i <= tstack->linecount; i++) + { + fputs(tstack->line[i]->str, savefp); + if (i < tstack->linecount) + fputs(tstack->newline, savefp); + } + fclose(savefp); + print_message(NEWTRODIT_FILE_SAVED); + ed.dirty = true; + return 0; +} \ No newline at end of file diff --git a/src/fileio.h b/src/fileio.h new file mode 100644 index 0000000..753f4b5 --- /dev/null +++ b/src/fileio.h @@ -0,0 +1 @@ +#include "fileio.c" \ No newline at end of file diff --git a/src/globals.h b/src/globals.h index 5b7f6ac..0b5758d 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1,818 +1,196 @@ -/* - Newtrodit: A console text editor - Copyright (C) 2021-2023 anic17 Software - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see - -*/ - -const char newtrodit_version[] = "0.6 rc-1"; -const char newtrodit_build_date[] = "27/6/2023"; -const char newtrodit_repository[] = "https://github.com/anic17/Newtrodit"; -const char newtrodit_lcl_repository[] = "https://github.com/anic17/Newtrodit-LCL"; -char manual_file[MAX_PATH] = "newtrodit.man"; -char settings_file[MAX_PATH] = "newtrodit.config"; -char syntax_dir[MAX_PATH] = "syntax"; -char syntax_ext[MAX_PATH] = ".nwtrd-syntax"; -const char newtrodit_commit[] = ""; // Example commit - -const char* autocomplete_double[] = {"{}", "[]", "()", "\"\"", "''"}; - -#define DEFAULT_NL "\n" - -const int MANUAL_BUFFER_X = 300; -const int MANUAL_BUFFER_Y = 600; - -int TAB_WIDE = TAB_WIDE_; -int CURSIZE = CURSIZE_; -int LINECOUNT_WIDE = 4; -int lineCount = true; // Is line count enabled? - -// Boolean settings -int convertTabtoSpaces = true; -int convertNull = true; -int trimLongLines = false; -int cursorSizeInsert = true; -int wrapLine = false; -int autoIndent = true; -int fullPathTitle = true; -int useOldKeybindings = false; // Bool to use old keybinds (^X instead of ^Q, ^K instead of ^X) -int longPositionDisplay = false; -int fullCursorInfoDisplay = true; -int generalUtf8Preference = false; -int partialMouseSupport = true; // Partial mouse support, only changes cursor position when mouse is clicked -int showMillisecondsInTime = false; // Show milliseconds in time insert function (F6) -int useLogFile = true; -int createNewLogFile = false; // Create new log files when logging is enabled -int openFileHandle = true; // Open a file handle -int RGB24bit = false; // Use 24-bit RGB instead of 4-bit colors -int findInsensitive = false; // Find insensitive string -int matchWholeWord = false; // Match whole word when finding a string -int devMode = false; // Bool to enable or disable the dev mode -int autoComplete = true; // Keyword autocompleting (if syntax highlighting is there) - -int bpsPairHighlight = false; // Use BPS pair highlighting (bugged) - -int bps_pair_colors[] = {0x5, 0xb, 0xd, 0x6, 0xc, 0xe, 0x8, 0xf, 0x9}; // Brackets, parenthesis and square brackets colors -char bps_chars_open[10][3] = {"(", "{", "["}; // Allocate 10 chars for each char array to support new syntax -char bps_chars_close[10][3] = {")", "}", "]"}; - -// Interal global variables -int clearAllBuffer = true; -int allowAutomaticResizing = true; - -int c = 0; // Different error/debug codes - -/* - TODO: Add multiline comment support - static int multiLineComment = false; -*/ - - -int syntaxHighlighting = true; -int syntaxAfterDisplay = false; // Display syntax after display -int allocateNewBuffer = true; - -int file_index = 0; -int open_files = 1; - -int wrapSize = 100; // Default wrap size -int scrollRate = 3; // Default scroll rate (scroll 3 lines per mouse wheel). Needs to have partialMouseSupport enabled - -#define BG_DEFAULT 0x07 // Background black, foreground (font) white -#define FG_DEFAULT 0x70 // Background white, foreground (font) black -#define FIND_HIGHLIGHT_COLOR 0xE0 // Background yellow, foreground black - -int bg_color = BG_DEFAULT; // Background color (menu) -int fg_color = FG_DEFAULT; // Foreground color (text) - -char **old_open_files; -int oldFilesIndex = 0; - -char *run_macro, *last_known_exception; - -#define DEFAULT_COMPILER "gcc" -#define DEFAULT_COMPILER_FLAGS "-Wall -O2 -pedantic -std=c99" // Assuming it's GCC and it's C99 compliant - -// Syntax highlighting - -#define DEFAULT_SYNTAX_LANG "C" -#define DEFAULT_SEPARATORS "?!:,()+-/*=~[];{}<> \t&|^." -#define DEFAULT_COMMENTS "//" - -#define DEFAULT_SYNTAX_COLOR 0x7 // White -#define DEFAULT_COMMENT_COLOR 0x8 // Dark grey -#define DEFAULT_QUOTE_COLOR 0xe // Yellow - -#define DEFAULT_NUM_COLOR 0x2 // Dark green -#define DEFAULT_CAPITAL_COLOR 0xc // Red -#define DEFAULT_CAPITAL_MIN_LEN 3 // Highlight capital words that are 3 or more characters long -#define DEFAULT_LINECOUNT_COLOR 0x80 -#define DEFAULT_LINECOUNT_HIGHLIGHT_COLOR 0xf0 - -#define SELECTION_COLOR 0x8 - -#define SEPARATORS DEFAULT_SEPARATORS - -char syntax_separators[512] = SEPARATORS; -char syntax_filename[MAX_PATH] = ""; - -int default_color = DEFAULT_SYNTAX_COLOR; -int comment_color = DEFAULT_COMMENT_COLOR; -int quote_color = DEFAULT_QUOTE_COLOR; -int num_color = DEFAULT_NUM_COLOR; -int capital_color = DEFAULT_CAPITAL_COLOR; -int capital_min_len = DEFAULT_CAPITAL_MIN_LEN; -int linecount_color = DEFAULT_LINECOUNT_COLOR; -int linecount_highlight_color = DEFAULT_LINECOUNT_HIGHLIGHT_COLOR; -int capitalMinEnabled = true; -int singleQuotes = true; -int finishQuotes = true; -int linecountHighlightLine = true; -int autoLoadSyntaxRules = true; - -typedef struct position -{ - int x; - int y; -} position_t; - -typedef struct select_t -{ - position_t start; - position_t end; - bool is_selected; -} select_t; - -typedef struct keywords -{ - char *keyword; - int color; -} keywords_t; - -typedef keywords_t comment_t; -typedef keywords_t enclosing_t; - -keywords_t keywords[] = { - {"break", 5}, - {"continue", 5}, - {"return", 5}, - - {"auto", 9}, - {"const", 9}, - {"volatile", 9}, - {"extern", 9}, - {"static", 9}, - - {"inline", 9}, - {"restrict", 9}, - - {"char", 9}, - {"int", 9}, - {"short", 9}, - {"float", 9}, - {"double", 9}, - {"long", 9}, - {"bool", 9}, - {"void", 9}, - - {"double_t", 0xa}, - {"div_t", 0xa}, - {"float_t", 0xa}, - {"fpos_t", 0xa}, - {"max_align_t", 0xa}, - {"mbstate_t", 0xa}, - {"nullptr_t", 0xa}, - {"ptrdiff_t", 0xa}, - {"sig_atomic_t", 0xa}, - {"size_t", 0xa}, - {"time_t", 0xa}, - {"wchar_t", 0xa}, - {"wint_t", 0xa}, - {"FILE", 0xa}, - - {"uint8_t", 0xa}, - {"uint16_t", 0xa}, - {"uint32_t", 0xa}, - {"uint64_t", 0xa}, - {"uint128_t", 0xa}, - - {"int8_t", 0xa}, - {"int16_t", 0xa}, - {"int32_t", 0xa}, - {"int64_t", 0xa}, - {"int128_t", 0xa}, - - {"struct", 6}, - {"enum", 6}, - {"union", 6}, - {"typedef", 6}, - {"unsigned", 9}, - {"signed", 9}, - {"sizeof", 9}, - {"register", 9}, - - {"do", 6}, - {"if", 6}, - {"else", 6}, - {"while", 6}, - {"switch", 6}, - {"for", 6}, - {"case", 6}, - {"default", 6}, - {"goto", 6}, - - {"#include", 0xb}, - {"#pragma", 0xb}, - {"#define", 0xb}, - {"#ifdef", 0xb}, - {"#undef", 0xb}, - - {"#ifndef", 0xb}, - {"#endif", 0xb}, - {"#if", 0xb}, - {"#else", 0xb}, - {"#elif", 0xb}, - {"#error", 0xb}, - {"#warning", 0xb}, - {"#line", 0xb}, - {"defined", 0xb}, - {"not", 0xb}, - - {"main", 0x6}, - {"WinMain", 0x6}, - - // Macro constants - {"NULL", 0x9}, - {"EOF", 0x9}, - {"WEOF", 0x9}, - {"FILENAME_MAX", 0x9}, - {"WEOF", 0x9}, - {"true", 0x9}, - {"false", 0x9}, - {"errno", 0x9}, - {"stdin", 0x9}, - {"stdout", 0x9}, - {"stderr", 0x9}, - {"__LINE__", 0x9}, - {"__TIME__", 0x9}, - {"__DATE__", 0x9}, - {"__FILE__", 0x9}, - - {"__STDC__", 0x9}, - {"__STDC_VERSION__", 0x9}, - {"__STDC_HOSTED__", 0x9}, - {"__OBJC__", 0x9}, - {"__ASSEMBLER__", 0x9}, - - {"__cplusplus", 0x9}, - - {"WINAPI", 0x6}, - {"APIENTRY", 0x6}, - - {"_stdcall", 0x6}, - {"_CRTIMP", 0x6}, - {"__CRTIMP_INLINE", 0x6}, - - {"__cdecl", 0x6}, - {"__asm__", 0x6}, - {"__volatile__", 0x6}, - {"__attribute__", 0x6}, - {"__AW_SUFFIXED__", 0x6}, - {"__AW_EXTENDED__", 0x6}, - {"__NAME__", 0x6}, - -}; - -comment_t comments[] = { - {"//", 0x8}, - {"/*", 0x8}, - {"*/", 0x8}, -}; - -enclosing_t enclosing[] = { - {"\"", 0xe}, - {"\'", 0xe}, -}; - -typedef struct theme -{ - int bg_color; - int fg_color; - int syntax_color; - int comment_color; - int quote_color; - int num_color; - int capital_color; - int capital_min_len; - int single_quotes; - int capital_min_enabled; - - int linecount_color; -} theme_t; - -theme_t themedark = { - .bg_color = 0, - .fg_color = 0x7, - .syntax_color = 0x7, - .comment_color = 0x8, - .quote_color = 0xe, - .num_color = 0x2, - .capital_color = 0x1, - .capital_min_len = 3, - .single_quotes = false, - .capital_min_enabled = true, - .linecount_color = 0x07, -}; - -theme_t themelight = { - .bg_color = 0x7, - .fg_color = 0x0, - .syntax_color = 0x7, - .comment_color = 0x8, - .quote_color = 0x6, - .num_color = 0x2, - .capital_color = 0x1, - .capital_min_len = 3, - .single_quotes = false, - .capital_min_enabled = true, - .linecount_color = 0x07, -}; - -#define BIT_ESC224 0x80000000 -#define BIT_ESC0 0x40000000 - -/* These four functions are only used on Newtrodit-LCL */ -#define ESC_BITMASK 0x80000000 -#define CTRLCHAR_BITMASK 0x40000000 -#define FKEYS_BITMASK 0x20000000 -#define TILDE_BITMASK 0x10000000 - -enum CONTROL_CODES - -#ifdef _WIN32 -{ - BS = 8, - TAB = 9, - CTRLENTER = 10, - ENTER = 13, - CTRLBS = 127, - ESC = 27, - - UP = 72, - LEFT = 75, - RIGHT = 77, - DOWN = 80, - - ALTUP = 152, - ALTLEFT = 155, - ALTRIGHT = 157, - ALTDOWN = 160, - - HOME = 71, - END = 79, - - CTRLHOME = 119, - CTRLEND = 117, - - INS = 82, - DEL = 83, - - CTRLA = 1, - CTRLB = 2, - CTRLC = 3, - CTRLD = 4, - CTRLE = 5, - CTRLF = 6, - CTRLG = 7, - CTRLH = 8, - CTRLI = 9, - CTRLJ = 10, - CTRLK = 11, - CTRLL = 12, - CTRLM = 13, - CTRLN = 14, - CTRLO = 15, - CTRLP = 16, - CTRLQ = 17, - CTRLR = 18, - CTRLS = 19, - CTRLT = 20, - CTRLU = 21, - CTRLV = 22, - CTRLW = 23, - CTRLX = 24, - CTRLY = 25, - CTRLZ = 26, - - /* Different naming only happens in F11 and F12 */ - F1 = 59, - F2 = 60, - F3 = 61, - F4 = 62, - F5 = 63, - F6 = 64, - F7 = 65, - F8 = 66, - F9 = 67, - F10 = 68, - - F11 = 133, - F12 = 134, - - PGUP = 73, - PGDW = 81, - - CTRLF1 = 94, - CTRLF2 = 95, - CTRLF3 = 96, - CTRLF4 = 97, - CTRLF5 = 98, - CTRLF6 = 99, - CTRLF7 = 100, - CTRLF8 = 101, - CTRLF9 = 102, - CTRLF10 = 103, - CTRLF11 = 137, - CTRLF12 = 138, - - ALTF1 = 104, - ALTF2 = 105, - ALTF3 = 106, - ALTF4 = 107, - ALTF5 = 108, - ALTF6 = 109, - ALTF7 = 110, - ALTF8 = 111, - ALTF9 = 112, - ALTF10 = 113, - ALTF11 = 139, - ALTF12 = 140, - - ALTINS = 162, - ALTHOME = 151, - ALTPGUP = 153, - ALTDEL = 163, - ALTEND = 159, - ALTPGDW = 161, - - SHIFTF1 = 84, - SHIFTF2 = 85, - SHIFTF3 = 86, - SHIFTF4 = 87, - SHIFTF5 = 88, - SHIFTF6 = 89, - SHIFTF7 = 90, - SHIFTF8 = 91, - SHIFTF9 = 92, - SHIFTF10 = 93, - SHIFTF11 = 135, - SHIFTF12 = 136, - - CTRLALTA = 30, - CTRLALTB = 48, - CTRLALTC = 46, - CTRLALTD = 32, - CTRLALTE = 18, // This one actually reports as 63 because on my locale it's the euro symbol. - CTRLALTF = 33, - CTRLALTG = 34, - CTRLALTH = 35, - CTRLALTI = 23, - CTRLALTJ = 36, - CTRLALTK = 37, - CTRLALTL = 38, - CTRLALTM = 50, - CTRLALTN = 49, - CTRLALTO = 24, - CTRLALTP = 25, - CTRLALTQ = 16, - CTRLALTR = 19, - CTRLALTS = 31, - CTRLALTT = 20, - CTRLALTU = 22, - CTRLALTV = 47, - CTRLALTW = 17, - CTRLALTX = 45, - CTRLALTY = 21, - CTRLALTZ = 44, -}; -#else -{ - BS = 127, - TAB = 9, - CTRLENTER = 10, - ENTER = 13, - CTRLBS = 8, - - ESC = 27, - - /* - Used an algorithm in order to encode and fit up to 7 characters into a single int32_t - Assuming characters are all lower than 0x80h (127d) - - The algorithm is works by shifting up to 4 characters 7 bits to the left, using 28 of 32 available bits. - - The last 3 bytes are guaranteed to be boolean data so each character fits in a single bit. - The big endian bit is used to ensure that it is a control keybind starting with ESC. - - - This way we can place 7 characters into 4 bytes, or an int32_t. - - */ - - LEFT = 0xc0002200, - UP = 0xc0002080, - DOWN = 0xc0002100, - RIGHT = 0xc0002180, - - INS = 0xc01f9900, - DEL = 0xc01f9980, - - HOME = 0xc0002400, - END = 0xc0002300, - - PGUP = 0xc01f9a80, - PGDW = 0xc01f9b00, - - SHIFTTAB = 0xc0002d00, - - CTRLA = 1, - CTRLB = 2, - CTRLC = 3, - CTRLD = 4, - CTRLE = 5, - CTRLF = 6, - CTRLG = 7, - CTRLH = 8, - CTRLI = 9, - CTRLJ = 10, - CTRLK = 11, - CTRLL = 12, - CTRLM = 13, - CTRLN = 14, - CTRLO = 15, - CTRLP = 16, - CTRLQ = 17, - CTRLR = 18, - CTRLS = 19, - CTRLT = 20, - CTRLU = 21, - CTRLV = 22, - CTRLW = 23, - CTRLX = 24, - CTRLY = 25, - CTRLZ = 26, - - /* Different naming is used between F1 and F4 (termios-related things) */ - F1 = 0xa0002800, - F2 = 0xa0002880, - F3 = 0xa0002900, - F4 = 0xa0002980, - - F5 = 0xcfcd5880, - F6 = 0xcfcdd880, - F7 = 0xcfce1880, - F8 = 0xcfce5880, - F9 = 0xcfcc1900, - F10 = 0xcfcc5900, - F11 = 0xcfccd900, - F12 = 0xcfcd1900, - - SHIFTF1 = 0xc64ed880, - SHIFTF2 = 0xd64ed880, - SHIFTF3 = 0xe64ed880, - SHIFTF4 = 0xf64ed880, - - SHIFTF5 = 0xf76d5c70, - SHIFTF6 = 0xf76ddc70, - SHIFTF7 = 0xf76e1c70, - SHIFTF8 = 0xf76e5c70, - SHIFTF9 = 0xf76c1cf0, - SHIFTF10 = 0xf76c5cf0, - SHIFTF11 = 0xf76cdcf0, - SHIFTF12 = 0xf76d1cf0, - - CTRLF1 = 0xc6aed880, - CTRLF2 = 0xd6aed880, - CTRLF3 = 0xe6aed880, - CTRLF4 = 0xf6aed880, - CTRLF5 = 0xd76d5c70, - CTRLF6 = 0xd76ddc70, - CTRLF7 = 0xd76e1c70, - CTRLF8 = 0xd76e5c70, - CTRLF9 = 0xd76c1cf0, - CTRLF10 = 0xd76c5cf0, - CTRLF11 = 0xd76cdcf0, - CTRLF12 = 0xd76d1cf0, - - CTRLINS = 0xe6aed900, - CTRLDEL = 0xe6aed980, - CTRLHOME = 0xc6aed880, - CTRLEND = 0xe6aed880, - CTRLPGUP = 0xe6aeda80, - CTRLPGDW = 0xe6aedb00, - - CTRLLEFT = 0xc6aed880, - CTRLUP = 0xd6aed880, - CTRLDOWN = 0xe6aed880, - CTRLRIGHT = 0xf6aed880, - - SHIFTLEFT = 0xc64ed880, - SHIFTUP = 0xd64ed880, - SHIFTDOWN = 0xe64ed880, - SHIFTRIGHT = 0xf64ed880, - - CTRLSHIFTLEFT = 0xc6ced880, - CTRLSHIFTUP = 0xd6ced880, - CTRLSHIFTDOWN = 0xe6ced880, - CTRLSHIFTRIGHT = 0xf6ced880, - - ALTF1 = 0xc66ed880, - ALTF2 = 0xd66ed880, - ALTF3 = 0xe66ed880, - ALTF4 = 0xf66ed880, - ALTF5 = 0xf76d5c70, - ALTF6 = 0xf76ddc70, - ALTF7 = 0xf76e1c70, - ALTF8 = 0xf76e5c70, - ALTF9 = 0xf76c1cf0, - ALTF10 = 0xf76c5cf0, - ALTF11 = 0xf76cdcf0, - ALTF12 = 0xf76d1cf0, - - CTRLALTF1 = 0xc6eed880, - CTRLALTF2 = 0xd6eed880, - CTRLALTF3 = 0xe6eed880, - CTRLALTF4 = 0xf6eed880, - CTRLALTF5 = 0xf76d5c70, - CTRLALTF6 = 0xf76ddc70, - CTRLALTF7 = 0xf76e1c70, - CTRLALTF8 = 0xf76e5c70, - CTRLALTF9 = 0xf76c1cf0, - CTRLALTF10 = 0xf76c5cf0, - CTRLALTF11 = 0xf76cdcf0, - CTRLALTF12 = 0xf76d1cf0, - - CTRLSHIFTF1 = 0xc6ced880, - CTRLSHIFTF2 = 0xd6ced880, - CTRLSHIFTF3 = 0xe6ced880, - CTRLSHIFTF4 = 0xf6ced880, - CTRLSHIFTF5 = 0xf76d5c70, - CTRLSHIFTF6 = 0xf76ddc70, - CTRLSHIFTF7 = 0xf76e1c70, - CTRLSHIFTF8 = 0xf76e5c70, - CTRLSHIFTF9 = 0xf76c1cf0, - CTRLSHIFTF10 = 0xf76c5cf0, - CTRLSHIFTF11 = 0xf76cdcf0, - CTRLSHIFTF12 = 0xf76d1cf0, - - ALTINS = 0xe66ed900, - ALTHOME = 0xc66ed880, - ALTPGUP = 0xe66eda80, - ALTDEL = 0xe66ed980, - ALTEND = 0xe66ed880, - ALTPGDW = 0xe66edb00, - - ALTA = 0xa0184d80, - ALTB = 0xa0188d80, - ALTC = 0xa018cd80, - ALTD = 0xa0190d80, - ALTE = 0xa0194d80, - ALTF = 0xa0198d80, - ALTG = 0xa019cd80, - ALTH = 0xa01a0d80, - ALTI = 0xa01a4d80, - ALTJ = 0xa01a8d80, - ALTK = 0xa01acd80, - ALTL = 0xa01b0d80, - ALTM = 0xa01b4d80, - ALTN = 0xa01b8d80, - ALTO = 0xa01bcd80, - ALTP = 0xa01c0d80, - ALTQ = 0xa01c4d80, - ALTR = 0xa01c8d80, - ALTS = 0xa01ccd80, - ALTT = 0xa01d0d80, - ALTU = 0xa01d4d80, - ALTV = 0xa01d8d80, - ALTW = 0xa01dcd80, - ALTX = 0xa01e0d80, - ALTY = 0xa01e4d80, - ALTZ = 0xa01e8d80, - - CTRLALTA = 0xa0004d80, - CTRLALTB = 0xa0008d80, - CTRLALTC = 0xa000cd80, - CTRLALTD = 0xa0010d80, - CTRLALTE = 0xa0014d80, - CTRLALTF = 0xa0018d80, - CTRLALTG = 0xa001cd80, - CTRLALTH = 0xa0020d80, - CTRLALTI = 0xa0024d80, - CTRLALTJ = 0xa0028d80, - CTRLALTK = 0xa002cd80, - CTRLALTL = 0xa0030d80, - CTRLALTM = 0xa0034d80, - CTRLALTN = 0xa0038d80, - CTRLALTO = 0xa003cd80, - CTRLALTP = 0xa0040d80, - CTRLALTQ = 0xa0044d80, - CTRLALTR = 0xa0048d80, - CTRLALTT = 0xa004cd80, - CTRLALTS = 0xa0050d80, - CTRLALTU = 0xa0054d80, - CTRLALTV = 0xa0058d80, - CTRLALTW = 0xa005cd80, - CTRLALTX = 0xa0060d80, - CTRLALTY = 0xa0064d80, - CTRLALTZ = 0xa0068d80, -}; -#endif - -typedef struct file_t -{ - char *extensions; // Used separator is '|' because for some reason I couldn't get a 2D array working - char *display_name; - size_t extcount; -} file_t; - -char *DEFAULT_LANGUAGE = "File"; - -static file_t FileLang[] = { - {"adb|ads", "Ada", 2}, // Ada - {"awk", "AWK script", 1}, // AWK script - {"bas", "BASIC", 1}, // BASIC - {"bat|cmd|btm", "Batch", 3}, // Batch file - {"bf", "Brainfuck", 1}, // Brainfuck - {"bin|exe|dll|sys|ocx|elf|out", "Binary", 7}, // Binary file - {"c|h|inl", "C", 3}, // C - {"clj|cljs|cljc|edn", "Clojure", 4}, // Clojure - {"config|conf|ini|cfg|cnf|cf", "Configuration", 6}, // Configuration files - {"cpp|hpp|cxx|hxx|c++|h++|cc|hh", "C++", 8}, // C++ file - {"cs|csx", "C#", 2}, // C# - {"css", "CSS styles", 1}, // CSS file - {"csv", "CSV", 1}, // CSV file - {"dart", "Dart", 1}, // Dart - {"docx|docm|pptx|pptm|xlsx|xlsm", "Microsoft Office XML", 6}, // Microsoft Office XML - {"e", "Eiffel", 1}, // Eiffel - {"el|elc|eln", "Emacs Lisp", 3}, // Emacs lisp - {"elm", "Elm", 1}, // ELM - {"erl|hrl", "Erlang", 2}, // Erlang - {"ex|exs", "Elixir", 2}, // Elixir - {"fs|fsi|fsx|fsscript", "F#", 4}, // F# - {"git", "Git", 1}, // Git (not sure if this is an actual file extension) - {"go", "Golang", 1}, // Golang - {"hs|lhs", "Haskell", 1}, // Haskell - {"html|htm", "HTML", 2}, // HTML - {"java|class|jar|jmod", "Java", 4}, // Java - {"jl", "Julia", 1}, // Julia - {"js|cjs|mjs", "JavaScript", 3}, // JavaScript - {"json", "JSON", 1}, // JSON file - {"lua", "Lua", 1}, // Lua - {"m|p|mex|mat|fig|mlx|mlapp|mltbx|mlappinstall|mlpkginstall", "MATLAB", 10}, // MATLAB - {"md|markdown", "Markdown", 2}, // Markdown - {"ml|mli", "OCaml", 2}, // OCaml - {"nb|wl", "Wolfram Language", 2}, // Wolfram Language (Mathematica) - {"newtrodit|nwtrd", "Newtrodit script", 2}, // Newtrodit script - {"nwtrd-syntax", "Newtrodit syntax rules", 1}, // Newtrodit syntax highlighting - {"odt|fodt|ods|fods|odp|fodp|odg|fodg|odf", "OpenDocument", 9}, // OpenDocument - {"pas|pp|inc", "Pascal", 3}, // Pascal - {"pdf", "Portable Document Format", 1}, // Portable Document Format - {"php|phar|phtml|pht|phps", "PHP", 5}, // PHP - {"pl|plx|pm|xs|t|pod|cgi", "Perl", 7}, // Perl - {"ps1|psd1|psm1|ps1xml|pssc|psrc|cdxml", "PowerShell", 7}, // PowerShell script - {"py|pyi|pyc|pyd|pyo|pyw|pyz", "Python", 7}, // Python - {"rb", "Ruby", 1}, // Ruby - {"rs|rlib", "Rust", 2}, // Rust - {"rtf", "Rich Text Format", 1}, // Rich Text Format - {"s|asm|arm", "Assembly", 3}, // Assembly - {"scala|sc", "Scala", 2}, // Scala - {"scm|ss", "Scheme", 2}, // Scheme - {"scss|sass", "SASS styles", 2}, // SASS styles - {"sd7|s7i", "Seed7", 2}, // Seed7 - {"sh|bashrc", "Shell script", 1}, // Shell script - {"sml", "Standard ML", 1}, // Standard ML - {"svg|svgz", "SVG", 2}, // SVG - {"tcl|tbc", "Tcl", 2}, // Tcl - {"tex", "LaTeX", 1}, // LaTeX - {"ts|tsx", "TypeScript", 2}, // TypeScript - {"txt|text|log", "Text", 3}, // Text file - {"vbs|vbe|wsf|wsc|hta|asp", "VBScript", 6}, // VBScript - {"v", "V", 1}, // V language - {"vim|vimrc", "Vim script", 2}, // Vim script - {"vue", "Vue", 1}, // Vue - {"xhtml|xhtm|xht", "XHTML", 2}, // XHTML - {"xml", "XML", 1}, // XML - {"yml|yaml", "YAML", 2}, // YAML + + + +char manual_file[MAX_PATH] = "newtrodit.man"; +char settings_file[MAX_PATH] = "newtrodit.config"; +char syntax_dir[MAX_PATH] = "syntax"; +char syntax_ext[MAX_PATH] = ".nwtrd-syntax"; +const char newtrodit_commit[] = ""; // Example commit + +//const char* autocomplete_double[] = {"{}", "[]", "()", "\"\"", "''"}; + +#define DEFAULT_NL "\n" + + +char default_filename[MAX_PATH] = "Untitled"; +char default_language[MAX_PATH] = "File"; +char default_newline[] = "\n"; + + +const int MANUAL_BUFFER_X = 300; +const int MANUAL_BUFFER_Y = 600; + +int tab_width = 4; +int line_number_wide = 4; + +// Boolean settings +int convertTabtoSpaces = true; +int convertNull = true; +int trimLongLines = false; +int cursorSizeInsert = true; +int wrapLine = false; +int autoIndent = true; +int fullPathTitle = true; +int useOldKeybindings = false; // Bool to use old keybinds (^X instead of ^Q, ^K instead of ^X) +int longPositionDisplay = false; +int fullCursorInfoDisplay = true; +int partialMouseSupport = true; // Partial mouse support, only changes cursor position when mouse is clicked +int showMillisecondsInTime = false; // Show milliseconds in time insert function (F6) +int useLogFile = true; +int createNewLogFile = false; // Create new log files when logging is enabled +int openFileHandle = true; // Open a file handle +int RGB24bit = false; // Use 24-bit RGB instead of 4-bit colors +int findInsensitive = false; // Find insensitive string +int matchWholeWord = false; // Match whole word when finding a string +int devMode = false; // Bool to enable or disable the dev mode +int autoComplete = true; // Keyword autocompleting (if syntax highlighting is there) + +int bpsPairHighlight = false; // Use BPS pair highlighting (bugged) + +int bps_pair_colors[] = {0x5, 0xb, 0xd, 0x6, 0xc, 0xe, 0x8, 0xf, 0x9}; // Brackets, parenthesis and square brackets colors +char bps_chars_open[10][3] = {"(", "{", "["}; // Allocate 10 chars for each char array to support new syntax +char bps_chars_close[10][3] = {")", "}", "]"}; + +// Interal global variables +int clearAllBuffer = true; +int allowAutomaticResizing = true; + +int c = 0; // Different error/debug codes + +/* + TODO: Add multiline comment support + static int multiLineComment = false; +*/ + +int syntaxHighlighting = true; +int syntaxAfterDisplay = false; // Display syntax after display +int allocateNewBuffer = true; +int topBarMenu = false; + +int file_index = 0; +int open_files = 1; + +int wrapSize = 100; // Default wrap size +int scrollRate = 3; // Default scroll rate (scroll 3 lines per mouse wheel). Needs to have partialMouseSupport enabled + + +char **old_open_files; +int oldFilesIndex = 0; + +char *run_macro, *last_known_exception; + +#define DEFAULT_COMPILER "gcc" +#define DEFAULT_COMPILER_FLAGS "-Wall -O2 -pedantic -std=c99" // Assuming it's GCC and it's C99 compliant + +// Syntax highlighting + +#define DEFAULT_SYNTAX_LANG "C" +#define DEFAULT_SEPARATORS "?!:,()+-/*=~[];{}<> \t&|^." +#define DEFAULT_COMMENTS "//" + +#define DEFAULT_SYNTAX_COLOR 0x7 // White +#define DEFAULT_COMMENT_COLOR 0x8 // Dark grey +#define DEFAULT_QUOTE_COLOR 0xe // Yellow + +#define DEFAULT_NUM_COLOR 0x2 // Dark green +#define DEFAULT_CAPITAL_COLOR 0xc // Red +#define DEFAULT_CAPITAL_MIN_LEN 3 // Highlight capital words that are 3 or more characters long +#define DEFAULT_LINECOUNT_COLOR 0x80 +#define DEFAULT_LINECOUNT_HIGHLIGHT_COLOR 0xf0 + +#define SELECTION_COLOR 0x8 + +#define SEPARATORS DEFAULT_SEPARATORS + +char syntax_separators[512] = SEPARATORS; +char syntax_filename[MAX_PATH] = ""; + +int default_color = DEFAULT_SYNTAX_COLOR; +int comment_color = DEFAULT_COMMENT_COLOR; +int quote_color = DEFAULT_QUOTE_COLOR; +int num_color = DEFAULT_NUM_COLOR; +int capital_color = DEFAULT_CAPITAL_COLOR; +int capital_min_len = DEFAULT_CAPITAL_MIN_LEN; +int linecount_color = DEFAULT_LINECOUNT_COLOR; +int linecount_highlight_color = DEFAULT_LINECOUNT_HIGHLIGHT_COLOR; +int capitalMinEnabled = true; +int singleQuotes = true; +int finishQuotes = true; +int linecountHighlightLine = true; +int autoLoadSyntaxRules = true; + + +typedef struct File_lang { + char *ext; + char *language; + size_t extcount; +} File_lang; + + +static File_lang FileLang[] = { + {"adb|ads", "Ada", 2}, // Ada + {"awk", "AWK script", 1}, // AWK script + {"bas", "BASIC", 1}, // BASIC + {"bat|cmd|btm", "Batch", 3}, // Batch file + {"bf", "Brainfuck", 1}, // Brainfuck + {"bin|exe|dll|sys|ocx|elf|out", "Binary", 7}, // Binary file + {"c|h|in", "C", 3}, // C + {"clj|cljs|cljc|edn", "Clojure", 4}, // Clojure + {"config|conf|ini|cfg|cnf|cf", "Configuration", 6}, // Configuration files + {"cpp|hpp|cxx|hxx|c++|h++|cc|hh", "C++", 8}, // C++ file + {"cs|csx", "C#", 2}, // C# + {"css", "CSS styles", 1}, // CSS file + {"csv", "CSV", 1}, // CSV file + {"dart", "Dart", 1}, // Dart + {"docx|docm|pptx|pptm|xlsx|xlsm", "Microsoft Office XM", 6}, // Microsoft Office XML + {"e", "Eiffe", 1}, // Eiffel + {"el|elc|eln", "Emacs Lisp", 3}, // Emacs lisp + {"elm", "Elm", 1}, // ELM + {"erl|hr", "Erlang", 2}, // Erlang + {"ex|exs", "Elixir", 2}, // Elixir + {"fs|fsi|fsx|fsscript", "F#", 4}, // F# + {"git", "Git", 1}, // Git (not sure if this is an actual file extension) + {"go", "Golang", 1}, // Golang + {"hs|lhs", "Haskel", 1}, // Haskell + {"html|htm", "HTM", 2}, // HTML + {"java|class|jar|jmod", "Java", 4}, // Java + {"j", "Julia", 1}, // Julia + {"js|cjs|mjs", "JavaScript", 3}, // JavaScript + {"json", "JSON", 1}, // JSON file + {"lua", "Lua", 1}, // Lua + {"m|p|mex|mat|fig|mlx|mlapp|mltbx|mlappinstall|mlpkginstal", "MATLAB", 10}, // MATLAB + {"md|markdown", "Markdown", 2}, // Markdown + {"ml|mli", "OCam", 2}, // OCaml + {"nb|w", "Wolfram Language", 2}, // Wolfram Language (Mathematica) + {"newtrodit|nwtrd", "Newtrodit script", 2}, // Newtrodit script + {"nwtrd-syntax", "Newtrodit syntax rules", 1}, // Newtrodit syntax highlighting + {"odt|fodt|ods|fods|odp|fodp|odg|fodg|odf", "OpenDocument", 9}, // OpenDocument + {"pas|pp|inc", "Pasca", 3}, // Pascal + {"pdf", "Portable Document Format", 1}, // Portable Document Format + {"php|phar|phtml|pht|phps", "PHP", 5}, // PHP + {"pl|plx|pm|xs|t|pod|cgi", "Per", 7}, // Perl + {"ps1|psd1|psm1|ps1xml|pssc|psrc|cdxm", "PowerShel", 7}, // PowerShell script + {"py|pyi|pyc|pyd|pyo|pyw|pyz", "Python", 7}, // Python + {"rb", "Ruby", 1}, // Ruby + {"rs|rlib", "Rust", 2}, // Rust + {"rtf", "Rich Text Format", 1}, // Rich Text Format + {"s|asm|arm", "Assembly", 3}, // Assembly + {"scala|sc", "Scala", 2}, // Scala + {"scm|ss", "Scheme", 2}, // Scheme + {"scss|sass", "SASS styles", 2}, // SASS styles + {"sd7|s7i", "Seed7", 2}, // Seed7 + {"sh|bashrc", "Shell script", 1}, // Shell script + {"sm", "Standard M", 1}, // Standard ML + {"svg|svgz", "SVG", 2}, // SVG + {"tcl|tbc", "Tc", 2}, // Tcl + {"tex", "LaTeX", 1}, // LaTeX + {"ts|tsx", "TypeScript", 2}, // TypeScript + {"txt|text|log", "Text", 3}, // Text file + {"vbs|vbe|wsf|wsc|hta|asp", "VBScript", 6}, // VBScript + {"v", "V", 1}, // V language + {"vim|vimrc", "Vim script", 2}, // Vim script + {"vue", "Vue", 1}, // Vue + {"xhtml|xhtm|xht", "XHTM", 2}, // XHTML + {"xm", "XM", 1}, // XML + {"yml|yam", "YAM", 2}, // YAML }; \ No newline at end of file diff --git a/src/gui.h b/src/gui.h new file mode 100644 index 0000000..e69de29 diff --git a/src/input.h b/src/input.h new file mode 100644 index 0000000..a61f62a --- /dev/null +++ b/src/input.h @@ -0,0 +1,408 @@ +#ifndef _O_U16TEXT +#define _O_U16TEXT 0x20000 +#endif + +#define BIT_ESC224 0x80000000 +#define BIT_ESC0 0x40000000 + +#define ESC_BITMASK 0x80000000 +#define CTRLCHAR_BITMASK 0x40000000 +#define FKEYS_BITMASK 0x20000000 +#define TILDE_BITMASK 0x10000000 + +typedef struct InputUTF8 +{ + utf8_int32_t utf8char; + unsigned int flags; + char equiv[100]; + size_t inputlen; +} InputUTF8; + +enum CONTROL_CODES +#ifdef WIN32 +{ + BS = 8, + TAB = 9, + CTRLENTER = 10, + ENTER = 13, + CTRLBS = 127, + ESC = 27, + + UP = 72 | BIT_ESC224, + LEFT = 75 | BIT_ESC224, + RIGHT = 77 | BIT_ESC224, + DOWN = 80 | BIT_ESC224, + + ALTUP = 152, + ALTLEFT = 155, + ALTRIGHT = 157, + ALTDOWN = 160, + + HOME = 71, + END = 79, + + CTRLHOME = 119, + CTRLEND = 117, + + INS = 82, + DEL = 83, + + CTRLA = 1, + CTRLB = 2, + CTRLC = 3, + CTRLD = 4, + CTRLE = 5, + CTRLF = 6, + CTRLG = 7, + CTRLH = 8, + CTRLI = 9, + CTRLJ = 10, + CTRLK = 11, + CTRLL = 12, + CTRLM = 13, + CTRLN = 14, + CTRLO = 15, + CTRLP = 16, + CTRLQ = 17, + CTRLR = 18, + CTRLS = 19, + CTRLT = 20, + CTRLU = 21, + CTRLV = 22, + CTRLW = 23, + CTRLX = 24, + CTRLY = 25, + CTRLZ = 26, + + /* Different naming only happens in F11 and F12 */ + F1 = 59, + F2 = 60, + F3 = 61, + F4 = 62, + F5 = 63, + F6 = 64, + F7 = 65, + F8 = 66, + F9 = 67, + F10 = 68, + + F11 = 133, + F12 = 134, + + PGUP = 73, + PGDW = 81, + + CTRLF1 = 94, + CTRLF2 = 95, + CTRLF3 = 96, + CTRLF4 = 97, + CTRLF5 = 98, + CTRLF6 = 99, + CTRLF7 = 100, + CTRLF8 = 101, + CTRLF9 = 102, + CTRLF10 = 103, + CTRLF11 = 137, + CTRLF12 = 138, + + ALTF1 = 104, + ALTF2 = 105, + ALTF3 = 106, + ALTF4 = 107, + ALTF5 = 108, + ALTF6 = 109, + ALTF7 = 110, + ALTF8 = 111, + ALTF9 = 112, + ALTF10 = 113, + ALTF11 = 139, + ALTF12 = 140, + + ALTINS = 162, + ALTHOME = 151, + ALTPGUP = 153, + ALTDEL = 163, + ALTEND = 159, + ALTPGDW = 161, + + SHIFTF1 = 84, + SHIFTF2 = 85, + SHIFTF3 = 86, + SHIFTF4 = 87, + SHIFTF5 = 88, + SHIFTF6 = 89, + SHIFTF7 = 90, + SHIFTF8 = 91, + SHIFTF9 = 92, + SHIFTF10 = 93, + SHIFTF11 = 135, + SHIFTF12 = 136, + + CTRLALTA = 30, + CTRLALTB = 48, + CTRLALTC = 46, + CTRLALTD = 32, + CTRLALTE = 18, // This one actually reports as 63 because on my locale it's the euro symbol. + CTRLALTF = 33, + CTRLALTG = 34, + CTRLALTH = 35, + CTRLALTI = 23, + CTRLALTJ = 36, + CTRLALTK = 37, + CTRLALTL = 38, + CTRLALTM = 50, + CTRLALTN = 49, + CTRLALTO = 24, + CTRLALTP = 25, + CTRLALTQ = 16, + CTRLALTR = 19, + CTRLALTS = 31, + CTRLALTT = 20, + CTRLALTU = 22, + CTRLALTV = 47, + CTRLALTW = 17, + CTRLALTX = 45, + CTRLALTY = 21, + CTRLALTZ = 44, +}; +#else +{ + BS = 127, + TAB = 9, + CTRLENTER = 10, + ENTER = 13, + CTRLBS = 8, + + ESC = 27, + + /* + Used an algorithm in order to encode and fit up to 7 characters into a single int32_t + Assuming characters are all lower than 0x80h (127d) + + The algorithm is works by shifting up to 4 characters 7 bits to the left, using 28 of 32 available bits. + + The last 3 bytes are guaranteed to be boolean data so each character fits in a single bit. + The big endian bit is used to ensure that it is a control keybind starting with ESC. + + + This way we can place 7 characters into 4 bytes, or an int32_t. + + */ + + LEFT = 0xc0002200, + UP = 0xc0002080, + DOWN = 0xc0002100, + RIGHT = 0xc0002180, + + INS = 0xc01f9900, + DEL = 0xc01f9980, + + HOME = 0xc0002400, + END = 0xc0002300, + + PGUP = 0xc01f9a80, + PGDW = 0xc01f9b00, + + SHIFTTAB = 0xc0002d00, + + CTRLA = 1, + CTRLB = 2, + CTRLC = 3, + CTRLD = 4, + CTRLE = 5, + CTRLF = 6, + CTRLG = 7, + CTRLH = 8, + CTRLI = 9, + CTRLJ = 10, + CTRLK = 11, + CTRLL = 12, + CTRLM = 13, + CTRLN = 14, + CTRLO = 15, + CTRLP = 16, + CTRLQ = 17, + CTRLR = 18, + CTRLS = 19, + CTRLT = 20, + CTRLU = 21, + CTRLV = 22, + CTRLW = 23, + CTRLX = 24, + CTRLY = 25, + CTRLZ = 26, + + /* Different naming is used between F1 and F4 (termios-related things) */ + F1 = 0xa0002800, + F2 = 0xa0002880, + F3 = 0xa0002900, + F4 = 0xa0002980, + + F5 = 0xcfcd5880, + F6 = 0xcfcdd880, + F7 = 0xcfce1880, + F8 = 0xcfce5880, + F9 = 0xcfcc1900, + F10 = 0xcfcc5900, + F11 = 0xcfccd900, + F12 = 0xcfcd1900, + + SHIFTF1 = 0xc64ed880, + SHIFTF2 = 0xd64ed880, + SHIFTF3 = 0xe64ed880, + SHIFTF4 = 0xf64ed880, + + SHIFTF5 = 0xf76d5c70, + SHIFTF6 = 0xf76ddc70, + SHIFTF7 = 0xf76e1c70, + SHIFTF8 = 0xf76e5c70, + SHIFTF9 = 0xf76c1cf0, + SHIFTF10 = 0xf76c5cf0, + SHIFTF11 = 0xf76cdcf0, + SHIFTF12 = 0xf76d1cf0, + + CTRLF1 = 0xc6aed880, + CTRLF2 = 0xd6aed880, + CTRLF3 = 0xe6aed880, + CTRLF4 = 0xf6aed880, + CTRLF5 = 0xd76d5c70, + CTRLF6 = 0xd76ddc70, + CTRLF7 = 0xd76e1c70, + CTRLF8 = 0xd76e5c70, + CTRLF9 = 0xd76c1cf0, + CTRLF10 = 0xd76c5cf0, + CTRLF11 = 0xd76cdcf0, + CTRLF12 = 0xd76d1cf0, + + CTRLINS = 0xe6aed900, + CTRLDEL = 0xe6aed980, + CTRLHOME = 0xc6aed880, + CTRLEND = 0xe6aed880, + CTRLPGUP = 0xe6aeda80, + CTRLPGDW = 0xe6aedb00, + + CTRLLEFT = 0xc6aed880, + CTRLUP = 0xd6aed880, + CTRLDOWN = 0xe6aed880, + CTRLRIGHT = 0xf6aed880, + + SHIFTLEFT = 0xc64ed880, + SHIFTUP = 0xd64ed880, + SHIFTDOWN = 0xe64ed880, + SHIFTRIGHT = 0xf64ed880, + + CTRLSHIFTLEFT = 0xc6ced880, + CTRLSHIFTUP = 0xd6ced880, + CTRLSHIFTDOWN = 0xe6ced880, + CTRLSHIFTRIGHT = 0xf6ced880, + + ALTF1 = 0xc66ed880, + ALTF2 = 0xd66ed880, + ALTF3 = 0xe66ed880, + ALTF4 = 0xf66ed880, + ALTF5 = 0xf76d5c70, + ALTF6 = 0xf76ddc70, + ALTF7 = 0xf76e1c70, + ALTF8 = 0xf76e5c70, + ALTF9 = 0xf76c1cf0, + ALTF10 = 0xf76c5cf0, + ALTF11 = 0xf76cdcf0, + ALTF12 = 0xf76d1cf0, + + CTRLALTF1 = 0xc6eed880, + CTRLALTF2 = 0xd6eed880, + CTRLALTF3 = 0xe6eed880, + CTRLALTF4 = 0xf6eed880, + CTRLALTF5 = 0xf76d5c70, + CTRLALTF6 = 0xf76ddc70, + CTRLALTF7 = 0xf76e1c70, + CTRLALTF8 = 0xf76e5c70, + CTRLALTF9 = 0xf76c1cf0, + CTRLALTF10 = 0xf76c5cf0, + CTRLALTF11 = 0xf76cdcf0, + CTRLALTF12 = 0xf76d1cf0, + + CTRLSHIFTF1 = 0xc6ced880, + CTRLSHIFTF2 = 0xd6ced880, + CTRLSHIFTF3 = 0xe6ced880, + CTRLSHIFTF4 = 0xf6ced880, + CTRLSHIFTF5 = 0xf76d5c70, + CTRLSHIFTF6 = 0xf76ddc70, + CTRLSHIFTF7 = 0xf76e1c70, + CTRLSHIFTF8 = 0xf76e5c70, + CTRLSHIFTF9 = 0xf76c1cf0, + CTRLSHIFTF10 = 0xf76c5cf0, + CTRLSHIFTF11 = 0xf76cdcf0, + CTRLSHIFTF12 = 0xf76d1cf0, + + ALTINS = 0xe66ed900, + ALTHOME = 0xc66ed880, + ALTPGUP = 0xe66eda80, + ALTDEL = 0xe66ed980, + ALTEND = 0xe66ed880, + ALTPGDW = 0xe66edb00, + + ALTA = 0xa0184d80, + ALTB = 0xa0188d80, + ALTC = 0xa018cd80, + ALTD = 0xa0190d80, + ALTE = 0xa0194d80, + ALTF = 0xa0198d80, + ALTG = 0xa019cd80, + ALTH = 0xa01a0d80, + ALTI = 0xa01a4d80, + ALTJ = 0xa01a8d80, + ALTK = 0xa01acd80, + ALTL = 0xa01b0d80, + ALTM = 0xa01b4d80, + ALTN = 0xa01b8d80, + ALTO = 0xa01bcd80, + ALTP = 0xa01c0d80, + ALTQ = 0xa01c4d80, + ALTR = 0xa01c8d80, + ALTS = 0xa01ccd80, + ALTT = 0xa01d0d80, + ALTU = 0xa01d4d80, + ALTV = 0xa01d8d80, + ALTW = 0xa01dcd80, + ALTX = 0xa01e0d80, + ALTY = 0xa01e4d80, + ALTZ = 0xa01e8d80, + + CTRLALTA = 0xa0004d80, + CTRLALTB = 0xa0008d80, + CTRLALTC = 0xa000cd80, + CTRLALTD = 0xa0010d80, + CTRLALTE = 0xa0014d80, + CTRLALTF = 0xa0018d80, + CTRLALTG = 0xa001cd80, + CTRLALTH = 0xa0020d80, + CTRLALTI = 0xa0024d80, + CTRLALTJ = 0xa0028d80, + CTRLALTK = 0xa002cd80, + CTRLALTL = 0xa0030d80, + CTRLALTM = 0xa0034d80, + CTRLALTN = 0xa0038d80, + CTRLALTO = 0xa003cd80, + CTRLALTP = 0xa0040d80, + CTRLALTQ = 0xa0044d80, + CTRLALTR = 0xa0048d80, + CTRLALTT = 0xa004cd80, + CTRLALTS = 0xa0050d80, + CTRLALTU = 0xa0054d80, + CTRLALTV = 0xa0058d80, + CTRLALTW = 0xa005cd80, + CTRLALTX = 0xa0060d80, + CTRLALTY = 0xa0064d80, + CTRLALTZ = 0xa0068d80, +}; +#endif + +#ifdef _WIN32 +#include +#include +#include +#include "win32/input_win32.c" +#else +#include "linux/input_linux.c" +#endif \ No newline at end of file diff --git a/src/line.c b/src/line.c new file mode 100644 index 0000000..774478a --- /dev/null +++ b/src/line.c @@ -0,0 +1,70 @@ +Line *create_line(File *tstack, size_t ypos) +{ + tstack->line[ypos] = calloc(sizeof(Line), 1); + tstack->line[ypos]->str = calloc(sizeof(utf8_int32_t), LINE_SIZE); + tstack->line[ypos]->render = calloc(sizeof(utf8_int32_t), LINE_SIZE); + tstack->line[ypos]->bufx = LINE_SIZE; + tstack->line[ypos]->render_bufx = LINE_SIZE; + tstack->line[ypos]->len = 0; + tstack->line[ypos]->rlen = 0; + tstack->alloc_lines++; + return tstack->line[ypos]; +} + +size_t change_allocated_lines(File *tstack, size_t old_line_count, size_t new_line_count) +{ + Line **linestack = realloc_n(tstack->line, old_line_count * sizeof(Line *), new_line_count * sizeof(Line *)); + if (!linestack) + { + return old_line_count; + } + for(size_t i = old_line_count; i < new_line_count; i++) + { + create_line(tstack, i); + } + tstack->alloc_lines = new_line_count; + return new_line_count; +} + +Line *increase_line(Line *line, size_t increment) +{ + if (!line) + { + return NULL; + } + + size_t new_buf_size = line->bufx + increment; + + // Reallocate the line buffer + char *new_str = realloc_n(line->str, line->bufx * sizeof(utf8_int32_t), new_buf_size * sizeof(utf8_int32_t)); + if (!new_str) + { + return NULL; + } + + line->str = new_str; + line->bufx = new_buf_size; + + return line; // Success +} + +Line *increase_line_render(Line *line, size_t increment) +{ + if (!line) + { + return NULL; + } + + size_t new_buf_size = line->bufx + increment; + + char *new_render = realloc_n(line->render, line->bufx * sizeof(utf8_int32_t), new_buf_size * sizeof(utf8_int32_t)); + if (!new_render) + { + return NULL; + } + + line->render = new_render; + line->render_bufx = new_buf_size; + + return line; // Success +} \ No newline at end of file diff --git a/src/line.h b/src/line.h new file mode 100644 index 0000000..cbc5094 --- /dev/null +++ b/src/line.h @@ -0,0 +1,6 @@ +const size_t LINE_SIZE = 64; +const size_t DEFAULT_ALLOC_LINES =10; + +const size_t LINE_Y_INCREASE = 5; + +#include "line.c" diff --git a/src/linux/graphics_linux.c b/src/linux/graphics_linux.c new file mode 100644 index 0000000..1e6ebeb --- /dev/null +++ b/src/linux/graphics_linux.c @@ -0,0 +1,168 @@ +#include +#include +#include + +#define TC_NRM "\x1B[0m" /* Normalize color */ + +#define TC_RED "\x1B[1;31m" /* Red */ +#define TC_GRN "\x1B[1;32m" /* Green */ +#define TC_YEL "\x1B[1;33m" /* Yellow */ +#define TC_BLU "\x1B[1;34m" /* Blue */ +#define TC_MAG "\x1B[1;35m" /* Magenta */ +#define TC_CYN "\x1B[1;36m" /* Cyan */ +#define TC_WHT "\x1B[1;37m" /* White */ + +#define TC_B_NRM "\x1B[0m" /* Normalize Bright Color */ +#define TC_B_RED "\x1B[0;31m" /* Bright Red */ +#define TC_B_GRN "\x1B[0;32m" /* Bright Green */ +#define TC_B_YEL "\x1B[0;33m" /* Bright Yellow */ +#define TC_B_BLU "\x1B[0;34m" /* Bright Blue */ +#define TC_B_MAG "\x1B[0;35m" /* Bright Magenta */ +#define TC_B_CYN "\x1B[0;36m" /* Bright Cyan */ +#define TC_B_WHT "\x1B[0;37m" /* Bright White */ + +#define TC_BG_NRM "\x1B[40m" /* Normalize Background Color */ +#define TC_BG_RED "\x1B[41m" /* Background Red */ +#define TC_BG_GRN "\x1B[42m" /* Background Green */ +#define TC_BG_YEL "\x1B[43m" /* Background Yellow */ +#define TC_BG_BLU "\x1B[44m" /* Background Blue */ +#define TC_BG_MAG "\x1B[45m" /* Background Magenta*/ +#define TC_BG_CYN "\x1B[46m" /* Background Cyan */ +#define TC_BG_WHT "\x1B[47m" /* Background White */ + + +#define clear_entire_line() puts("\x1B[2K") +#define clear_line_till_cursor() puts("\x1B[1K") +#define clear_line_from_cursor() puts("\x1B[0K") + + +void color_id(uint8_t cid, int l) +{ + printf((l) ? "\x1B[38;5;%dm" : "\x1B[48;5;%dm", cid); +} + +void set_color(Color color) +{ + if (color.background) + { + printf("\x1B[48;2;%d;%d;%dm", color.r, color.g, color.b); + } + else + { + printf("\x1B[38;2;%d;%d;%dm", color.r, color.g, color.b); + } +} + +void rgb(int r, int g, int b, int l) +{ + printf((l) ? "\x1B[38;5;%d;%d;%dm" : "\x1B[48;5;%d;%d;%dm", r, g, b); +} + +////////////////////////////////////// +// Additional formatting (ANSI) // +////////////////////////////////////// + +#define TC_BLD "\x1B[1m" /* Bold */ +#define TC_DIM "\x1B[2m" /* Dim */ +#define TC_ITAL "\x1B[3m" /* Standout (italics) */ +#define TC_UNDR "\x1B[4m" /* Underline */ +#define TC_BLNK "\x1B[5m" /* Blink */ +#define TC_REV "\x1B[7m" /* Reverse */ +#define TC_INV "\x1B[8m" /* Invisible */ + +void echo_off() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ECHO; + tcsetattr(1, TCSANOW, &term); +} + +void echo_on() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ECHO; + tcsetattr(1, TCSANOW, &term); +} + +void canon_on() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ICANON; + tcsetattr(1, TCSANOW, &term); +} + +void canon_off() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ICANON; + tcsetattr(1, TCSANOW, &term); +} + +void get_cursor(int *X, int *Y) +{ + echo_off(); + canon_off(); + printf("\033[6n"); + scanf("\033[%d;%dR", X, Y); +} +void gotoxy(int x, int y) +{ + printf("\033[%d;%df", y+1, x+1); +} + +void move_cursor(int X, int Y) +{ + if (X > 0) + { + printf("\033[%dC", X); + } + else if (X < 0) + { + printf("\033[%dD", (X * -1)); + } + + if (Y > 0) + { + printf("\033[%dB", Y); + } + else if (Y < 0) + { + printf("\033[%dA", (Y * -1)); + } +} + +#define clear_screen() puts("\x1B[2J") +#define clear_from_top_to_cursor() puts("\x1B[1J") +#define clear_from_cursor_to_bottom() puts("\x1B[0J") + +void clear_partial(int x, int y, int width, int height) +{ + char *buf = calloc(width + 1, 1); + memset(buf, 32, width); + gotoxy(x, y); + for (int i = 0; i < height; i++) + { + gotoxy(x, y + i); + fwrite(buf, width, 1, stdout); + } + gotoxy(x, y); + free(buf); +} + +void get_cols_rows(int *cols, int *rows) +{ + struct winsize size; + ioctl(1, TIOCGWINSZ, &size); + *cols = size.ws_col; + *rows = size.ws_row; +} + +int alternate_buffer(bool enabled) +{ + fputs(enabled ? "\e[?1049h" : "\e[?1049l", stdout); + return enabled; +} \ No newline at end of file diff --git a/src/linux/input_linux.c b/src/linux/input_linux.c new file mode 100644 index 0000000..0297efd --- /dev/null +++ b/src/linux/input_linux.c @@ -0,0 +1,123 @@ +struct termios orig_termios; + +int rawMode(int fd) +{ + /* This is taken from kilo, make sure to check the project at https://github.com/antirez/kilo */ + struct termios raw; + + if (!isatty(STDIN_FILENO) || tcgetattr(fd, &orig_termios) == -1) + { + perror("rawMode()"); + return 0; + } + + raw = orig_termios; /* modify the original mode */ + /* input modes: no break, no CR to NL, no parity check, no strip char, + * no start/stop output control. */ + raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + /* output modes - disable post processing */ + // raw.c_oflag &= ~(OPOST); + /* control modes - set 8 bit chars */ + raw.c_cflag |= (CS8); + /* local modes - choing off, canonical off, no extended functions, + * no signal chars (^Z,^C) */ + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + /* control chars - set return condition: min number of bytes and timer. */ + raw.c_cc[VMIN] = 0; /* Return each byte, or zero for timeout. */ + raw.c_cc[VTIME] = 1; /* 100 ms timeout (unit is tens of second). */ + if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) + { + perror("tcsetattr()"); + return 0; + } + return 1; +} + +InputUTF8 getch() +{ + InputUTF8 inputchar = {0}; + + if (!rawMode(STDIN_FILENO)) + { + return inputchar; + } + const size_t maxreadsz = 1024; + unsigned char *buf = calloc(sizeof(char), maxreadsz + 1), seq[100] = {0}; // Have enough space for all the buffer + int numread; + int key = 0; + int shiftbits = 7; + bool is_esc = false; + bool is_ctrl = false; + bool is_ctrl2 = false; + bool is_tilde = false; + + is_esc = false; + + is_ctrl = false; + is_ctrl2 = false; + + numread = read(STDIN_FILENO, buf, maxreadsz); + if (buf[0] == 27) + { + is_esc = true; + if (numread > 1) // Control code + { + is_ctrl = true; + // Key encoding starts here + if ((buf[1] == '[' || buf[1] == 'O')) // -30 is signed 226 + { + if (buf[2] == 226) // Special case for Euro symbol in european layouts + { + buf[2] = 'E'; + } + if (numread > 7) + numread = 7; + inputchar.flags |= 0xFF; + for (size_t i = 2; i < numread; i++) + { + inputchar.flags = inputchar.flags << 8; // Shift only seven bytes + inputchar.flags |= buf[i]; + } + inputchar.inputlen = numread; + } + else + { + inputchar.flags = buf[1]; // Alt-[key] special case + inputchar.inputlen = 2; + } + } + } + + else + { + if (numread > 4) + numread = 4; + inputchar.inputlen = numread; + + key = buf[0]; + for (int i = 0; i < numread; i++) + { + inputchar.utf8char = inputchar.utf8char << 8; + inputchar.utf8char |= buf[i]; + inputchar.equiv[i] = buf[i]; + } + } + if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios) < 0) // Restore original mode + { + } + free(buf); + return inputchar; +} + +InputUTF8 GetNewtroditInput() +{ + echo_on(); + canon_off(); + return getch(); +} + +int getch_n() +{ + InputUTF8 ret = GetNewtroditInput(); + return ret.utf8char; +} diff --git a/src/newtrodit.c b/src/newtrodit.c index f85d7c9..e27cdbe 100644 --- a/src/newtrodit.c +++ b/src/newtrodit.c @@ -1,2142 +1,203 @@ -/* - Newtrodit: A console text editor - Copyright (c) 2021-2023 anic17 Software +#include "newtrodit.h" +#include "dialog.h" +#include "globals.h" +#include "line.h" +#include "unicode.c" +#include "input.h" - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - This program 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 General Public License for more details. +Editor ed; - You should have received a copy of the GNU General Public License - along with this program. If not, see -*/ +File **file; -/* +#include "newtrodit_gui.h" +#include "fileio.h" - Some remarks about the code: - - 'c' is used for various purposes, and always has a negative value which means a the code of a key. - - 'ch' is the character typed by the user. - - 'Tab_stack[file_index].strsave' is the buffer where the file is stored on RAM. - - The source code of Newtrodit is composed by: - - dialog.h : Dialogs - globals.h : Global variables - manual.c : Manual - newtrodit.c : Main source file - newtrodit_core.h : All core functions - ~ win32/newtrodit_core_win.h - ~ linux/newtrodit_core_linux.h - newtrodit_func.c : Main functions - ~ win32/newtrodit_func_win.c - ~ linux/newtrodit_func_linux.c - newtrodit_gui.c : GUI loading - newtrodit_shared.c : Shared functions - newtrodit_locate.c : File explorer - newtrodit_syntax.h : Syntax highlighting - - See 'newtrodit --help' - -*/ - -#include -#include -#include -#include -#include -#include "manual.c" -#include - -void sigsegv_handler(int signum) -{ - signal(SIGSEGV, sigsegv_handler); - NewtroditCrash(join("Segmentation fault.\nSignum code: ", itoa_n(signum)), errno); - fflush(stdout); - exit(errno); -} - -void sigtrap_handler(int signum) -{ - signal(SIGTRAP, sigtrap_handler); - NewtroditCrash(join("Sigtrap.\nSignum code: ", itoa_n(signum)), errno); - fflush(stdout); - exit(errno); -} - -void sigabrt_handler(int signum) -{ - signal(SIGABRT, sigabrt_handler); - NewtroditCrash(join("Abort signal.\nSignum code: ", itoa_n(signum)), errno); - fflush(stdout); - exit(errno); -} - -void sigfpe_handler(int signum) -{ - signal(SIGFPE, sigabrt_handler); - NewtroditCrash(join("Arithmetic exception.\nSignum code: ", itoa_n(signum)), errno); - fflush(stdout); - exit(errno); -} - -int LoadSettings(char *newtrodit_config_file, char *macro, int *sigsegv, File_info *tstack) +int allocate_buffer(File **tstack) { - /* - Settings are stored in an INI-like format. - The format is: - key=value - ;comment - - */ - - chdir(SInf.location); - - WriteLogFile("Loading settings file: %s", FullPath(newtrodit_config_file)); - - FILE *settings = fopen(newtrodit_config_file, "rb"); - if (!settings) + *tstack = calloc(1, sizeof(File)); + (*tstack)->file_flags = IS_UNTITLED; + + (*tstack)->filename = calloc(MAX_PATH + 1, sizeof(char)); + memcpy((*tstack)->filename, default_filename, MAX_PATH); + + (*tstack)->fwrite_time = time(NULL); + (*tstack)->fread_time = time(NULL); + (*tstack)->language = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->language, default_language, utf8len_n(default_language)); + (*tstack)->linenumber_wide = 3; + (*tstack)->linenumber_padding = 1; + (*tstack)->linecount = 0; + (*tstack)->xpos = 0; + (*tstack)->ypos = 1; + (*tstack)->display_start = 0; + (*tstack)->size = 0; + (*tstack)->alloc_lines = DEFAULT_ALLOC_LINES; + (*tstack)->line = calloc(DEFAULT_ALLOC_LINES, sizeof(Line *)); + for (size_t i = 0; i < DEFAULT_ALLOC_LINES; i++) { - return 0; + create_line(*tstack, i); } - char setting_buf[1024]; // Max 1 kB per line - char *iniptr = malloc(sizeof(setting_buf) + 1), *token = malloc(sizeof(setting_buf) + 1); - char *settingname; - int cnt = 0; - bool isCorrectSetting = true; - char equalchar[] = "="; - /* - Available settings: - "autoindent", - "autosyntax", - "codepage", - "convertnull", - "converttab", - "curinsert", - "cursize", - "devmode", - "fontcolor", - "linecount", - "linecountwide", - "macro", - "manfile", - "menucolor", - "mouse", - "newline", - "oldkeybindings", - "sigsegv", - "syntax", - "tabwide", - "trimlonglines", - "xsize", - "ysize", - */ - - // Set the non changing settings - SetColor(FG_DEFAULT); - SetColor(BG_DEFAULT); - default_color = DEFAULT_SYNTAX_COLOR; - strncpy_n(Tab_stack[file_index].newline, "\n", strlen_n(Tab_stack[file_index].newline)); - run_macro[0] = 0; - last_known_exception = NEWTRODIT_CRASH_INVALID_SETTINGS; - while (fgets(setting_buf, sizeof(setting_buf), settings)) - { - setting_buf[strcspn(setting_buf, "\n")] = '\0'; // Remove newline - - cnt = strspn(setting_buf, " \t"); - // memmove(&setting_buf[0], &setting_buf[cnt], (strlen_n(setting_buf) - cnt)); - // memset(&setting_buf[strlen_n(setting_buf) - cnt], 0, (strlen_n(setting_buf) - cnt)); - // snprintf(setting_buf, sizeof(setting_buf), "%s", setting_buf - 1); - - if (setting_buf[cnt] == ';' || setting_buf[cnt] == 0) // Comment or newline found - { - continue; - } - iniptr = strtok(setting_buf, "="); - settingname = strdup(iniptr); - strlwr(settingname); - - while (iniptr != NULL) // Loop through the settings - { - isCorrectSetting = true; - // iniptr[strcspn(iniptr, "\n")] = '\0'; - token = strtok(NULL, equalchar); - if (!strcmp(settingname, "fontcolor")) - { - bg_color = HexStrToDec(token) % 256; - default_color = bg_color; - } - else if (!strcmp(settingname, "autoindent")) - { - SetBoolValue(&autoIndent, token); - } - else if (!strcmp(settingname, "autosyntax")) - { - SetBoolValue(&autoLoadSyntaxRules, token); - } - else if (!strcmp(settingname, "codepage")) - { - int cp = atoi(token); -#ifdef _WIN32 - SetConsoleOutputCP(cp); -#else - // Linux TODO -#endif - } - else if (!strcmp(settingname, "convertnull")) - { - SetBoolValue(&convertNull, token); - } - else if (!strcmp(settingname, "converttab")) - { - SetBoolValue(&convertTabtoSpaces, token); - } - else if (!strcmp(settingname, "curinsert")) - { - - SetBoolValue(&cursorSizeInsert, token); - } - else - - if (!strcmp(settingname, "cursize")) - { - CURSIZE = atoi(token); - SetCursorSettings(true, CURSIZE); - } - else if (!strcmp(settingname, "devmode")) - { - SetBoolValue(&devMode, token); - } - else if (!strcmp(settingname, "findinsensitive")) - { - SetBoolValue(&findInsensitive, token); - } - else if (!strcmp(settingname, "linecount")) - { - SetBoolValue(&lineCount, token); - } - else if (!strcmp(settingname, "linecountwide")) - { - LINECOUNT_WIDE = abs(atoi(token)) % sizeof(long long); - } - else if (!strcmp(settingname, "linehighlight")) - { - SetBoolValue(&linecountHighlightLine, token); - } - else if (!strcmp(settingname, "macro")) - { - - if (ValidString(token)) - { - strncpy_n(run_macro, token, MACRO_ALLOC_SIZE); - } - } - else if (!strcmp(settingname, "manfile")) - { - RemoveQuotes(token); // Remove quotes - - if (ValidFileName(token)) - { - strncpy_n(manual_file, token, sizeof(manual_file)); - manual_file[strcspn(manual_file, "\n")] = 0; - } - else - { - WriteLogFile("%s%s", NEWTRODIT_FS_FILE_INVALID_NAME, token); - } - } - else if (!strcmp(settingname, "menucolor")) - { - fg_color = (HexStrToDec(token) * 16) % 256; - } - else if (!strcmp(settingname, "mouse")) - { - SetBoolValue(&partialMouseSupport, token); - } - else - - if (!strcmp(settingname, "newline")) - { - - if (!strncmp(token, "0x", 2)) - { - ParseHexString(token); - } - else - { - strncpy_n(Tab_stack[file_index].newline, token, strlen_n(Tab_stack[file_index].newline)); - } - } - else - - if (!strcmp(settingname, "oldkeybindings")) - { - SetBoolValue(&useOldKeybindings, token); - } - else if (!strcmp(settingname, "sigsegv")) - { - SetBoolValue(sigsegv, token); - } - else if (!strcmp(settingname, "syntax")) - { - RemoveQuotes(token); // Remove quotes - if (ValidFileName(token)) - { - - if (!strcmp(token, "1") || !strcmp(token, "true")) // Enable syntax highlighting but don't load any file - { - syntaxHighlighting = true; - } - else if (!strcmp(token, "0") || !strcmp(token, "false")) - { - syntaxHighlighting = false; - } - else - { - strncpy_n(syntax_filename, token, sizeof(syntax_filename)); - syntax_filename[strcspn(syntax_filename, "\n")] = 0; - if ((syntaxKeywordsSize = LoadSyntaxScheme(syntax_filename, &Tab_stack[file_index]))) - { - Tab_stack[file_index].Syntaxinfo.keyword_count = syntaxKeywordsSize; - } - - syntaxHighlighting = true; - } - } - } - else if (!strcmp(settingname, "tabwide")) - { - TAB_WIDE = atoi(token); - } - else if (!strcmp(settingname, "trimlonglines")) - { - SetBoolValue(&trimLongLines, token); - } - else if (!strcmp(settingname, "wholeword")) - { - SetBoolValue(&matchWholeWord, token); - } - else if (!strcmp(settingname, "xsize")) - { - int xs = atoi(token); - SetConsoleSize(xs, YSIZE, xs, YSIZE); - } - else if (!strcmp(settingname, "ysize")) - { - int ys = atoi(token); - SetConsoleSize(XSIZE, ys, XSIZE, ys); - } - else - { - isCorrectSetting = false; - } - if (isCorrectSetting) - { - WriteLogFile("Loaded setting: %s (value '%s')", settingname, token); - } - else - { - WriteLogFile("Unexistent setting: %s", settingname); - } - iniptr = strtok(NULL, "="); - } - } - WriteLogFile("Finished loading settings file"); + (*tstack)->newline = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->newline, default_newline, utf8len_n(default_newline)); - fclose(settings); - chdir(SInf.dir); + (*tstack)->display_end = (*tstack)->ypos; return 1; } -int main(int argc, char *argv[]) +int init_editor() { - // Newtrodit initialization begins - - // Generate log file name - SInf.log_file_name = GetLogFileName(); - SInf.using_log = !!WriteLogFile("\nNewtrodit started"); - - WriteLogFile("Logfile opened with name: %s", SInf.log_file_name); - - if (!_isatty(_fileno(stdout)) || !_isatty(_fileno(stderr))) - { - /* - If for some reason stdout or stderr are still redirected to a file, show an error and quit - */ - fprintf(stderr, "%s", NEWTRODIT_ERROR_REDIRECTED_TTY); - return 1; - } - - // Redirect stdout to the console - - char *startup_info = calloc(sizeof(char), MAX_PATH * 2); // *2 for safety -#ifdef _WIN32 - GetModuleFileNameA(NULL, startup_info, MAX_PATH); -#else - startup_info = argv[0]; // Program name -#endif - -#ifdef _WIN32 - HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE), hStdin = GetStdHandle(STD_INPUT_HANDLE); - GetConsoleMode(hStdout, &dwStdoutMode); - GetConsoleMode(hStdin, &dwStdinMode); - // Disable wrapping to avoid (or at least reduce) graphical bugs - WriteLogFile("Changing console output mode: %s", (SetConsoleMode(hStdout, dwStdoutMode & ~ENABLE_WRAP_AT_EOL_OUTPUT)) ? "Succeeded" : "Failed"); - WriteLogFile("Changing console input mode: %s", (SetConsoleMode(hStdin, ENABLE_MOUSE_INPUT | 0x80 | ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT)) ? "Succeeded" : "Failed"); // 0x40 is quick edit mode and 0x80 are extended flags - WriteLogFile("Loading startup data"); -#endif - - char *sinf_ptr = calloc(sizeof(char), MAX_PATH * 2); - if (get_path_directory(startup_info, sinf_ptr) != NULL) - { - SInf.dir = strdup(getcwd(NULL, 0)); - SInf.location = strdup(sinf_ptr); - } - else - { - memset(SInf.location, 0, sizeof(char) * MAX_PATH * 2); - } - free(sinf_ptr); - - if (BUFFER_X < MIN_BUFSIZE || BUFFER_Y < MIN_BUFSIZE) // Check if buffer size is too small - { - char *err_msg = malloc(sizeof(char) * MIN_BUFSIZE); - - snprintf(err_msg, MIN_BUFSIZE, "Buffer is too small (Current size is %dx%d and minimum size is %dx%d).", BUFFER_X, BUFFER_Y, MIN_BUFSIZE, MIN_BUFSIZE); -#ifdef _WIN32 - MessageBox(NULL, err_msg, "Newtrodit", MB_ICONERROR); -#endif - WriteLogFile(err_msg); - fprintf(stderr, "%s", err_msg); - free(err_msg); - ExitRoutine(1); - } - - SInf.argv = argv; // Save only its memory address, not the actual value - SInf.argc = argc; - SInf.xsize = XSIZE; - SInf.ysize = YSIZE; - SInf.xbuf = GetConsoleInfo(XBUFFER_SIZE); - SInf.ybuf = GetConsoleInfo(YBUFFER_SIZE); -#ifdef _WIN32 - SetConsoleSize(SInf.xsize, SInf.ysize, SInf.xsize, SInf.ysize); // Remove all the borders -#endif - SInf.manual_open = 0; // Times manual has been open - SInf.save_buffer = false; - - clearAllBuffer = true; - int replaceChar = false; // Replace or insert characters - int sigsegvScreen = true; - int listDir = true; + ed.open_files = 1; + ed.file_index = 0; + ed.log_file_name = NULL; - for (int i = 0; i < MAX_TABS; i++) - { - Tab_stack[i].filename = calloc(MAX_PATH, sizeof(char)); - } - - // Allocate buffer - - if (!AllocateBufferMemory(&Tab_stack[file_index])) - { - - printf("%.*s\n", wrapSize, NEWTRODIT_ERROR_OUT_OF_MEMORY); - ExitRoutine(ENOMEM); - } - - old_open_files = malloc(MIN_BUFSIZE * sizeof(char *)); + ed.useLogFile = false; + ed.lineNumbers = true; + ed.dirty = false; + // ed.status_msg = calloc(DEFAULT_ALLOC_SIZE, sizeof(utf8_int32_t)); + ed.status_msg = NULL; + file = calloc(sizeof(File *), open_files); - for (int i = 1; i < MIN_BUFSIZE; i++) - { - old_open_files[i] = calloc(MAX_PATH, sizeof(char)); - } - - run_macro = calloc(sizeof(char), MACRO_ALLOC_SIZE + 1); - SetWrapSize(); - WriteLogFile("Setting console signal handlers"); #ifdef _WIN32 - signal(SIGBREAK, SIG_IGN); // Ctrl-Break handler -#else - signal(SIGTSTP, SIG_IGN); // Ctrl-Z handler + hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + hStdin = GetStdHandle(STD_INPUT_HANDLE); + SetConsoleCP(CP_UTF8); + SetConsoleOutputCP(CP_UTF8); + system("chcp 65001"); #endif - signal(SIGINT, SIG_IGN); // Ctrl-C handler - signal(SIGSEGV, sigsegv_handler); // Segmentation fault handler - signal(SIGABRT, sigabrt_handler); // Abort handler - signal(SIGTRAP, sigtrap_handler); - signal(SIGFPE, sigfpe_handler); - WriteLogFile("Finished setting console signal handlers"); - - LoadSettings(settings_file, run_macro, &sigsegvScreen, &Tab_stack[file_index]); // Load settings from settings file - - char *temp_strsave = calloc(sizeof(char), BUFFER_X + 1); - char *tmp = calloc(sizeof(char), BUFFER_X + 1); - char *syntax_file = calloc(MAX_PATH + 1, sizeof(char)), *find_string = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)), *replace_string = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); - // int undo_stack_tree = 0; - // Declare variables - int old_x_size = 0, old_y_size = 0; - int bs_tk = 0; - - SInf.color = GetConsoleInfo(COLOR); - int replace_count = 0; - char *replace_str_ptr; - - char inbound_ctrl_key[100] = {0}; - char *newname = calloc(MAX_PATH + 1, sizeof(char)), *locate_file = calloc(MAX_PATH + 1, sizeof(char)), *macro_input = calloc(MACRO_ALLOC_SIZE + 1, sizeof(char)), *fcomp1 = calloc(MAX_PATH + 1, sizeof(char)), *fcomp2 = calloc(MAX_PATH + 1, sizeof(char)), *command_palette = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); - convertTabtoSpaces = true; - int n = 0, n2 = 0; - char *ptr = calloc(sizeof(char), BUFFER_X), *buffer_clipboard; - - SetCurrentDirectory(SInf.dir); - /* - int *relative_xpos = calloc(sizeof(int) * Tab_stack[file_index].bufy, BUFFER_X); - int *relative_ypos = calloc(sizeof(int) * BUFFER_X, Tab_stack[file_index].bufy); - */ + get_cols_rows(&ed.xsize, &ed.ysize); + vt_settings(true); + alternate_buffer(true); - int ch = 0; // Character variable - - int *file_arguments = {0}; // Array of ints for arguments that aren't switches - int file_arguments_count = 0; - - file_arguments = calloc(sizeof(int *), argc); // Allocate memory for file_arguments for each argument - WriteLogFile("Finished loading startup data"); + allocate_buffer(&file[ed.file_index]); // Pass the address of the File pointer + load_all_newtrodit(file[ed.file_index], NULL); + echo_on(); + canon_on(); + return 1; +} - WriteLogFile("Parsing command-line arguments"); - ParseArguments(argc, argv, file_arguments, &file_arguments_count); +int end_editor() +{ + alternate_buffer(false); + echo_on(); + canon_on(); + return 1; +} - if (file_arguments_count > 0) +int handle_keystrokes(InputUTF8 ch, File *tstack) +{ + if (ch.flags != 0) { - open_files = file_arguments_count; - for (int i = 1; i <= file_arguments_count; i++) + switch (ch.flags) { - Tab_stack[file_index].filename = argv[file_arguments[i]]; - if ((n = LoadFile(&Tab_stack[file_index], Tab_stack[file_index].filename)) <= -1) + case LEFT: + if (_xpos > 0) { - fprintf(stderr, "%s", ErrorMessage(-n, Tab_stack[file_index].filename)); - return errno; + _xpos--; } + break; + case RIGHT: + // if(tstack->line[_ypos]->bufx[]) + _xpos++; + break; + case DOWN: + _ypos++; + break; + case ENTER: + _ypos++; + _xpos = 0; - if (file_arguments_count > 1 && i < file_arguments_count) // file_arguments_count - 1 iterations to not allocate an extra buffer + break; + case UP: + if (_ypos > 1) { - if (file_index < MAX_TABS) - { - file_index++; - if (!AllocateBufferMemory(&Tab_stack[file_index])) // Allocate more memory for next file - { - printf("%.*s\n", wrapSize, NEWTRODIT_ERROR_OUT_OF_MEMORY); - ExitRoutine(ENOMEM); - } - } + _ypos--; } + break; } } - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - LoadAllNewtrodit(); - clearAllBuffer = false; - - if (partialMouseSupport) - { - WriteLogFile("Mouse enabled."); - } - while (1) + else if (ch.utf8char != 0) { - UpdateTitle(&Tab_stack[file_index]); - SetDisplayY(&Tab_stack[file_index]); - - old_y_size = YSIZE; - old_x_size = XSIZE; - - if ((lineCount && !isprint(ch) && c != -32) || linecountHighlightLine) // -32 = scroll - { - DisplayLineCount(&Tab_stack[file_index], YSIZE - 3, Tab_stack[file_index].display_y); - } - if (c == -32) - { - c = 0; - } - - if (c != -2) // Clear bottom line - { - DisplayCursorPos(&Tab_stack[file_index]); - } - SetWrapSize(); - SetDisplayX(&Tab_stack[file_index]); - - SetDisplayCursorPos(&Tab_stack[file_index]); -#ifdef _WIN32 - CompareFileWriteTime(&Tab_stack[file_index]); -#endif - - if (Tab_stack[file_index].selection.is_selected) - { - WriteLogFile("Selection: (%d,%d) to (%d,%d)", Tab_stack[file_index].selection.start.x, Tab_stack[file_index].selection.start.y, Tab_stack[file_index].selection.end.x, Tab_stack[file_index].selection.end.y); - SelectPrint(&Tab_stack[file_index], _ypos); - } - - if (devMode && (Tab_stack[file_index].strsave[_ypos][_xpos] > 127 || Tab_stack[file_index].strsave[_ypos][_xpos] < 0)) - { - PrintBottomString("Dev mode warning: Possible stack overrun found: '%c' (0x%02x) at X=%d Y=%d", Tab_stack[file_index].strsave[_ypos][_xpos], Tab_stack[file_index].strsave[_ypos][_xpos], _xpos, _ypos); - c = -2; - } - ch = GetNewtroditInput(&Tab_stack[file_index]); // Register all input events, not only key presses - - if ((_xpos < 0 || _ypos < 1) || _xpos > strlen_n(Tab_stack[file_index].strsave[_ypos]) || _ypos > Tab_stack[file_index].linecount + 1 || _ypos >= Tab_stack[file_index].bufy) - { - PrintBottomString("%s", NEWTRODIT_ERROR_INVALID_POS_RESET); - WriteLogFile("(%d,%d) %s", _xpos, _ypos, NEWTRODIT_ERROR_INVALID_POS_RESET); - getch_n(); - _xpos = 0; - _ypos = 1; - c = -2; - } - - if (c == -2) // Inbound invalid control key - { - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - - gotoxy(_xpos + (lineCount ? Tab_stack[file_index].linecount_wide : 0), _ypos); - c = 0; - } - if (!allowAutomaticResizing) - { - if (old_x_size != XSIZE || old_y_size != YSIZE) // Check if size has been modified - { - n = 0; - while (!ValidSize()) // At 3 message boxes, close the program - { - if (n == 2) - { - ClearScreen(); - fprintf(stderr, "%s\n", NEWTRODIT_ERROR_WINDOW_TOO_SMALL); - ExitRoutine(1); - } - n++; - } - clearAllBuffer = true; - - LoadAllNewtrodit(); - clearAllBuffer = false; - - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - } - - if (ch == CTRLA) // S-^A = Toggle auto syntax highlighting loading + switch (ch.utf8char) { - if (CheckKey(VK_SHIFT)) - { - ToggleOption(&autoLoadSyntaxRules, NEWTRODIT_AUTO_SYNTAX_LOAD, false); - c = -2; - } - else - { - SelectStart(&Tab_stack[file_index], 0, 1); - SelectEnd(&Tab_stack[file_index], strlen_n(Tab_stack[file_index].strsave[Tab_stack[file_index].linecount]), Tab_stack[file_index].linecount); - } - ch = 0; - continue; - } - - if (ch == CTRLC || ch == CTRLK) // ^C = Copy line to clipboard; ^K = Cut line - { - if (!CheckKey(VK_SHIFT)) - { - if (Tab_stack[file_index].strsave[_ypos][0] != '\0') - { - -#ifdef _WIN32 - SetClipboardNewtrodit(Tab_stack[file_index].strsave[_ypos]); - - if (ch == CTRLK && useOldKeybindings) - { - if (Tab_stack[file_index].strsave[_ypos][0] != '\0') - { - memset(Tab_stack[file_index].strsave[_ypos], 0, strlen_n(Tab_stack[file_index].strsave[_ypos])); - strncpy_n(Tab_stack[file_index].strsave[_ypos], Tab_stack[file_index].newline, strlen_n(Tab_stack[file_index].newline)); - ClearPartial((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y, XSIZE - (lineCount ? Tab_stack[file_index].linecount_wide : 0), 1); - _xpos = 0; - } - } -#endif - } - ch = 0; - continue; - } - else + case BS: + if (_xpos > 0) { - if (ch == CTRLK) - { - ToggleOption(&useOldKeybindings, NEWTRODIT_OLD_KEYBINDINGS, true); - - c = -2; - ch = 0; - continue; - } - if (ch == CTRLC) // S-^C = File compare - { - ClearPartial(0, YSIZE - 2, XSIZE, 2); - printf("%.*s\n", wrapSize, NEWTRODIT_PROMPT_FIRST_FILE_COMPARE); - printf("%.*s", wrapSize, NEWTRODIT_PROMPT_SECOND_FILE_COMPARE); - gotoxy(strlen_n(NEWTRODIT_PROMPT_FIRST_FILE_COMPARE), YSIZE - 2); - fcomp1 = TypingFunction(32, 255, MAX_PATH, NULL); - if (fcomp1[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], fcomp1); - continue; - } - gotoxy(strlen_n(NEWTRODIT_PROMPT_SECOND_FILE_COMPARE), BOTTOM); - - fcomp2 = TypingFunction(32, 255, MAX_PATH, NULL); - if (fcomp2[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], fcomp2); - continue; - } - - RemoveQuotes(fcomp1); - RemoveQuotes(fcomp2); - - if (!strcmp(fcomp1, fcomp2)) - { - PrintBottomString("%s", NEWTRODIT_FS_SAME_FILE); - getch_n(); - } - else - { - FileCompare(fcomp1, fcomp2); - } - - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - free(fcomp1); - free(fcomp2); - ch = 0; - continue; - } - } - } - - if (ch == CTRLG) // ^G = Go to line; S-^G = Go to column - { - GotoBufferPosition(&Tab_stack[file_index], 0, CheckKey(VK_SHIFT)); - ch = 0; - continue; + fputs("\b \b", stdout); + _xpos--; + _uxpos--; + } + break; + case CTRLS: + save_file(tstack, tstack->filename, false); + printf("OK"); + break; + case CTRLQ: + quit_newtrodit(tstack); + break; + default: + if (tstack->linecount == 0) + tstack->linecount++; + insert_utf8_char(tstack->line[_ypos], ch.utf8char, _xpos); + //gotoxy(_xpos + file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, _ypos); + display_char(ch.utf8char, stdout); + _xpos += codepoint_len(ch.utf8char); + _uxpos++; + tstack->file_flags |= IS_MODIFIED; + } + } + return 0; +} - if (ch == CTRLI && !CheckKey(VK_TAB)) // ^I = File info - { - if (!CheckKey(VK_SHIFT)) - { - CountBufferLines(&Tab_stack[file_index]); - PrintBottomString("File: \'%s\', size: %lld bytes (%u lines). File type: %s. Syntax highlighting: %s", StrLastTok(Tab_stack[file_index].filename, PATHTOKENS), Tab_stack[file_index].size, Tab_stack[file_index].linecount, Tab_stack[file_index].language, Tab_stack[file_index].Syntaxinfo.syntax_lang); - c = -2; - ch = 0; - } - } +int editor_main() +{ + InputUTF8 ch = {0}; + Line *lptr; + while (1) + { + // display_cursor_pos(file[ed.file_index]); + gotoxy(_uxpos + file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, _ypos); - if (ch == CTRLL) // ^L = Toggle line count; S-^L = Locate files + ch = GetNewtroditInput(); + if (_ypos >= file[ed.file_index]->alloc_lines - 1) { - if (!CheckKey(VK_SHIFT)) - { - ToggleOption(&lineCount, NEWTRODIT_LINE_COUNT, true); - c = -2; - } - else - { - // List all files in the directory - PrintBottomString("%s", NEWTRODIT_PROMPT_LOCATE_FILE); - locate_file = TypingFunction(32, 255, MAX_PATH, NULL); - if (locate_file[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], locate_file); - continue; - } - - ClearPartial(0, 1, XSIZE, YSIZE - 1); - if (!LocateFiles(listDir, locate_file, 0)) - { - getch_n(); - } - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - ClearPartial(0, 1, XSIZE, YSIZE - 2); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - free(locate_file); - } - continue; + change_allocated_lines(file[ed.file_index], file[ed.file_index]->alloc_lines, file[ed.file_index]->alloc_lines + LINE_Y_INCREASE); + print_message("Increasing line number by %zu", LINE_Y_INCREASE); + getchar(); } - - if (ch == CTRLN) // ^N = New file + /* if (_xpos >= file[ed.file_index]->line[_ypos]->bufx - 1) { - if (!CheckKey(VK_SHIFT)) - { - - if ((n = NewFile(&Tab_stack[file_index])) > 0) - { - PrintBottomString("%s", NEWTRODIT_NEW_FILE_CREATED); - } - else - { - ErrorMessage(n, Tab_stack[file_index].filename); - } - } - else + lptr = increase_line(file[ed.file_index]->line[_ypos], LINE_SIZE); + if (!lptr) { - - ToggleOption(&convertNull, NEWTRODIT_NULL_CONVERSION, false); + print_message(NEWTRODIT_ERROR_ALLOCATION_FAILED); } - c = -2; - - ch = 0; - continue; - } - if (ch == CTRLO) // ^O = Open file + } */ + handle_keystrokes(ch, file[ed.file_index]); + if (ed.dirty) { - if (!CheckKey(VK_SHIFT)) - { - OpenNewtroditFile(&Tab_stack[file_index], NULL); - } - ch = 0; + display_status(file[ed.file_index], ed.status_msg); } - if (ch == CTRLP) // ^P = Command palette + else { - ch = 0; - - PrintBottomString("> "); - command_palette = TypingFunction(32, 255, DEFAULT_ALLOC_SIZE, NULL); - if (command_palette[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], command_palette); - continue; - } - if (!ParseCommandPalette(&Tab_stack[file_index], command_palette)) - { - PrintBottomString(NEWTRODIT_ERROR_UNKNOWN_COMMAND, command_palette); - c = -2; - } - free(command_palette); + display_cursor_pos(file[ed.file_index], NULL); } + } + return 1; +} - if (ch == CTRLT) // S-^T = Toggle tab conversion - { - /* if (CheckKey(VK_SHIFT) && devMode) - { - ToggleOption(&convertTabtoSpaces, NEWTRODIT_TAB_CONVERSION, false); - c = -2; +int main() +{ - ch = 0; - continue; - } */ - if (CheckKey(VK_SHIFT)) // S-^T - { - if (old_open_files[0][0] != '\0' && oldFilesIndex > 0) - { - if (Tab_stack[file_index].is_modified) - { - PrintBottomString("%s", NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); + setlocale(LC_ALL, ".utf8"); + init_editor(); + editor_main(); - if (YesNoPrompt()) - { - if (SaveFile(&Tab_stack[file_index], NULL, false)) - { - LoadAllNewtrodit(); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - continue; - } - } - } - PrintBottomString("%s", NEWTRODIT_PROMPT_REOPEN_FILE); - if (YesNoPrompt()) - { - if (LoadFile(&Tab_stack[file_index], old_open_files[oldFilesIndex])) - { - strncpy_n(old_open_files[oldFilesIndex], Tab_stack[file_index].filename, MAX_PATH); - LoadAllNewtrodit(); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - } - } - ch = 0; - } - continue; - } - - if (ch == CTRLR) // ^R = Reload file and S-^R = Reload settings - { - - if (CheckKey(VK_SHIFT)) // S-^R = Reload settings - { - - PrintBottomString("%s", NEWTRODIT_PROMPT_RELOAD_SETTINGS); - if (YesNoPrompt()) - { - if (LoadSettings(settings_file, run_macro, &sigsegvScreen, &Tab_stack[file_index])) // Reload settings - { - LoadAllNewtrodit(); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - PrintBottomString("%s", NEWTRODIT_SETTINGS_RELOADED); - } - else - { - PrintBottomString("%s", NEWTRODIT_ERROR_RELOAD_SETTINGS); - } - getch_n(); - } - DisplayCursorPos(&Tab_stack[file_index]); - ShowBottomMenu(); - } - else - { - - // ^R = Reload file - PrintBottomString("%s", NEWTRODIT_PROMPT_RELOAD_FILE); - - if (YesNoPrompt()) - { - ReloadFile(&Tab_stack[file_index]); - if (Tab_stack[file_index].is_readonly && !Tab_stack[file_index].is_untitled) - { - PrintBottomString("%s", NEWTRODIT_WARNING_READONLY_FILE); - c = -2; - } - } - else - { - ShowBottomMenu(); - } - } - ch = 0; - - continue; - } - - if (ch & BIT_ESC224) // Special keys: 224 (0xE0) - { - - c = -32; - -#ifdef _WIN32 - switch (ch & (~BIT_ESC224)) -#else - switch (ch) -#endif - { - - case UP: - // Up arrow - if (_ypos > 1) - { - SelectCheck(&Tab_stack[file_index]); - - _ypos--; - - if (Tab_stack[file_index].strsave[_ypos][_xpos] == '\0') - { - - _xpos = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - SetDisplayX(&Tab_stack[file_index]); - } - - SelectEnd(&Tab_stack[file_index], _xpos, _ypos); - } - if (!UpdateHorizontalScroll(&Tab_stack[file_index], false)) - { - UpdateScrolledScreen(&Tab_stack[file_index]); - } - break; - - case LEFT: - // Left arrow - - if (_xpos > 0) - { - SelectCheck(&Tab_stack[file_index]); - - if (Tab_stack[file_index].strsave[_ypos][_xpos - 1] == 9) - { - // relative_xpos[_ypos] -= TAB_WIDE; - } - - _xpos--; - - SetDisplayX(&Tab_stack[file_index]); - UpdateHorizontalScroll(&Tab_stack[file_index], false); - } - else if (_ypos > 1) - { - SelectCheck(&Tab_stack[file_index]); - - _xpos = NoLfLen(Tab_stack[file_index].strsave[--_ypos]); - SetDisplayX(&Tab_stack[file_index]); - UpdateScrolledScreen(&Tab_stack[file_index]); - } - - break; - case RIGHT: - // Right arrow - - if (Tab_stack[file_index].strsave[_ypos][_xpos] != '\0') - { - if (_xpos == NoLfLen(Tab_stack[file_index].strsave[_ypos])) - { - if (_ypos < Tab_stack[file_index].bufy - 1) - { - if (Tab_stack[file_index].strsave[_ypos + 1][0] != '\0' || LineContainsNewLine(&Tab_stack[file_index], _ypos)) - { - SelectCheck(&Tab_stack[file_index]); - - _xpos = 0; - _ypos++; - if (!UpdateHorizontalScroll(&Tab_stack[file_index], true)) - { - UpdateScrolledScreen(&Tab_stack[file_index]); - } - } - } - } - else - { - SelectCheck(&Tab_stack[file_index]); - - _xpos++; - SelectEnd(&Tab_stack[file_index], _xpos, _ypos); - - SetDisplayX(&Tab_stack[file_index]); - UpdateHorizontalScroll(&Tab_stack[file_index], false); - } - } - if (BufferLimit(&Tab_stack[file_index])) - { - ShowBottomMenu(); - continue; - } - - break; - case DOWN: - // Down arrow - - if (_ypos <= Tab_stack[file_index].linecount) - { - n2 = _ypos; - if (_ypos < Tab_stack[file_index].bufy - 1) - { - if (Tab_stack[file_index].strsave[_ypos + 1][0] != '\0' || LineContainsNewLine(&Tab_stack[file_index], _ypos)) - { - SelectCheck(&Tab_stack[file_index]); - - if (Tab_stack[file_index].strsave[_ypos + 1][_xpos] == '\0') - { - _xpos = NoLfLen(Tab_stack[file_index].strsave[_ypos + 1]); // Add tab wide - } - _ypos++; - } - } - if (BufferLimit(&Tab_stack[file_index])) - { - _ypos = n2; // Restore ypos if a position outside the buffer is reached - ShowBottomMenu(); - continue; - } - if (!UpdateHorizontalScroll(&Tab_stack[file_index], true)) - { - if (_ypos <= Tab_stack[file_index].linecount) - { - UpdateScrolledScreen(&Tab_stack[file_index]); - } - } - } - - break; - - case PGUP: - - n = _xpos; - - (_ypos < YSCROLL - 1) ? (_ypos = 1) : (_ypos -= YSCROLL - 1); - if (NoLfLen(Tab_stack[file_index].strsave[_ypos]) < n) - { - _xpos = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - } - if (!UpdateHorizontalScroll(&Tab_stack[file_index], true)) - { - UpdateScrolledScreen(&Tab_stack[file_index]); - } - break; - case PGDW: - if (_ypos < Tab_stack[file_index].linecount) - { - n = _xpos; - - (_ypos + YSCROLL - 1 > Tab_stack[file_index].linecount) ? (_ypos = Tab_stack[file_index].linecount) : (_ypos += YSCROLL - 1); - if (_ypos >= Tab_stack[file_index].bufy) - { - _ypos = Tab_stack[file_index].bufy - 1; - } - if (NoLfLen(Tab_stack[file_index].strsave[_ypos]) < n) - { - _xpos = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - } - if (!UpdateHorizontalScroll(&Tab_stack[file_index], true)) - { - UpdateScrolledScreen(&Tab_stack[file_index]); - } - } - break; - case HOME: - // HOME key - _xpos = 0; - SelectCheck(&Tab_stack[file_index]); - - UpdateHorizontalScroll(&Tab_stack[file_index], true); - - break; - case END: - // END key - SelectCheck(&Tab_stack[file_index]); - - n = _xpos; - _xpos = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - if (n == _xpos) // Optimization - { - break; - } - SetDisplayX(&Tab_stack[file_index]); - UpdateHorizontalScroll(&Tab_stack[file_index], false); - break; - case CTRLEND: - if (_ypos < Tab_stack[file_index].linecount || (_ypos == Tab_stack[file_index].linecount && _xpos < NoLfLen(Tab_stack[file_index].strsave[_ypos]))) - { - SelectCheck(&Tab_stack[file_index]); - - // ^END key - _ypos = (Tab_stack[file_index].linecount >= Tab_stack[file_index].bufy) ? Tab_stack[file_index].bufy - 1 : Tab_stack[file_index].linecount; - Tab_stack[file_index].last_y = _ypos; - _xpos = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - SetDisplayX(&Tab_stack[file_index]); - - if (!UpdateScrolledScreen(&Tab_stack[file_index])) - { - UpdateHorizontalScroll(&Tab_stack[file_index], false); - } - } - - break; - case CTRLHOME: - // ^HOME key - SelectCheck(&Tab_stack[file_index]); - - _xpos = 0; - _ypos = 1; - - if (!UpdateScrolledScreen(&Tab_stack[file_index])) - { - UpdateHorizontalScroll(&Tab_stack[file_index], true); - } - - Tab_stack[file_index].last_y = _ypos; - - break; - - case INS: - // INS key - replaceChar = !replaceChar; - if (cursorSizeInsert) - { - replaceChar ? SetCursorSettings(true, CURSIZE_INS) : SetCursorSettings(true, CURSIZE); - } - - break; - case F12: // F12 - { - if (devMode) - { - PrintBottomString("Keyword count: %d. Language: %s", Tab_stack[file_index].Syntaxinfo.keyword_count, Tab_stack[file_index].Syntaxinfo.syntax_lang); - c = -2; - } - break; - } - case DEL: // DEL and S-DEL - // SelectDelete(&Tab_stack[file_index], true); - if (CheckKey(VK_SHIFT)) // S-DEL - { - if (Tab_stack[file_index].selection.is_selected) - { - SelectDelete(&Tab_stack[file_index], true); - } - else if (_ypos > 0) - { - DeleteRow(Tab_stack[file_index].strsave, _ypos, Tab_stack[file_index].bufy - 1); - - SetDisplayX(&Tab_stack[file_index]); - ClearPartial(lineCount ? (Tab_stack[file_index].linecount_wide) : 0, (Tab_stack[file_index].display_y + 1 > YSCROLL ? Tab_stack[file_index].display_y : YSCROLL), XSIZE - (lineCount ? (Tab_stack[file_index].linecount_wide) : 0), (YSIZE - Tab_stack[file_index].display_y) - 1); - DisplayFileContent(&Tab_stack[file_index], stdout, Tab_stack[file_index].display_y - 1); - - _xpos = 0; - Tab_stack[file_index].is_modified = true; - Tab_stack[file_index].linecount--; - } - } - else // DEL key - { - - if (Tab_stack[file_index].selection.is_selected) - { - SelectDelete(&Tab_stack[file_index], true); - } - else if (strlen_n(Tab_stack[file_index].strsave[_ypos]) > 0) // TODO: Fix this bug in the line number 1 a - { - SetDisplayY(&Tab_stack[file_index]); - DeleteChar(Tab_stack[file_index].strsave[_ypos], _xpos); - n = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - if (_xpos < n || (Tab_stack[file_index].strsave[_ypos][_xpos] == '\0' && _ypos >= Tab_stack[file_index].linecount)) // Is this needed? (2023/06/07) - { - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y); - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - ClearPartial(n + (lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y, 1, 1); - Tab_stack[file_index].is_modified = true; - } - else - { - if (_ypos < Tab_stack[file_index].bufy - 1 && _ypos < Tab_stack[file_index].linecount) // Don't try to delete a non-existing row - { - - memset(Tab_stack[file_index].strsave[_ypos] + n, 0, Tab_stack[file_index].bufx - n); // Empty the new line - strncat(Tab_stack[file_index].strsave[_ypos], Tab_stack[file_index].strsave[_ypos + 1], strlen_n(Tab_stack[file_index].strsave[_ypos + 1])); // Concatenate the next line - - DeleteRow(Tab_stack[file_index].strsave, _ypos + 1, Tab_stack[file_index].bufy - 1); // Delete the old row, shifting other rows up - Tab_stack[file_index].linecount--; - if (!UpdateScrolledScreen(&Tab_stack[file_index])) - { - ClearPartial(0, Tab_stack[file_index].display_y, XSIZE, (YSIZE - Tab_stack[file_index].display_y) - 1); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - Tab_stack[file_index].is_modified = true; - } - } - } - } - break; - } - continue; - } -#ifdef _WIN32 - if (ch == CTRLM && !CheckKey(VK_RETURN) && !_NEWTRODIT_OLD_SUPPORT && !GetAsyncKeyState(VK_RETURN)) // ^M = Toggle mouse - { - if (!CheckKey(VK_SHIFT)) - { - - ToggleOption(&partialMouseSupport, NEWTRODIT_MOUSE, false); - c = -2; - ch = 0; - continue; - } - } - - if ((ch == ENTER && CheckKey(VK_RETURN)) || (ch == ENTER && _NEWTRODIT_OLD_SUPPORT)) // Enter character -#else - if (ch == ENTER) -#endif - { - SelectDelete(&Tab_stack[file_index], true); - if (_ypos < Tab_stack[file_index].bufy - 1 && Tab_stack[file_index].linecount < Tab_stack[file_index].bufy - 1) - { - - InsertNewRow(&Tab_stack[file_index], &_xpos, &_ypos, Tab_stack[file_index].display_y, Tab_stack[file_index].bufx, true, true); - _xpos = AutoIndent(&Tab_stack[file_index]); // Set the X position depending if auto indent is enabled or not - - if (!UpdateHorizontalScroll(&Tab_stack[file_index], true)) - { - UpdateScrolledScreen(&Tab_stack[file_index]); - } - - Tab_stack[file_index].linecount++; // Increment line count - Tab_stack[file_index].is_modified = true; - } - } - if (ch == CTRLE) // ^E = Toggle syntax highlighting / S-^E = Set syntax highlighting rules file - { - if (CheckKey(VK_SHIFT)) - { - PrintBottomString("%s", NEWTRODIT_PROMPT_SYNTAX_FILE); - - syntax_file = TypingFunction(32, 255, MAX_PATH, NULL); - if (syntax_file[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], syntax_file); - continue; - } - if (LoadSyntaxScheme(syntax_file, &Tab_stack[file_index])) // Change keywords size - { - syntaxHighlighting = true; - Tab_stack[file_index].Syntaxinfo.syntax_file = FullPath(syntax_file); - Tab_stack[file_index].Syntaxinfo.keyword_count = syntaxKeywordsSize; - LoadAllNewtrodit(); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - - PrintBottomString(NEWTRODIT_SYNTAX_HIGHLIGHTING_LOADED, Tab_stack[file_index].Syntaxinfo.syntax_lang); - } - else - { - PrintBottomString("%s", NEWTRODIT_SYNTAX_HIGHLIGHTING_FAILED); - } - getch_n(); - - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - ch = 0; - continue; - } - else - { - ToggleOption(&syntaxHighlighting, NEWTRODIT_SYNTAX_HIGHLIGHTING, false); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - c = -2; - } - - ch = 0; - continue; - } - if (ch == CTRLF) // ^F = Find string - { - - // Empty values - // memset(find_string, 0, sizeof find_string); - n2 = _ypos; - - c = 0; - - findInsensitive = false; - if (CheckKey(VK_SHIFT)) - { - findInsensitive = true; - PrintBottomString("%s", NEWTRODIT_PROMPT_FIND_STRING_INSENSITIVE); - } - else - { - PrintBottomString("%s", NEWTRODIT_PROMPT_FIND_STRING); - } - - find_string = TypingFunction(32, 255, MAX_PATH, NULL); - if (find_string[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], find_string); - continue; - } - - FindNewtroditString(&Tab_stack[file_index], find_string); - - ch = 0; - continue; - } -#ifdef _WIN32 - if (ch & BIT_ESC0) -#else - if (ch & BIT_ESC224) -#endif - { - switch (ch & ~(BIT_ESC0)) - { - case CTRLALTR: // ^A-R (ROT13) - - if (rot13(Tab_stack[file_index].strsave[_ypos])) - { - ClearPartial(0, Tab_stack[file_index].display_y, XSIZE, 1); - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y); - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - } - break; - case CTRLALTU: // A-^U (Uppercase) - for (int i = 0; i < strlen_n(Tab_stack[file_index].strsave[_ypos]); i++) - { - Tab_stack[file_index].strsave[_ypos][i] = toupper(Tab_stack[file_index].strsave[_ypos][i]); - } - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y); - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - break; - - case CTRLALTL: // A-^L (Lowercase) - for (int i = 0; i < strlen_n(Tab_stack[file_index].strsave[_ypos]); i++) - { - Tab_stack[file_index].strsave[_ypos][i] = tolower(Tab_stack[file_index].strsave[_ypos][i]); - } - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y); - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - break; - case CTRLALTN: // A-^N (New file and save) - - if (CheckKey(VK_MENU)) - { - - if (NewFile(&Tab_stack[file_index])) - { - PrintBottomString("%s", NEWTRODIT_NEW_FILE_CREATED); - getch_n(); - SaveFile(&Tab_stack[file_index], NULL, true); - } - else - { - PrintBottomString("%s", NEWTRODIT_ERROR_NEW_FILE); - getch_n(); - } - - DisplayCursorPos(&Tab_stack[file_index]); - - ShowBottomMenu(); - } - break; - - case F1: // F1 key - - NewtroditHelp(); - - LoadAllNewtrodit(); - - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - DisplayCursorPos(&Tab_stack[file_index]); - break; - case F2: // F2 key - if (Tab_stack[file_index].is_untitled || !Tab_stack[file_index].is_saved) - { - if (!SaveFile(&Tab_stack[file_index], NULL, false)) - { - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - ch = 0; - continue; - } - } - - PrintBottomString("%s", NEWTRODIT_PROMPT_RENAME_FILE); - newname = TypingFunction(32, 255, MAX_PATH, NULL); - if (newname[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], newname); - break; - } - - if (!CheckFile(newname)) - { - PrintBottomString("%s", NEWTRODIT_PROMPT_OVERWRITE); - if (YesNoPrompt() && remove(newname)) - { - PrintBottomString("%s%s", NEWTRODIT_FS_FILE_DELETE, newname); - WriteLogFile("%s%s", NEWTRODIT_FS_FILE_DELETE, newname); - getch_n(); - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - free(newname); - break; - } - } -#ifdef _WIN32 - if (MoveFile(Tab_stack[file_index].filename, newname)) -#else - if (rename(Tab_stack[file_index].filename, newname)) -#endif - { - PrintBottomString("%s%s", NEWTRODIT_FILE_RENAMED, newname); - WriteLogFile("%s%s", NEWTRODIT_FILE_RENAMED, newname); - strncpy_n(Tab_stack[file_index].filename, newname, MAX_PATH); - - UpdateTitle(&Tab_stack[file_index]); - CenterText(StrLastTok(Tab_stack[file_index].filename, PATHTOKENS), 0); - DisplayTabIndex(&Tab_stack[file_index]); - - DisplayFileType(); - } - else - { - PrintBottomString("%s", NEWTRODIT_FS_FILE_RENAME); - WriteLogFile("%s", NEWTRODIT_FS_FILE_RENAME); - } - - free(newname); - - getch_n(); - - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - ch = 0; - break; - case F5: // F5 key = Run macro - if (!run_macro) - { - if (!Tab_stack[file_index].is_untitled && Tab_stack[file_index].is_saved) - { -#ifdef _WIN32 - GetFullPathName(Tab_stack[file_index].filename, sizeof(Tab_stack[file_index].filename), tmp, NULL); -#else - tmp = strdup(FullPath(Tab_stack[file_index].filename)); - StartProcess(tmp); -#endif - StartProcess(tmp); - } - } - else - { - tmp = strdup(run_macro); - tmp = ReplaceString(strdup(tmp), NEWTRODIT_MACRO_CURRENT_FILE, StrLastTok(Tab_stack[file_index].filename, PATHTOKENS), &n); - if (Tab_stack[file_index].is_untitled) - { - tmp = ReplaceString(strdup(tmp), NEWTRODIT_MACRO_FULL_PATH, Tab_stack[file_index].filename, &n); - tmp = ReplaceString(strdup(tmp), NEWTRODIT_MACRO_CURRENT_DIR, SInf.dir, &n); - } - else - { - tmp = ReplaceString(strdup(tmp), NEWTRODIT_MACRO_FULL_PATH, FullPath(Tab_stack[file_index].filename), &n); - get_path_directory(FullPath(Tab_stack[file_index].filename), ptr); - tmp = ReplaceString(strdup(tmp), NEWTRODIT_MACRO_CURRENT_DIR, ptr, &n); - tmp = ReplaceString(strdup(tmp), NEWTRODIT_MACRO_CURRENT_EXTENSION, StrLastTok(Tab_stack[file_index].filename, "."), &n); - } - WriteLogFile("Running macro: %s", tmp); - StartProcess(tmp); - } - - ch = 0; - break; - case F6: // F6 key = Insert date and time - - temp_strsave = GetTime(showMillisecondsInTime); - - if (_xpos + strlen_n(temp_strsave) < Tab_stack[file_index].bufx - 1) // TODO: Change this - { - - n = strlen_n(Tab_stack[file_index].strsave[_ypos]); - InsertStr(Tab_stack[file_index].strsave[_ypos], temp_strsave, _xpos, false, Tab_stack[file_index].bufx); - - _xpos += strlen_n(Tab_stack[file_index].strsave[_ypos]) - n; // Increase the X position by substracting, prevent a cursor move if the insertion is successful - - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y); - - if (_xpos <= XSIZE) - { - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - } - } - - break; - - case F9: // F9 = Compile - if (!Tab_stack[file_index].is_untitled) - { - snprintf(tmp, DEFAULT_BUFFER_X, "%s %s %s -o %s.exe", Tab_stack[file_index].Compilerinfo.path, Tab_stack[file_index].Compilerinfo.flags, FullPath(Tab_stack[file_index].filename), FullPath(Tab_stack[file_index].filename)); - StartProcess(tmp); - WriteLogFile("Started compiler (command line '%s') ", tmp); - } - - break; - case F10: // F10 - StartProcess("explorer.exe ."); // Open current directory in explorer - break; - case SHIFTF5: // S-F5 (Set macro) - PrintBottomString("%s", NEWTRODIT_PROMPT_CREATE_MACRO); - macro_input = TypingFunction(32, 255, MACRO_ALLOC_SIZE, NULL); - if (macro_input[0] == '\0') - { - FunctionAborted(&Tab_stack[file_index], macro_input); - break; - } - - strncpy_n(run_macro, macro_input, MACRO_ALLOC_SIZE); - free(macro_input); - PrintBottomString("%s%s", NEWTRODIT_MACRO_SET, macro_input); - WriteLogFile("%s%s", NEWTRODIT_MACRO_SET, macro_input); - c = -2; - break; - case SHIFTF10: // S-F10 key - StartProcess("cmd.exe"); // Open command prompt - break; - case CTRLF1: // ^F1 key - SetCursorSettings(false, GetConsoleInfo(CURSOR_SIZE)); - ClearPartial(0, 1, XSIZE, YSIZE - 1); - n = strlen_n(join("Contribute at ", newtrodit_repository)); - ptr = ProgInfo(); - if (n < strlen_n(ptr)) - { - n += (strlen_n(ptr) - n); - } - SetColor(fg_color); - ClearPartial((XSIZE / 2) - (n / 2) - 1, (YSIZE / 2) - 3, n + 2, 7); // Create a box - CenterText("About Newtrodit", (YSIZE / 2) - 2); - CenterText(ptr, (YSIZE / 2)); - // I know it's not the best way to do it, but it works - CenterText(join("Contribute at ", newtrodit_repository), (YSIZE / 2) + 2); - free(ptr); - - getch_n(); - ClearPartial(0, 1, XSIZE, YSIZE - 1); - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - SetCursorSettings(true, GetConsoleInfo(CURSOR_SIZE)); - - break; - case CTRLF4: // ^F4 - if (!CheckKey(VK_SHIFT)) - { - - CloseFile(&Tab_stack[file_index]); - PrintBottomString("%s", NEWTRODIT_FILE_CLOSED); - c = -2; - ch = 0; - break; - } - - case ALTF4: // A-F4 key - if (!CheckKey(VK_CONTROL)) - { - QuitProgram(SInf.color); - ShowBottomMenu(); - continue; - } - break; - - /* This one (148) doesn't work on Linux */ - case 148: // ^TAB / S-^TAB (Switch file) - SwitchTab(&Tab_stack[file_index], CheckKey(VK_SHIFT)); - break; - - case ALTHOME: // A-HOME key "smart home" (go to the first non-whitespace character) - _xpos = strspn(Tab_stack[file_index].strsave[_ypos], " \t"); - UpdateHorizontalScroll(&Tab_stack[file_index], true); - - break; - case ALTEND: // A-END key "smart end" (go to the last non-whitespace character) - n = NoLfLen(Tab_stack[file_index].strsave[_ypos]); - - while ((Tab_stack[file_index].strsave[_ypos][n - 1] == ' ' || Tab_stack[file_index].strsave[_ypos][n - 1] == '\t') && Tab_stack[file_index].strsave[_ypos][n - 1] != '\0') - { - n--; - } - - _xpos = n + (TokCount(Tab_stack[file_index].strsave[_ypos], "\t") * TAB_WIDE); - - if (_xpos < 0) - { - _xpos = 0; - } - - break; - } - - ch = 0; - continue; - } - - if (ch == CTRLS) // ^S - { - n = !!CheckKey(VK_SHIFT); - SaveFile(&Tab_stack[file_index], NULL, n); - - ch = 0; - continue; - } - if (ch == CTRLV) // ^V = Paste - { -#ifdef _WIN32 - PasteClipboardNewtrodit(&Tab_stack[file_index]); -#else - PrintBottomString("Pasting from clipboard is not supported in Linux."); - c = -2; -#endif - ch = 0; - continue; - } - - if (ch == CTRLD) // ^D (Debug tool/dev mode) / S-^D = Toggle dev mode - { - ch = 0; - if (CheckKey(VK_SHIFT)) - { - ToggleOption(&devMode, NEWTRODIT_DEV_TOOLS, false); - } - else - { - if (devMode) - { - PrintBottomString("\"%.*s\"", strcspn(Tab_stack[file_index].strsave[_ypos], Tab_stack[file_index].newline), Tab_stack[file_index].strsave[_ypos]); - } - } - - c = -2; - continue; - } - if (ch == CTRLW) // ^W - { - if (!CheckKey(VK_SHIFT)) - { - if ((n = CloseFile(&Tab_stack[file_index])) == 1) - { - PrintBottomString("%s", NEWTRODIT_FILE_CLOSED); - WriteLogFile("%s", NEWTRODIT_FILE_CLOSED); - } - else if (n < 0) - { - PrintBottomString("%s", NEWTRODIT_ERROR_FAILED_CLOSE_FILE); - WriteLogFile("%s", NEWTRODIT_ERROR_FAILED_CLOSE_FILE); - } - - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - c = -2; - ch = 0; - continue; - } - else - { - if (devMode) - { - clock_t st = clock(); - for (int i = 0; i < 1000; i++) - { - RefreshLine(&Tab_stack[file_index], _ypos, Tab_stack[file_index].display_y, false); - } - printf("Syntax h. time taken: %f\n", ((float)(clock() - st)) / CLOCKS_PER_SEC); - syntaxHighlighting = false; - - st = clock(); - for (int i = 0; i < 1000; i++) - { - RefreshLine(&Tab_stack[file_index], _ypos, Tab_stack[file_index].display_y, false); - } - printf("Time taken (No SH): %f\n", ((float)(clock() - st)) / CLOCKS_PER_SEC); - - c = -2; - - /* PrintBottomString("[Dev mode] Are you sure you want to insert junk data? (y/n)"); - if (YesNoPrompt()) - { - memcpy(Tab_stack[file_index].strsave[_ypos] + _xpos, "äº\\&9=)='A€€¨Y¨ª¨ÿ´^^*Ç", 37); - PrintBottomString("Warning: Junk data inserted for dev mode testing."); - } - c = -2; - - ch = 0; - continue; */ - } - } - } - - if (ch == CTRLQ) // ^Q = Quit program ; S-^Q = Count lines of code in files - { - if (!CheckKey(VK_SHIFT)) - { - QuitProgram(SInf.color); - ShowBottomMenu(); - SetColor(bg_color); - ch = 0; - continue; - } - else - { - n = 0; - n2 = 0; - for (int i = 0; i < open_files; i++) - { - n += Tab_stack[i].linecount; - for (int k = 0; k < Tab_stack[i].linecount; k++) - { - n2 += strlen_n(Tab_stack[i].strsave[k]); - } - } - PrintBottomString("%d lines of code (total %d bytes) in %d opened files.", n, n2, open_files); - ch = 0; - c = -2; - continue; - } - } - if (ch == CTRLX) // ^X = Cut - { - - if (useOldKeybindings) - { - if (!CheckKey(VK_SHIFT)) - { - QuitProgram(SInf.color); - ShowBottomMenu(); - SetColor(bg_color); - ch = 0; - } - } - else - { - if (!CheckKey(VK_SHIFT)) - { - if (Tab_stack[file_index].strsave[_ypos][0] != '\0') - { - - /* Tab_stack[file_index].Ustack->size = strlen_n(Tab_stack[file_index].strsave[_ypos]); - Tab_stack[file_index].Ustack->line = malloc(sizeof(char) * (Tab_stack[file_index].Ustack->size + 1)); - memset(Tab_stack[file_index].Ustack->line, 0, Tab_stack[file_index].Ustack->size); - - Tab_stack[file_index].Ustack->line = strdup(Tab_stack[file_index].strsave[_ypos]); - Tab_stack[file_index].Ustack->line_count = _ypos; - Tab_stack[file_index].Ustack->line_pos = _xpos; - Tab_stack[file_index].Ustack->create_nl = false; - Tab_stack[file_index].Ustack++->create_nl = false; */ -#ifdef _WIN32 - SetClipboardNewtrodit(Tab_stack[file_index].strsave[_ypos]); -#endif - memset(Tab_stack[file_index].strsave[_ypos], 0, strlen_n(Tab_stack[file_index].strsave[_ypos])); - ClearPartial((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y, XSIZE - (lineCount ? Tab_stack[file_index].linecount_wide : 0), 1); - _xpos = 0; - } - - ch = 0; - continue; - } - } - - continue; - } - if (ch == CTRLBS) // ^Backspace - { - SelectDelete(&Tab_stack[file_index], true); - if (_xpos > 0) - { - /* Tab_stack[file_index].Ustack->size = strlen_n(Tab_stack[file_index].strsave[_ypos]) + 1; - Tab_stack[file_index].Ustack->line = malloc(Tab_stack[file_index].Ustack->size); - memset(Tab_stack[file_index].Ustack->line, 0, Tab_stack[file_index].Ustack->size); - Tab_stack[file_index].Ustack->line = strdup(Tab_stack[file_index].strsave[_ypos]); // If it's not a duplicate, the value will change - Tab_stack[file_index].Ustack->line_count = _ypos; - Tab_stack[file_index].Ustack->line_pos = _xpos; - Tab_stack[file_index].Ustack->create_nl = false; - Tab_stack[file_index].Ustack->delete_nl = false; */ - n = strlen_n(Tab_stack[file_index].strsave[_ypos]); - bs_tk = TokBackPos(Tab_stack[file_index].strsave[_ypos], "()[]{}\t ", "?!"); - DeleteStr(Tab_stack[file_index].strsave[_ypos], bs_tk, _xpos - bs_tk); - if (n != strlen_n(Tab_stack[file_index].strsave[_ypos])) - { - _xpos = bs_tk; - memset(Tab_stack[file_index].strsave[_ypos] + strlen_n(Tab_stack[file_index].strsave[_ypos]), 0, Tab_stack[file_index].bufx - strlen_n(Tab_stack[file_index].strsave[_ypos])); // Empty the buffer - } - RefreshLine(&Tab_stack[file_index], _ypos, Tab_stack[file_index].display_y, true); - } - else - { - if (_ypos > 1) - { - InsertDeletedRow(&Tab_stack[file_index]); - if (!UpdateScrolledScreen(&Tab_stack[file_index])) - { - ClearPartial(0, 1, XSIZE, YSIZE - 2); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - Tab_stack[file_index].linecount--; - } - } - - ch = 0; - continue; - } - - if (ch == CTRLY) // ^Y = Redo - { - - /* strncpy_n(undo_stack, Tab_stack[file_index].strsave[undo_stack_line], BUFFER_X); - strncpy_n(Tab_stack[file_index].strsave[undo_stack_line], redo_stack, BUFFER_X); - LoadAllNewtrodit(); - FunctionAborted(&Tab_stack[file_index]); - fflush(stdout); - - ch = 0; - continue;*/ - } - - if (ch == CTRLZ) // ^Z = Undo - { - /* - if (undo_stack_tree > 0) - { - undo_stack_tree--; - _xpos = Tab_stack[file_index].Ustack->line_pos; - _ypos = Tab_stack[file_index].Ustack->line_count; - if (Tab_stack[file_index].Ustack->create_nl == true) - { - InsertDeletedRow(&Tab_stack[file_index]); - } - if (Tab_stack[file_index].Ustack->delete_nl == true) - { - InsertRow(Tab_stack[file_index].strsave, _xpos, _ypos, Tab_stack[file_index].Ustack->line); - Tab_stack[file_index].strsave[Tab_stack[file_index].Ustack->line_count] = strdup(Tab_stack[file_index].Ustack->line); - } - if (!UpdateScrolledScreen(&Tab_stack[file_index])) - { - ClearPartial(0, Tab_stack[file_index].display_y, XSIZE, YSIZE - Tab_stack[file_index].display_y - 1); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - else - { - Tab_stack[file_index].strsave[_ypos] = Tab_stack[file_index].Ustack->line; - } - if (strlen_n(Tab_stack[file_index].Ustack->line) < strlen_n(Tab_stack[file_index].strsave[ypos])) - { - xpos = NoLfLen(Tab_stack[file_index].Ustack->line); - } - - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), _ypos); - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - } - - ch = 0; - continue; - */ - } - - if (ch == CTRLH && !CheckKey(BS) && CheckKey(VK_CONTROL)) // ^H = Replace string / S-^H = Same as F1 (opens help) - { - ch = 0; - - if (CheckKey(VK_SHIFT)) - { - NewtroditHelp(); - - LoadAllNewtrodit(); - - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - DisplayCursorPos(&Tab_stack[file_index]); - } - else - { - ClearPartial(0, YSIZE - 2, XSIZE, 2); - - printf("%.*s\n%.*s", wrapSize, NEWTRODIT_PROMPT_FIND_STRING, wrapSize, NEWTRODIT_PROMPT_REPLACE_STRING); - n = _xpos; - gotoxy(strlen_n(NEWTRODIT_PROMPT_FIND_STRING), YSIZE - 2); - find_string = TypingFunction(32, 255, DEFAULT_ALLOC_SIZE, NULL); - if (find_string[0] == '\0') - { - ClearPartial(0, BOTTOM - 1, XSIZE, Tab_stack[file_index].linecount_wide); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - FunctionAborted(&Tab_stack[file_index], replace_string); - continue; - } - gotoxy(strlen_n(NEWTRODIT_PROMPT_REPLACE_STRING), BOTTOM); - replace_string = TypingFunction(32, 255, DEFAULT_ALLOC_SIZE, NULL); - if (replace_string[0] == '\0') - { - ClearPartial(0, BOTTOM - 1, XSIZE, Tab_stack[file_index].linecount_wide); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - - FunctionAborted(&Tab_stack[file_index], replace_string); - continue; - } - - for (int i = 1; i < Tab_stack[file_index].bufy; i++) // Line 0 is unused - { - replace_str_ptr = ReplaceString(Tab_stack[file_index].strsave[i], find_string, replace_string, &replace_count); - if (replace_str_ptr) - { - if (strlen_n(replace_str_ptr) < strlen_n(Tab_stack[file_index].strsave[i])) - { - _xpos = strlen_n(replace_str_ptr); - } - - strncpy_n(Tab_stack[file_index].strsave[i], replace_str_ptr, BUFFER_X); - } - } - - if (strlen_n(Tab_stack[file_index].strsave[_ypos]) < n) - { - _xpos = strlen_n(Tab_stack[file_index].strsave[_ypos]); - } - LoadAllNewtrodit(); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - PrintBottomString("Replaced %d occurrences of '%s'", replace_count, find_string); - c = -2; - ShowBottomMenu(); - DisplayCursorPos(&Tab_stack[file_index]); - if (replace_count > 0) - { - Tab_stack[file_index].is_modified = true; - } - } - continue; - } - -#ifdef _WIN32 - if ((ch == BS && _NEWTRODIT_OLD_SUPPORT == 1) || (ch == BS && CheckKey(BS) && !CheckKey(VK_CONTROL))) // Backspace key (Not Control-H) -#else - if (ch == BS) -#endif - { - SelectDelete(&Tab_stack[file_index], true); - if (_xpos > 0) - { - Tab_stack[file_index].is_modified = true; - _xpos--; - DeleteChar(Tab_stack[file_index].strsave[_ypos], _xpos); - ClearPartial((lineCount ? Tab_stack[file_index].linecount_wide : 0) + (NoLfLen(Tab_stack[file_index].strsave[_ypos])), Tab_stack[file_index].display_y, 2, 1); // Clear the character - gotoxy((lineCount ? Tab_stack[file_index].linecount_wide : 0), Tab_stack[file_index].display_y); - print_line(Tab_stack[file_index].strsave[_ypos], _ypos); - } - else - { - /* Act as END key */ - if (_ypos > 1) - { - Tab_stack[file_index].is_modified = true; - - n = NoLfLen(Tab_stack[file_index].strsave[_ypos - 1]); // Store the length of the line so we can change the X position later - - if (Tab_stack[file_index].strsave[_ypos][0] == '\0' && !LineContainsNewLine(&Tab_stack[file_index], _ypos)) - { - memset(Tab_stack[file_index].strsave[_ypos - 1] + NoLfLen(Tab_stack[file_index].strsave[_ypos - 1]), 0, Tab_stack[file_index].bufx - NoLfLen(Tab_stack[file_index].strsave[_ypos - 1])); - } - else - { - memcpy(Tab_stack[file_index].strsave[_ypos - 1] + NoLfLen(Tab_stack[file_index].strsave[_ypos - 1]), Tab_stack[file_index].strsave[_ypos], NoLfLen(Tab_stack[file_index].strsave[_ypos])); - DeleteRow(Tab_stack[file_index].strsave, _ypos, Tab_stack[file_index].bufy - 1); - } - - Tab_stack[file_index].linecount--; - _xpos = n; // Assign the X position to the old length of the previous line - _ypos--; - - Tab_stack[file_index].linecount--; - if (!UpdateScrolledScreen(&Tab_stack[file_index])) - { - ClearPartial(0, Tab_stack[file_index].display_y, XSIZE, (YSIZE - Tab_stack[file_index].display_y) - 1); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - Tab_stack[file_index].is_modified = true; - - SetDisplayY(&Tab_stack[file_index]); - // printf("Disp Y: %d", Tab_stack[file_index].display_y); - } - } - } - else - { - if (ch != 0) - { - SelectDelete(&Tab_stack[file_index], true); - } - if (ch == TAB && CheckKey(VK_TAB)) // TAB key - { - if (!AutoComplete(&Tab_stack[file_index], _xpos, _ypos)) - { - if (convertTabtoSpaces) - { - ptr = PrintTab(TAB_WIDE); - InsertStr(Tab_stack[file_index].strsave[_ypos], ptr, _xpos, false, Tab_stack[file_index].bufx); - _xpos += TAB_WIDE; - RefreshLine(&Tab_stack[file_index], _ypos, Tab_stack[file_index].display_y, false); - free(ptr); // Free the memory allocated by PrintTab() - } - } - ch = 0; - } - - if (ch > 31) // Printable character - { - Tab_stack[file_index].is_modified = true; - n = -1; - - for (int k = 0; k < sizeof(autocomplete_double) / sizeof(autocomplete_double[0]); k++) - { - if (ch == autocomplete_double[k][0]) - { - n = k; - continue; - } - } - - if (replaceChar || Tab_stack[file_index].strsave[_ypos][_xpos] == '\0') // Insert key not pressed - { - if (n >= 0) - { - memcpy(Tab_stack[file_index].strsave[_ypos] + _xpos, autocomplete_double[n], strlen_n(autocomplete_double[n])); - } - else - { - Tab_stack[file_index].strsave[_ypos][_xpos] = ch; // Add character to buffer - } - - if (_xpos < wrapSize) - { - putchar(ch); - } - } - else - { - if (n >= 0) - { - InsertStr(Tab_stack[file_index].strsave[_ypos], autocomplete_double[n], _xpos, false, Tab_stack[file_index].bufx); - } - else - { - InsertChar(Tab_stack[file_index].strsave[_ypos], ch, _xpos, false, Tab_stack[file_index].bufx); - } - } - - RefreshLine(&Tab_stack[file_index], _ypos, Tab_stack[file_index].display_y, false); // No need to clear the line as it will get overwritten - - _xpos++; - } - else - { - if (ch != 0 && ch <= 26 && ch != ENTER) - { - memset(inbound_ctrl_key, 0, sizeof(inbound_ctrl_key)); // Clear the string for the next key - if (CheckKey(VK_CONTROL)) - { - strcat(inbound_ctrl_key, "Ctrl-"); - } - if (CheckKey(VK_MENU)) - { - strcat(inbound_ctrl_key, "Alt-"); - } - if (CheckKey(VK_SHIFT)) - { - strcat(inbound_ctrl_key, "Shift-"); - } - if (CheckKey(VK_ESCAPE)) - { - strcat(inbound_ctrl_key, "^^["); - } - - inbound_ctrl_key[strlen_n(inbound_ctrl_key)] = ch + 64; // Convert getch return value to ASCII - PrintBottomString(NEWTRODIT_ERROR_INVALID_INBOUND, inbound_ctrl_key); - c = -2; // For later use - } - } - } - - if ((Tab_stack[file_index].strsave[1][0] == '\0' && Tab_stack[file_index].strsave[1][1] == '\0') || Tab_stack[file_index].strsave[1][0] == EOF) // If the document is empty set modified to false - { - Tab_stack[file_index].is_modified = false; - UpdateTitle(&Tab_stack[file_index]); - } - - if (strlen_n(Tab_stack[file_index].strsave[_ypos]) >= Tab_stack[file_index].bufx - (TAB_WIDE * 2) || _ypos > Tab_stack[file_index].bufy || _xpos >= Tab_stack[file_index].bufx - (TAB_WIDE * 2)) // Avoid buffer overflows by resizing the buffer - { - tmp = realloc_n(Tab_stack[file_index].strsave[_ypos], Tab_stack[file_index].bufx, Tab_stack[file_index].bufx + BUFFER_INCREMENT); - Tab_stack[file_index].bufx += BUFFER_INCREMENT; - - if (!tmp) - { - PrintBottomString(NEWTRODIT_ERROR_OUT_OF_MEMORY); - getch_n(); - SaveFile(&Tab_stack[file_index], NULL, false); - ExitRoutine(ENOMEM); - } - else - { - free(Tab_stack[file_index].strsave[_ypos]); - Tab_stack[file_index].strsave[_ypos] = tmp; - } - } - } - - NewtroditCrash("Unexpected program end.", EFAULT); - ExitRoutine(EFAULT); - return 0; + end_editor(); } \ No newline at end of file diff --git a/src/newtrodit.h b/src/newtrodit.h new file mode 100644 index 0000000..1ab1095 --- /dev/null +++ b/src/newtrodit.h @@ -0,0 +1,222 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MAX_PATH +#define MAX_PATH 260 +#endif + +const int DEFAULT_ALLOC_SIZE = 512; + +#if !defined ENABLE_VIRTUAL_TERMINAL_PROCESSING || !defined DISABLE_NEWLINE_AUTO_RETURN +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#define DISABLE_NEWLINE_AUTO_RETURN 0x0008 +#endif + +enum file_flags_modifier +{ + IS_MODIFIED = 1, + IS_SAVED = 2, + IS_UNTITLED = 4, + IS_READONLY = 8, +}; + +const char newtrodit_version[] = "1.0"; +const char newtrodit_date[] = "2024/06/10"; + +typedef struct Line +{ + char *str; // Buffer that contains the line + char *render; + + size_t bufx; // Allocated line size + size_t render_bufx; // Allocated render size + + size_t len; // Line Length + size_t rlen; // Rendered length + + size_t ulen; // UTF-8 length +} Line; + +typedef struct Position +{ + int x; + int y; +} Position; + +typedef struct Select +{ + Position start; + Position end; + bool is_selected; +} Select; + +typedef struct File +{ + char *filename; + char *fullpath; + char *language; // Language (e.g: PowerShell, C, C++, etc.) + + // File information + size_t xpos, ypos; + size_t uxpos; // UTF-8 x position + + size_t display_start; + size_t display_end; + + Line **line; // Store each line file + size_t alloc_lines; + size_t linecount; + long long size; + + size_t linenumber_wide; + size_t linenumber_padding; + + char *newline; + unsigned int file_flags; + + time_t fwrite_time; + time_t fread_time; + Select selection; +} File; // File information. This is used to store all the information about the file. + +typedef struct Editor +{ + int xsize, ysize; // Window size + int open_files; // Number of files open + int file_index; // Current file index + + char *log_file_name; + bool useLogFile; + bool lineNumbers; + bool dirty; + char *status_msg; + +} Editor; // Editor information + +typedef struct Color +{ + int r, g, b; + bool background; +} Color; + +int end_editor(); +int init_editor(); + +#ifdef _WIN32 +#include "win32/graphics_win32.c" +#else +#include "linux/graphics_linux.c" +#endif + +#define _xpos file[ed.file_index]->xpos +#define _ypos file[ed.file_index]->ypos +#define _uxpos file[ed.file_index]->uxpos + +size_t utf8len_n(char *s) +{ + if (!s) + return 0; + return utf8len(s); +} +size_t utf8nlen_n(char *s, size_t n) +{ + if (!s) + return 0; + return utf8nlen(s, n); +} + +size_t strlen_n(char *s) +{ + if (!s) + return 0; + return strlen(s); +} + +int vt_settings(bool enabled) +{ +#ifdef _WIN32 + DWORD lmode; // Process ANSI escape sequences + + GetConsoleMode(hStdout, &lmode); + if (enabled) + { + lmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING & ~DISABLE_NEWLINE_AUTO_RETURN; + } + else + { + + lmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN; + } + return SetConsoleMode(hStdout, lmode); +#endif + return 0; +} + +/* Safe version of strcpy() and strncpy() */ +char *utf8ncpy_n(char *dest, const char *src, size_t count) +{ + // Better version that utf8ncpy() because it always null terminates strings + + if (count) + { + memset(dest, 0, count); + utf8ncat(dest, src, count); + return dest; + } + return NULL; +} + +size_t strrpbrk(char *s, char *find) // Reverse strpbrk, just like strrchr but for multiple characters +{ + size_t findlen = utf8len_n(find); + size_t slen = utf8len_n(s); + for (size_t i = slen; i > 0; i--) + { + for (size_t j = 0; j < findlen; j++) + { + if (s[i - 1] == find[j]) + { + return i - 1; + } + } + } + return 0; +} + +void *realloc_n(void *old, size_t old_sz, size_t new_sz) +{ + void *new = malloc(new_sz); + if (!new) + { + return NULL; + } + memcpy(new, old, old_sz); + free(old); + return new; +} + +int valid_file_name(char *filename) +{ + return utf8pbrk(filename, "*?\"<>|\x1b") == NULL; +} + +char *remove_quotes(char *s) +{ + size_t len = utf8len_n(s); + if (s[0] == L'\"' && s[len - 1] == L'\"') + { + memmove(s, s + 1, len - 2); + s[len] = L'\0'; + } + return s; +} \ No newline at end of file diff --git a/src/newtrodit_gui.c b/src/newtrodit_gui.c index 58bc957..e8c6dad 100644 --- a/src/newtrodit_gui.c +++ b/src/newtrodit_gui.c @@ -1,392 +1,403 @@ -/* - Newtrodit: A console text editor - Copyright (c) 2021-2023 anic17 Software - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see - -*/ - -int SelectPrint(File_info *tstack, size_t yps); - -void TopHelpBar() -{ - int xs = XSIZE; - - SetColor(fg_color); - ClearPartial(0, 0, xs, 1); - printf("%.*s", xs, NEWTRODIT_DIALOG_MANUAL_TITLE); - SetColor(bg_color); - return; -} - -void BottomHelpBar() -{ - SetColor(fg_color); - PrintBottomString(NEWTRODIT_DIALOG_MANUAL); - SetColor(bg_color); - return; -} - -int SetWrapSize() -{ - lineCount ? (wrapSize = XSIZE - 1 - Tab_stack[file_index].linecount_wide) : (wrapSize = XSIZE - 1); - - (wrapSize < 0) ? wrapSize = 0 : wrapSize; // Check if wrapSize is negative - return wrapSize; -} - -int CenterText(char *text, int yps) // Algorithm: (XSIZE / 2) - (len / 2) -{ - if (!text) - { - WriteLogFile("%s", NEWTRODIT_INTERNAL_EXPECTED_NULL); - return 0; - } - SetColor(fg_color); - int center_text = (XSIZE / 2) - (strlen_n(text) / 2); - gotoxy(center_text, yps); - int pos = wrapSize - strlen_n(text); - if (pos < 0) - { - pos = abs(pos); - } - - printf("%.*s", pos, text); - SetColor(bg_color); - return center_text; -} - -int DisplayTabIndex(File_info *tstack) -{ - - if (open_files > 1) - { - int pos = (XSIZE / 2) + (strlen_n(StrLastTok(tstack->filename, PATHTOKENS)) / 2) + (strlen_n(StrLastTok(tstack->filename, PATHTOKENS)) % 2) + 1; // Center text and add a space - gotoxy(pos, 0); - - SetColor(fg_color); - - printf("(%d/%d)", file_index + 1, open_files); - SetColor(bg_color); - } - return 1; -} - -void DisplayFileType() -{ - SetColor(fg_color); - size_t len = strlen_n(Tab_stack[file_index].language); - char *disp_ptr = calloc(len + DEFAULT_ALLOC_SIZE, sizeof(char)); - if (!strcmp(Tab_stack[file_index].language, DEFAULT_LANGUAGE)) - { - strncpy_n(disp_ptr, Tab_stack[file_index].language, len); - } - else - { - snprintf(disp_ptr, len + DEFAULT_ALLOC_SIZE, "File type: %s", Tab_stack[file_index].language); - } - gotoxy(XSIZE - strlen_n(disp_ptr) - 2, 0); // XSIZE - strlen_n(nl_type) - 2 - fputs(disp_ptr, stdout); - free(disp_ptr); - SetColor(bg_color); -} - -void ShowFindMenu() -{ - SetColor(bg_color); - ClearPartial(0, BOTTOM, XSIZE, 1); - - SetColor(fg_color); - fputs("F3", stdout); - SetColor(bg_color); - fputs(": Next occurrence | ", stdout); - SetColor(fg_color); - fputs("F4", stdout); - SetColor(bg_color); - fputs(": Toggle case sensitive | ", stdout); - SetColor(fg_color); - fputs("F5", stdout); - SetColor(bg_color); - fputs(": Only match full words | ", stdout); - SetColor(fg_color); - fputs("ESC", stdout); - SetColor(bg_color); - fputs(": Quit", stdout); - if (!findInsensitive && !matchWholeWord) - { - fputs(" (No modifiers)", stdout); - } - else - { - fputs(" (", stdout); - if (findInsensitive) - { - printf("Case-insensitive"); - } - if (matchWholeWord) - { - if (findInsensitive) - { - fputs(", ", stdout); - } - fputs("Whole words", stdout); - } - fputs(")", stdout); - } -} - -void ShowBottomMenu() -{ - PrintBottomString(NEWTRODIT_DIALOG_BOTTOM_HELP); - return; -} - -void SetCursorSettings(int visible, int size) -{ -#ifdef _WIN32 - HANDLE Cursor = GetStdHandle(STD_OUTPUT_HANDLE); - CONSOLE_CURSOR_INFO info; - info.dwSize = size; - info.bVisible = visible; - SetConsoleCursorInfo(Cursor, &info); -#else - /* info.dwSize = size; - info.bVisible = visible; */ - - // Set cursor size - if (size > 50) - { - printf("\x1B[\x31 q"); // Blinking block - } - else - { - printf("\x1B[\x33 q"); // Blinking underline - } - - // Set cursor visibility - if (visible) - { - printf("\x1B[?25h"); - } - else - { - printf("\x1B[?25l"); - } -#endif -} - -void NewtroditNameLoad() -{ - SetColor(0x70); - ClearPartial(0, 0, XSIZE, 1); - printf(" Newtrodit %s", newtrodit_version); - SetColor(0x07); -} - -void DisplayCursorPos(File_info *tstack) -{ - int cursorvis = GetConsoleInfo(CURSOR_VISIBLE); - SetCursorSettings(false, GetConsoleInfo(CURSOR_SIZE)); - size_t len = strlen_n(NEWTRODIT_DIALOG_BOTTOM_HELP); - ClearPartial(len, BOTTOM, XSIZE - len, 1); - bool linecount_zero = false; - if (fullCursorInfoDisplay) - { - if (!tstack->linecount) - { - linecount_zero = true; - } - size_t linelen = NoLfLen(tstack->strsave[tstack->ypos]); - printf(longPositionDisplay ? "Line %d/%d (%d%%), Column %d/%d (%d%%)" : "Ln %d/%d (%d%%), Col %d/%d (%u%%)", tstack->ypos, tstack->linecount + linecount_zero, 100 * tstack->ypos / (tstack->linecount + linecount_zero), tstack->xpos + 1, linelen + 1, (size_t)100 * (tstack->xpos) / (!linelen ? 1 : linelen)); - } - else - { - printf(longPositionDisplay ? "Line %d, Column %d" : "Ln %d, Col %d", tstack->ypos, tstack->xpos + 1); // +1 because it's zero indexed - } - SetCursorSettings(cursorvis, GetConsoleInfo(CURSOR_SIZE)); -} - -void LoadAllNewtrodit() -{ - SetCursorSettings(false, GetConsoleInfo(CURSOR_SIZE)); // Hide cursor to reduce flickering - SetColor(bg_color); - SetWrapSize(); - - switch (clearAllBuffer) - { - case 0: - ClearScreen(); - break; - case 1: - ClearPartial(0, 0, XSIZE, YSIZE); - break; - default: // We will be using this when we want a full screen refresh from outside the load function - break; - } - NewtroditNameLoad(); - CenterText(StrLastTok(Tab_stack[file_index].filename, PATHTOKENS), 0); - DisplayTabIndex(&Tab_stack[file_index]); - DisplayFileType(); - ShowBottomMenu(); - - if (lineCount) - { - DisplayLineCount(&Tab_stack[file_index], YSIZE - 3, 1); - } - SetCursorSettings(true, GetConsoleInfo(CURSOR_SIZE)); - - gotoxy(0, 1); -} - -void NewtroditCrash(char *crash_reason, int crash_retval) -{ - signal(SIGSEGV, SIG_DFL); // Reset signal handler to avoid infinite crash loops - int get_le = 0; - - char *crash_desc; - -#ifdef _WIN32 - get_le = GetLastError(); - - crash_desc = (LPSTR)GetErrorDescription(get_le); - -#else - get_le = errno; - crash_desc = (char *)GetErrorDescription(get_le); - -#endif - putchar('\a'); - crash_desc[strcspn(crash_desc, "\r")] = 0; - // LoadAllNewtrodit(); // Just to not have a blank screen and make it scary - int errno_temp = errno; - if (!errno_temp) - { - errno_temp = crash_retval; - } - ClearPartial(0, 1, XSIZE, YSIZE - 1); - char *buf = calloc(DEFAULT_ALLOC_SIZE, sizeof(char)); - snprintf(buf, DEFAULT_ALLOC_SIZE * sizeof(char), "Newtrodit ran into a problem and it crashed. We're sorry.\nPlease report this issue to %s/issues\n\nDebug info:\nerrno: 0x%x (%s)\nGetLastError: 0x%x (%s)\nLast known debug information: %s\n\nProgram information:\nVersion: %s\nBuild date: %s\nCommand line arguments:\n", newtrodit_repository, errno_temp, strerror(errno_temp), get_le, crash_desc, last_known_exception, newtrodit_version, newtrodit_build_date); - fputs(buf, stdout); - WriteLogFile("%s", buf); - for (int i = 0; i < SInf.argc; i++) - { - printf("%s ", SInf.argv[i]); // Prints the command line arguments - } - - snprintf(buf, DEFAULT_ALLOC_SIZE * sizeof(char), "\n\nEditing file '%s', line %d, column %d\nTabs open: %d, current tab: %d\n\nReason: %s\n\nPress enter to exit...\n", Tab_stack[file_index].filename, Tab_stack[file_index].ypos, Tab_stack[file_index].xpos + 1, open_files, file_index + 1, crash_reason); - fputs(buf, stdout); - WriteLogFile("%s", buf); - DisplayCursor(true); - getchar(); - ExitRoutine(crash_retval); // Don't perform any cleanup, just exit -} - -int QuitProgram(int color_quit) -{ - if (Tab_stack[file_index].is_modified) // Second condition should never happen - { - PrintBottomString("%s", NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); - if (YesNoPrompt()) - { - SaveFile(&Tab_stack[file_index], NULL, false); - } - } - - PrintBottomString("%s", NEWTRODIT_PROMPT_QUIT); - - if (YesNoPrompt()) - { - SetColor(color_quit); - ClearScreen(); - SetCursorSettings(true, CURSIZE); - RestoreConsoleBuffer(); - ExitRoutine(0); - } - else - { - SetColor(bg_color); - } - - return 0; -} - -void UpdateTitle(File_info *tstack) -{ - if (tstack->is_saved) - { - tstack->fullpath = strdup(FullPath(tstack->filename)); - } - if (tstack->is_modified) - { - SetTitle("Newtrodit - %s (Modified)", (fullPathTitle && tstack->is_saved && !tstack->is_untitled) ? tstack->fullpath : tstack->filename); - } - else - { - SetTitle("Newtrodit - %s", (fullPathTitle && tstack->is_saved && !tstack->is_untitled) ? tstack->fullpath : tstack->filename); - } -} - -void print_line(char *line, size_t yps) -{ - - size_t linelen = NoLfLen(line); - - /* TODO: Add proper selection - - SelectPrint(&Tab_stack[file_index], yps); - */ - printf("%.*s", (linelen > wrapSize) ? wrapSize : linelen, line + Tab_stack[file_index].display_x); - - if (syntaxHighlighting && !syntaxAfterDisplay) - { - color_line(line, Tab_stack[file_index].display_x, 0, yps); - } -} - -int ToggleOption(int *option, char *text, int reloadScreen) -{ - *option ^= 1; - - if (reloadScreen) - { - LoadAllNewtrodit(); - DisplayFileContent(&Tab_stack[file_index], stdout, 0); - } - - if (*option) - { - PrintBottomString("%s%s", text, NEWTRODIT_DIALOG_ENABLED); - WriteLogFile("%s%s", text, NEWTRODIT_DIALOG_ENABLED); - } - else - { - PrintBottomString("%s%s", text, NEWTRODIT_DIALOG_DISABLED); - WriteLogFile("%s%s", text, NEWTRODIT_DIALOG_DISABLED); - } - return *option; -} - -void RefreshLine(File_info *tstack, size_t line_num, size_t disp_y, bool clearLine) -{ - if (clearLine) - { - ClearPartial(lineCount ? tstack->linecount_wide : 0, disp_y, wrapSize, 1); - } - else - { - gotoxy(lineCount ? tstack->linecount_wide : 0, disp_y); - } - - print_line(tstack->strsave[line_num], line_num); -} \ No newline at end of file + +/* void TopHelpBar() +{ + SetColor(fg_color); + ClearPartial(0, 0, ed.xsize, 1); + printf("%.*s", ed.xsize, NEWTRODIT_DIALOG_MANUAL_TITLE); + SetColor(bg_color); + return; +} + +void BottomHelpBar() +{ + SetColor(fg_color); + PrintBottomString(NEWTRODIT_DIALOG_MANUAL); + SetColor(bg_color); + return; +} + */ + +void newtrodit_name_load() +{ + + set_color(title_font_color); + set_color(title_bg_color); + clear_partial(0, 0, ed.xsize, 1); + printf(" Newtrodit %s\n", newtrodit_version); +} + +int center_text(char *text, int yps) // Algorithm: (ed.xsize / 2) - (len / 2) +{ + + int center_text = (ed.xsize / 2) - (utf8len_n(text) / 2); + gotoxy(center_text, yps); + int pos = wrapSize - utf8len_n(text); + if (pos < 0) + { + pos = abs(pos); + } + + printf("%.*s", pos, text); + return center_text; +} + +void display_file_type(File *tstack) +{ + int x = ed.xsize - utf8len_n(tstack->language) - 2; + gotoxy(x, 0); + fputs(tstack->language, stdout); +} + +void display_bottom_bar(char* status) +{ + gotoxy(0, ed.ysize - 1); + fputs((status != NULL) ? status : NEWTRODIT_DIALOG_BOTTOM_HELP, stdout); +} + +void print_message(const char *str, ...) +{ + + va_list args; + va_start(args, str); + char *printbuf = calloc(ed.xsize + 1, sizeof(char)); + vsnprintf(printbuf, ed.xsize + 1, str, args); + clear_partial(0, ed.ysize-1, ed.xsize, 1); + gotoxy(0, ed.ysize-1); + printf(str, printbuf ); + //printf("%.*s", ed.xsize, printbuf); // Don't get out of the buffer + free(printbuf); + va_end(args); + return; +} +/* +void print_message(const char *str, ...) +{ + va_list args; + va_start(args, str); + + va_list argscopy; + va_copy(argscopy, args); + + va_end(argscopy); + + char *printbuf = calloc(ed.xsize+1, sizeof(char)); + vsnprintf(printbuf, ed.xsize + 1, str, args); + va_end(args); + + clear_partial(0, ed.ysize-1, ed.xsize, 1); + gotoxy(0, ed.ysize-1); + + // Do something with printbuf, e.g., print it + printf("%ls", printbuf); + + free(printbuf); +} + */ + +void display_cursor_pos(File *tstack, char* status) +{ + size_t len = 0; + if(!status) + + len = utf8len_n(NEWTRODIT_DIALOG_BOTTOM_HELP); + else + len = utf8len_n(status); + + clear_partial(len, ed.ysize, ed.xsize - len, 1); + size_t linecount_zero = false; + if (fullCursorInfoDisplay) + { + if (!tstack->linecount) + { + linecount_zero = 1; + } + printf(longPositionDisplay ? "Line %zu/%zu (%zu%%), Column %zu/%zu (%zu%%)" : "Ln %zu/%zu (%zu%%), Col %zu/%zu (%zu%%)", tstack->ypos, tstack->linecount + linecount_zero, 100 * tstack->ypos / (tstack->linecount + linecount_zero), tstack->uxpos + 1, tstack->line[_ypos]->ulen + 1, (size_t)100 * (tstack->uxpos) / (!tstack->line[_ypos]->ulen ? 1 : tstack->line[_ypos]->ulen)); + } + else + { + printf(longPositionDisplay ? "Line %zu, Column %zu" : "Ln %zu, Col %zu", tstack->ypos, tstack->uxpos + 1); // +1 because it's zero indexed + } +} + +void display_status(File *tstack, char* status_msg) +{ + display_bottom_bar(status_msg); + display_cursor_pos(tstack, status_msg); +} + + +void load_line_count(File *tstack) +{ + if (ed.lineNumbers) + { + set_color(line_number_bg_color); + set_color(line_number_font_color); + clear_partial(0, 1, tstack->linenumber_wide, tstack->display_end - tstack->display_start); + for(size_t i = tstack->display_start; i < tstack->display_end; i++) + { + printf("%zu\n", i+1); + } + set_color(bg_color); + set_color(fg_color); + } +} + +void load_all_newtrodit(File *tstack, char* status) +{ + clear_screen(); + newtrodit_name_load(); + center_text(tstack->filename, 0); + display_file_type(tstack); + set_color(fg_color); + set_color(bg_color); + display_status(tstack, status); + load_line_count(tstack); + gotoxy(tstack->linenumber_wide+tstack->linenumber_padding, 1); +} + + +void set_cursor_settings(int visible, int size) +{ +#ifdef _WIN32 + HANDLE Cursor = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_CURSOR_INFO info; + info.dwSize = size; + info.bVisible = visible; + SetConsoleCursorInfo(Cursor, &info); +#else + /* info.dsize = size; + info.bVisible = visible; */ + + // Set cursor size + if (size > 50) + { + printf("\x1B[\x31 q"); // Blinking block + } + else + { + printf("\x1B[\x33 q"); // Blinking underline + } + + // Set cursor visibility + if (visible) + { + printf("\x1B[?25h"); + } + else + { + printf("\x1B[?25l"); + } +#endif +} + +/* void UpdateTitle(File *tstack) +{ + if (tstack->is_saved) + { + tstack->fullpath = utf8dup(FullPath(tstack->filename)); + } + if (tstack->is_modified) + { + SetTitle("Newtrodit - %s (Modified)", (fullPathTitle && tstack->is_saved && !tstack->is_untitled) ? tstack->fullpath : tstack->filename); + } + else + { + SetTitle("Newtrodit - %s", (fullPathTitle && tstack->is_saved && !tstack->is_untitled) ? tstack->fullpath : tstack->filename); + } +} */ + +int yes_no_prompt(bool default_yes) +{ + return tolower(getch_n()) == (default_yes ? 'y' : 'n'); +} + +void quit_newtrodit(File *tstack) +{ + if(tstack->file_flags & IS_MODIFIED) + { + print_message(NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); + if(!yes_no_prompt(false)) + { + save_file(tstack, tstack->filename, !!(tstack->file_flags & IS_UNTITLED)); // tstack->file_flags &~ IS_SAVED isn't needed due to being redundant + } + } + print_message(NEWTRODIT_PROMPT_QUIT); + if(yes_no_prompt(true)) + { + end_editor(); + exit(1); + } + ed.dirty = true; +} + +/* char *TypingFunction(int min_ascii, int max_ascii, int max_len, char *oldbuf) +{ + int chr = 0, index = 0; + char *num_str = calloc(max_len + 1, sizeof(utf8_int32_t)); + int startx = 0, starty = ed.ysize-1, orig_cursize = GetConsoleInfo(CURSOR_SIZE); + bool overwrite_mode = false; + size_t cblen = 0, n = -1; + char *clipboard = NULL; + + while (chr != ENTER) // Loop while enter isn't pressed + { + chr = getch_n(); + if (chr == ESC) + { + memset(num_str, 0, max_len); // Empty the string + break; + } + if (chr == BS) // Backspace + { + if (index > 0) + { + DeleteChar(num_str, --index); + ClearPartial(startx + index, starty, (startx + strlen(num_str) - index) >= XSIZE ? (XSIZE - startx - index) : startx + strlen(num_str) - index, 1); + printf("%s", num_str + index); + gotoxy(startx + index, starty); + } + continue; + } + + if (chr == CTRLC) // ^C (Copy to clipboard) + { + SetClipboardNewtrodit(num_str); + continue; + } + if (chr == CTRLV) // ^V (Paste from clipboard) + { + clipboard = GetClipboardNewtrodit(&cblen, true); // Distinguish it from the WinAPI one + if (clipboard) + { + n = 0; + while (clipboard[n] >= min_ascii && clipboard[n] <= max_ascii && n < cblen) // Only count until valid characters are found + { + n++; + } + if (strlen_n(num_str) + n <= max_len && n > 0) + { + num_str = InsertStr(num_str, clipboard, n, false, max_len); + gotoxy(startx, starty); + fputs(num_str, stdout); + index += n; + } + } + else + { + printf("\a"); + } + continue; + } + + if (chr & BIT_ESC0) + { + switch (chr & ~(BIT_ESC0)) + { + case ALTF4: + + QuitProgram(SInf.color); + break; + default: + break; + } + } + if (chr & BIT_ESC224) // Special keys: 224 (0xE0) + { + switch (chr & (~BIT_ESC224)) + { + case LEFT: + if (index > 0) + { + putchar('\b'); + index--; + } + break; + case RIGHT: + if (index < max_len && num_str[index] != '\0') + { + putchar(num_str[index++]); + } + break; + case UP: + if (oldbuf != NULL) + { + memset(num_str, 0, max_len + 1); + index = strlen_n(oldbuf); + memcpy(num_str, oldbuf, index); + + ClearPartial(startx, starty, (startx + strlen(num_str)) >= XSIZE ? (XSIZE - startx) : startx + strlen(num_str), 1); + fputs(num_str, stdout); + gotoxy(startx + index, starty); + } + case DEL: + if (index < max_len) + { + DeleteChar(num_str, index); + ClearPartial(startx, starty, (startx + strlen(num_str)) >= XSIZE ? (XSIZE - startx) : startx + strlen(num_str), 1); + fputs(num_str, stdout); + gotoxy(startx + index, starty); + } + break; + case INS: + overwrite_mode = !overwrite_mode; + SetCursorSettings(true, overwrite_mode ? CURSIZE_INS : CURSIZE); + break; + case HOME: + index = 0; + gotoxy(startx, starty); + break; + case END: + index = strlen_n(num_str); + if (startx + index < XSIZE) + { + gotoxy(startx + index, starty); + } + break; + default: + break; + } + continue; + } + if (chr >= min_ascii && chr <= max_ascii && chr != 0 && ((!overwrite_mode && (strlen(num_str) < max_len && index <= max_len)) || (overwrite_mode && (strlen(num_str) <= max_len && index < max_len)))) // Check if character is a between the range + { + if (overwrite_mode || index >= strlen(num_str)) + { + num_str[index++] = chr; + putchar(chr); + } + else + { + + InsertChar(num_str, chr, index++, false, max_len); + gotoxy(startx, starty); + fputs(num_str, stdout); + gotoxy(startx + index, starty); + } + } + else + { + if (chr != ENTER) + { + putchar('\a'); + } + } + } + SetCursorSettings(cursor_visible, orig_cursize); + bool corrupted = false; + if (max_ascii > 0x7f) + for (int i = 0; i < strlen_n(num_str); i++) + { + if (num_str[i] < min_ascii || num_str[i] > max_ascii) + { + corrupted = true; + num_str[i] = min_ascii; + } + } + if (corrupted) + { + PrintBottomString("Warning: Possible stack corruption detected. Please report this issue."); + getch_n(); + } + return num_str; +} + */ \ No newline at end of file diff --git a/src/newtrodit_gui.h b/src/newtrodit_gui.h new file mode 100644 index 0000000..8e806b4 --- /dev/null +++ b/src/newtrodit_gui.h @@ -0,0 +1,17 @@ +Color title_bg_color = {.r = 204, .g = 204, .b = 204, .background = true}; +Color title_font_color = {.r = 12, .g = 12, .b = 12, .background = false}; + +Color fg_color = {.r = 204, .g = 204, .b = 204, .background = false}; +Color bg_color = {.r = 12, .g = 12, .b = 12, .background = true}; + +Color line_number_bg_color = {.r = 224, .g = 130, .b = 80 , .background = true}; +Color line_number_font_color = {.r = 30, .g = 30, .b = 30, .background = false}; + +void print_message(const char *str, ...); +int save_file(File *tstack, char *savefile, bool saveDialog); + +#include "newtrodit_gui.c" + + + + diff --git a/src/unicode.c b/src/unicode.c new file mode 100644 index 0000000..9e010c8 --- /dev/null +++ b/src/unicode.c @@ -0,0 +1,58 @@ +size_t codepoint_len(int32_t value) +{ + size_t len = 0; + for (int shift = 24; shift >= 0; shift -= 8) + { + if (((value >> shift) & 0xFF)) + len++; + } + return len; +} + + +char *int32_to_char_array(int32_t value, char *output) +{ + // Extract each byte from the int32_t and assign it to the char array + size_t i = 0, val = 0; + for (int shift = 24; shift >= 0; shift -= 8) + { + if ((val = ((value >> shift) & 0xFF))) + output[i++] = val; + } + output[4] = '\0'; + //printf("\nString: '%s'", output); + + return output; +} + + + + +char *insert_utf8_char(Line *line, int32_t value, size_t index) +{ + if (line->len + sizeof(int32_t) > line->bufx - 1) + { + increase_line(line, LINE_SIZE); + } + /* size_t len_check[4] = {0}; + for (size_t i = 0; i < 4; i++) + { + len_check[i] = utf8nlen_n(line->str, (index + i) > line->len ? line->len : (index + i)); + } */ + char* insert_str_utf8 = calloc(sizeof(int32_t)+1, 1); + int32_to_char_array(value, insert_str_utf8); + size_t len = strlen_n(insert_str_utf8); + memmove(line->str + index + len, line->str + index, line->len - index); + memcpy(line->str + index, insert_str_utf8, len); + line->str[line->len + len + index] = '\0'; + line->len = strlen_n(line->str); + line->ulen++; + return line->str; +} + +int display_char(int32_t chr, FILE* fp) +{ + char outbuf[5] = {0}; + int32_to_char_array(chr, outbuf); + return fprintf(fp, "%s", outbuf); +} diff --git a/src/win32/graphics_win32.c b/src/win32/graphics_win32.c new file mode 100644 index 0000000..690c59e --- /dev/null +++ b/src/win32/graphics_win32.c @@ -0,0 +1,139 @@ +#include + +HANDLE hStdout; + +#define TC_NRM "\x1B[0m" /* Normalize color */ + +#define TC_RED "\x1B[1;31m" /* Red */ +#define TC_GRN "\x1B[1;32m" /* Green */ +#define TC_YEL "\x1B[1;33m" /* Yellow */ +#define TC_BLU "\x1B[1;34m" /* Blue */ +#define TC_MAG "\x1B[1;35m" /* Magenta */ +#define TC_CYN "\x1B[1;36m" /* Cyan */ +#define TC_WHT "\x1B[1;37m" /* White */ + +#define TC_B_NRM "\x1B[0m" /* Normalize Bright Color */ +#define TC_B_RED "\x1B[0;31m" /* Bright Red */ +#define TC_B_GRN "\x1B[0;32m" /* Bright Green */ +#define TC_B_YEL "\x1B[0;33m" /* Bright Yellow */ +#define TC_B_BLU "\x1B[0;34m" /* Bright Blue */ +#define TC_B_MAG "\x1B[0;35m" /* Bright Magenta */ +#define TC_B_CYN "\x1B[0;36m" /* Bright Cyan */ +#define TC_B_WHT "\x1B[0;37m" /* Bright White */ + +#define TC_BG_NRM "\x1B[40m" /* Normalize Background Color */ +#define TC_BG_RED "\x1B[41m" /* Background Red */ +#define TC_BG_GRN "\x1B[42m" /* Background Green */ +#define TC_BG_YEL "\x1B[43m" /* Background Yellow */ +#define TC_BG_BLU "\x1B[44m" /* Background Blue */ +#define TC_BG_MAG "\x1B[45m" /* Background Magenta*/ +#define TC_BG_CYN "\x1B[46m" /* Background Cyan */ +#define TC_BG_WHT "\x1B[47m" /* Background White */ + +#define clear_entire_line() fputs("\x1B[2K") +#define clear_line_till_cursor() fputs("\x1B[1K") +#define clear_line_from_cursor() fputs("\x1B[0K") + +void color_id(uint8_t cid, int l) +{ + printf((l) ? "\x1B[38;5;%dm" : "\x1B[48;5;%dm", cid); +} + +void set_color(Color color) +{ + if (color.background) + { + printf("\x1B[48;2;%d;%d;%dm", color.r, color.g, color.b); + } + else + { + printf("\x1B[38;2;%d;%d;%dm", color.r, color.g, color.b); + } +} + +////////////////////////////////////// +// Additional formatting (ANSI) // +////////////////////////////////////// + +#define TC_BLD "\x1B[1m" /* Bold */ +#define TC_DIM "\x1B[2m" /* Dim */ +#define TC_ITAL "\x1B[3m" /* Standout (italics) */ +#define TC_UNDR "\x1B[4m" /* Underline */ +#define TC_BLNK "\x1B[5m" /* Blink */ +#define TC_REV "\x1B[7m" /* Reverse */ +#define TC_INV "\x1B[8m" /* Invisible */ + +#define echo_off() +#define echo_on() +#define canon_off() +#define canon_on() + +void get_cursor(int *X, int *Y) +{ + echo_off(); + canon_off(); + printf("\033[6n"); + scanf("\033[%d;%dR", X, Y); +} +void gotoxy(int x, int y) +{ + printf("\033[%d;%df", y+1, x+1); +} +void move_cursor(int X, int Y) +{ + if (X > 0) + { + printf("\033[%dC", X); + } + else if (X < 0) + { + printf("\033[%dD", (X * -1)); + } + + if (Y > 0) + { + printf("\033[%dB", Y); + } + else if (Y < 0) + { + printf("\033[%dA", (Y * -1)); + } +} + +#define clear_screen() fputs("\x1B[2J", stdout) +#define clear_from_top_to_cursor() fputs("\x1B[1J", stdout) +#define clear_from_cursor_to_bottom() fputs("\x1B[0J", stdout) + +void clear_partial(int x, int y, int width, int height) +{ + char *buf = calloc(width + 1, sizeof(char)); + memset(buf, (char) ' ', width); + for (int i = 0; i < height; i++) + { + gotoxy(x, y + i); + fwrite(buf, width, sizeof(char), stdout); + } + gotoxy(x, y); + free(buf); +} + +void get_cols_rows(int *cols, int *rows) +{ + if (hStdout == INVALID_HANDLE_VALUE) + { + return; + } + CONSOLE_SCREEN_BUFFER_INFO csbi; + if (!GetConsoleScreenBufferInfo(hStdout, &csbi)) + { + return; + } + *cols = csbi.srWindow.Right - csbi.srWindow.Left + 1; + *rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +} + +int alternate_buffer(bool enabled) +{ + fputs(enabled ? "\e[?1049h" : "\e[?1049l", stdout); + return enabled; +} diff --git a/src/win32/input_win32.c b/src/win32/input_win32.c new file mode 100644 index 0000000..f1050af --- /dev/null +++ b/src/win32/input_win32.c @@ -0,0 +1,89 @@ +HANDLE hStdin; + +int getch_n() +{ + int gc_n = 0; + gc_n = getch(); + if (gc_n == 0) + { + gc_n = getch(); + gc_n |= BIT_ESC0; + } + else if (gc_n == 0xE0) + { + gc_n = getch(); + gc_n |= BIT_ESC224; + } + + return gc_n; +} + +InputUTF8 GetNewtroditInput() +{ + DWORD fdwSaveOldMode; + INPUT_RECORD irInBuf[128]; + DWORD cNumRead, i; + InputUTF8 inputchar = {0}; + + if (!GetConsoleMode(hStdin, &fdwSaveOldMode)) + return inputchar; + SetConsoleMode(hStdin, 0); // Set console mode to zero to capture events like Alt-F4 or Control-C + int counter = 0; + char unicodestr[5] = {0}; + // Wait for the events. + + WaitForSingleObject(hStdin, INFINITE); + + if (!ReadConsoleInput( + hStdin, // input buffer handle + irInBuf, // buffer to read into + 128, // size of read buffer + &cNumRead)) // number of records read + return inputchar; + + // Dispatch the events to the appropriate handler. + for (i = 0; i < cNumRead; i++) + { + switch (irInBuf[i].EventType) + { + case KEY_EVENT: // keyboard input + if (irInBuf[i].Event.KeyEvent.uChar.UnicodeChar) + { + if (irInBuf[i] .Event.KeyEvent.bKeyDown) + //printf("%s\tUChar: %hd\t0x%04x\n", irInBuf[i].Event.KeyEvent.bKeyDown ? "Press" : "Release", irInBuf[i].Event.KeyEvent.uChar.UnicodeChar, irInBuf[i].Event.KeyEvent.uChar.UnicodeChar); + counter++; + if (irInBuf[i].Event.KeyEvent.bKeyDown && i < 4) + { + inputchar.utf8char = inputchar.utf8char << 8; + inputchar.utf8char |= (irInBuf[i].Event.KeyEvent.uChar.UnicodeChar) & 0xff; // & ~0xff00 + } + } + else + { + inputchar.flags = irInBuf[i].Event.KeyEvent.wVirtualKeyCode; + } + + break; + } + } + FlushConsoleInputBuffer(hStdin); + + if (irInBuf[0].EventType == KEY_EVENT && irInBuf[0].Event.KeyEvent.bKeyDown) + { + int32_to_char_array(inputchar.utf8char, unicodestr); + if (utf8valid(unicodestr) != 0) + { + inputchar.utf8char = 0; + inputchar.flags = EILSEQ; // Invalid sequence + } + //print_message(NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE); + + //else + //printf("\nUTF8 char: 0x%02x (%03d)\tCTRL: 0x%02x\n", inputchar.utf8char, inputchar.utf8char, inputchar.flags); + } + + + + SetConsoleMode(hStdin, fdwSaveOldMode); + return inputchar; +} From 66b164a63fdd982c9108ac216d37b7a5ed7ad0d9 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:19:59 +0200 Subject: [PATCH 2/8] Removed some lines of code to make it compatible with TinyCC --- include/utf8/utf8.h | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/include/utf8/utf8.h b/include/utf8/utf8.h index 5652fe2..c83f812 100644 --- a/include/utf8/utf8.h +++ b/include/utf8/utf8.h @@ -71,19 +71,11 @@ typedef int32_t utf8_int32_t; extern "C" { #endif -#if defined(_MSC_VER) + #define utf8_nonnull #define utf8_pure #define utf8_restrict __restrict #define utf8_weak __inline -#elif defined(__clang__) || defined(__GNUC__) -#define utf8_nonnull __attribute__((nonnull)) -#define utf8_pure __attribute__((pure)) -#define utf8_restrict __restrict__ -#define utf8_weak __attribute__((weak)) -#else -#error Non clang, non gcc, non MSVC compiler found! -#endif #ifdef __cplusplus #define utf8_null NULL From ae05eb284c33151d01c035122f6413dd4c1eb439 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:20:22 +0200 Subject: [PATCH 3/8] Added wcwidth.h library --- include/wcwidth.h | 330 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 330 insertions(+) create mode 100644 include/wcwidth.h diff --git a/include/wcwidth.h b/include/wcwidth.h new file mode 100644 index 0000000..3b20f9f --- /dev/null +++ b/include/wcwidth.h @@ -0,0 +1,330 @@ +/* + * This is an implementation of wcwidth() and wcswidth() (defined in + * IEEE Std 1002.1-2001) for Unicode. + * + * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html + * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html + * + * In fixed-width output devices, Latin characters all occupy a single + * "cell" position of equal width, whereas ideographic CJK characters + * occupy two such cells. Interoperability between terminal-line + * applications and (teletype-style) character terminals using the + * UTF-8 encoding requires agreement on which character should advance + * the cursor by how many cell positions. No established formal + * standards exist at present on which Unicode character shall occupy + * how many cell positions on character terminals. These routines are + * a first attempt of defining such behavior based on simple rules + * applied to data provided by the Unicode Consortium. + * + * For some graphical characters, the Unicode standard explicitly + * defines a character-cell width via the definition of the East Asian + * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. + * In all these cases, there is no ambiguity about which width a + * terminal shall use. For characters in the East Asian Ambiguous (A) + * class, the width choice depends purely on a preference of backward + * compatibility with either historic CJK or Western practice. + * Choosing single-width for these characters is easy to justify as + * the appropriate long-term solution, as the CJK practice of + * displaying these characters as double-width comes from historic + * implementation simplicity (8-bit encoded characters were displayed + * single-width and 16-bit ones double-width, even for Greek, + * Cyrillic, etc.) and not any typographic considerations. + * + * Much less clear is the choice of width for the Not East Asian + * (Neutral) class. Existing practice does not dictate a width for any + * of these characters. It would nevertheless make sense + * typographically to allocate two character cells to characters such + * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be + * represented adequately with a single-width glyph. The following + * routines at present merely assign a single-cell width to all + * neutral characters, in the interest of simplicity. This is not + * entirely satisfactory and should be reconsidered before + * establishing a formal standard in this area. At the moment, the + * decision which Not East Asian (Neutral) characters should be + * represented by double-width glyphs cannot yet be answered by + * applying a simple rule from the Unicode database content. Setting + * up a proper standard for the behavior of UTF-8 character terminals + * will require a careful analysis not only of each Unicode character, + * but also of each presentation form, something the author of these + * routines has avoided to do so far. + * + * http://www.unicode.org/unicode/reports/tr11/ + * + * Markus Kuhn -- 2007-05-26 (Unicode 5.0) + * + * Permission to use, copy, modify, and distribute this software + * for any purpose and without fee is hereby granted. The author + * disclaims all warranties with regard to this software. + * + * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + */ + +#include + +/* + This library has been slightly modified by anic17 in order to change + the type wchar_t to utf_int32_t, equivalent to int32_t + + While wchar_t is 32 bits in Linux and can represent any Unicode character, + wchar_t is just 16 bits in Windows (defined as a short) thus it cannot + represent correctly any Unicode character as the max value possible is + U+10FFFF, way bigger than U+FFFF (the limit for short data type) + + The following two lines have been added and all the cases where wchar_t + was used was replaced to utf8_int32_t to match the code in utf8.h library + (https://github.com/sheredom/utf8.h) + + */ +#include +typedef int32_t utf8_int32_t; + +struct interval { + int first; + int last; +}; + + + + +/* auxiliary function for binary search in interval table */ +static int bisearch(utf8_int32_t ucs, const struct interval *table, int max) { + int min = 0; + int mid; + + if (ucs < table[0].first || ucs > table[max].last) + return 0; + while (max >= min) { + mid = (min + max) / 2; + if (ucs > table[mid].last) + min = mid + 1; + else if (ucs < table[mid].first) + max = mid - 1; + else + return 1; + } + + return 0; +} + + +/* The following two functions define the column width of an ISO 10646 + * character as follows: + * + * - The null character (U+0000) has a column width of 0. + * + * - Other C0/C1 control characters and DEL will lead to a return + * value of -1. + * + * - Non-spacing and enclosing combining characters (general + * category code Mn or Me in the Unicode database) have a + * column width of 0. + * + * - SOFT HYPHEN (U+00AD) has a column width of 1. + * + * - Other format characters (general category code Cf in the Unicode + * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. + * + * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) + * have a column width of 0. + * + * - Spacing characters in the East Asian Wide (W) or East Asian + * Full-width (F) category as defined in Unicode Technical + * Report #11 have a column width of 2. + * + * - All remaining characters (including all printable + * ISO 8859-1 and WGL4 characters, Unicode control characters, + * etc.) have a column width of 1. + * + * This implementation assumes that utf8_int32_t characters are encoded + * in ISO 10646. + */ + + +int mk_wcwidth(utf8_int32_t ucs) +{ + /* sorted list of non-overlapping intervals of non-spacing characters */ + /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ + static const struct interval combining[] = { + { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, + { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, + { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, + { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, + { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, + { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, + { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, + { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, + { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, + { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, + { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, + { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, + { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF } + }; + + /* test for 8-bit control characters */ + if (ucs == 0) + return 0; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return -1; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, combining, + sizeof(combining) / sizeof(struct interval) - 1)) + return 0; + + /* if we arrive here, ucs is not a combining or C0/C1 control character */ + + return 1 + + (ucs >= 0x1100 && + (ucs <= 0x115f || /* Hangul Jamo init. consonants */ + ucs == 0x2329 || ucs == 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && + ucs != 0x303f) || /* CJK ... Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ + (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ + (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2fffd) || + (ucs >= 0x30000 && ucs <= 0x3fffd))); +} + + +int mk_wcswidth(const utf8_int32_t *pwcs, size_t n) +{ + int w, width = 0; + + for (;*pwcs && n-- > 0; pwcs++) + if ((w = mk_wcwidth(*pwcs)) < 0) + return -1; + else + width += w; + + return width; +} + + +/* + * The following functions are the same as mk_wcwidth() and + * mk_wcswidth(), except that spacing characters in the East Asian + * Ambiguous (A) category as defined in Unicode Technical Report #11 + * have a column width of 2. This variant might be useful for users of + * CJK legacy encodings who want to migrate to UCS without changing + * the traditional terminal character-width behaviour. It is not + * otherwise recommended for general use. + */ +int mk_wcwidth_cjk(utf8_int32_t ucs) +{ + /* sorted list of non-overlapping intervals of East Asian Ambiguous + * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ + static const struct interval ambiguous[] = { + { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 }, + { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 }, + { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 }, + { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 }, + { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED }, + { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA }, + { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 }, + { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B }, + { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 }, + { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 }, + { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 }, + { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE }, + { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, + { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, + { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 }, + { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB }, + { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, + { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 }, + { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, + { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 }, + { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, + { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, + { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, + { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 }, + { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, + { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, + { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, + { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 }, + { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 }, + { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, + { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, + { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B }, + { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, + { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, + { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E }, + { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 }, + { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, + { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F }, + { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, + { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, + { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B }, + { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 }, + { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, + { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, + { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, + { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 }, + { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 }, + { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 }, + { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 }, + { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F }, + { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF }, + { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } + }; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, ambiguous, + sizeof(ambiguous) / sizeof(struct interval) - 1)) + return 2; + + return mk_wcwidth(ucs); +} + + +int mk_wcswidth_cjk(const utf8_int32_t *pwcs, size_t n) +{ + int w, width = 0; + + for (;*pwcs && n-- > 0; pwcs++) + if ((w = mk_wcwidth_cjk(*pwcs)) < 0) + return -1; + else + width += w; + + return width; +} From aec7b6cd9766ea44def8921199ee29a6d6105be3 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Sun, 1 Sep 2024 09:48:46 +0200 Subject: [PATCH 4/8] lot of new features and changes --- src/dialog.h | 9 +- src/fileio.c | 259 +++++++++++++++++++++--- src/globals.h | 7 +- src/input.h | 361 +++++++++++++++++++-------------- src/line.c | 178 +++++++++++++++-- src/line.h | 5 - src/linux/graphics_linux.c | 24 +-- src/linux/input_linux.c | 97 ++++----- src/newtrodit.c | 308 +++++++++++++++++++++-------- src/newtrodit.h | 245 +++++++++++++++++++---- src/newtrodit_gui.c | 161 ++++++++------- src/newtrodit_gui.h | 1 + src/unicode.c | 394 ++++++++++++++++++++++++++++++++++++- src/win32/graphics_win32.c | 8 +- src/win32/input_win32.c | 174 +++++++++++----- 15 files changed, 1730 insertions(+), 501 deletions(-) diff --git a/src/dialog.h b/src/dialog.h index f31364a..e83785e 100644 --- a/src/dialog.h +++ b/src/dialog.h @@ -41,9 +41,15 @@ char NEWTRODIT_ERROR_INVALID_SYNTAX[] = "Invalid syntax highlighting file: "; char NEWTRODIT_ERROR_SYNTAX_RULES[] = "No syntax highlighting rules found."; char NEWTRODIT_ERROR_FAILED_PROCESS_START[] = "Failed to start the process: "; char NEWTRODIT_ERROR_FAILED_CLOSE_FILE[] = "Failed to close the file '%s'"; +char NEWTRODIT_ERROR_FAILED_CONSOLE_ATTRIB[] = "Failed to retrieve or set the console attributes."; char NEWTRODIT_ERROR_INVALID_MACRO[] = "Invalid macro: "; + char NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE[] = "Invalid Unicode byte sequence."; +char NEWTRODIT_ERROR_INVALID_UNICODE_POSITION[] = "Invalid Unicode string cursor position."; +char NEWTRODIT_ERROR_UNSUPPORTED_ENCODING[] = "Unsupported encoding found. Newtrodit only supports UTF-8 encoding."; + + char NEWTRODIT_ERROR_TOO_MANY_FILES_OPEN[] = "Too many files open."; char NEWTRODIT_ERROR_CANNOT_OPEN_DEVICE[] = "Cannot open device file: "; char NEWTRODIT_ERROR_CONSOLE_HANDLE[] = "Cannot get console handle."; @@ -129,6 +135,7 @@ char NEWTRODIT_PROMPT_SECOND_FILE_COMPARE[] = "Second file to compare: "; // Informational dialogs char NEWTRODIT_NO_ERROR[] = "No error."; char NEWTRODIT_FILE_SAVED[] = "File saved successfully."; +char NEWTRODIT_FILE_OPENED[] = "File opened successfully."; char NEWTRODIT_FILE_RELOADED[] = "File reloaded successfully."; char NEWTRODIT_NEW_FILE_CREATED[] = "New file created successfully."; char NEWTRODIT_FILE_CLOSED[] = "File closed successfully."; @@ -167,7 +174,7 @@ char NEWTRODIT_CLIPBOARD_COPIED[] = "Path copied to the system's clipboard (%s)" // Other dialogs -char NEWTRODIT_DIALOG_BOTTOM_HELP[] = "For help, press F1 | "; +char NEWTRODIT_DIALOG_BOTTOM_HELP[] = "For help, press F1"; char NEWTRODIT_DIALOG_MANUAL[] = "Ctrl-X Close help | Alt-F4 Quit Newtrodit"; char NEWTRODIT_DIALOG_MANUAL_TITLE[] = " Newtrodit help"; char NEWTRODIT_DIALOG_BOTTOM_LOCATE[] = " | Space Next page | Ctrl-B Go back | Ctrl-D Go to dir | Ctrl-X Quit"; diff --git a/src/fileio.c b/src/fileio.c index bc6f57a..e39ccec 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1,31 +1,44 @@ int check_file(char *filename) { -#ifdef WIN32 +#ifdef _WIN32 return (((_access(filename, 0)) != -1 && (_access(filename, 6)) != -1)) ? 0 : 1; #else return 1; #endif } -int open_file(File *tstack) +char *get_full_path(const char *filename) { - return 1; + char *full_path = calloc(MAX_PATH + 1, sizeof(char)); + +#ifdef _WIN32 + if (!_fullpath(full_path, filename, MAX_PATH)) + +#else + full_path = realpath(filename, NULL); + if (!full_path) +#endif + return NULL; + return full_path; } -int load_file(File *tstack) +int valid_filename(char *filename) { - return 1; + return strpbrk(filename, "*?\"<>|\x1b") == NULL; } + + int write_file(File *tstack, FILE *fp) { - for (size_t i = 0; i < tstack->linecount; i++) + size_t nl_len = strlen_n(tstack->newline); // Calculate the length just once and not for every iteration + for (size_t i = 1; i <= tstack->linecount; i++) { - fputs(tstack->line[i]->str, fp); - if (i < tstack->linecount - 1) + fwrite(tstack->line[i]->str, sizeof(char), tstack->line[i]->len, fp); // DANGER: This approach is dangerous and may lead to buffer overflows + if (i < tstack->linecount) { - fputs(tstack->newline, fp); + fwrite(tstack->newline, sizeof(char), nl_len, fp); } } return 1; @@ -34,20 +47,21 @@ int write_file(File *tstack, FILE *fp) int save_file(File *tstack, char *savefile, bool saveDialog) { char *tmp_filename = calloc(MAX_PATH + 1, sizeof(utf8_int32_t)); - if (savefile) + if (savefile && !(tstack->file_flags & IS_UNTITLED)) utf8cpy(tmp_filename, savefile); if (tstack->file_flags & IS_UNTITLED || saveDialog) { - print_message(NEWTRODIT_PROMPT_SAVE_FILE); - fgets(tmp_filename, MAX_PATH, stdin); + print_message(saveDialog ? NEWTRODIT_PROMPT_SAVE_FILE_AS : NEWTRODIT_PROMPT_SAVE_FILE); + fgets(tmp_filename, MAX_PATH * sizeof(utf8_int32_t), stdin); - tmp_filename[utf8cspn(tmp_filename, "\r\n")] = L'\0'; + tmp_filename[utf8cspn(tmp_filename, "\r\n")] = '\0'; if (tmp_filename[0] == '\0') { - // FunctionAborted(tstack, tmp_filename); + load_all_newtrodit(tstack, NULL); + function_aborted(tstack, tmp_filename); return 0; } @@ -55,27 +69,224 @@ int save_file(File *tstack, char *savefile, bool saveDialog) if (!valid_file_name(tmp_filename)) { + load_all_newtrodit(tstack, NULL); print_message("%s%s", NEWTRODIT_FS_FILE_INVALID_NAME, tmp_filename); getch_n(); return 0; } } - FILE *savefp = fopen(tmp_filename, "wb"); + if (savefp) + { + tstack->fullpath = get_full_path(tmp_filename); + memcpy(tstack->filename, last_token(tmp_filename, PATHDELIMS), MAX_PATH * sizeof(utf8_int32_t)); + } + if (!savefp) { + load_all_newtrodit(tstack, NULL); print_message(NEWTRODIT_FS_FILE_SAVE_ERR, tmp_filename); getch_n(); return 0; } - for (size_t i = 1; i <= tstack->linecount; i++) - { - fputs(tstack->line[i]->str, savefp); - if (i < tstack->linecount) - fputs(tstack->newline, savefp); - } + set_status_msg(true, NEWTRODIT_FILE_SAVED); + load_all_newtrodit(tstack, ed.status_msg); + + write_file(tstack, savefp); fclose(savefp); - print_message(NEWTRODIT_FILE_SAVED); - ed.dirty = true; + tstack->file_flags &= ~(IS_UNTITLED | IS_MODIFIED); + tstack->file_flags |= IS_SAVED; + tstack->fwrite_time = time(NULL); // Set the write time to the current time return 0; -} \ No newline at end of file +} + +void save_modified_file(File *tstack) +{ + if (tstack->file_flags & IS_MODIFIED) + { + print_message("%s", NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); + if (yes_no_prompt(true)) + save_file(tstack, NULL, false); + } +} + +int close_file(File *tstack) +{ + save_modified_file(tstack); + print_message("%s", NEWTRODIT_PROMPT_CLOSE_FILE); + if (yes_no_prompt(false)) + { + display_status(tstack, ed.status_msg); + return 0; + } + if (ed.open_files > 1) + { + if (free_buffer(&file[ed.file_index])) + { + if (ed.file_index < ed.open_files - 1) // TODO: Fix strsave not copying + { + for (int k = ed.file_index; k < ed.open_files; k++) + memcpy(&file[k], &file[k + 1], sizeof(*file)); + } + ed.open_files--; + + if (ed.file_index > 0) + ed.file_index--; + } + else + { + return 0; + } + } + else + { + if ((tstack->file_flags & IS_UNTITLED && !tstack->file_flags & IS_MODIFIED) || tstack->file_flags & IS_MODIFIED || tstack->file_flags & IS_SAVED || tstack->file_flags & IS_UNTITLED) + { + if (free_buffer(&file[ed.file_index])) + allocate_buffer(&file[ed.file_index]); + } + } + load_all_newtrodit(tstack, NULL); + return 1; +} + +int load_file(File *tstack, FILE *fp) +{ + fseek(fp, 0, SEEK_SET); // Set fp to the beginning of the file pointer + char *read_header_bom = calloc(4, sizeof(char)); + size_t headerbytesread = fread(read_header_bom, sizeof(char), 4, fp); + tstack->encoding = get_file_encoding(read_header_bom, headerbytesread, &tstack->encoding_bom_len); // Identify the encoding of the file being read, assume UTF-8 if none is detected (could this be an issue?) + free(read_header_bom); + + fseek(fp, tstack->encoding_bom_len, SEEK_SET); // Start reading the file after the BOM, if present + + char unicode_buffer[5] = {0}; // A Unicode codepoint is max 4 bytes, and make sure to make room for the null terminator + int ch = 0; + size_t xps = 0, uxps = 0, yps = 1, uidx = 0; + size_t nl_len = strlen_n(tstack->newline); + size_t nl_idx = 0; + tstack->linecount = 0; + tstack->size = 0; + bool reading_unicode = false, full_unicode_sequence = false; + const char utf8_replacement_char[3] = {0xef, 0xbf, 0xbd}; + switch (tstack->encoding) + { + case ENCODING_UTF8: + case ENCODING_UTF8BOM: + { + while ((ch = fgetc(fp)) != EOF) + { + if (tstack->linecount == 0) + tstack->linecount++; + if (ch == tstack->newline[nl_idx]) + { + if (++nl_idx >= nl_len) + { + memset(&tstack->line[yps]->str[xps - nl_idx + 1], 0, nl_len - 1); + printf("(\\n)\n"); + tstack->linecount++; + tstack->size += nl_len; + xps = 0; + uxps = 0; + yps++; + uidx = 0; + if (yps >= tstack->alloc_lines - 1) + change_allocated_lines(tstack, tstack->alloc_lines, tstack->alloc_lines + LINE_Y_INCREASE); + continue; + } + } + else + { + nl_idx = 0; + } + if (ch < 0x80) + { + if (uidx > 0) + reading_unicode = true; + } + if (ch >= 0x80 || reading_unicode) + { + if (uidx < 3) + unicode_buffer[uidx++] = ch; + else + reading_unicode = true; + + if (!utf8valid(unicode_buffer) || reading_unicode) + { + printf("[%s] (", unicode_buffer); + for (size_t i = 0; i < uidx; i++) + { + printf("%02x ", unicode_buffer[i]); + } + printf(") Is string valid? %s\n", !utf8valid(unicode_buffer) ? "True" : "False"); + if (!utf8valid(unicode_buffer)) + { + memcpy(&tstack->line[yps]->str[xps], unicode_buffer, uidx); + tstack->line[yps]->len += uidx; + xps += uidx; + tstack->size += uidx; + } + else + { + memcpy(&tstack->line[yps]->str[xps], utf8_replacement_char, sizeof(utf8_replacement_char)); // If the UTF-8 sequence is invalid, replace it with Replacement Character + tstack->line[yps]->len += sizeof(utf8_replacement_char); + xps += sizeof(utf8_replacement_char); + tstack->size += sizeof(utf8_replacement_char); + + printf(" invalid unicode! "); + } + + uidx = 0; + memset(unicode_buffer, '\0', 4); + reading_unicode = false; + tstack->line[yps]->ulen++; + reading_unicode = false; + } + } + else + { + tstack->line[yps]->str[xps++] = ch; + printf("{%02x}", ch); + + tstack->line[yps]->len++; + tstack->size++; + tstack->line[yps]->ulen++; + } + } + break; + } + default: + set_status_msg(true, NEWTRODIT_ERROR_UNSUPPORTED_ENCODING); + } + + return 1; +} + +int open_file(File *tstack) +{ + save_modified_file(tstack); + char *tmp_openfile = calloc(sizeof(utf8_int32_t), MAX_PATH + 1); + print_message(NEWTRODIT_PROMPT_FOPEN); + fgets(tmp_openfile, MAX_PATH * sizeof(utf8_int32_t), stdin); + tmp_openfile[utf8cspn(tmp_openfile, "\r\n")] = '\0'; + + FILE *fp = fopen(tmp_openfile, "rb"); + if (!fp) + { + set_status_msg(false, NEWTRODIT_FS_FILE_OPEN_ERR, tmp_openfile); + load_all_newtrodit(tstack, ed.status_msg); + free(tmp_openfile); + + return 0; + } + + tstack->fullpath = get_full_path(tmp_openfile); + memcpy(tstack->filename, last_token(tmp_openfile, PATHDELIMS), MAX_PATH * sizeof(utf8_int32_t)); + + set_status_msg(true, NEWTRODIT_FILE_OPENED); + load_all_newtrodit(tstack, NULL); + load_file(tstack, fp); + free(tmp_openfile); + + return 1; +} diff --git a/src/globals.h b/src/globals.h index 0b5758d..6054c0b 100644 --- a/src/globals.h +++ b/src/globals.h @@ -14,7 +14,7 @@ const char newtrodit_commit[] = ""; // Example commit char default_filename[MAX_PATH] = "Untitled"; char default_language[MAX_PATH] = "File"; -char default_newline[] = "\n"; +char default_newline[] = "\r\n"; const int MANUAL_BUFFER_X = 300; @@ -24,8 +24,9 @@ int tab_width = 4; int line_number_wide = 4; // Boolean settings +int postLoadRenderingDefault = true; int convertTabtoSpaces = true; -int convertNull = true; +int convertCtrlChars = true; int trimLongLines = false; int cursorSizeInsert = true; int wrapLine = false; @@ -62,7 +63,7 @@ int c = 0; // Different error/debug codes static int multiLineComment = false; */ -int syntaxHighlighting = true; +int syntaxHighlighting = false; int syntaxAfterDisplay = false; // Display syntax after display int allocateNewBuffer = true; int topBarMenu = false; diff --git a/src/input.h b/src/input.h index a61f62a..d163efa 100644 --- a/src/input.h +++ b/src/input.h @@ -5,9 +5,9 @@ #define BIT_ESC224 0x80000000 #define BIT_ESC0 0x40000000 -#define ESC_BITMASK 0x80000000 -#define CTRLCHAR_BITMASK 0x40000000 -#define FKEYS_BITMASK 0x20000000 +#define ALT_BITMASK 0x80000000 +#define CTRL_BITMASK 0x40000000 +#define SHIFT_BITMASK 0x20000000 #define TILDE_BITMASK 0x10000000 typedef struct InputUTF8 @@ -19,151 +19,217 @@ typedef struct InputUTF8 } InputUTF8; enum CONTROL_CODES -#ifdef WIN32 +#ifdef _WIN32 // Win32 codes automatically generated by a script { - BS = 8, - TAB = 9, - CTRLENTER = 10, - ENTER = 13, - CTRLBS = 127, - ESC = 27, - - UP = 72 | BIT_ESC224, - LEFT = 75 | BIT_ESC224, - RIGHT = 77 | BIT_ESC224, - DOWN = 80 | BIT_ESC224, - - ALTUP = 152, - ALTLEFT = 155, - ALTRIGHT = 157, - ALTDOWN = 160, - - HOME = 71, - END = 79, - - CTRLHOME = 119, - CTRLEND = 117, - - INS = 82, - DEL = 83, - - CTRLA = 1, - CTRLB = 2, - CTRLC = 3, - CTRLD = 4, - CTRLE = 5, - CTRLF = 6, - CTRLG = 7, - CTRLH = 8, - CTRLI = 9, - CTRLJ = 10, - CTRLK = 11, - CTRLL = 12, - CTRLM = 13, - CTRLN = 14, - CTRLO = 15, - CTRLP = 16, - CTRLQ = 17, - CTRLR = 18, - CTRLS = 19, - CTRLT = 20, - CTRLU = 21, - CTRLV = 22, - CTRLW = 23, - CTRLX = 24, - CTRLY = 25, - CTRLZ = 26, - - /* Different naming only happens in F11 and F12 */ - F1 = 59, - F2 = 60, - F3 = 61, - F4 = 62, - F5 = 63, - F6 = 64, - F7 = 65, - F8 = 66, - F9 = 67, - F10 = 68, - - F11 = 133, - F12 = 134, - - PGUP = 73, - PGDW = 81, - - CTRLF1 = 94, - CTRLF2 = 95, - CTRLF3 = 96, - CTRLF4 = 97, - CTRLF5 = 98, - CTRLF6 = 99, - CTRLF7 = 100, - CTRLF8 = 101, - CTRLF9 = 102, - CTRLF10 = 103, - CTRLF11 = 137, - CTRLF12 = 138, - - ALTF1 = 104, - ALTF2 = 105, - ALTF3 = 106, - ALTF4 = 107, - ALTF5 = 108, - ALTF6 = 109, - ALTF7 = 110, - ALTF8 = 111, - ALTF9 = 112, - ALTF10 = 113, - ALTF11 = 139, - ALTF12 = 140, - - ALTINS = 162, - ALTHOME = 151, - ALTPGUP = 153, - ALTDEL = 163, - ALTEND = 159, - ALTPGDW = 161, - - SHIFTF1 = 84, - SHIFTF2 = 85, - SHIFTF3 = 86, - SHIFTF4 = 87, - SHIFTF5 = 88, - SHIFTF6 = 89, - SHIFTF7 = 90, - SHIFTF8 = 91, - SHIFTF9 = 92, - SHIFTF10 = 93, - SHIFTF11 = 135, - SHIFTF12 = 136, - - CTRLALTA = 30, - CTRLALTB = 48, - CTRLALTC = 46, - CTRLALTD = 32, - CTRLALTE = 18, // This one actually reports as 63 because on my locale it's the euro symbol. - CTRLALTF = 33, - CTRLALTG = 34, - CTRLALTH = 35, - CTRLALTI = 23, - CTRLALTJ = 36, - CTRLALTK = 37, - CTRLALTL = 38, - CTRLALTM = 50, - CTRLALTN = 49, - CTRLALTO = 24, - CTRLALTP = 25, - CTRLALTQ = 16, - CTRLALTR = 19, - CTRLALTS = 31, - CTRLALTT = 20, - CTRLALTU = 22, - CTRLALTV = 47, - CTRLALTW = 17, - CTRLALTX = 45, - CTRLALTY = 21, - CTRLALTZ = 44, + BS = 0x08, + ENTER = 0x0d, + CTRLENTER = 0x0a, + + + CTRLA = 0x01, + CTRLB = 0x02, + CTRLC = 0x03, + CTRLD = 0x04, + CTRLE = 0x05, + CTRLF = 0x06, + CTRLG = 0x07, + CTRLH = 0x08, + CTRLI = 0x09, + CTRLJ = 0x0a, + CTRLK = 0x0b, + CTRLL = 0x0c, + CTRLM = 0x0d, + CTRLN = 0x0e, + CTRLO = 0x0f, + CTRLP = 0x10, + CTRLQ = 0x11, + CTRLR = 0x12, + CTRLS = 0x13, + CTRLT = 0x14, + CTRLU = 0x15, + CTRLV = 0x16, + CTRLW = 0x17, + CTRLX = 0x18, + CTRLY = 0x19, + CTRLZ = 0x1a, + ESC = 0x1b, + + F1 = 0x70, + F2 = 0x71, + F3 = 0x72, + F4 = 0x73, + F5 = 0x74, + F6 = 0x75, + F7 = 0x76, + F8 = 0x77, + F9 = 0x78, + F10 = 0x79, + F11 = 0x7a, + F12 = 0x7b, + UP = 0x26, + LEFT = 0x25, + RIGHT = 0x27, + DOWN = 0x28, + INSERT = 0x2d, + HOME = 0x24, + PGUP = 0x21, + PGDW = 0x22, + END = 0x23, + DEL = 0x2e, + CTRLF1 = 0x40000070, + CTRLF2 = 0x40000071, + CTRLF3 = 0x40000072, + CTRLF4 = 0x40000073, + CTRLF5 = 0x40000074, + CTRLF6 = 0x40000075, + CTRLF7 = 0x40000076, + CTRLF8 = 0x40000077, + CTRLF9 = 0x40000078, + CTRLF10 = 0x40000079, + CTRLF11 = 0x4000007a, + CTRLF12 = 0x4000007b, + CTRLUP = 0x40000026, + CTRLLEFT = 0x40000025, + CTRLRIGHT = 0x40000027, + CTRLDOWN = 0x40000028, + CTRLINSERT = 0x4000002d, + CTRLHOME = 0x40000024, + CTRLPGUP = 0x40000021, + CTRLPGDW = 0x40000022, + CTRLEND = 0x40000023, + CTRLDEL = 0x4000002e, + ALTF1 = 0x80000070, + ALTF2 = 0x80000071, + ALTF3 = 0x80000072, + ALTF4 = 0x80000073, + ALTF5 = 0x80000074, + ALTF6 = 0x80000075, + ALTF7 = 0x80000076, + ALTF8 = 0x80000077, + ALTF9 = 0x80000078, + ALTF10 = 0x80000079, + ALTF11 = 0x8000007a, + ALTF12 = 0x8000007b, + ALTUP = 0x80000026, + ALTLEFT = 0x80000025, + ALTRIGHT = 0x80000027, + ALTDOWN = 0x80000028, + ALTINSERT = 0x8000002d, + ALTHOME = 0x80000024, + ALTPGUP = 0x80000021, + ALTPGDW = 0x80000022, + ALTEND = 0x80000023, + ALTDEL = 0x8000002e, + SHIFTF1 = 0x20000070, + SHIFTF2 = 0x20000071, + SHIFTF3 = 0x20000072, + SHIFTF4 = 0x20000073, + SHIFTF5 = 0x20000074, + SHIFTF6 = 0x20000075, + SHIFTF7 = 0x20000076, + SHIFTF8 = 0x20000077, + SHIFTF9 = 0x20000078, + SHIFTF10 = 0x20000079, + SHIFTF11 = 0x2000007a, + SHIFTF12 = 0x2000007b, + SHIFTUP = 0x20000026, + SHIFTLEFT = 0x20000025, + SHIFTRIGHT = 0x20000027, + SHIFTDOWN = 0x20000028, + SHIFTINSERT = 0x2000002d, + SHIFTHOME = 0x20000024, + SHIFTPGUP = 0x20000021, + SHIFTPGDW = 0x20000022, + SHIFTEND = 0x20000023, + SHIFTDEL = 0x2000002e, + CTRLALTF1 = 0xc0000070, + CTRLALTF2 = 0xc0000071, + CTRLALTF3 = 0xc0000072, + CTRLALTF4 = 0xc0000073, + CTRLALTF5 = 0xc0000074, + CTRLALTF6 = 0xc0000075, + CTRLALTF7 = 0xc0000076, + CTRLALTF8 = 0xc0000077, + CTRLALTF9 = 0xc0000078, + CTRLALTF10 = 0xc0000079, + CTRLALTF11 = 0xc000007a, + CTRLALTF12 = 0xc000007b, + CTRLALTUP = 0xc0000026, + CTRLALTLEFT = 0xc0000025, + CTRLALTRIGHT = 0xc0000027, + CTRLALTDOWN = 0xc0000028, + CTRLALTINSERT = 0xc000002d, + CTRLALTHOME = 0xc0000024, + CTRLALTPGUP = 0xc0000021, + CTRLALTPGDW = 0xc0000022, + CTRLALTEND = 0xc0000023, + CTRLALTDEL = 0xc000002e, + CTRLSHIFTF1 = 0x60000070, + CTRLSHIFTF2 = 0x60000071, + CTRLSHIFTF3 = 0x60000072, + CTRLSHIFTF4 = 0x60000073, + CTRLSHIFTF5 = 0x60000074, + CTRLSHIFTF6 = 0x60000075, + CTRLSHIFTF7 = 0x60000076, + CTRLSHIFTF8 = 0x60000077, + CTRLSHIFTF9 = 0x60000078, + CTRLSHIFTF10 = 0x60000079, + CTRLSHIFTF11 = 0x6000007a, + CTRLSHIFTF12 = 0x6000007b, + CTRLSHIFTUP = 0x60000026, + CTRLSHIFTLEFT = 0x60000025, + CTRLSHIFTRIGHT = 0x60000027, + CTRLSHIFTDOWN = 0x60000028, + CTRLSHIFTINSERT = 0x6000002d, + CTRLSHIFTHOME = 0x60000024, + CTRLSHIFTPGUP = 0x60000021, + CTRLSHIFTPGDW = 0x60000022, + CTRLSHIFTEND = 0x60000023, + CTRLSHIFTDEL = 0x6000002e, + ALTSHIFTF1 = 0xa0000070, + ALTSHIFTF2 = 0xa0000071, + ALTSHIFTF3 = 0xa0000072, + ALTSHIFTF4 = 0xa0000073, + ALTSHIFTF5 = 0xa0000074, + ALTSHIFTF6 = 0xa0000075, + ALTSHIFTF7 = 0xa0000076, + ALTSHIFTF8 = 0xa0000077, + ALTSHIFTF9 = 0xa0000078, + ALTSHIFTF10 = 0xa0000079, + ALTSHIFTF11 = 0xa000007a, + ALTSHIFTF12 = 0xa000007b, + ALTSHIFTUP = 0xa0000026, + ALTSHIFTLEFT = 0xa0000025, + ALTSHIFTRIGHT = 0xa0000027, + ALTSHIFTDOWN = 0xa0000028, + ALTSHIFTINSERT = 0xa000002d, + ALTSHIFTHOME = 0xa0000024, + ALTSHIFTPGUP = 0xa0000021, + ALTSHIFTPGDW = 0xa0000022, + ALTSHIFTEND = 0xa0000023, + ALTSHIFTDEL = 0xa000002e, + CTRLALTSHIFTF1 = 0xe0000070, + CTRLALTSHIFTF2 = 0xe0000071, + CTRLALTSHIFTF3 = 0xe0000072, + CTRLALTSHIFTF4 = 0xe0000073, + CTRLALTSHIFTF5 = 0xe0000074, + CTRLALTSHIFTF6 = 0xe0000075, + CTRLALTSHIFTF7 = 0xe0000076, + CTRLALTSHIFTF8 = 0xe0000077, + CTRLALTSHIFTF9 = 0xe0000078, + CTRLALTSHIFTF10 = 0xe0000079, + CTRLALTSHIFTF11 = 0xe000007a, + CTRLALTSHIFTF12 = 0xe000007b, + CTRLALTSHIFTUP = 0xe0000026, + CTRLALTSHIFTLEFT = 0xe0000025, + CTRLALTSHIFTRIGHT = 0xe0000027, + CTRLALTSHIFTDOWN = 0xe0000028, + CTRLALTSHIFTINSERT = 0xe000002d, + CTRLALTSHIFTHOME = 0xe0000024, + CTRLALTSHIFTPGUP = 0xe0000021, + CTRLALTSHIFTPGDW = 0xe0000022, + CTRLALTSHIFTEND = 0xe0000023, + CTRLALTSHIFTDEL = 0xe000002e }; #else { @@ -401,7 +467,6 @@ enum CONTROL_CODES #ifdef _WIN32 #include #include -#include #include "win32/input_win32.c" #else #include "linux/input_linux.c" diff --git a/src/line.c b/src/line.c index 774478a..1c16be0 100644 --- a/src/line.c +++ b/src/line.c @@ -1,9 +1,11 @@ +size_t correct_position(Line *line, size_t *xpos, size_t *uxpos); + Line *create_line(File *tstack, size_t ypos) { tstack->line[ypos] = calloc(sizeof(Line), 1); tstack->line[ypos]->str = calloc(sizeof(utf8_int32_t), LINE_SIZE); tstack->line[ypos]->render = calloc(sizeof(utf8_int32_t), LINE_SIZE); - tstack->line[ypos]->bufx = LINE_SIZE; + tstack->line[ypos]->bufx = 10; tstack->line[ypos]->render_bufx = LINE_SIZE; tstack->line[ypos]->len = 0; tstack->line[ypos]->rlen = 0; @@ -12,13 +14,13 @@ Line *create_line(File *tstack, size_t ypos) } size_t change_allocated_lines(File *tstack, size_t old_line_count, size_t new_line_count) -{ +{ Line **linestack = realloc_n(tstack->line, old_line_count * sizeof(Line *), new_line_count * sizeof(Line *)); if (!linestack) { return old_line_count; } - for(size_t i = old_line_count; i < new_line_count; i++) + for (size_t i = old_line_count; i < new_line_count; i++) { create_line(tstack, i); } @@ -29,18 +31,14 @@ size_t change_allocated_lines(File *tstack, size_t old_line_count, size_t new_li Line *increase_line(Line *line, size_t increment) { if (!line) - { return NULL; - } size_t new_buf_size = line->bufx + increment; // Reallocate the line buffer char *new_str = realloc_n(line->str, line->bufx * sizeof(utf8_int32_t), new_buf_size * sizeof(utf8_int32_t)); if (!new_str) - { return NULL; - } line->str = new_str; line->bufx = new_buf_size; @@ -51,20 +49,174 @@ Line *increase_line(Line *line, size_t increment) Line *increase_line_render(Line *line, size_t increment) { if (!line) - { return NULL; - } - size_t new_buf_size = line->bufx + increment; + size_t new_buf_size = line->render_bufx + increment; + + char *new_render = realloc_n(line->render, line->render_bufx * sizeof(utf8_int32_t), new_buf_size * sizeof(utf8_int32_t)); - char *new_render = realloc_n(line->render, line->bufx * sizeof(utf8_int32_t), new_buf_size * sizeof(utf8_int32_t)); if (!new_render) - { return NULL; - } line->render = new_render; line->render_bufx = new_buf_size; return line; // Success +} + +Line *insert_row(Line **lines, size_t startpos, size_t arrsize, Line *arrvalue) +{ + for (size_t i = arrsize; i > startpos; i--) + lines[i] = lines[i - 1]; + + lines[startpos + 1] = arrvalue; + return lines[startpos]; +} + +Line *delete_row(Line **lines, size_t startpos, size_t arrsize) +{ + for (size_t i = startpos; i < arrsize; i++) + lines[i] = lines[i + 1]; + + return lines[startpos]; +} +/* +char *render_line(File *tstack, size_t ypos) +{ + memcpy(tstack->line[ypos]->render, tstack->line[ypos]->str, ed.xsize - tstack->linenumber_wide - tstack->linenumber_padding - 1); // TODO: Temporary render fix, apply relative ypos and xpos + tstack->line[ypos]->rlen = strlen_n(tstack->line[ypos]->render); + + if (tstack->line[ypos]->rlen < ed.xsize - tstack->linenumber_wide - tstack->linenumber_padding - 1) + memset(tstack->line[ypos]->render + tstack->line[ypos]->rlen, ' ', (ed.xsize - tstack->linenumber_wide - tstack->linenumber_padding - 1) - tstack->line[ypos]->rlen); + + tstack->line[ypos]->rlen = strlen_n(tstack->line[ypos]->render); + return tstack->line[ypos]->render; +} + */ +char *render_line(File *tstack, size_t yps) +{ + size_t len = tstack->line[yps]->len; // Original line length in bytes + size_t rlen = 0; // Render length in bytes + size_t ulen = 0; // Number of characters rendered (not bytes) + size_t ulen_increase = 0; // Bytes to advance for the next Unicode character + + char *s_ptr = tstack->line[yps]->str; // Pointer to the start of the line string + utf8_int32_t null_symbol = 0xe29080; // Symbol to represent control characters + utf8_int32_t out_codepoint = 0; // Variable to hold the decoded codepoint + size_t lnum = (ed.lineNumbers ? (tstack->linenumber_wide + tstack->linenumber_padding + 1) : 0); + + size_t display_uchars = len; // Characters to display on the screen + if (display_uchars > ed.xsize - lnum) + display_uchars = ed.xsize - lnum; + + while (ulen < display_uchars && *s_ptr != '\0') + { + // Decode the next codepoint and get the byte length + char *next_ptr = utf8codepoint(s_ptr, &out_codepoint); + size_t byte_len = next_ptr - s_ptr; + + // Increase the Unicode length counter + ulen++; + + // If the render buffer is not big enough, increase it + if (rlen + LINE_SIZE > tstack->line[yps]->render_bufx) + increase_line_render(tstack->line[yps], LINE_SIZE); + + if (convertCtrlChars && out_codepoint < 0x20) + { + // Convert control characters to a visible representation + utf8catcodepoint(tstack->line[yps]->render + rlen, null_symbol + out_codepoint, tstack->line[yps]->render_bufx - rlen); + rlen += utf8codepointsize(null_symbol + out_codepoint); // Correctly calculate size of null_symbol + } + else + { + // Copy the current UTF-8 sequence to the render buffer + memcpy(tstack->line[yps]->render + rlen, s_ptr, byte_len); + rlen += byte_len; + } + + // Move to the next character + s_ptr = next_ptr; + } + + // Fill the rest of the line with spaces if needed + if (ulen < ed.xsize - lnum) + { + memset(tstack->line[yps]->render + rlen, ' ', ed.xsize - lnum - ulen); + rlen += ed.xsize - lnum - ulen; + } + + // Null-terminate the rendered string + tstack->line[yps]->render[rlen] = '\0'; + tstack->line[yps]->rlen = rlen; // Store the length of the rendered line + return tstack->line[yps]->render; +} + + +void see_buffer(Line **lines, size_t linecount) +{ + for (size_t i = 1; i <= linecount; i++) + printf("str[%zu]=%s\n", i, lines[i]->str); + + getch(); +} + +int split_row(File *tstack, size_t *split_x, size_t *yps) +{ + if (tstack->linecount < tstack->alloc_lines - 1) + { + correct_position(tstack->line[*yps], split_x, yps); + insert_row(tstack->line, (*yps), tstack->alloc_lines, NULL); + + create_line(tstack, (*yps) + 1); + + tstack->linecount++; + + // Copy all characters starting from xpos from the old line to the new line + + strncpy_n(tstack->line[*yps + 1]->str, &tstack->line[*yps]->str[*split_x], strlen_n(tstack->line[*yps]->str) - *split_x); + memset(&tstack->line[(*yps)]->str[*split_x], 0, tstack->line[*yps]->bufx - *split_x); + /* see_buffer(tstack->line, tstack->linecount); + getch(); */ + render_line(tstack, *yps); + for (int i = 0; i <= 1; i++) + { + tstack->line[*yps + i]->len = strlen_n(tstack->line[*yps + i]->str); + tstack->line[*yps + i]->ulen = utf8len_n(tstack->line[*yps + i]->str); + } + tstack->xpos = 0; + tstack->uxpos = 0; + (*yps)++; + render_line(tstack, *yps); + + /* if (refreshScreen) + { + if (Tab_stack[file_index].display_y > YSIZE - 3) + { + ClearPartial(0, 1, XSIZE, YSCROLL); + } + else + { + ClearPartial((lineCount ? (tstack->linecount_wide) : 0), dispy, XSIZE - (lineCount ? (tstack->linecount_wide) : 0), YSIZE - dispy - 1); + } + DisplayFileContent(tstack, stdout, 0); + } */ + } + + return *yps; +} + + +int display_contents(File* tstack) +{ + size_t disp_lines = tstack->linecount-tstack->begin_display.y; + for(size_t i = tstack->begin_display.y; i <= disp_lines; i++) + { + if(tstack->post_load_rendering) + { + render_line(tstack, i); + } + display_line(tstack, i, tstack->line[i]->rlen); + } + return 0; } \ No newline at end of file diff --git a/src/line.h b/src/line.h index cbc5094..953eaf3 100644 --- a/src/line.h +++ b/src/line.h @@ -1,6 +1 @@ -const size_t LINE_SIZE = 64; -const size_t DEFAULT_ALLOC_LINES =10; - -const size_t LINE_Y_INCREASE = 5; - #include "line.c" diff --git a/src/linux/graphics_linux.c b/src/linux/graphics_linux.c index 1e6ebeb..e03ef64 100644 --- a/src/linux/graphics_linux.c +++ b/src/linux/graphics_linux.c @@ -72,34 +72,34 @@ void rgb(int r, int g, int b, int l) void echo_off() { - struct termios term; + /* struct termios term; tcgetattr(1, &term); term.c_lflag &= ~ECHO; - tcsetattr(1, TCSANOW, &term); + tcsetattr(1, TCSANOW, &term); */ } void echo_on() { - struct termios term; + /* struct termios term; tcgetattr(1, &term); term.c_lflag |= ECHO; - tcsetattr(1, TCSANOW, &term); + tcsetattr(1, TCSANOW, &term); */ } void canon_on() { - struct termios term; +/* struct termios term; tcgetattr(1, &term); term.c_lflag |= ICANON; tcsetattr(1, TCSANOW, &term); + */ } - void canon_off() { - struct termios term; + /* struct termios term; tcgetattr(1, &term); term.c_lflag &= ~ICANON; - tcsetattr(1, TCSANOW, &term); + tcsetattr(1, TCSANOW, &term); */ } void get_cursor(int *X, int *Y) @@ -153,16 +153,16 @@ void clear_partial(int x, int y, int width, int height) free(buf); } -void get_cols_rows(int *cols, int *rows) +void get_cols_rows(size_t *cols, size_t *rows) { struct winsize size; ioctl(1, TIOCGWINSZ, &size); - *cols = size.ws_col; - *rows = size.ws_row; + *cols = (size_t) size.ws_col; + *rows = (size_t) size.ws_row; } int alternate_buffer(bool enabled) { - fputs(enabled ? "\e[?1049h" : "\e[?1049l", stdout); + fputs(enabled ? "\033[?1049h" : "\033[?1049l", stdout); return enabled; } \ No newline at end of file diff --git a/src/linux/input_linux.c b/src/linux/input_linux.c index 0297efd..f7a9b34 100644 --- a/src/linux/input_linux.c +++ b/src/linux/input_linux.c @@ -1,68 +1,61 @@ struct termios orig_termios; -int rawMode(int fd) +int raw_mode(int fd) { - /* This is taken from kilo, make sure to check the project at https://github.com/antirez/kilo */ - struct termios raw; + /* This is taken from kilo, make sure to check the project at https://github.com/antirez/kilo */ + struct termios raw; - if (!isatty(STDIN_FILENO) || tcgetattr(fd, &orig_termios) == -1) - { - perror("rawMode()"); - return 0; - } + if (!isatty(STDIN_FILENO)) + { + perror("raw_mode()"); + return 0; + } - raw = orig_termios; /* modify the original mode */ - /* input modes: no break, no CR to NL, no parity check, no strip char, - * no start/stop output control. */ - raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); - /* output modes - disable post processing */ - // raw.c_oflag &= ~(OPOST); - /* control modes - set 8 bit chars */ - raw.c_cflag |= (CS8); - /* local modes - choing off, canonical off, no extended functions, - * no signal chars (^Z,^C) */ - raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); - /* control chars - set return condition: min number of bytes and timer. */ - raw.c_cc[VMIN] = 0; /* Return each byte, or zero for timeout. */ - raw.c_cc[VTIME] = 1; /* 100 ms timeout (unit is tens of second). */ - if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) - { - perror("tcsetattr()"); - return 0; - } - return 1; + raw = orig_termios; /* modify the original mode */ + /* input modes: no break, no CR to NL, no parity check, no strip char, + * no start/stop output control. */ + raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + /* output modes - disable post processing */ + // raw.c_oflag &= ~(OPOST); + /* control modes - set 8 bit chars */ + raw.c_cflag |= (CS8); + /* local modes - choing off, canonical off, no extended functions, + * no signal chars (^Z,^C) */ + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + /* control chars - set return condition: min number of bytes and timer. */ + raw.c_cc[VMIN] = 0; /* Return each byte, or zero for timeout. */ + raw.c_cc[VTIME] = 1; /* 100 ms timeout (unit is tens of second). */ + if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) + { + perror("tcsetattr()"); + return 0; + } + return 1; +} + +void disable_raw_mode(int fd) +{ + /* Don't even check the return value as it's too late. */ + tcsetattr(fd, TCSAFLUSH, &orig_termios); } -InputUTF8 getch() +InputUTF8 get_newtrodit_input() { InputUTF8 inputchar = {0}; - if (!rawMode(STDIN_FILENO)) + if (!raw_mode(STDIN_FILENO)) { return inputchar; } const size_t maxreadsz = 1024; unsigned char *buf = calloc(sizeof(char), maxreadsz + 1), seq[100] = {0}; // Have enough space for all the buffer - int numread; - int key = 0; - int shiftbits = 7; - bool is_esc = false; - bool is_ctrl = false; - bool is_ctrl2 = false; - bool is_tilde = false; - - is_esc = false; - - is_ctrl = false; - is_ctrl2 = false; + size_t numread; numread = read(STDIN_FILENO, buf, maxreadsz); if (buf[0] == 27) { - is_esc = true; if (numread > 1) // Control code { - is_ctrl = true; // Key encoding starts here if ((buf[1] == '[' || buf[1] == 'O')) // -30 is signed 226 { @@ -94,7 +87,6 @@ InputUTF8 getch() numread = 4; inputchar.inputlen = numread; - key = buf[0]; for (int i = 0; i < numread; i++) { inputchar.utf8char = inputchar.utf8char << 8; @@ -102,22 +94,17 @@ InputUTF8 getch() inputchar.equiv[i] = buf[i]; } } - if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios) < 0) // Restore original mode + /* if(tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios) < 0) // Restore original mode { - } + perror("Failed to restore old termios mode!"); + } */ free(buf); + disable_raw_mode(STDIN_FILENO); return inputchar; } -InputUTF8 GetNewtroditInput() -{ - echo_on(); - canon_off(); - return getch(); -} - int getch_n() { - InputUTF8 ret = GetNewtroditInput(); + InputUTF8 ret = get_newtrodit_input(); return ret.utf8char; } diff --git a/src/newtrodit.c b/src/newtrodit.c index e27cdbe..c375028 100644 --- a/src/newtrodit.c +++ b/src/newtrodit.c @@ -1,55 +1,38 @@ #include "newtrodit.h" -#include "dialog.h" -#include "globals.h" #include "line.h" +#include "newtrodit_gui.h" #include "unicode.c" #include "input.h" - - -Editor ed; - -File **file; - -#include "newtrodit_gui.h" #include "fileio.h" -int allocate_buffer(File **tstack) +void sigsegv_handler() { - *tstack = calloc(1, sizeof(File)); - (*tstack)->file_flags = IS_UNTITLED; - - (*tstack)->filename = calloc(MAX_PATH + 1, sizeof(char)); - memcpy((*tstack)->filename, default_filename, MAX_PATH); - - (*tstack)->fwrite_time = time(NULL); - (*tstack)->fread_time = time(NULL); - (*tstack)->language = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); - memcpy((*tstack)->language, default_language, utf8len_n(default_language)); - (*tstack)->linenumber_wide = 3; - (*tstack)->linenumber_padding = 1; - (*tstack)->linecount = 0; - (*tstack)->xpos = 0; - (*tstack)->ypos = 1; - (*tstack)->display_start = 0; - (*tstack)->size = 0; - (*tstack)->alloc_lines = DEFAULT_ALLOC_LINES; - (*tstack)->line = calloc(DEFAULT_ALLOC_LINES, sizeof(Line *)); - for (size_t i = 0; i < DEFAULT_ALLOC_LINES; i++) - { - create_line(*tstack, i); - } - - (*tstack)->newline = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); - memcpy((*tstack)->newline, default_newline, utf8len_n(default_newline)); - - (*tstack)->display_end = (*tstack)->ypos; - - return 1; + signal(SIGSEGV, sigsegv_handler); + alternate_buffer(false); + fprintf(stderr, "Fatal Newtrodit exception! (segmentation violation)\nReport this issue to the project's GitHub."); + fflush(stdout); + exit(errno); } int init_editor() { +#ifdef WIN32 + + if (!_isatty(_fileno(stdout)) || !_isatty(_fileno(stderr))) +#else + if (!isatty(STDIN_FILENO)) +#endif + { + /* + If for some reason stdout or stderr are still redirected to a file, show an error and quit + */ + fprintf(stderr, "%s", NEWTRODIT_ERROR_REDIRECTED_TTY); + exit(1); + } + + signal(SIGSEGV, sigsegv_handler); + signal(SIGINT, NULL); ed.open_files = 1; ed.file_index = 0; ed.log_file_name = NULL; @@ -57,6 +40,7 @@ int init_editor() ed.useLogFile = false; ed.lineNumbers = true; ed.dirty = false; + ed.displayStatusOnce = false; // ed.status_msg = calloc(DEFAULT_ALLOC_SIZE, sizeof(utf8_int32_t)); ed.status_msg = NULL; file = calloc(sizeof(File *), open_files); @@ -64,19 +48,39 @@ int init_editor() #ifdef _WIN32 hStdout = GetStdHandle(STD_OUTPUT_HANDLE); hStdin = GetStdHandle(STD_INPUT_HANDLE); + + SetConsoleCtrlHandler(NULL, TRUE); + DWORD dwState = 0; + + // GetConsoleMode(hStdin, &dwState); + // SetConsoleMode(hStdin, dwState); + SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8); - system("chcp 65001"); +#else + if (tcgetattr(STDIN_FILENO, &orig_termios) == -1) + { + fprintf(stderr, "%s", NEWTRODIT_ERROR_FAILED_CONSOLE_ATTRIB); + } + /* input modes: no break, no CR to NL, no parity check, no strip char, + * no start/stop output control. */ + orig_termios.c_iflag |= BRKINT | ICRNL | INPCK | ISTRIP | IXON; + /* output modes - disable post processing */ + // raw.c_oflag &= ~(OPOST); + /* control modes - set 8 bit chars */ + orig_termios.c_cflag &= ~(CS8); + /* local modes - choing off, canonical off, no extended functions, + * no signal chars (^Z,^C) */ + orig_termios.c_lflag |= ECHO | ICANON | IEXTEN | ISIG; #endif get_cols_rows(&ed.xsize, &ed.ysize); vt_settings(true); alternate_buffer(true); - allocate_buffer(&file[ed.file_index]); // Pass the address of the File pointer + allocate_buffer(&file[ed.file_index]); // Pass the address of the file pointer load_all_newtrodit(file[ed.file_index], NULL); - echo_on(); - canon_on(); + return 1; } @@ -90,104 +94,245 @@ int end_editor() int handle_keystrokes(InputUTF8 ch, File *tstack) { + if (_ypos >= tstack->alloc_lines - 1) + change_allocated_lines(tstack, tstack->alloc_lines, tstack->alloc_lines + LINE_Y_INCREASE); + + char *ptr = NULL, *ptr2 = NULL; + utf8_int32_t codep = 0; if (ch.flags != 0) { switch (ch.flags) { case LEFT: - if (_xpos > 0) + if (_uxpos > 0) + { + previous_char_xpos(tstack->line[_ypos]->str, &_xpos); + _uxpos--; + } + else if (_ypos > 1) { - _xpos--; + _xpos = tstack->line[--_ypos]->len; + _uxpos = tstack->line[_ypos]->ulen; } break; case RIGHT: - // if(tstack->line[_ypos]->bufx[]) - _xpos++; + if (_uxpos < tstack->line[_ypos]->ulen) + { + next_char_xpos(tstack->line[_ypos]->str, &_xpos); + _uxpos++; + } + else if (_ypos < tstack->linecount) + { + _xpos = 0; + _uxpos = 0; + _ypos++; + } break; case DOWN: - _ypos++; - break; - case ENTER: - _ypos++; - _xpos = 0; + if (_ypos <= tstack->linecount) + { + _ypos++; + if (_uxpos > tstack->line[_ypos]->ulen) + _uxpos = tstack->line[_ypos]->ulen; + _xpos = utf8getxpos(tstack->line[_ypos]->str, _uxpos); + } break; case UP: if (_ypos > 1) { _ypos--; + + if (_uxpos > tstack->line[_ypos]->ulen) + { + _uxpos = tstack->line[_ypos]->ulen; + _xpos = utf8getxpos(tstack->line[_ypos]->str, _uxpos); + } + } + break; + case DEL: + if (_xpos < tstack->line[_ypos]->len) + { + ptr = tstack->line[_ypos]->str + _xpos; + ptr2 = utf8codepoint(tstack->line[_ypos]->str + _xpos, &codep); + if (delete_str(tstack->line[_ypos], _xpos, ptr2 - ptr)) + tstack->line[_ypos]->ulen--; + } + else + { + /* if (_ypos > 1) + { + _ypos--; + tstack->uxpos = tstack->line[_ypos]->ulen; + tstack->xpos = tstack->line[_ypos]->len; + tstack->linecount--; + } */ + } + break; + + case CTRLF4: + case ALTF4: + quit_newtrodit(tstack); + break; + case 0xc0000043: + if (ch.flags & ALT_BITMASK) + { + printf("Debug initiated crash\n"); + raise(SIGSEGV); } break; } } - else if (ch.utf8char != 0) + if (ch.utf8char == CTRLI && devMode) + { + if (ch.flags & SHIFT_BITMASK) + { + char inbuf[100]; + gotoxy(0, ed.ysize - 2); + printf("Insert hex: "); + scanf("%s", inbuf); + //(inbuf, sizeof inbuf, stdin); + //inbuf[strcspn(inbuf, "\r\n")] = '\0'; + printf("inserthex ok \"%s\"", inbuf); + get_newtrodit_input(); + display_status(tstack, NULL); + display_cursor_pos(tstack, NULL); + ch.utf8char = strtol(inbuf, NULL, 16); + ch.flags = 0; + } + } + + if (ch.utf8char != 0) { switch (ch.utf8char) { case BS: if (_xpos > 0) { - fputs("\b \b", stdout); - _xpos--; - _uxpos--; + ptr = tstack->line[_ypos]->str + _xpos; + ptr2 = utf8rcodepoint(tstack->line[_ypos]->str + _xpos, &codep); + if (delete_str(tstack->line[_ypos], _xpos - (ptr - ptr2), ptr - ptr2)) + { + _xpos -= ptr - ptr2; + _uxpos--; + tstack->line[_ypos]->ulen--; + } + } + else + { + if (_ypos > 1) + { + _ypos--; + tstack->uxpos = tstack->line[_ypos]->ulen; + tstack->xpos = tstack->line[_ypos]->len; + tstack->linecount--; + } + } + break; + case ENTER: + if (_xpos == tstack->line[_ypos]->len && _ypos + 1 == tstack->linecount) + { + tstack->linecount++; + _ypos++; + } + else + { + split_row(tstack, &_xpos, &_ypos); } break; case CTRLS: - save_file(tstack, tstack->filename, false); - printf("OK"); + save_file(tstack, tstack->filename, ch.flags & SHIFT_BITMASK); // If Shift is pressed, always display save as dialog + break; + case CTRLW: + close_file(tstack); + break; + case CTRLO: + open_file(tstack); break; case CTRLQ: quit_newtrodit(tstack); break; - default: - if (tstack->linecount == 0) - tstack->linecount++; - insert_utf8_char(tstack->line[_ypos], ch.utf8char, _xpos); - //gotoxy(_xpos + file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, _ypos); - display_char(ch.utf8char, stdout); - _xpos += codepoint_len(ch.utf8char); - _uxpos++; - tstack->file_flags |= IS_MODIFIED; + case CTRLC: + break; + case CTRLD: + if(ch.flags & SHIFT_BITMASK) + toggle_option(&devMode, NEWTRODIT_DEV_TOOLS); + else + set_status_msg(true, "%s", tstack->line[_ypos]->str); + break; + case ESC: + clear_status_msg(); + display_status(tstack, NULL); + break; + default: + + if (ch.utf8char > 31) + { + if (tstack->linecount == 0) + tstack->linecount++; + insert_utf8_char(tstack->line[_ypos], ch.utf8char, _xpos); + _xpos += codepoint_len(ch.utf8char); + _uxpos++; + tstack->file_flags |= IS_MODIFIED; + } + break; } } + if ((ch.utf8char > 31 || (ch.utf8char == 8 && !(ch.flags & SHIFT_BITMASK))) && !syntaxHighlighting) + render_line(tstack, _ypos); + return 0; } int editor_main() { - InputUTF8 ch = {0}; + InputUTF8 ch; Line *lptr; + while (1) { - // display_cursor_pos(file[ed.file_index]); - gotoxy(_uxpos + file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, _ypos); - ch = GetNewtroditInput(); - if (_ypos >= file[ed.file_index]->alloc_lines - 1) - { + set_display_pos(file[ed.file_index]); + + display_line_numbering(file[ed.file_index], _ypos); + + gotoxy(_uwxpos + file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, file[ed.file_index]->scroll_pos.y); - change_allocated_lines(file[ed.file_index], file[ed.file_index]->alloc_lines, file[ed.file_index]->alloc_lines + LINE_Y_INCREASE); - print_message("Increasing line number by %zu", LINE_Y_INCREASE); - getchar(); + ch = get_newtrodit_input(); + + handle_keystrokes(ch, file[ed.file_index]); + + if (ed.displayStatusOnce && !ed.dirty) + { + clear_status_msg(); + display_status(file[ed.file_index], ed.status_msg); + ed.displayStatusOnce = false; } - /* if (_xpos >= file[ed.file_index]->line[_ypos]->bufx - 1) + + if (_xpos >= file[ed.file_index]->line[_ypos]->bufx - 1) { lptr = increase_line(file[ed.file_index]->line[_ypos], LINE_SIZE); if (!lptr) { print_message(NEWTRODIT_ERROR_ALLOCATION_FAILED); + getch(); + ed.dirty = true; } - } */ - handle_keystrokes(ch, file[ed.file_index]); + } + correct_position(file[ed.file_index]->line[_ypos], &_xpos, &_uxpos); + if (ed.dirty) { display_status(file[ed.file_index], ed.status_msg); + if (ed.displayStatusOnce) + ed.dirty = false; } else { display_cursor_pos(file[ed.file_index], NULL); } + display_line(file[ed.file_index], _ypos, file[ed.file_index]->line[_ypos]->rlen); } return 1; } @@ -197,7 +342,8 @@ int main() setlocale(LC_ALL, ".utf8"); init_editor(); - editor_main(); + editor_main(); + end_editor(); } \ No newline at end of file diff --git a/src/newtrodit.h b/src/newtrodit.h index 1ab1095..2ae79a2 100644 --- a/src/newtrodit.h +++ b/src/newtrodit.h @@ -1,21 +1,35 @@ +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include -#include -#include -#include -#include -#include #include -#include -#include +#include #include +#include + +#ifdef _WIN32 +#include +#endif #ifndef MAX_PATH #define MAX_PATH 260 #endif +#include "dialog.h" +#include "globals.h" + const int DEFAULT_ALLOC_SIZE = 512; +const size_t LINE_SIZE = 64; +const size_t DEFAULT_ALLOC_LINES = 10; + +const size_t LINE_Y_INCREASE = 5; #if !defined ENABLE_VIRTUAL_TERMINAL_PROCESSING || !defined DISABLE_NEWLINE_AUTO_RETURN #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 @@ -30,8 +44,18 @@ enum file_flags_modifier IS_READONLY = 8, }; +enum unicode_encodings +{ + ENCODING_UTF8 = 1, + ENCODING_UTF16LE = 2, + ENCODING_UTF16BE = 3, + ENCODING_UTF8BOM = 4, + ENCODING_UTF32LE = 5, + ENCODING_UTF32BE = 6, +}; + const char newtrodit_version[] = "1.0"; -const char newtrodit_date[] = "2024/06/10"; +const char newtrodit_date[] = "2024/08/25"; typedef struct Line { @@ -49,8 +73,8 @@ typedef struct Line typedef struct Position { - int x; - int y; + size_t x; + size_t y; } Position; typedef struct Select @@ -68,10 +92,8 @@ typedef struct File // File information size_t xpos, ypos; - size_t uxpos; // UTF-8 x position - - size_t display_start; - size_t display_end; + size_t uxpos; // UTF-8 X position + size_t uwxpos; // UTF-8 width position Line **line; // Store each line file size_t alloc_lines; @@ -84,22 +106,29 @@ typedef struct File char *newline; unsigned int file_flags; + unsigned int encoding; + size_t encoding_bom_len; + bool post_load_rendering; + time_t fwrite_time; time_t fread_time; Select selection; + Position begin_display; + Position scroll_pos; } File; // File information. This is used to store all the information about the file. typedef struct Editor { - int xsize, ysize; // Window size - int open_files; // Number of files open - int file_index; // Current file index + size_t xsize, ysize; // Window size + int open_files; // Number of files open + int file_index; // Current file index char *log_file_name; + char *status_msg; bool useLogFile; bool lineNumbers; bool dirty; - char *status_msg; + bool displayStatusOnce; } Editor; // Editor information @@ -109,33 +138,41 @@ typedef struct Color bool background; } Color; +Editor ed; +File **file; + int end_editor(); int init_editor(); +Line *create_line(File *tstack, size_t ypos); +int codepoint_width(const char *utf8_char); #ifdef _WIN32 #include "win32/graphics_win32.c" +const char PATHDELIMS[] = "\\/"; // Set the path delimiters for Windows and Linux #else #include "linux/graphics_linux.c" +const char PATHDELIMS[] = "/"; #endif #define _xpos file[ed.file_index]->xpos #define _ypos file[ed.file_index]->ypos #define _uxpos file[ed.file_index]->uxpos +#define _uwxpos file[ed.file_index]->uwxpos -size_t utf8len_n(char *s) +size_t utf8len_n(const char *s) { if (!s) return 0; return utf8len(s); } -size_t utf8nlen_n(char *s, size_t n) +size_t utf8nlen_n(const char *s, size_t n) { if (!s) return 0; return utf8nlen(s, n); } -size_t strlen_n(char *s) +size_t strlen_n(const char *s) { if (!s) return 0; @@ -147,30 +184,27 @@ int vt_settings(bool enabled) #ifdef _WIN32 DWORD lmode; // Process ANSI escape sequences - GetConsoleMode(hStdout, &lmode); + if (!GetConsoleMode(hStdout, &lmode)) + return 0; if (enabled) - { lmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING & ~DISABLE_NEWLINE_AUTO_RETURN; - } else - { - lmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN; - } + return SetConsoleMode(hStdout, lmode); #endif return 0; } /* Safe version of strcpy() and strncpy() */ -char *utf8ncpy_n(char *dest, const char *src, size_t count) +char *strncpy_n(char *dest, const char *src, size_t count) { - // Better version that utf8ncpy() because it always null terminates strings + // Better version that str8ncpy() because it always null terminates strings if (count) { memset(dest, 0, count); - utf8ncat(dest, src, count); + strncat(dest, src, count); return dest; } return NULL; @@ -185,9 +219,7 @@ size_t strrpbrk(char *s, char *find) // Reverse strpbrk, just like strrchr but f for (size_t j = 0; j < findlen; j++) { if (s[i - 1] == find[j]) - { return i - 1; - } } } return 0; @@ -197,9 +229,7 @@ void *realloc_n(void *old, size_t old_sz, size_t new_sz) { void *new = malloc(new_sz); if (!new) - { return NULL; - } memcpy(new, old, old_sz); free(old); return new; @@ -212,11 +242,150 @@ int valid_file_name(char *filename) char *remove_quotes(char *s) { - size_t len = utf8len_n(s); - if (s[0] == L'\"' && s[len - 1] == L'\"') + size_t len = strlen_n(s); + if (s[0] == '\"' && s[len - 1] == '\"') { memmove(s, s + 1, len - 2); - s[len] = L'\0'; + s[len] = '\0'; } return s; -} \ No newline at end of file +} + +int trim_message(char *msg, size_t max_len) +{ + size_t ulen = utf8len(msg); +} + +int set_status_msg(bool display_once, char *msg, ...) +{ + va_list args; + va_start(args, msg); + + ed.status_msg = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(utf8_int32_t)); + if (!ed.status_msg) + return 0; + + size_t copyamount = DEFAULT_ALLOC_SIZE * sizeof(utf8_int32_t); + vsnprintf(ed.status_msg, copyamount, msg, args); + trim_message(ed.status_msg, ed.xsize - (fullCursorInfoDisplay ? 45 : 20)); + + printf("{%s}:[%s]", msg, ed.status_msg); + getch(); + + ed.dirty = true; + ed.displayStatusOnce = display_once; + return 1; +} + +int clear_status_msg() +{ + if (ed.status_msg != NULL) + free(ed.status_msg); + + ed.status_msg = NULL; + ed.dirty = false; + return 1; +} + +int last_token_position(char *s, const char *token) +{ + + int lastpos = -1; + if (!s || !token) + return lastpos; + + for (size_t i = 0; i < strlen_n(s); i++) + { + for (size_t j = 0; j < strlen_n(token); j++) + { + if (s[i] == token[j]) + lastpos = i; + } + } + return lastpos; +} + +char *last_token(char *tok, const char *char_token) +{ + if (!tok || !char_token) + return tok; + + int pos = last_token_position(tok, char_token); + return tok + pos + 1; +} + +int allocate_buffer(File **tstack) +{ + *tstack = calloc(1, sizeof(File)); + (*tstack)->file_flags = IS_UNTITLED; + + (*tstack)->filename = calloc(MAX_PATH * sizeof(utf8_int32_t) + 1, sizeof(char)); + memcpy((*tstack)->filename, default_filename, MAX_PATH); + + (*tstack)->fwrite_time = time(NULL); + (*tstack)->fread_time = time(NULL); + (*tstack)->language = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->language, default_language, utf8len_n(default_language)); + (*tstack)->linenumber_wide = 3; + (*tstack)->linenumber_padding = 1; + (*tstack)->linecount = 0; + (*tstack)->xpos = 0; + (*tstack)->ypos = 1; + (*tstack)->size = 0; + (*tstack)->encoding = ENCODING_UTF8; + (*tstack)->encoding_bom_len = 0; + (*tstack)->post_load_rendering = true; + + (*tstack)->line = calloc(DEFAULT_ALLOC_LINES, sizeof(Line *)); + + for (size_t i = 0; i <= DEFAULT_ALLOC_LINES; i++) + create_line(*tstack, i); + + (*tstack)->line[0]->str = " Illegal row number. Report this issue to the GitHub repository."; // If for some reason line 0 is accessed + + (*tstack)->newline = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->newline, default_newline, utf8len_n(default_newline)); + + return 1; +} + +int free_buffer(File **tstack) +{ + + for (size_t i = 1; i < (*tstack)->alloc_lines; i++) + { + free((*tstack)->line[i]->render); + free((*tstack)->line[i]->str); + free((*tstack)->line[i]); + } + + // free((*tstack)->line); + + free((*tstack)->newline); + free((*tstack)->filename); + free((*tstack)->language); + + /* free((*tstack)->compilerinfo.path); + free((*tstack)->compilerinfo.flags); + free((*tstack)->compilerinfo.output); + + free((*tstack)->syntaxinfo.syntax_lang); + free((*tstack)->syntaxinfo.syntax_file); + free((*tstack)->syntaxinfo.separators); + free((*tstack)->syntaxinfo.comments); + + for (int i = 0; i < (*tstack)->syntaxinfo.keyword_count; i++) + { + free((*tstack)->syntaxinfo.keywords[i]); + } + + for (int i = 0; i < (*tstack)->syntaxinfo.comment_count; i++) + { + free((*tstack)->syntaxinfo.comments[i]); + } + + free((*tstack)->syntaxinfo.keywords); + free((*tstack)->syntaxinfo.color); + free((*tstack)->syntaxinfo.comments); */ + return 1; +} diff --git a/src/newtrodit_gui.c b/src/newtrodit_gui.c index e8c6dad..044c3f3 100644 --- a/src/newtrodit_gui.c +++ b/src/newtrodit_gui.c @@ -33,9 +33,7 @@ int center_text(char *text, int yps) // Algorithm: (ed.xsize / 2) - (len / 2) gotoxy(center_text, yps); int pos = wrapSize - utf8len_n(text); if (pos < 0) - { pos = abs(pos); - } printf("%.*s", pos, text); return center_text; @@ -48,114 +46,131 @@ void display_file_type(File *tstack) fputs(tstack->language, stdout); } -void display_bottom_bar(char* status) +void display_bottom_bar(char *status) { gotoxy(0, ed.ysize - 1); - fputs((status != NULL) ? status : NEWTRODIT_DIALOG_BOTTOM_HELP, stdout); + printf("%s | ", (status != NULL) ? status : NEWTRODIT_DIALOG_BOTTOM_HELP); } void print_message(const char *str, ...) { - - va_list args; - va_start(args, str); - char *printbuf = calloc(ed.xsize + 1, sizeof(char)); - vsnprintf(printbuf, ed.xsize + 1, str, args); - clear_partial(0, ed.ysize-1, ed.xsize, 1); - gotoxy(0, ed.ysize-1); - printf(str, printbuf ); - //printf("%.*s", ed.xsize, printbuf); // Don't get out of the buffer - free(printbuf); - va_end(args); - return; -} -/* -void print_message(const char *str, ...) -{ + va_list args; va_start(args, str); - - va_list argscopy; - va_copy(argscopy, args); - - va_end(argscopy); - - char *printbuf = calloc(ed.xsize+1, sizeof(char)); + char *printbuf = calloc(ed.xsize + 1, sizeof(char)); vsnprintf(printbuf, ed.xsize + 1, str, args); + clear_partial(0, ed.ysize - 1, ed.xsize, 1); + gotoxy(0, ed.ysize - 1); + printf(str, printbuf); + // printf("%.*s", ed.xsize, printbuf); // Don't get out of the buffer + free(printbuf); va_end(args); + return; +} - clear_partial(0, ed.ysize-1, ed.xsize, 1); - gotoxy(0, ed.ysize-1); +int set_display_pos(File *tstack) +{ + if (tstack->xpos - (ed.lineNumbers ? (tstack->linenumber_wide + tstack->linenumber_padding) : 0) > ed.xsize - 1) + tstack->begin_display.x = tstack->xpos - (ed.lineNumbers ? (tstack->linenumber_wide + tstack->linenumber_padding) : 0) - (ed.xsize - 1); + else + tstack->begin_display.x = 0; - // Do something with printbuf, e.g., print it - printf("%ls", printbuf); + if (tstack->ypos >= ed.ysize - 3) + { + tstack->begin_display.y = tstack->ypos - ed.ysize + 4; // When reaching the penultimate row, start scrolling + } + else + { + tstack->begin_display.y = 0; + tstack->scroll_pos.y = tstack->ypos; + } - free(printbuf); + tstack->scroll_pos.x = 0; + return 0; } - */ -void display_cursor_pos(File *tstack, char* status) +void display_cursor_pos(File *tstack, char *status) { - size_t len = 0; - if(!status) - - len = utf8len_n(NEWTRODIT_DIALOG_BOTTOM_HELP); - else - len = utf8len_n(status); - + size_t len = 3; // Not zero because it already accounts for the " | " separator between position and status message + if (!status) + len += utf8len_n(NEWTRODIT_DIALOG_BOTTOM_HELP); + else + len += utf8len_n(status); + clear_partial(len, ed.ysize, ed.xsize - len, 1); - size_t linecount_zero = false; if (fullCursorInfoDisplay) - { - if (!tstack->linecount) - { - linecount_zero = 1; - } - printf(longPositionDisplay ? "Line %zu/%zu (%zu%%), Column %zu/%zu (%zu%%)" : "Ln %zu/%zu (%zu%%), Col %zu/%zu (%zu%%)", tstack->ypos, tstack->linecount + linecount_zero, 100 * tstack->ypos / (tstack->linecount + linecount_zero), tstack->uxpos + 1, tstack->line[_ypos]->ulen + 1, (size_t)100 * (tstack->uxpos) / (!tstack->line[_ypos]->ulen ? 1 : tstack->line[_ypos]->ulen)); - } + printf(longPositionDisplay ? "Line %zu/%zu (%zu%%), Column %zu/%zu (%zu%%)" : "Ln %zu/%zu (%zu%%), Col %zu/%zu (%zu%%)", tstack->ypos, tstack->linecount + !tstack->line[tstack->linecount]->len, 100 * tstack->ypos / (tstack->linecount + !tstack->line[tstack->linecount]->len), tstack->uxpos + 1, tstack->line[_ypos]->ulen + 1, (size_t)100 * (tstack->uxpos) / (!tstack->line[_ypos]->ulen ? 1 : tstack->line[_ypos]->ulen)); else - { printf(longPositionDisplay ? "Line %zu, Column %zu" : "Ln %zu, Col %zu", tstack->ypos, tstack->uxpos + 1); // +1 because it's zero indexed - } + } -void display_status(File *tstack, char* status_msg) +void display_status(File *tstack, char *status_msg) { display_bottom_bar(status_msg); display_cursor_pos(tstack, status_msg); } -void load_line_count(File *tstack) +void function_aborted(File *tstack, char* status_msg) +{ + print_message(NEWTRODIT_FUNCTION_ABORTED); + getch_n(); + display_status(tstack, status_msg); + return; +} + + +void load_line_numbering(File *tstack) { if (ed.lineNumbers) { set_color(line_number_bg_color); set_color(line_number_font_color); - clear_partial(0, 1, tstack->linenumber_wide, tstack->display_end - tstack->display_start); - for(size_t i = tstack->display_start; i < tstack->display_end; i++) + clear_partial(0, 1, tstack->linenumber_wide, tstack->scroll_pos.y); + for (size_t i = tstack->begin_display.y; i < tstack->begin_display.y + tstack->scroll_pos.y; i++) + { + printf("%zu", i + 1); + if (i < tstack->begin_display.y + tstack->scroll_pos.y - 1) + putchar('\n'); + } + set_color(bg_color); + set_color(fg_color); + } +} + +void display_line_numbering(File *tstack, size_t ypos) +{ + if (ed.lineNumbers) + { + if ((size_t) (log10(_ypos) + 1) >= tstack->linenumber_wide) { - printf("%zu\n", i+1); + tstack->linenumber_wide = (size_t) (log10(_ypos) + 2); + load_line_numbering(tstack); } + set_color(line_number_bg_color); + set_color(line_number_font_color); + clear_partial(0, tstack->scroll_pos.y, tstack->linenumber_wide, 1); + printf("%zu", ypos); set_color(bg_color); set_color(fg_color); } } -void load_all_newtrodit(File *tstack, char* status) +void load_all_newtrodit(File *tstack, char *status) { clear_screen(); + set_display_pos(tstack); newtrodit_name_load(); center_text(tstack->filename, 0); display_file_type(tstack); set_color(fg_color); set_color(bg_color); display_status(tstack, status); - load_line_count(tstack); - gotoxy(tstack->linenumber_wide+tstack->linenumber_padding, 1); + load_line_numbering(tstack); + gotoxy(tstack->linenumber_wide + tstack->linenumber_padding, 1); } - void set_cursor_settings(int visible, int size) { #ifdef _WIN32 @@ -213,16 +228,14 @@ int yes_no_prompt(bool default_yes) void quit_newtrodit(File *tstack) { - if(tstack->file_flags & IS_MODIFIED) + if (tstack->file_flags & IS_MODIFIED) { print_message(NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); - if(!yes_no_prompt(false)) - { + if (!yes_no_prompt(false)) save_file(tstack, tstack->filename, !!(tstack->file_flags & IS_UNTITLED)); // tstack->file_flags &~ IS_SAVED isn't needed due to being redundant - } } print_message(NEWTRODIT_PROMPT_QUIT); - if(yes_no_prompt(true)) + if (yes_no_prompt(true)) { end_editor(); exit(1); @@ -230,6 +243,22 @@ void quit_newtrodit(File *tstack) ed.dirty = true; } + + +int display_line(File *tstack, size_t linenum, size_t rcount) +{ + gotoxy(file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, tstack->scroll_pos.y); + + fwrite(tstack->line[linenum]->render, rcount < tstack->line[linenum]->rlen ? rcount : tstack->line[linenum]->rlen, sizeof(char), stdout); + return 0; +} + +int toggle_option(int *option, char* msg) +{ + *option ^= 1; + set_status_msg(false, "%s%s", msg, *option ? NEWTRODIT_DIALOG_ENABLED : NEWTRODIT_DIALOG_DISABLED); +} + /* char *TypingFunction(int min_ascii, int max_ascii, int max_len, char *oldbuf) { int chr = 0, index = 0; @@ -400,4 +429,4 @@ void quit_newtrodit(File *tstack) } return num_str; } - */ \ No newline at end of file + */ diff --git a/src/newtrodit_gui.h b/src/newtrodit_gui.h index 8e806b4..7d95af4 100644 --- a/src/newtrodit_gui.h +++ b/src/newtrodit_gui.h @@ -9,6 +9,7 @@ Color line_number_font_color = {.r = 30, .g = 30, .b = 30, .background = false}; void print_message(const char *str, ...); int save_file(File *tstack, char *savefile, bool saveDialog); +int getch_n(); #include "newtrodit_gui.c" diff --git a/src/unicode.c b/src/unicode.c index 9e010c8..bd77536 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -1,5 +1,54 @@ +#ifndef CP_UTF8 +#define CP_UTF8 65001 +#endif + +int get_file_encoding(char *header, size_t header_size, size_t *p_bom_len) +{ + char utf16le_bom[2] = {0xff, 0xfe}; // UTF-16LE (Little endian) BOM + char utf16be_bom[2] = {0xfe, 0xff}; // UTF-16BE (Big Endian) BOM + char utf32le_bom[4] = {0xff, 0xfe, 0x00, 0x00}; + char utf32be_bom[4] = {0x00, 0x00, 0xfe, 0xff}; + char utf8_bom[3] = {0xef, 0xbb, 0xbf}; // UTF-8 BOM is not recommended for use but we'll handle it anyways + *p_bom_len = 0; + + if (header_size < 2) + return ENCODING_UTF8; + if (!memcmp(header, utf16le_bom, 2)) + { + *p_bom_len = 2; + return ENCODING_UTF16LE; + } + if (!memcmp(header, utf16be_bom, 2)) + { + *p_bom_len = 2; + return ENCODING_UTF16BE; + } + if (header_size < 3) + return ENCODING_UTF8; + if (!memcmp(header, utf8_bom, 3)) + { + *p_bom_len = 3; + return ENCODING_UTF8BOM; + } + if (header_size < 4) + return ENCODING_UTF8; + if (!memcmp(header, utf32le_bom, 4)) + { + *p_bom_len = 4; + return ENCODING_UTF32LE; + } + if (!memcmp(header, utf32be_bom, 4)) + { + *p_bom_len = 4; + return ENCODING_UTF32BE; + } + return ENCODING_UTF8; +} + size_t codepoint_len(int32_t value) { + if (value == 0) // Added check for value == 0 + return 1; size_t len = 0; for (int shift = 24; shift >= 0; shift -= 8) { @@ -10,7 +59,52 @@ size_t codepoint_len(int32_t value) } -char *int32_to_char_array(int32_t value, char *output) +int valid_position(char *s, size_t pos) +{ + utf8_int32_t cp = 0; + utf8codepoint(s + pos, &cp); + return (unsigned int)cp < 0x10FFFFu; // a UTF-8 codepoint cannot be greater than U+10FFFF +} + +size_t utf8wnlen(const char *s, size_t max_upos) +{ + if (!s) + return 0; + char *ptr = s; + utf8_int32_t cp; + size_t wlen = 0, ulen = 0; + int cwidth = 0; + while (*ptr != '\0' && ulen < max_upos) + { + ptr = utf8codepoint(ptr, &cp); + ulen++; + cwidth = mk_wcwidth(cp); + if (cwidth < 0) + cwidth = 0; + wlen += cwidth; + } + return wlen; +} + +size_t utf8wlen(const char *s) +{ + return utf8wnlen(s, (size_t)(-1)); // -1 returns the max size of a size_t +} + +size_t correct_position(Line *line, size_t *xpos, size_t *uxpos) +{ + if (!valid_position(line->str, *xpos)) + { + set_status_msg(true, NEWTRODIT_ERROR_INVALID_UNICODE_POSITION); + utf8_int32_t cp = 0; + char *backptr = utf8rcodepoint(line->str + *xpos, &cp); + *xpos -= (&line->str[*xpos] - backptr); // Go back to the previous UTF-8 codepoint + *uxpos = utf8nlen_n(line->str, *xpos); // Set the new UTF-8 position + } + return *xpos; +} + +char *int32_to_char_array(utf8_int32_t value, char *output) { // Extract each byte from the int32_t and assign it to the char array size_t i = 0, val = 0; @@ -20,13 +114,74 @@ char *int32_to_char_array(int32_t value, char *output) output[i++] = val; } output[4] = '\0'; - //printf("\nString: '%s'", output); + // printf("\nString: '%s'", output); return output; } +int codepoint_width(const char *utf8_char, utf8_int32_t val) { // This function can take either a char string or a UTF-8 int32 code + + + char utf8s[5] = {0}; + + + utf8_int32_t uc = 0; + if(!utf8_char) + { + int32_to_char_array(val, utf8s); + utf8codepoint(utf8s, &uc); + } else { + utf8codepoint(utf8_char, &uc); + } + + + int cwidth = mk_wcwidth(uc); + if(cwidth < 0) cwidth = 0; + return cwidth; // Returns 1 for narrow, 2 for wide, or 0 if not printable/blank space +} + +size_t previous_char_xpos(char *s, size_t *xpos) +{ + utf8_int32_t cp = 0; + char *prev_ptr = s + *xpos; + if (*xpos > 0) + { + prev_ptr = utf8rcodepoint(s + *xpos, &cp); + *xpos = prev_ptr - s; + /* printf("pdif: %zu", (prev_ptr-s)); + getch(); */ + return *xpos; + } + return 0; +} +size_t next_char_xpos(char *s, size_t *xpos) +{ + utf8_int32_t cp = 0; + char *next_ptr; + if (*xpos > 0) + { + next_ptr = utf8codepoint(s + *xpos, &cp); + *xpos += next_ptr - s; + return *xpos; + } + return 0; +} +size_t utf8getxpos(char *s, size_t uxpos) +{ + char *ptr = s; + utf8_int32_t out_cp = 0; + for (size_t i = 0; i < uxpos; i++) // Loop over the UTF-8 string + { + if (!valid_position(s, ptr - s)) + { + return 0; + } + ptr = utf8rcodepoint(ptr, &out_cp); + } + return ptr - s; +} char *insert_utf8_char(Line *line, int32_t value, size_t index) { @@ -39,20 +194,249 @@ char *insert_utf8_char(Line *line, int32_t value, size_t index) { len_check[i] = utf8nlen_n(line->str, (index + i) > line->len ? line->len : (index + i)); } */ - char* insert_str_utf8 = calloc(sizeof(int32_t)+1, 1); + if (!valid_position(line->str, index)) + { + set_status_msg(true, NEWTRODIT_ERROR_INVALID_UNICODE_POSITION); + return NULL; + } + // correct_position(line, index, utf8nlen_n(line->str, index)); + char *insert_str_utf8 = calloc(sizeof(int32_t) + 1, 1); int32_to_char_array(value, insert_str_utf8); + /* printf("[%s] %zu;", insert_str_utf8, index); + getch(); */ size_t len = strlen_n(insert_str_utf8); + memmove(line->str + index + len, line->str + index, line->len - index); memcpy(line->str + index, insert_str_utf8, len); line->str[line->len + len + index] = '\0'; - line->len = strlen_n(line->str); + line->len += utf8size(insert_str_utf8); line->ulen++; + free(insert_str_utf8); + return line->str; +} + +char *insert_str(Line *line, char *s2, size_t pos) +{ + size_t l2 = strlen_n(s2); + if (line->len + l2 > line->bufx - 1) + { + increase_line(line, l2); + } + + memmove(line->str + pos + l2, line->str + pos, line->len); + memcpy(line->str + pos, s2, l2); + line->str[line->len + l2] = '\0'; + line->len = strlen_n(line->str); // Recalculate the length in case it is wrong to avoid error accumulation + return line->str; } -int display_char(int32_t chr, FILE* fp) +char *delete_str(Line *line, size_t pos, size_t count) +{ + if (pos + count > line->len) + { + return NULL; + } + memmove(line->str + pos, line->str + pos + count, line->len - (pos + count)); + line->str[line->len - count] = '\0'; + line->len -= count; + return line->str; +} + +char *delete_char(Line *line, size_t pos) +{ + if (line->len > pos) + { + memmove(line->str + pos, line->str + pos + 1, line->len - pos); + line->str[--line->len] = '\0'; + } + return line->str; +} + +/* char *insert_utf8_string(Line *line, char *s, size_t index) +{ + if (!valid_position(line)) + if (line->len + strlen_n(s) > line->bufx - 1) + { + increase_line(line, strlen_n(s)); + } + size_t next_index = index; +} + */ +int display_char(int32_t chr, FILE *fp) { char outbuf[5] = {0}; int32_to_char_array(chr, outbuf); return fprintf(fp, "%s", outbuf); } + +uint16_t swap_le_be(uint16_t num) +{ + return (num >> 8) | (num << 8); +} + + +int is_utf16(const unsigned char *s, size_t len, size_t file_len) // Try to detect whether string of text without BOM is UTF-16, and try to guess if it's BE (wchar_t default) or LE (Windows default) +{ + if (len % 2 || file_len % 2) + return false; // Length must be even for UTF-16 encoding + + size_t zero_count_be = 0, zero_count_le = 0; + size_t difference_le = 0, difference_be = 0; + + // Check for zero bytes and calculate differences for endianness determination + for (size_t i = 0; i < len; i += 2) + { + if (s[i] == '\0') + zero_count_be++; + + if (i + 1 < len && (unsigned char)(s[i] - s[i + 1]) > 0x60) + difference_be++; + + if (s[i + 1] == '\0') + zero_count_le++; + + if (i + 1 < len && (unsigned char)(s[i + 1] - s[i]) > 0x60) + difference_le++; + } + + // Check if all characters are zero, which is invalid + if (zero_count_be + zero_count_le == len) + return false; + + bool is_bigendian = zero_count_be >= zero_count_le; + + // Check for unusual patterns that suggest non-UTF-16 text + if ((is_bigendian && (double)difference_be / len < 0.125) || (!is_bigendian && (double)difference_le / len < 0.125)) + return false; + + if ((is_bigendian && (double)zero_count_be / len < 0.125) || (!is_bigendian && (double)zero_count_le / len < 0.125)) + return false; + + // Verify UTF-16 validity by checking surrogate pairs and code point ranges + for (size_t i = 0; i < len;) + { + utf8_int32_t utfchar = 0, surrogate = 0; + + utfchar = (s[i] << 8) | s[i + 1]; + i += 2; + + // Convert endian if needed + if (!is_bigendian) + utfchar = swap_le_be(utfchar); + + // Check if it's a high surrogate + if (utfchar >= 0xD800 && utfchar <= 0xDBFF) + { + if (i + 2 > len) + return -1; + + surrogate = (s[i] << 8) | s[i + 1]; + i += 2; + + if (!is_bigendian) + surrogate = swap_le_be(surrogate); + + if (surrogate < 0xDC00 || surrogate > 0xDFFF) + return -1; + } + + // Check if character is above valid Unicode range + if (utfchar > 0x10FFFF) + return -1; + + fprintf(stderr, "U+%04X\n", utfchar); + } + + // Return 2 for BE, 1 for LE, 0 for not UTF-16 + return 1 + is_bigendian; +} + + +size_t utf16_to_utf8(const uint16_t *u16_str, size_t u16_str_len, uint8_t *u8_str, size_t u8_str_size) // Code from Stack Overflow +{ + size_t i = 0, j = 0; + + if (!u8_str) + u8_str_size = u16_str_len * 4; + + while (i < u16_str_len) + { + uint32_t codepoint = u16_str[i++]; + + // check for surrogate pair + if (codepoint >= 0xD800 && codepoint <= 0xDBFF) + { + uint16_t high_surr = codepoint; + uint16_t low_surr = u16_str[i++]; + + if (low_surr < 0xDC00 || low_surr > 0xDFFF) + return -1; + + codepoint = ((high_surr - 0xD800) << 10) + + (low_surr - 0xDC00) + 0x10000; + } + + if (codepoint < 0x80) + { + if (j + 1 > u8_str_size) + return -2; + + if (u8_str) + u8_str[j] = (char)codepoint; + + j++; + } + else if (codepoint < 0x800) + { + if (j + 2 > u8_str_size) + return -2; + + if (u8_str) + { + u8_str[j + 0] = 0xC0 | (codepoint >> 6); + u8_str[j + 1] = 0x80 | (codepoint & 0x3F); + } + + j += 2; + } + else if (codepoint < 0x10000) + { + if (j + 3 > u8_str_size) + return -2; + + if (u8_str) + { + u8_str[j + 0] = 0xE0 | (codepoint >> 12); + u8_str[j + 1] = 0x80 | ((codepoint >> 6) & 0x3F); + u8_str[j + 2] = 0x80 | (codepoint & 0x3F); + } + + j += 3; + } + else + { + if (j + 4 > u8_str_size) + return -2; + + if (u8_str) + { + u8_str[j + 0] = 0xF0 | (codepoint >> 18); + u8_str[j + 1] = 0x80 | ((codepoint >> 12) & 0x3F); + u8_str[j + 2] = 0x80 | ((codepoint >> 6) & 0x3F); + u8_str[j + 3] = 0x80 | (codepoint & 0x3F); + } + + j += 4; + } + } + + if (u8_str) + { + if (j >= u8_str_size) + return -2; + u8_str[j] = '\0'; + } + + return (long int)j; +} \ No newline at end of file diff --git a/src/win32/graphics_win32.c b/src/win32/graphics_win32.c index 690c59e..3dbd913 100644 --- a/src/win32/graphics_win32.c +++ b/src/win32/graphics_win32.c @@ -117,7 +117,7 @@ void clear_partial(int x, int y, int width, int height) free(buf); } -void get_cols_rows(int *cols, int *rows) +void get_cols_rows(size_t *cols, size_t *rows) { if (hStdout == INVALID_HANDLE_VALUE) { @@ -128,12 +128,12 @@ void get_cols_rows(int *cols, int *rows) { return; } - *cols = csbi.srWindow.Right - csbi.srWindow.Left + 1; - *rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; + *cols = (size_t) csbi.srWindow.Right - csbi.srWindow.Left + 1; + *rows = (size_t) csbi.srWindow.Bottom - csbi.srWindow.Top + 1; } int alternate_buffer(bool enabled) { - fputs(enabled ? "\e[?1049h" : "\e[?1049l", stdout); + fputs(enabled ? "\033[?1049h" : "\033[?1049l", stdout); return enabled; } diff --git a/src/win32/input_win32.c b/src/win32/input_win32.c index f1050af..32c5fd2 100644 --- a/src/win32/input_win32.c +++ b/src/win32/input_win32.c @@ -18,72 +18,154 @@ int getch_n() return gc_n; } -InputUTF8 GetNewtroditInput() +InputUTF8 get_newtrodit_input() { - DWORD fdwSaveOldMode; + DWORD fdwSaveOldMode, cNumRead; INPUT_RECORD irInBuf[128]; - DWORD cNumRead, i; - InputUTF8 inputchar = {0}; + InputUTF8 inputchar = {0}; if (!GetConsoleMode(hStdin, &fdwSaveOldMode)) return inputchar; - SetConsoleMode(hStdin, 0); // Set console mode to zero to capture events like Alt-F4 or Control-C - int counter = 0; + + SetConsoleMode(hStdin, 0); + long other_flags = 0; + + int ukey_counter = 0, waiting_combination = FALSE; + const int replacement_char = 0xefbfbd; // Replacement char is in hexadecimal EF BF BD + static size_t pushback_char_count = 0; + static INPUT_RECORD pushback_inputchar[128] = {0}; + INPUT_RECORD *ptr_irInBuf = NULL; char unicodestr[5] = {0}; - // Wait for the events. + while (1) + { + // Wait for the input events - WaitForSingleObject(hStdin, INFINITE); + WaitForSingleObject(hStdin, INFINITE); - if (!ReadConsoleInput( - hStdin, // input buffer handle - irInBuf, // buffer to read into - 128, // size of read buffer - &cNumRead)) // number of records read - return inputchar; + if (pushback_char_count > 0) + { + cNumRead = pushback_char_count; + } + else + { + if (!ReadConsoleInput(hStdin, irInBuf, 128, &cNumRead)) + return inputchar; + } - // Dispatch the events to the appropriate handler. - for (i = 0; i < cNumRead; i++) - { - switch (irInBuf[i].EventType) + for (DWORD i = 0; i < cNumRead; i++) { - case KEY_EVENT: // keyboard input - if (irInBuf[i].Event.KeyEvent.uChar.UnicodeChar) + if (pushback_char_count > 0) { - if (irInBuf[i] .Event.KeyEvent.bKeyDown) - //printf("%s\tUChar: %hd\t0x%04x\n", irInBuf[i].Event.KeyEvent.bKeyDown ? "Press" : "Release", irInBuf[i].Event.KeyEvent.uChar.UnicodeChar, irInBuf[i].Event.KeyEvent.uChar.UnicodeChar); - counter++; - if (irInBuf[i].Event.KeyEvent.bKeyDown && i < 4) - { - inputchar.utf8char = inputchar.utf8char << 8; - inputchar.utf8char |= (irInBuf[i].Event.KeyEvent.uChar.UnicodeChar) & 0xff; // & ~0xff00 - } + ptr_irInBuf = &pushback_inputchar[0]; + + for (size_t j = 0; j < pushback_char_count - 1; j++) + pushback_inputchar[j] = pushback_inputchar[j + 1]; + + pushback_char_count--; } else { - inputchar.flags = irInBuf[i].Event.KeyEvent.wVirtualKeyCode; + ptr_irInBuf = &irInBuf[i]; } - break; - } - } - FlushConsoleInputBuffer(hStdin); + switch (ptr_irInBuf->EventType) + { + case KEY_EVENT: // We are only interested in keyboard input + if (ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar) + { + if (inputchar.utf8char == replacement_char) // If we receive the UTF-8 replacement character, stop the input + break; - if (irInBuf[0].EventType == KEY_EVENT && irInBuf[0].Event.KeyEvent.bKeyDown) - { - int32_to_char_array(inputchar.utf8char, unicodestr); - if (utf8valid(unicodestr) != 0) - { - inputchar.utf8char = 0; - inputchar.flags = EILSEQ; // Invalid sequence + ukey_counter++; + if (ptr_irInBuf->Event.KeyEvent.bKeyDown && ukey_counter <= 4 && (((ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar & 0xff) < 0x80 && cNumRead <= 1) || ((ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar & 0xff) > 0x80 && cNumRead > 1))) + { + inputchar.utf8char <<= 8; + inputchar.utf8char |= (ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar & 0xff); + } + else + { + if (ptr_irInBuf->Event.KeyEvent.bKeyDown) + { + if (pushback_char_count < 127 && pushback_char_count < cNumRead) + pushback_inputchar[pushback_char_count++] = *ptr_irInBuf; + } + } + waiting_combination = FALSE; + } + else + { + if (ptr_irInBuf->Event.KeyEvent.bKeyDown) + { + switch (ptr_irInBuf->Event.KeyEvent.wVirtualKeyCode) + { + case VK_CONTROL: + case VK_LCONTROL: + case VK_RCONTROL: + other_flags |= CTRL_BITMASK; + waiting_combination = TRUE; + break; + case VK_SHIFT: + case VK_LSHIFT: + case VK_RSHIFT: + other_flags |= SHIFT_BITMASK; + waiting_combination = TRUE; + break; + case VK_LWIN: // Ignore Windows keys + case VK_RWIN: + break; + case VK_MENU: // Windows calls ALT keys 'menu keys' for some reason + case VK_LMENU: + case VK_RMENU: + other_flags |= ALT_BITMASK; + waiting_combination = TRUE; + break; + default: + inputchar.flags <<= 8; + inputchar.flags |= ptr_irInBuf->Event.KeyEvent.wVirtualKeyCode; // If not one of the above cases, save the virtual key code + break; + } + } + else + { + other_flags = 0; + } + } + break; + } } - //print_message(NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE); - //else - //printf("\nUTF8 char: 0x%02x (%03d)\tCTRL: 0x%02x\n", inputchar.utf8char, inputchar.utf8char, inputchar.flags); - } + if (!(other_flags && inputchar.flags == 0)) + waiting_combination = FALSE; + if (!waiting_combination) + { + if (GetKeyState(VK_CONTROL) & 0x8000) // Make sure the key is still pressed, for example, making another combination without releasing the control key + other_flags |= CTRL_BITMASK; + if (GetKeyState(VK_SHIFT) & 0x8000) // Same thing as above, now for shift + other_flags |= SHIFT_BITMASK; + if (GetKeyState(VK_MENU) & 0x8000) // ALT bitmask + other_flags |= ALT_BITMASK; + if (ptr_irInBuf->EventType == KEY_EVENT && ptr_irInBuf->Event.KeyEvent.bKeyDown) + { + inputchar.flags |= other_flags; // Add the other flags in case they are defined - SetConsoleMode(hStdin, fdwSaveOldMode); - return inputchar; + int32_to_char_array(inputchar.utf8char, unicodestr); + if (utf8valid(unicodestr) != 0) + { + inputchar.utf8char = 0; + inputchar.flags = -EILSEQ; // Invalid sequence + } + if (inputchar.utf8char != 0 && ukey_counter > 4) + { + inputchar.utf8char = 0; + inputchar.flags = replacement_char; // If a possibly invalid sequence is inputted, replace it with the replacement char + } + SetConsoleMode(hStdin, fdwSaveOldMode); + return inputchar; + } + } + + FlushConsoleInputBuffer(hStdin); // Flush the input buffer so previous keystrokes are ignored + } } From eba5512385ae8c3b441a1b8d0a1a76c999dd4241 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Sun, 1 Sep 2024 09:54:29 +0200 Subject: [PATCH 5/8] internal dev files --- Newtrodit.rar | Bin 0 -> 698622 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Newtrodit.rar diff --git a/Newtrodit.rar b/Newtrodit.rar new file mode 100644 index 0000000000000000000000000000000000000000..4a0f210bd86b009107302259dc3a89a0b79d2a8c GIT binary patch literal 698622 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�mDwLlxc3 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 YhR|0vIR^t%Vl@+ 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 po6tzw+4G9qChxUbRTcI_v_ie<+20 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

    esU-j!AKflm;h#D4mmEkcatd=#!qRb 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 z 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 Ou%nIxOe+h_uXM2h)-mM( literal 0 HcmV?d00001 From 0c8e014d7838fb22654a207c81bd08660e914433 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Sun, 1 Sep 2024 18:28:04 +0200 Subject: [PATCH 6/8] Delete Newtrodit.rar --- Newtrodit.rar | Bin 698622 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Newtrodit.rar diff --git a/Newtrodit.rar b/Newtrodit.rar deleted file mode 100644 index 4a0f210bd86b009107302259dc3a89a0b79d2a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698622 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�mDwLlxc3 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 YhR|0vIR^t%Vl@+ zM{`Rnev~o|m5Qfy=^ShFiy|Z(=+CIUDF)GHh^SJqq(1Tn?Pb47!nl(er&f}{XA?W^ zC7~=pV@PUSZ3$@xv|D(GfG};&ae(U~&q&Sjk}}XwBVCH*x3Tp}Do^Amw&pAv$c|}5-QoSg^tcZ~k0Ub*}N}umxl(^Z|9!y&OFg%PgnI*C@WSLXSYO7x8VtmDkIOZn3V;ZlE-I^*BJUBmp1dkAbM(2>@ds-N1sIp79Tm1Wy z3R}8g#j?WOb$2oGIh*2QfF3MTZj#3_H^K^G6caJY*yJdV^X1HmHXqAA+b0B!E*eUP zI9GDe?FCHR<>su+r?rUpS|XJ<3`ck)>pX9er=2FLlNXP?gF1elJ!7DZ^e?H=%md8g zym*apnYluRU;6_?y8~R4iI)JdAu zMNlJ^Z3}6GuOPhC5&4e-aY)#95yr$Y(-eOK-R)>kSS0m*rGg^V1f3QyLReR5_zqU7 z-N~tO1s2`Vry3&2%@())AI<#ThNrX~uaxJ_$>OzI&`%z^kRtzub&n08Vj{db-2g-S z#VRP;VDxk<$EZJ*F(I1F67lKei%uEw6c^Z1H=MSy&>Mg3Xj2i7h_`)03*UjIz#zT} zF$_xR>|aTe?|i;|BDe_!dxASZklHVOt*}hhyNn%N)6# z>HOG8y+{CDM_LwdpfZ={<}w-G7NP{s*`-y9kho$?*NVFW*h<(Xi_EEK@e!F4-a?Ct zm|wu30a@))j($8qyo0NI?LqKIcnq-WwTQv1wu)M^$p%E>R!92UCDpl$CN>?DpRLdGhu?xoKjq$$;l4FoG}Su22acVEG4!7_ zOSm39|73I5;9Rm^MEREt<{UJ97yfi=*w6IRsB9x%pMfaT-ilt()_#PO?jv_$elP?k zP;>e1%{NbEZolWcZ&5-AW`;E(+b#(dpYWwnfqW4UA}h|3--p&+!=C#Bc`t~XSP zx#*O?wd(KJAY~9#Yx5&-^8CiimZ)iG{}*3>aspl}gkonhSFkPgYe*c*u40W{^mYu| z6W&4L>*ZlBI8Zon;osmYY`bA!>EkLwf@crvLX?iqp!te%-YZWUMRT${gZvamEU)(- z-`J$-=Ct_sh#pe$=D@!pMzcL9)t(yqqXBSX#=q!t;>pzrdtR$V7G`Rd^1-cSW=ah7 zT`?~pD9QeAxWky3lNoVO_&>jdR~3DHFcd9uYf`s(?D33&6V3;wW8uR5_6v&=Tm(LJ zKz;C^a*{R+Ru9p!)Xdjvt~WU#SeasOSnIBN!~tYA)`45kRT89aNCo_F89B801lRF# ztBT%fF@)t7|1Vu&Nm~Zv-&h0U_r4Xp@Mc_U{TzJY&4sShV_R!Bs%X%xq>INU=)?p6 z@t^3@_bQQIa!ljDM&OLdq?+=a!L_t8h?gDQ&?*oUjezG;1Byt_rqCd!ObpK(tu3f~ z4G!rytO-qKtrn!XK5ESp_-&CCM5L{wVM12Lc7H8O00)e$hGJQ_cZ?GxZM34{Q$c+J zTsZ~Oe@%!A5QM6dx#E&Ji47q({U9mMifWD83N!8#a zR-=9p1t!*YRD3r}G`FYpf>1jRtq`j08L!r@@DNsn?YTQ{p-V<~Ugsull?oNv#T%~m zM$%6GK@`=G!qfCd$%aA3ZOgG;ehl(Vq@pAL>&9smcM)Ve-gP<4TM^Af5(E?$4)sWx_uBMvh=0 z<68_0oC+#;{G@P_8OM8}b#vdmbgys)eOoJ=Nu21gB2>kJ-eP6PR9vfp1n}o1ygM=( z(v}1GVn%K~DFl6xgh@m5 ziFLs~D!Y2hJtbMv_}{iSn$t2b(WjSnQ%GrOX)Lo=cBM07B$qRl_?6Q#2=7O)~vI}H!9W*K=p8}E9~0%u!)N%tk)y)kCZ+Q;x~ zJ#CFSfs6sJW^x0yoplX1w`5-eb_&{uEctTPVY`((3isY~kukd@WNm+{vd->s2~afI z7}}W=uStn?=mFIp6>(rGRF{0u+%zips1H+;G&7$vRDq#+Zqjg>-rn6>hRCp=uURX9 zSKjbW=-@v2g%@cMq4yqg-1^lBiWb;* zk0i?zIE~=>uiz3jLlYOeguP;pcIx^Dbp-Jar9=#C)P?l@NMATaE97K$bJZw=YxCCE$9lNXAd%2rbhiYqpcr==jpto!iP5bnrLu7L9QUXrMv6d%&|u8BMJ!JEC9(S&B9{IQnnf%v=7Yx z6{6*$fJy>Qn6LS@npR+LjJEnrKWPZbyeM}{YCK(yPoj+`hZ0yBbj0{&=mPw;Fs}6> z!Y)8=g5SPa^d;(J=WrFjx1sBAP}p8&sFy^=mydsVRp?EFcU zHM}I=w^No)fF;`=bOw55MoA-_228-F!2&jFk_BAH%$7X}ePT^2e_9gjbk zP>i?+lFVR+3FDjvW5|*6sw=%E%gmK~18~C5LrbDigwH@PB=uGd?3G-RomH#`)|W-6 z%(%f+$QDup&wiI^c%kH&JwUHU#im$EyJ2aDKy$fTJSUI+0Gx}k4ydGYmNhV{Y3!tZ z1Fdh@?&mc+1;4_KN-BHUn+vKVQ^V{k7+p2K_7E*Gyw@g3t#pB_py=yi_&S&->4;$0 zptnYd$nW`*Z3OUS1%;vO0+K^`(YWY_aZO9DLJ!{=%~+~ z=WRsAl~FFzhWCBtT-(G_Vv)NkYiK8V{Mey5CIto^?GRARu`Px^2+(R{dCcWQ(Rfaa-SbXC1HsVQp@0L^(_b~%?ma6+sq~cqjAD#eMMV+*7rVz6X z5^mWj^InD9lZjh+=-74AObO9PK=PdSVZO8PdmHiVx^HDW>}(0d3(mDn2JtQhGbK+< z!>3Usl#f_1Nu)NK8^pg;&O@UQ`N zeRsE=85k4}TA{BK1(8Uei35Sdy0NZAL*YcLD~QI}a&v&bL@zzHlBHEFIsY_BL9KaG~_{3^kgQ2`!j&cDN?whA;=rUmSv0^Xqo>757 z=Ff-@M8|p)N~5K*!rIN+j+p53E!w(?ABOw-&dG?iSEtC&##b(RK3;bDRm%f3&t9Hv z1D_3du@xo$fxH{Dwew698rIfRy}of!YW5V;&fJ*K*Ek6embMSIS%x?TbK+_G3VB?` zvOg#uiM|NJ*i_dWo5N@{9McceN$L5HGi$lNU73~SKkQuh3*{}hrRG-pJ>~P${1kTg z+K$aoK6!Gq(H(WLAC;#}2yzq2(EbhK1#qiKjMu3w-2>R@vJ)8P6dYOG7uvzbK?SdH zOB@0z#B;KJY3|SX=~nslKgs+yd!4bWrtBu?5#_z%a^ zWO!ghb2$-nunWIRP~6h3?lQa1axUiHVXP)Q`~QTuaV)I>?YQqH7;hEY4D<>9<-#pr z?441P7&aE#x>l8~3YiPUM1uAzv8S2@iz_T+VnIIb-2E#8D}TFs(Q;o?WOS~GMFaYO zsEI?97tv6O-%sh-K%)1K0Ni>m^JkwN%q`^%04@lrY<$j5OR9LOM(rq-99hJI64P#h zSMz1chc3xKT%a})3jb6p{k-!Ovfv_RDT3=FrU`r3eB9cFwgu|_k@nnGciuI#(IRR( zm|bj+hYy{sRGjLXF0v-ReK%7+c@iiO_ME5)x5_Cfx9Hd6Du9?TEJ!a9MrjsD^|s)4 ze93R4Sa0&R`d-x@Mh8aW)~Q>4N}UnNYM?USLc+Zd)wwM~)EISxQO**3GK9CcEl=46 z{441x8>-D!oHcW^ltJkxTDFiK;X&4xos-)mnX+NmL!AKV_O=W~huVJP7$~c~#vX(X zrpTm)%maz5OE@_#+dr3kXGJ5Sz}OVyxsl)YMx{7^N4z!0y>S6QmIs!AcCT}zy_0BH#Mu$(Tw)iUvY#TU3v%2@~0LST8rT@HnD!ZWHZ7uvOSPWgdf!4qZZL9HcP*xnJUOEr@vAV*7#uDTlU(we!vL5p7cu zaa9gZF1Ts(e&qsRoBwnojj~Z!^s(BTDy@BEn_u`a(z&yfW~1y1iWD#=%H0zarJITB8_9OnB~k_aNpL*LaEe%ZQfM&?;DqT?tfTOzqmM@1< zPZjY{Ca*gt6K@?kA{k4W1)Z zI>k{@R6D~U5k+D}h>eGV%BhG$3K+><>W?1&KcRe09rqY2=%cnpmZyo!O$G7;^gQyh z*H@l6k(E(V%GP&uh{Bw)S+sf9_$G0R*zr+8p4E~QGItL0F&GSQFh z>5ydRmLN&HZq3LPqqA-yzXs?_EJ;h8DC4f-^WC7oUq;jW4qFR<|E`b?>p>M+b^=`F zR$(YtOWLa{)?(6}?}$UmolLF_ra^v2g`+wQ)xbWLfM6h1)O(HI-Qy)uSB>cw@>NOC zo_EwG`>)2!Q@1_9_$~J|7cax|L1rMDyR+4g`R=l@2)*X>c~&*X8dG=m?Gs{f_0Lo^ zoczgW#{cbon^crEDMuY;HK|2vLA7_}9>D$^TX;+WsPh}aUWD>_V<5UCGQF)m{<1X$ zRT1`Ahy*x@!`J;JQLP3PvO(U4xiGW+G|42M9vaz$=G$#H5U<_{7^oQ+`;)Bc>Ou6u zO+d@lA#U(o&l7s=z+#AHMzBWyFEICqn8PTgGMf2L8~%*DA%7%!oHe&_ zyzjYnS@kx)ApOr$D8QG;obr2O^l0YAYuYoOTRut!fzT`n2-M-dJHr4>Sfz>)SxN@^ z9xJ8kqpRp+sO!dA{w!QH^oXSy-B(0JC=4+fqrFlvLKQ~Mp-cAc3?1@Qu;heeI!aQy zw^;bWFE+7275+YVI+mTTz)y4Rj#NMj_glxIL4|+oQ1{<6s!te3aq5g+U7%jO;T5`lFx=pD zUAr*T(GJxx-(4tC?k0Yp=-}XUVJb!eMo?A*S*|TUZj|I4p9m_Tn-hPN<2S4Z#n}eW z;RHi1VfF9r2p>AudIOE$RxWo7v;Y&8YB|n2JC#!y-DBw$vN-wP_=Z3wHmE}Fd~>db z7O!~8JN9Cka_s}6#{%X9gUXlP@57zm$ft9UJM9`ZfBR?Syh4}-3ofeAK1kKqI%ztDQD-IcdNZp| zfP-^9>`0*xbrCvazFBeVyX(o`g2g>d=~=$wv9WR4eGwu*t2hm!%;+{3^sYHjV&Gs^ z2Lt=O;O$JuX@a?QQ-6ZzunU`S>p*5OYVQ*4H71oj)%csTqs8dK(y)x&34CUF8#n*f zqU}1QtQ1BlyEKosOrID^!X@{|8llQ{83dS{P1Q~DSU<4q+y+-HXy4(X{U0ufph(LN zspIsZY?&96d_uB^b7+Owa||^OodG;IyqdhxAddZ0QtU(Wx&Y+PbJ0&IQj}Q~OoyS8 z^|)dlm`u?~6{M(mP+)OIX-vUU{ULC46Q7iRd2li7+u7ABsYAOT%9TEMA4Ginvhs*( z+u$h6`UuB}LACNi>bl*x*dL}Hm1ts9lFg8HW##`>M1CYZ#cWaXY}jbT6?keo3!gt_ zIWk0|FS|WwQHpY(mGzm>0ID6;RuVQG!AaBxD)N0PD4#(~rD>JTS|K+gW1N z=PUhlChK+QN3E=a| znz$g-K2i(!Z*;O&kLmqgE40P>9srE-F`>?)AWj$z0FK+(%bfq@qT_bu_CfW#RJ+S` zpz%q1ENgChZ*?KlGa>J+cM{EZf74>c9W)uxP^clkUR%`fFNmEcn{M4wD-Qp0l_=xv%q6{P zB@(q&o$IVpE^5aQergp_&p|d@8n?ak*0foH8^d!!jE45)>o>~$ygo!y_Y+H9If-G} zRm~r2IRh0AE?aHIqib0)HxHjjpuYK>ZOwu%@4I#GSC|3e$42$$P?EWsE(h`p8_>rB zGvN2T3iidF=y3rfRNx)BU9M*_^WRKyrDM(I|ErNTv-EM%A&zJHs z>5b9bwiY~sU@?@ma?XJ&!07LO30#& zYo|I$i0(EWs5LQYySBFxAjdfXQ8Qk0{GeJ9b=plK6FxQ0bQO3cg*0k)VnhliuVmi% z6l}ObRHj1uqaj;fMN9V1ZKwZ(qp`scZ^@jG?8}rUKB*p_k3$T51m?pc7gMRvIaVQm z*#!j_5oZh$=@CWvISl7us|mVgJbTP#M&n~m3! zFYgu~c=erbLwOdLfQ#md1=Ft3_@Wh_rg=0-gN<9ADfMkZ@DX3vkM)yh9*E~f5X-C8 z0mny3*vzE*Z?dzC@9f^S#aVh79O6tc$lLR$`wpX{5wXZdvu2Mg{-;?-TPrxMr2S)s zsXm|VYR1UB!YgRL_Yz2nec2>QzS$*8+jCFak4{m{#2U!|1i+^n+6Sc$!RN<)SXakw z!u#y{F@RbNt8jmJ&319AWbM@WmA8)+IJ6=f#o-m>12YyG6fqPUrt|{1XG^psfapyb z&<sQSse!!s-tN@48dTU5PYmX zvr;(EPcmdPX908lF``cXz+Bs3oEAavkQOGGErF=0%VQ8I#AxNmG<{k=Ko<|B zb8a2`h}bZGC3==$sru(3#@P3vq*WJTal9SYQl!27e;1ud8o%|vV5LG}ig=FmFkLNt z^8?xQc35OC({&|BOnd4;uVG!y-|(ooLiO;|?z02=b-^S=VY=#uMnFZUFSBp33~SD7 zYrI>P;uS!T(N&dmAzN%Hr;OTBIw}=&JSHY&B6>86pDt%x_J;DSnPJMSBbx za~|?HyEx><$%1Jm0H#;4>9Z_DZXdxR*!AN?J{6y(UTD9>u}^SSOS!n=i0^OOX^Z5H zQd_`-+*d`3HH?LI`(zo6PpFpv-!^2e4xoYb@z9ndBGSv4FJfsxLMqjh0{qS(Brrvq zQ1BZS5U6ucWi7mN;;#5~c~y5_-C;4{tNQm;m;nlHQ6dXddBaD&#cUL$Ya3*(@wG2N z!cYx@l{-NbY3)okwZI)_lSrli+ei|Ig2*e(03X2VqtXVdr=%qiCfmRIzjc184>o8K z3bn$AO)NRKiy$35?l+eHo^8|yRcsz>*!Oq1qqOok`$wRQo@@QQ7_>g(e1s*23{QEl ztww6_>G3KVhZer{lXz3$@yK?`>?o7eB%*6hD^BEGiO(<$G@5bEQYX>Czh+}=rWTqd zBxCQve}aE_O1J0-b*cOvkAq`0Yl-6OSt1L_+7S$!hHg*D=4iQtlx~u z9UwU$sp+@`hWnhWjopcl15iS%?6B^GlGo)=7ym0!h7{z0?r(SroX^lu!jW06_XmL+ zB~drK^T3OKp%MLW$J2VFCUQ)`tE47 zA@j0J=;b2E8tw8fL|$04H8?D;T|hRH?a6auxXkY=q_#Y+rq~JisrTcAcT#AhC;6KS zPlwSrF`+I>tc?=mNNzT9;<7sBW7$dm_RbS4g%+m}Hg|Y(MwOtg<%g&)Inc1ecG$79 zPBPXYuXTq3WV2^RzhuyuFcYBiTi^cR)5gMw5nuI4!>*=}G2GD)B#~})UPT#Iypti_Q zD}V+(i`KLtf5J0YpWke5Phhiue`*_dCUNAr*2518%L)?%0j`36KRf;JWoje8G^O24 zMAuj5h>?7dl_}u`xRv_$!uv(Txk!ZuS2uh%VG6AD2iEY7JlEub37yZYlDjzpmft%} zkptGMeXI@Z+wB1xBz626H?{hFig=E^b%KOvImQpJ8~m?J6_ z`=;6{cW6am;QE}C?m~lH$ex**&D@w*1vGk1o);+W^DAP+RJz3fn`^KZv?8zZPJF2m zn%j$QnaIt@b{K>RrjV-p!Aw`o?%`*3-4ybkQ`cakT!DV>u{UOOyhGw8`{6+Dt;y}m zyET!h)lU*`1_t7$=g(NxNKkkl(n~`j5u>`F#=u)E;HR_iTeJl~*5*(0lPi)OOqVVn zO$M#J#g{n;4N^=`k#Tc#&%edYtl|YCKNvU2QN{;8|Kq7V1Gbk^fm(C{{#`dsZJB^> z2S7S%wGwaQw1bvnFT0b0@_kDO6~op$WZ=dQ-TB0a+UM!S`?zC&llDHp5@e zpjQ`%{qND8yD)D8&<|dl_?Sqd9!vG;IW-YPc~5M6SU)QcQn|384L{HlH@6YZJ&_;O zP#<%O^JLK_!N1ZB2Iu|fUxQx5Wt>5ksZaErr#V-}BMY*w)M1RM|4rTjKwc*)GzW~y zpBM1|54PF6o8T*;(iyO3JUW+K;luXXtG*z$AiPFEq^ zb>@1Cm0yo4ZW;nX#OC9eaQcVt>99{gU<5B)za9NFGW@>eqbU~)_XL#KarU&Q4(QB9 zS`q<2Zd2q_D1tGA+G_QttVhi&3+aeRNC<2G8f@C#U%uz8U$K}dRSx*@tGS$?RG861 z1{K`EHyGZRd?SrZVRT$PV9y$xN>BvZgC0C8dW!lRKqeZsBo|rg=cwPnVI9VL{0~KC z+$H+?-+uNv^^K!m)K>C=mo6dkTyGn#c2MW>K3fV}Mc0z5m*{r}^UxO>E+ zLNx=l1b~<9!VyTbB+wl0hAf(IygnUIrH3RDjiE_wOzInGvl7T>c}9QsUit+qTNBp! zTnxhup+0jx)%Q0^e1Jo3f)Pb&KD_Bbn-+6f`imX*ep{Ts@dxf-grm9TEIL+138gGe z_nVNW@WNWznF8Q-iAsw)AFgOY38PF>WD`%hw76UX458;Sx%sXfn);#~rm}w@iYcx1 z?P0UX|5$}b6;3s}@zIiD-beY30|x$~$Ef>v{`cM%LpH^+FwdrN_isanb*8Lpwa-5L z$*N?XCPdq?4mkg%BjC31=h+oH14p&kW?}DdbpB#S0)uFNR3E5YxstRwxtKp(MQZUS#~T1!77Fid|%6R|ij5g55; zoNb#?12gy@aZ*t$471aMQTOv?aw58s6vb-o9q7EH zZo*v7#bw?k3#KY|O2VS!oS_&M=c^n3gNIsTJpsrmXe4M#xSNcHaj*iE*?wlw)fUR) z$3~~EgzEV^Bwwxj$=S=nlFvr+k0v^L^Ix$Wqx(wCvkL!1H?cU0$a|AgLqg(@w1L{+ zWGN0DX6Ad;UvpW?6614bGVYlAwv7eZH7>y`?haE)tZ0sPEFR(TY4V?lFnU3}WMy7| zEh-?G+L(XeoV8&2I2BU27YuBIYgxp1K4N$6Ng8v)_Wf1DVdn}+^-WmYgG+EnLhg!5 z^u_{~dqXvml5?vUugvBt81#7uAtFz&GD|MFCOB_zd`9~Dh!x#3ixoaoT3jIWSkSP8lG!1i z-lF507QL(FX)s9rQ-FJ`H3^v`{E8O$D#2z@l)r!@&Bzp1wvFO|U;;Yfgt~Jfz@DZ0 zE{)l&8cOx=ci`mu{GVXsGh!bBZl`i)jYWv4y5y7J*BL7OtdWhBwORpZXEONtl}Nsv zvnKYw1cJkd-;??jWs$#DT(3S*CDGykr&5%L-vttu?xq7U&>9orfN0Hd>ceLoH#%E0 zM)!Nw+6cM^q_(KgWZPkA!LIu<{cpxug@XGy_3Pm2!|7>l{7Airmo#)?hL_}SBCF|h zE`I=f9O4%sDMU{dBo6w);oE1t1jPru zi`AM|Spf_g2WHlwZDe4?ZO!|TrDwrw=bxs_!kdf|yytnQ-68KeI$hKd1LR~sWXtX>x5 po6tzw+4G9qChxUbRTcI_v_ie<+20 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

    esU-j!AKflm;h#D4mmEkcatd=#!qRb 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 z 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 Ou%nIxOe+h_uXM2h)-mM( From aca9cd95c7c608b359616077dd197a2fc6cfbb83 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:08:29 +0200 Subject: [PATCH 7/8] New changes --- src/fileio.c | 37 ++++++++++-- src/globals.h | 2 +- src/line.c | 136 ++++++++++++++++++++++++-------------------- src/line.h | 4 +- src/newtrodit.c | 70 ++++++++++++++--------- src/newtrodit.h | 36 +++++++++--- src/newtrodit_gui.c | 91 +++++++++++++++++++++++------ src/unicode.c | 106 +++++++++++++++++++--------------- 8 files changed, 314 insertions(+), 168 deletions(-) diff --git a/src/fileio.c b/src/fileio.c index e39ccec..95d9a0e 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -61,6 +61,7 @@ int save_file(File *tstack, char *savefile, bool saveDialog) if (tmp_filename[0] == '\0') { load_all_newtrodit(tstack, NULL); + display_contents(tstack); function_aborted(tstack, tmp_filename); return 0; } @@ -71,6 +72,8 @@ int save_file(File *tstack, char *savefile, bool saveDialog) { load_all_newtrodit(tstack, NULL); print_message("%s%s", NEWTRODIT_FS_FILE_INVALID_NAME, tmp_filename); + display_contents(tstack); + getch_n(); return 0; } @@ -86,11 +89,14 @@ int save_file(File *tstack, char *savefile, bool saveDialog) { load_all_newtrodit(tstack, NULL); print_message(NEWTRODIT_FS_FILE_SAVE_ERR, tmp_filename); + display_contents(tstack); + getch_n(); return 0; } set_status_msg(true, NEWTRODIT_FILE_SAVED); load_all_newtrodit(tstack, ed.status_msg); + display_contents(tstack); write_file(tstack, savefp); fclose(savefp); @@ -105,7 +111,7 @@ void save_modified_file(File *tstack) if (tstack->file_flags & IS_MODIFIED) { print_message("%s", NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); - if (yes_no_prompt(true)) + if (yes_no_prompt()) save_file(tstack, NULL, false); } } @@ -114,7 +120,7 @@ int close_file(File *tstack) { save_modified_file(tstack); print_message("%s", NEWTRODIT_PROMPT_CLOSE_FILE); - if (yes_no_prompt(false)) + if (!yes_no_prompt()) { display_status(tstack, ed.status_msg); return 0; @@ -153,9 +159,29 @@ int close_file(File *tstack) int load_file(File *tstack, FILE *fp) { fseek(fp, 0, SEEK_SET); // Set fp to the beginning of the file pointer - char *read_header_bom = calloc(4, sizeof(char)); - size_t headerbytesread = fread(read_header_bom, sizeof(char), 4, fp); + const size_t READ_HEADER = 64; + char *read_header_bom = calloc(READ_HEADER, sizeof(char)); + size_t headerbytesread = fread(read_header_bom, sizeof(char), READ_HEADER, fp); tstack->encoding = get_file_encoding(read_header_bom, headerbytesread, &tstack->encoding_bom_len); // Identify the encoding of the file being read, assume UTF-8 if none is detected (could this be an issue?) + fseek(fp, 0, SEEK_END); + size_t file_size = ftell(fp); + if(tstack->encoding == ENCODING_UTF8) + { + int text_utf16 = is_utf16((unsigned char*) read_header_bom, headerbytesread, file_size); + switch(text_utf16 + 1) + { + case ENCODING_UTF16LE: + tstack->encoding = ENCODING_UTF16LE; + break; + case ENCODING_UTF16BE: + tstack->encoding = ENCODING_UTF16BE; + break; + default: + tstack->encoding = ENCODING_UTF8; + break; + } + } + free(read_header_bom); fseek(fp, tstack->encoding_bom_len, SEEK_SET); // Start reading the file after the BOM, if present @@ -183,7 +209,6 @@ int load_file(File *tstack, FILE *fp) if (++nl_idx >= nl_len) { memset(&tstack->line[yps]->str[xps - nl_idx + 1], 0, nl_len - 1); - printf("(\\n)\n"); tstack->linecount++; tstack->size += nl_len; xps = 0; @@ -265,7 +290,7 @@ int load_file(File *tstack, FILE *fp) int open_file(File *tstack) { save_modified_file(tstack); - char *tmp_openfile = calloc(sizeof(utf8_int32_t), MAX_PATH + 1); + char *tmp_openfile = calloc(MAX_PATH + 1, sizeof(utf8_int32_t)); print_message(NEWTRODIT_PROMPT_FOPEN); fgets(tmp_openfile, MAX_PATH * sizeof(utf8_int32_t), stdin); tmp_openfile[utf8cspn(tmp_openfile, "\r\n")] = '\0'; diff --git a/src/globals.h b/src/globals.h index 6054c0b..4d28cd7 100644 --- a/src/globals.h +++ b/src/globals.h @@ -43,7 +43,7 @@ int openFileHandle = true; // Open a file handle int RGB24bit = false; // Use 24-bit RGB instead of 4-bit colors int findInsensitive = false; // Find insensitive string int matchWholeWord = false; // Match whole word when finding a string -int devMode = false; // Bool to enable or disable the dev mode +int devMode = true; // Bool to enable or disable the dev mode int autoComplete = true; // Keyword autocompleting (if syntax highlighting is there) int bpsPairHighlight = false; // Use BPS pair highlighting (bugged) diff --git a/src/line.c b/src/line.c index 1c16be0..f910aca 100644 --- a/src/line.c +++ b/src/line.c @@ -1,14 +1,19 @@ -size_t correct_position(Line *line, size_t *xpos, size_t *uxpos); +size_t correct_position(Line *line, size_t *xpos, size_t *uxpos, size_t *uwxpos); +void print_message(const char *str, ...); +int set_scroll(File *tstack); +int increase_scroll(File *tstack, size_t amount); Line *create_line(File *tstack, size_t ypos) { - tstack->line[ypos] = calloc(sizeof(Line), 1); - tstack->line[ypos]->str = calloc(sizeof(utf8_int32_t), LINE_SIZE); - tstack->line[ypos]->render = calloc(sizeof(utf8_int32_t), LINE_SIZE); + tstack->line[ypos] = calloc(1, sizeof(Line)); + tstack->line[ypos]->str = calloc(LINE_SIZE, sizeof(utf8_int32_t)); + tstack->line[ypos]->render = calloc(LINE_SIZE, sizeof(utf8_int32_t)); tstack->line[ypos]->bufx = 10; tstack->line[ypos]->render_bufx = LINE_SIZE; tstack->line[ypos]->len = 0; tstack->line[ypos]->rlen = 0; + tstack->line[ypos]->ulen = 0; + tstack->line[ypos]->rnlen = 0; tstack->alloc_lines++; return tstack->line[ypos]; } @@ -17,13 +22,11 @@ size_t change_allocated_lines(File *tstack, size_t old_line_count, size_t new_li { Line **linestack = realloc_n(tstack->line, old_line_count * sizeof(Line *), new_line_count * sizeof(Line *)); if (!linestack) - { return old_line_count; - } + for (size_t i = old_line_count; i < new_line_count; i++) - { create_line(tstack, i); - } + tstack->alloc_lines = new_line_count; return new_line_count; } @@ -66,10 +69,10 @@ Line *increase_line_render(Line *line, size_t increment) Line *insert_row(Line **lines, size_t startpos, size_t arrsize, Line *arrvalue) { - for (size_t i = arrsize; i > startpos; i--) - lines[i] = lines[i - 1]; - - lines[startpos + 1] = arrvalue; + if (startpos > arrsize) + return NULL; + memmove(lines + startpos + 1, lines + startpos, (arrsize - startpos) * sizeof(Line *)); + // lines[startpos] = arrvalue; return lines[startpos]; } @@ -98,6 +101,8 @@ char *render_line(File *tstack, size_t yps) size_t len = tstack->line[yps]->len; // Original line length in bytes size_t rlen = 0; // Render length in bytes size_t ulen = 0; // Number of characters rendered (not bytes) + size_t uwlen = 0; // Number of Unicode characters rendered (taking into account the different widths) + // size_t old_rnlen = tstack->line[yps]->rnlen; size_t ulen_increase = 0; // Bytes to advance for the next Unicode character char *s_ptr = tstack->line[yps]->str; // Pointer to the start of the line string @@ -109,11 +114,12 @@ char *render_line(File *tstack, size_t yps) if (display_uchars > ed.xsize - lnum) display_uchars = ed.xsize - lnum; - while (ulen < display_uchars && *s_ptr != '\0') + while (uwlen < display_uchars && *s_ptr != '\0') { // Decode the next codepoint and get the byte length char *next_ptr = utf8codepoint(s_ptr, &out_codepoint); size_t byte_len = next_ptr - s_ptr; + uwlen += mk_wcwidth(out_codepoint); // Increase the Unicode width counter // Increase the Unicode length counter ulen++; @@ -138,84 +144,90 @@ char *render_line(File *tstack, size_t yps) // Move to the next character s_ptr = next_ptr; } - // Fill the rest of the line with spaces if needed - if (ulen < ed.xsize - lnum) + tstack->line[yps]->rnlen = rlen; + if (uwlen < ed.xsize - lnum) { - memset(tstack->line[yps]->render + rlen, ' ', ed.xsize - lnum - ulen); - rlen += ed.xsize - lnum - ulen; + /* printf("uwlen: %zu, rlen: %zu, lnum: %zu, yps: %zu. Filling: %zu\n", uwlen, rlen, lnum, yps, ed.xsize - lnum - uwlen); + getch(); */ + /* printf("rlen: %zu\n", rlen); + getch(); */ + + memset(&tstack->line[yps]->render[rlen], ' ', ed.xsize - lnum - uwlen); + rlen = ed.xsize - lnum; + } // Null-terminate the rendered string tstack->line[yps]->render[rlen] = '\0'; tstack->line[yps]->rlen = rlen; // Store the length of the rendered line + return tstack->line[yps]->render; } - void see_buffer(Line **lines, size_t linecount) { for (size_t i = 1; i <= linecount; i++) printf("str[%zu]=%s\n", i, lines[i]->str); +} - getch(); +void see_render_buffer(Line **lines, size_t linecount) +{ + for (size_t i = 1; i <= linecount; i++) + printf("rdr[%zu]=%s\n", i, lines[i]->render); } -int split_row(File *tstack, size_t *split_x, size_t *yps) +int split_row(File *tstack, size_t split_x, size_t *yps) { - if (tstack->linecount < tstack->alloc_lines - 1) - { - correct_position(tstack->line[*yps], split_x, yps); - insert_row(tstack->line, (*yps), tstack->alloc_lines, NULL); - create_line(tstack, (*yps) + 1); + // Split a line in position split_x into a new row like the Enter key is pressed in the middle of a line - tstack->linecount++; + Line *curr_line = tstack->line[*yps]; - // Copy all characters starting from xpos from the old line to the new line + size_t len = curr_line->len - split_x; - strncpy_n(tstack->line[*yps + 1]->str, &tstack->line[*yps]->str[*split_x], strlen_n(tstack->line[*yps]->str) - *split_x); - memset(&tstack->line[(*yps)]->str[*split_x], 0, tstack->line[*yps]->bufx - *split_x); - /* see_buffer(tstack->line, tstack->linecount); - getch(); */ - render_line(tstack, *yps); - for (int i = 0; i <= 1; i++) - { - tstack->line[*yps + i]->len = strlen_n(tstack->line[*yps + i]->str); - tstack->line[*yps + i]->ulen = utf8len_n(tstack->line[*yps + i]->str); - } - tstack->xpos = 0; - tstack->uxpos = 0; - (*yps)++; - render_line(tstack, *yps); - - /* if (refreshScreen) - { - if (Tab_stack[file_index].display_y > YSIZE - 3) - { - ClearPartial(0, 1, XSIZE, YSCROLL); - } - else - { - ClearPartial((lineCount ? (tstack->linecount_wide) : 0), dispy, XSIZE - (lineCount ? (tstack->linecount_wide) : 0), YSIZE - dispy - 1); - } - DisplayFileContent(tstack, stdout, 0); - } */ - } + tstack->linecount++; + + insert_row(tstack->line, *yps, tstack->linecount, NULL); + create_line(tstack, (*yps) + 1); + tstack->alloc_lines++; + + // Copy all characters starting from xpos from the old line to the new line + memcpy(tstack->line[(*yps) + 1]->str, &curr_line->str[split_x], curr_line->len - split_x); + memset(&curr_line->str[split_x], 0, curr_line->bufx - split_x); + tstack->line[(*yps) + 1]->len = len; + curr_line->len = split_x; + // We cannot use strlen, strlen_n, utf8len or utf8len_n here because string are not null-terminated + + curr_line->ulen = utf8len_null(curr_line->str, curr_line->len); + tstack->line[(*yps) + 1]->ulen = utf8len_null(tstack->line[(*yps) + 1]->str, tstack->line[(*yps) + 1]->len); + + tstack->xpos = 0; + tstack->uxpos = 0; + tstack->uwxpos = 0; +/* see_buffer(tstack->line, tstack->linecount); + getch(); */ + + render_line(tstack, *yps); + render_line(tstack, ++(*yps)); +/* see_render_buffer(tstack->line, tstack->linecount); + getch(); */ + // see_render_buffer(tstack->line, tstack->linecount); + tstack->ypos = *yps; + + increase_scroll(tstack, 1); return *yps; } - -int display_contents(File* tstack) +int display_contents(File *tstack) { - size_t disp_lines = tstack->linecount-tstack->begin_display.y; - for(size_t i = tstack->begin_display.y; i <= disp_lines; i++) + size_t disp_lines = tstack->linecount - tstack->begin_display.y; + for (size_t i = tstack->begin_display.y; i <= disp_lines; i++) { - if(tstack->post_load_rendering) - { + if (tstack->post_load_rendering) render_line(tstack, i); - } + display_line(tstack, i, tstack->line[i]->rlen); } return 0; diff --git a/src/line.h b/src/line.h index 953eaf3..c85bdee 100644 --- a/src/line.h +++ b/src/line.h @@ -1 +1,3 @@ -#include "line.c" +int display_line(File *tstack, size_t linenum, size_t rcount); + +#include "line.c" \ No newline at end of file diff --git a/src/newtrodit.c b/src/newtrodit.c index c375028..4093b79 100644 --- a/src/newtrodit.c +++ b/src/newtrodit.c @@ -7,11 +7,11 @@ void sigsegv_handler() { - signal(SIGSEGV, sigsegv_handler); + /* signal(SIGSEGV, sigsegv_handler); alternate_buffer(false); fprintf(stderr, "Fatal Newtrodit exception! (segmentation violation)\nReport this issue to the project's GitHub."); fflush(stdout); - exit(errno); + exit(errno); */ } int init_editor() @@ -21,13 +21,13 @@ int init_editor() if (!_isatty(_fileno(stdout)) || !_isatty(_fileno(stderr))) #else - if (!isatty(STDIN_FILENO)) + if (!isatty(STDOUT_FILENO)) #endif { /* If for some reason stdout or stderr are still redirected to a file, show an error and quit */ - fprintf(stderr, "%s", NEWTRODIT_ERROR_REDIRECTED_TTY); + fprintf(stderr, "%s\n", NEWTRODIT_ERROR_REDIRECTED_TTY); exit(1); } @@ -43,7 +43,7 @@ int init_editor() ed.displayStatusOnce = false; // ed.status_msg = calloc(DEFAULT_ALLOC_SIZE, sizeof(utf8_int32_t)); ed.status_msg = NULL; - file = calloc(sizeof(File *), open_files); + file = calloc(open_files, sizeof(File *)); #ifdef _WIN32 hStdout = GetStdHandle(STD_OUTPUT_HANDLE); @@ -59,9 +59,7 @@ int init_editor() SetConsoleOutputCP(CP_UTF8); #else if (tcgetattr(STDIN_FILENO, &orig_termios) == -1) - { fprintf(stderr, "%s", NEWTRODIT_ERROR_FAILED_CONSOLE_ATTRIB); - } /* input modes: no break, no CR to NL, no parity check, no strip char, * no start/stop output control. */ orig_termios.c_iflag |= BRKINT | ICRNL | INPCK | ISTRIP | IXON; @@ -76,7 +74,7 @@ int init_editor() get_cols_rows(&ed.xsize, &ed.ysize); vt_settings(true); - alternate_buffer(true); + //alternate_buffer(true); allocate_buffer(&file[ed.file_index]); // Pass the address of the file pointer load_all_newtrodit(file[ed.file_index], NULL); @@ -107,25 +105,34 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) if (_uxpos > 0) { previous_char_xpos(tstack->line[_ypos]->str, &_xpos); + _uwxpos -= previous_char_uwlen(tstack->line[_ypos]->str, _xpos); + _uxpos--; } else if (_ypos > 1) { _xpos = tstack->line[--_ypos]->len; _uxpos = tstack->line[_ypos]->ulen; + _uwxpos = utf8wnlen(tstack->line[_ypos]->str, _uxpos); + decrease_scroll(tstack, 1); } break; case RIGHT: if (_uxpos < tstack->line[_ypos]->ulen) { + + _uwxpos += next_char_uwlen(tstack->line[_ypos]->str, _xpos); next_char_xpos(tstack->line[_ypos]->str, &_xpos); + _uxpos++; } else if (_ypos < tstack->linecount) { _xpos = 0; _uxpos = 0; + _uwxpos = 0; _ypos++; + increase_scroll(tstack, 1); } break; case DOWN: @@ -135,6 +142,9 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) if (_uxpos > tstack->line[_ypos]->ulen) _uxpos = tstack->line[_ypos]->ulen; _xpos = utf8getxpos(tstack->line[_ypos]->str, _uxpos); + set_status_msg(false, "Down: %zu", utf8wnlen(tstack->line[_ypos]->str, _uxpos)); + _uwxpos = utf8wnlen(tstack->line[_ypos]->str, _uxpos); + increase_scroll(tstack, 1); } break; @@ -147,6 +157,7 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) { _uxpos = tstack->line[_ypos]->ulen; _xpos = utf8getxpos(tstack->line[_ypos]->str, _uxpos); + _uwxpos = utf8wnlen(tstack->line[_ypos]->str, _uxpos); } } break; @@ -188,13 +199,11 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) if (ch.flags & SHIFT_BITMASK) { char inbuf[100]; - gotoxy(0, ed.ysize - 2); + clear_partial(0, ed.ysize - 2, ed.xsize, 1); printf("Insert hex: "); scanf("%s", inbuf); //(inbuf, sizeof inbuf, stdin); - //inbuf[strcspn(inbuf, "\r\n")] = '\0'; - printf("inserthex ok \"%s\"", inbuf); - get_newtrodit_input(); + // inbuf[strcspn(inbuf, "\r\n")] = '\0'; display_status(tstack, NULL); display_cursor_pos(tstack, NULL); ch.utf8char = strtol(inbuf, NULL, 16); @@ -211,9 +220,15 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) { ptr = tstack->line[_ypos]->str + _xpos; ptr2 = utf8rcodepoint(tstack->line[_ypos]->str + _xpos, &codep); + size_t temp_xpos = previous_char_uwlen(tstack->line[_ypos]->str, _xpos - 1); + if (delete_str(tstack->line[_ypos], _xpos - (ptr - ptr2), ptr - ptr2)) { + // printf("delstr ok %zu: %zu", temp_xpos, _xpos); + _xpos -= ptr - ptr2; + _uwxpos -= temp_xpos; + _uxpos--; tstack->line[_ypos]->ulen--; } @@ -225,20 +240,15 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) _ypos--; tstack->uxpos = tstack->line[_ypos]->ulen; tstack->xpos = tstack->line[_ypos]->len; + tstack->uwxpos = utf8wlen(tstack->line[_ypos]->str); tstack->linecount--; } } break; case ENTER: - if (_xpos == tstack->line[_ypos]->len && _ypos + 1 == tstack->linecount) - { - tstack->linecount++; - _ypos++; - } - else - { - split_row(tstack, &_xpos, &_ypos); - } + split_row(tstack, _xpos, &_ypos); + increase_scroll(tstack, 1); + break; case CTRLS: save_file(tstack, tstack->filename, ch.flags & SHIFT_BITMASK); // If Shift is pressed, always display save as dialog @@ -255,11 +265,11 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) case CTRLC: break; case CTRLD: - if(ch.flags & SHIFT_BITMASK) + if (ch.flags & SHIFT_BITMASK) toggle_option(&devMode, NEWTRODIT_DEV_TOOLS); - else + else set_status_msg(true, "%s", tstack->line[_ypos]->str); - + break; case ESC: clear_status_msg(); @@ -274,6 +284,7 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) insert_utf8_char(tstack->line[_ypos], ch.utf8char, _xpos); _xpos += codepoint_len(ch.utf8char); _uxpos++; + _uwxpos += codepoint_width(NULL, ch.utf8char); tstack->file_flags |= IS_MODIFIED; } break; @@ -296,12 +307,16 @@ int editor_main() set_display_pos(file[ed.file_index]); display_line_numbering(file[ed.file_index], _ypos); - gotoxy(_uwxpos + file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, file[ed.file_index]->scroll_pos.y); ch = get_newtrodit_input(); handle_keystrokes(ch, file[ed.file_index]); + if (ed.status_msg == NULL && ed.dirty) + { + display_bottom_bar(NULL); + ed.dirty = false; + } if (ed.displayStatusOnce && !ed.dirty) { @@ -320,7 +335,7 @@ int editor_main() ed.dirty = true; } } - correct_position(file[ed.file_index]->line[_ypos], &_xpos, &_uxpos); + correct_position(file[ed.file_index]->line[_ypos], &_xpos, &_uxpos, &_uwxpos); if (ed.dirty) { @@ -332,6 +347,7 @@ int editor_main() { display_cursor_pos(file[ed.file_index], NULL); } + set_scroll(file[ed.file_index]); display_line(file[ed.file_index], _ypos, file[ed.file_index]->line[_ypos]->rlen); } return 1; @@ -344,6 +360,6 @@ int main() init_editor(); editor_main(); - + end_editor(); } \ No newline at end of file diff --git a/src/newtrodit.h b/src/newtrodit.h index 2ae79a2..0321947 100644 --- a/src/newtrodit.h +++ b/src/newtrodit.h @@ -11,8 +11,8 @@ #include #include #include -#include -#include +#include "../include/utf8/utf8.h" +#include "../include/wcwidth.h" #ifdef _WIN32 #include @@ -55,7 +55,7 @@ enum unicode_encodings }; const char newtrodit_version[] = "1.0"; -const char newtrodit_date[] = "2024/08/25"; +const char newtrodit_date[] = "2024/09/05"; typedef struct Line { @@ -67,6 +67,7 @@ typedef struct Line size_t len; // Line Length size_t rlen; // Rendered length + size_t rnlen; // Rendered length without padding size_t ulen; // UTF-8 length } Line; @@ -144,7 +145,7 @@ File **file; int end_editor(); int init_editor(); Line *create_line(File *tstack, size_t ypos); -int codepoint_width(const char *utf8_char); +int codepoint_width(const char *utf8_char, utf8_int32_t val); #ifdef _WIN32 #include "win32/graphics_win32.c" @@ -165,6 +166,7 @@ size_t utf8len_n(const char *s) return 0; return utf8len(s); } + size_t utf8nlen_n(const char *s, size_t n) { if (!s) @@ -172,6 +174,21 @@ size_t utf8nlen_n(const char *s, size_t n) return utf8nlen(s, n); } +size_t utf8len_null(char *s, size_t max_bytes) // Get the number of UTF-8 characters in a non-null terminated string with a known byte length +{ + if (!s) + return 0; + char *ptr = s; + utf8_int32_t cp=0; + size_t ulen = 0; + while (*ptr != '\0' && ulen < max_bytes) + { + ptr = utf8codepoint(ptr, &cp); // Get a pointer to the next codepoint + ulen++; // Increase the Unicode character counter + } + return ulen; +} + size_t strlen_n(const char *s) { if (!s) @@ -254,6 +271,12 @@ char *remove_quotes(char *s) int trim_message(char *msg, size_t max_len) { size_t ulen = utf8len(msg); + if (ulen > max_len) + { + msg[max_len] = '\0'; + return 1; + } + return 0; } int set_status_msg(bool display_once, char *msg, ...) @@ -269,9 +292,6 @@ int set_status_msg(bool display_once, char *msg, ...) vsnprintf(ed.status_msg, copyamount, msg, args); trim_message(ed.status_msg, ed.xsize - (fullCursorInfoDisplay ? 45 : 20)); - printf("{%s}:[%s]", msg, ed.status_msg); - getch(); - ed.dirty = true; ed.displayStatusOnce = display_once; return 1; @@ -283,7 +303,7 @@ int clear_status_msg() free(ed.status_msg); ed.status_msg = NULL; - ed.dirty = false; + ed.dirty = true; return 1; } diff --git a/src/newtrodit_gui.c b/src/newtrodit_gui.c index 044c3f3..f065b85 100644 --- a/src/newtrodit_gui.c +++ b/src/newtrodit_gui.c @@ -98,11 +98,17 @@ void display_cursor_pos(File *tstack, char *status) len += utf8len_n(status); clear_partial(len, ed.ysize, ed.xsize - len, 1); + if (fullCursorInfoDisplay) - printf(longPositionDisplay ? "Line %zu/%zu (%zu%%), Column %zu/%zu (%zu%%)" : "Ln %zu/%zu (%zu%%), Col %zu/%zu (%zu%%)", tstack->ypos, tstack->linecount + !tstack->line[tstack->linecount]->len, 100 * tstack->ypos / (tstack->linecount + !tstack->line[tstack->linecount]->len), tstack->uxpos + 1, tstack->line[_ypos]->ulen + 1, (size_t)100 * (tstack->uxpos) / (!tstack->line[_ypos]->ulen ? 1 : tstack->line[_ypos]->ulen)); + printf(longPositionDisplay ? "Line %zu/%zu (%zu%%), Column %zu/%zu (%zu%%)" : "Ln %zu/%zu (%zu%%), Col %zu/%zu (%zu%%)", tstack->ypos, tstack->linecount + !tstack->line[tstack->linecount]->len, 100 * tstack->ypos / (tstack->linecount + !tstack->line[tstack->linecount]->len), tstack->xpos + 1, tstack->line[_ypos]->len + 1, (size_t)100 * (tstack->xpos) / (!tstack->line[_ypos]->len ? 1 : tstack->line[_ypos]->len)); else - printf(longPositionDisplay ? "Line %zu, Column %zu" : "Ln %zu, Col %zu", tstack->ypos, tstack->uxpos + 1); // +1 because it's zero indexed - + printf(longPositionDisplay ? "Line %zu, Column %zu" : "Ln %zu, Col %zu", tstack->ypos, tstack->xpos + 1); // +1 because it's zero indexed + + /* if (fullCursorInfoDisplay) + printf(longPositionDisplay ? "Line %zu/%zu (%zu%%), Column %zu/%zu (%zu%%)" : "Ln %zu/%zu (%zu%%), Col %zu/%zu (%zu%%)", tstack->ypos, tstack->linecount + !tstack->line[tstack->linecount]->len, 100 * tstack->ypos / (tstack->linecount + !tstack->line[tstack->linecount]->len), tstack->uxpos + 1, tstack->line[_ypos]->ulen + 1, (size_t)100 * (tstack->uxpos) / (!tstack->line[_ypos]->ulen ? 1 : tstack->line[_ypos]->ulen)); + else + printf(longPositionDisplay ? "Line %zu, Column %zu" : "Ln %zu, Col %zu", tstack->ypos, tstack->uxpos + 1); // +1 because it's zero indexed + */ } void display_status(File *tstack, char *status_msg) @@ -111,8 +117,7 @@ void display_status(File *tstack, char *status_msg) display_cursor_pos(tstack, status_msg); } - -void function_aborted(File *tstack, char* status_msg) +void function_aborted(File *tstack, char *status_msg) { print_message(NEWTRODIT_FUNCTION_ABORTED); getch_n(); @@ -120,7 +125,6 @@ void function_aborted(File *tstack, char* status_msg) return; } - void load_line_numbering(File *tstack) { if (ed.lineNumbers) @@ -143,9 +147,9 @@ void display_line_numbering(File *tstack, size_t ypos) { if (ed.lineNumbers) { - if ((size_t) (log10(_ypos) + 1) >= tstack->linenumber_wide) + if ((size_t)(log10(_ypos) + 1) >= tstack->linenumber_wide) { - tstack->linenumber_wide = (size_t) (log10(_ypos) + 2); + tstack->linenumber_wide = (size_t)(log10(_ypos) + 2); load_line_numbering(tstack); } set_color(line_number_bg_color); @@ -221,9 +225,22 @@ void set_cursor_settings(int visible, int size) } } */ -int yes_no_prompt(bool default_yes) +int yes_no_prompt() { - return tolower(getch_n()) == (default_yes ? 'y' : 'n'); + while (1) + { + switch (tolower(getch_n())) + { + case 'y': + return 1; + break; + case 'n': + return 0; + break; + default: + continue; + } + } } void quit_newtrodit(File *tstack) @@ -231,11 +248,11 @@ void quit_newtrodit(File *tstack) if (tstack->file_flags & IS_MODIFIED) { print_message(NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); - if (!yes_no_prompt(false)) + if (yes_no_prompt()) save_file(tstack, tstack->filename, !!(tstack->file_flags & IS_UNTITLED)); // tstack->file_flags &~ IS_SAVED isn't needed due to being redundant } print_message(NEWTRODIT_PROMPT_QUIT); - if (yes_no_prompt(true)) + if (yes_no_prompt()) { end_editor(); exit(1); @@ -243,20 +260,62 @@ void quit_newtrodit(File *tstack) ed.dirty = true; } - - int display_line(File *tstack, size_t linenum, size_t rcount) { gotoxy(file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, tstack->scroll_pos.y); - fwrite(tstack->line[linenum]->render, rcount < tstack->line[linenum]->rlen ? rcount : tstack->line[linenum]->rlen, sizeof(char), stdout); return 0; } -int toggle_option(int *option, char* msg) +int set_scroll(File *tstack) +{ + tstack->begin_display.y = tstack->ypos - tstack->scroll_pos.y; + if (tstack->begin_display.y < 0) + tstack->begin_display.y = 0; + if (tstack->begin_display.y > tstack->linecount - tstack->scroll_pos.y) + tstack->begin_display.y = tstack->linecount - tstack->scroll_pos.y; + if(tstack->begin_display.y == 0 && tstack->ypos < ed.ysize - 3) + { + tstack->scroll_pos.y = tstack->ypos; + } + return 0; +} + +int increase_scroll(File *tstack, size_t amount) +{ + if (tstack->scroll_pos.y + amount < tstack->linecount) + { + tstack->scroll_pos.y += amount; + } + if (tstack->scroll_pos.y >= ed.ysize - 3) + { + tstack->scroll_pos.y = ed.ysize - 3; + tstack->begin_display.y = tstack->linecount - tstack->scroll_pos.y - ed.ysize + 3; + } + + set_scroll(tstack); + return 0; +} + +int decrease_scroll(File *tstack, size_t amount) +{ + if (tstack->scroll_pos.y - amount >= 0) + { + tstack->scroll_pos.y -= amount; + } + if(tstack->scroll_pos.y <= 3) + { + tstack->begin_display.y -= tstack->scroll_pos.y; + } + set_scroll(tstack); + return 0; +} + +int toggle_option(int *option, char *msg) { *option ^= 1; set_status_msg(false, "%s%s", msg, *option ? NEWTRODIT_DIALOG_ENABLED : NEWTRODIT_DIALOG_DISABLED); + return *option; } /* char *TypingFunction(int min_ascii, int max_ascii, int max_len, char *oldbuf) diff --git a/src/unicode.c b/src/unicode.c index bd77536..8f637c3 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -58,7 +58,6 @@ size_t codepoint_len(int32_t value) return len; } - int valid_position(char *s, size_t pos) { utf8_int32_t cp = 0; @@ -66,32 +65,32 @@ int valid_position(char *s, size_t pos) return (unsigned int)cp < 0x10FFFFu; // a UTF-8 codepoint cannot be greater than U+10FFFF } -size_t utf8wnlen(const char *s, size_t max_upos) +size_t utf8wnlen(char *s, size_t max_upos) { - if (!s) - return 0; - char *ptr = s; - utf8_int32_t cp; - size_t wlen = 0, ulen = 0; - int cwidth = 0; - while (*ptr != '\0' && ulen < max_upos) - { - ptr = utf8codepoint(ptr, &cp); - ulen++; - cwidth = mk_wcwidth(cp); - if (cwidth < 0) - cwidth = 0; - wlen += cwidth; - } - return wlen; + if (!s) + return 0; + char *ptr = s; + utf8_int32_t cp; + size_t wlen = 0, ulen = 0; + int cwidth = 0; + while (*ptr != '\0' && ulen < max_upos) + { + ptr = utf8codepoint(ptr, &cp); + ulen++; + cwidth = mk_wcwidth(cp); + if (cwidth < 0) + cwidth = 0; + wlen += cwidth; + } + return wlen; } -size_t utf8wlen(const char *s) +size_t utf8wlen(char *s) { - return utf8wnlen(s, (size_t)(-1)); // -1 returns the max size of a size_t + return utf8wnlen(s, (size_t)(-1)); // -1 returns the max size of a size_t } -size_t correct_position(Line *line, size_t *xpos, size_t *uxpos) +size_t correct_position(Line *line, size_t *xpos, size_t *uxpos, size_t *uwxpos) { if (!valid_position(line->str, *xpos)) { @@ -100,6 +99,7 @@ size_t correct_position(Line *line, size_t *xpos, size_t *uxpos) char *backptr = utf8rcodepoint(line->str + *xpos, &cp); *xpos -= (&line->str[*xpos] - backptr); // Go back to the previous UTF-8 codepoint *uxpos = utf8nlen_n(line->str, *xpos); // Set the new UTF-8 position + *uwxpos = utf8wlen(line->str); } return *xpos; } @@ -119,27 +119,46 @@ char *int32_to_char_array(utf8_int32_t value, char *output) return output; } -int codepoint_width(const char *utf8_char, utf8_int32_t val) { // This function can take either a char string or a UTF-8 int32 code - +int codepoint_width(const char *utf8_char, utf8_int32_t val) +{ // This function can take either a char string or a UTF-8 int32 code char utf8s[5] = {0}; - utf8_int32_t uc = 0; - if(!utf8_char) + if (!utf8_char) { int32_to_char_array(val, utf8s); - utf8codepoint(utf8s, &uc); - } else { - utf8codepoint(utf8_char, &uc); + utf8codepoint(utf8s, &uc); + } + else + { + utf8codepoint(utf8_char, &uc); } - int cwidth = mk_wcwidth(uc); - if(cwidth < 0) cwidth = 0; + if (cwidth < 0) + cwidth = 0; return cwidth; // Returns 1 for narrow, 2 for wide, or 0 if not printable/blank space } +size_t next_char_uwlen(const char *s, size_t xps) +{ + utf8_int32_t uc = 0; + utf8codepoint(s + xps, &uc); + set_status_msg(false, "[U+%04x '%c']", uc, uc); + + return codepoint_width(NULL, uc); +} + +size_t previous_char_uwlen(const char *s, size_t xps) +{ + utf8_int32_t uc = 0; + utf8rcodepoint(s + xps, &uc); + set_status_msg(false, "{U+%04x '%c'}", uc, uc); + + return codepoint_width(NULL, uc); +} + size_t previous_char_xpos(char *s, size_t *xpos) { utf8_int32_t cp = 0; @@ -162,7 +181,8 @@ size_t next_char_xpos(char *s, size_t *xpos) if (*xpos > 0) { next_ptr = utf8codepoint(s + *xpos, &cp); - *xpos += next_ptr - s; + set_status_msg(true, "Increase: %zu, 0x%04x", next_ptr - s, cp); + *xpos = next_ptr-s; return *xpos; } return 0; @@ -175,9 +195,8 @@ size_t utf8getxpos(char *s, size_t uxpos) for (size_t i = 0; i < uxpos; i++) // Loop over the UTF-8 string { if (!valid_position(s, ptr - s)) - { return 0; - } + ptr = utf8rcodepoint(ptr, &out_cp); } return ptr - s; @@ -186,9 +205,8 @@ size_t utf8getxpos(char *s, size_t uxpos) char *insert_utf8_char(Line *line, int32_t value, size_t index) { if (line->len + sizeof(int32_t) > line->bufx - 1) - { increase_line(line, LINE_SIZE); - } + /* size_t len_check[4] = {0}; for (size_t i = 0; i < 4; i++) { @@ -208,8 +226,8 @@ char *insert_utf8_char(Line *line, int32_t value, size_t index) memmove(line->str + index + len, line->str + index, line->len - index); memcpy(line->str + index, insert_str_utf8, len); - line->str[line->len + len + index] = '\0'; - line->len += utf8size(insert_str_utf8); + line->str[line->len + len] = '\0'; + line->len += len; line->ulen++; free(insert_str_utf8); return line->str; @@ -219,9 +237,8 @@ char *insert_str(Line *line, char *s2, size_t pos) { size_t l2 = strlen_n(s2); if (line->len + l2 > line->bufx - 1) - { increase_line(line, l2); - } + memmove(line->str + pos + l2, line->str + pos, line->len); memcpy(line->str + pos, s2, l2); @@ -234,9 +251,8 @@ char *insert_str(Line *line, char *s2, size_t pos) char *delete_str(Line *line, size_t pos, size_t count) { if (pos + count > line->len) - { return NULL; - } + memmove(line->str + pos, line->str + pos + count, line->len - (pos + count)); line->str[line->len - count] = '\0'; line->len -= count; @@ -275,7 +291,6 @@ uint16_t swap_le_be(uint16_t num) return (num >> 8) | (num << 8); } - int is_utf16(const unsigned char *s, size_t len, size_t file_len) // Try to detect whether string of text without BOM is UTF-16, and try to guess if it's BE (wchar_t default) or LE (Windows default) { if (len % 2 || file_len % 2) @@ -290,7 +305,7 @@ int is_utf16(const unsigned char *s, size_t len, size_t file_len) // Try to dete if (s[i] == '\0') zero_count_be++; - if (i + 1 < len && (unsigned char)(s[i] - s[i + 1]) > 0x60) + if (i + 1 < len && (unsigned char)(s[i] - s[i + 1]) > 0x60) // 0x60 comes from 0x80 (first non-ASCII character) - 0x20 (space, first printable ASCII character) difference_be++; if (s[i + 1] == '\0') @@ -344,16 +359,13 @@ int is_utf16(const unsigned char *s, size_t len, size_t file_len) // Try to dete // Check if character is above valid Unicode range if (utfchar > 0x10FFFF) return -1; - - fprintf(stderr, "U+%04X\n", utfchar); } // Return 2 for BE, 1 for LE, 0 for not UTF-16 return 1 + is_bigendian; } - -size_t utf16_to_utf8(const uint16_t *u16_str, size_t u16_str_len, uint8_t *u8_str, size_t u8_str_size) // Code from Stack Overflow +size_t utf16_to_utf8(const uint16_t *u16_str, size_t u16_str_len, uint8_t *u8_str, size_t u8_str_size, bool big_endian) // Code from Stack Overflow { size_t i = 0, j = 0; From d3edc3f5df31dd5b439d28b0b611b88d1295fff4 Mon Sep 17 00:00:00 2001 From: anic17 <58483910+anic17@users.noreply.github.com> Date: Thu, 4 Dec 2025 20:43:38 +0100 Subject: [PATCH 8/8] Add files via upload --- src/core.c_ | 251 +++++ src/core.h_ | 169 +++ src/dialog.c | 216 ++++ src/dialog.h | 376 +++---- src/fileio.c | 37 +- src/fileio.h | 20 +- src/globals.h | 27 +- src/include/tercontrol.h | 443 ++++++++ src/include/wcwidth.h | 330 ++++++ src/input.c | 1 + src/input.h | 22 +- src/line.c | 83 +- src/line.h | 20 +- src/linux/graphics_linux.h | 168 +++ src/linux/input_linux.h | 110 ++ src/newtrodit.c | 46 +- src/newtrodit.h | 419 +------- src/newtrodit_core.c | 180 ++++ src/newtrodit_core.h | 170 +++ src/newtrodit_gui.c | 46 +- src/newtrodit_gui.h | 39 +- src/unicode.c | 33 +- src/unicode.h | 33 + src/utf8/LICENSE | 24 + src/utf8/README.md | 389 +++++++ src/utf8/appveyor.yml | 51 + src/utf8/test/CMakeLists.txt | 117 +++ src/utf8/test/main.c | 1669 +++++++++++++++++++++++++++++ src/utf8/test/no_malloc.c | 64 ++ src/utf8/test/test.c | 33 + src/utf8/test/test.cpp | 78 ++ src/utf8/test/utest.h | 1668 +++++++++++++++++++++++++++++ src/utf8/test/utfmain.exe | Bin 0 -> 327994 bytes "src/utf8/utf8 - c\303\262pia.h" | 1693 ++++++++++++++++++++++++++++++ src/utf8/utf8.h | 1685 +++++++++++++++++++++++++++++ src/win32/graphics_win32.h | 140 +++ src/win32/input_win32.h | 173 +++ 37 files changed, 10314 insertions(+), 709 deletions(-) create mode 100644 src/core.c_ create mode 100644 src/core.h_ create mode 100644 src/dialog.c create mode 100644 src/include/tercontrol.h create mode 100644 src/include/wcwidth.h create mode 100644 src/input.c create mode 100644 src/linux/graphics_linux.h create mode 100644 src/linux/input_linux.h create mode 100644 src/newtrodit_core.c create mode 100644 src/newtrodit_core.h create mode 100644 src/unicode.h create mode 100644 src/utf8/LICENSE create mode 100644 src/utf8/README.md create mode 100644 src/utf8/appveyor.yml create mode 100644 src/utf8/test/CMakeLists.txt create mode 100644 src/utf8/test/main.c create mode 100644 src/utf8/test/no_malloc.c create mode 100644 src/utf8/test/test.c create mode 100644 src/utf8/test/test.cpp create mode 100644 src/utf8/test/utest.h create mode 100644 src/utf8/test/utfmain.exe create mode 100644 "src/utf8/utf8 - c\303\262pia.h" create mode 100644 src/utf8/utf8.h create mode 100644 src/win32/graphics_win32.h create mode 100644 src/win32/input_win32.h diff --git a/src/core.c_ b/src/core.c_ new file mode 100644 index 0000000..7a2c432 --- /dev/null +++ b/src/core.c_ @@ -0,0 +1,251 @@ +#include "core.h" + +size_t utf8len_n(const char *s) +{ + if (!s) + return 0; + return utf8len(s); +} + +size_t utf8nlen_n(const char *s, size_t n) +{ + if (!s) + return 0; + return utf8nlen(s, n); +} + +size_t utf8len_null(char *s, size_t max_bytes) // Get the number of UTF-8 characters in a non-null terminated string with a known byte length +{ + if (!s) + return 0; + char *ptr = s; + utf8_int32_t cp=0; + size_t ulen = 0; + while (*ptr != '\0' && ulen < max_bytes) + { + ptr = utf8codepoint(ptr, &cp); // Get a pointer to the next codepoint + ulen++; // Increase the Unicode character counter + } + return ulen; +} + +size_t strlen_n(const char *s) +{ + if (!s) + return 0; + return strlen(s); +} + +int vt_settings(bool enabled) +{ +#ifdef _WIN32 + DWORD lmode; // Process ANSI escape sequences + + if (!GetConsoleMode(hStdout, &lmode)) + return 0; + if (enabled) + lmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING & ~DISABLE_NEWLINE_AUTO_RETURN; + else + lmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN; + + return SetConsoleMode(hStdout, lmode); +#endif + return 0; +} + +/* Safe version of strcpy() and strncpy() */ +char *strncpy_n(char *dest, const char *src, size_t count) +{ + // Better version that str8ncpy() because it always null terminates strings + + if (count) + { + memset(dest, 0, count); + strncat(dest, src, count); + return dest; + } + return NULL; +} + +size_t strrpbrk(char *s, char *find) // Reverse strpbrk, just like strrchr but for multiple characters +{ + size_t findlen = utf8len_n(find); + size_t slen = utf8len_n(s); + for (size_t i = slen; i > 0; i--) + { + for (size_t j = 0; j < findlen; j++) + { + if (s[i - 1] == find[j]) + return i - 1; + } + } + return 0; +} + +void *realloc_n(void *old, size_t old_sz, size_t new_sz) +{ + void *new = malloc(new_sz); + if (!new) + return NULL; + memcpy(new, old, old_sz); + free(old); + return new; +} + +int valid_file_name(char *filename) +{ + return utf8pbrk(filename, "*?\"<>|\x1b") == NULL; +} + +char *remove_quotes(char *s) +{ + size_t len = strlen_n(s); + if (s[0] == '\"' && s[len - 1] == '\"') + { + memmove(s, s + 1, len - 2); + s[len] = '\0'; + } + return s; +} + +int trim_message(char *msg, size_t max_len) +{ + size_t ulen = utf8len(msg); + if (ulen > max_len) + { + msg[max_len] = '\0'; + return 1; + } + return 0; +} + +int set_status_msg(bool display_once, char *msg, ...) +{ + va_list args; + va_start(args, msg); + + ed.status_msg = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(utf8_int32_t)); + if (!ed.status_msg) + return 0; + + size_t copyamount = DEFAULT_ALLOC_SIZE * sizeof(utf8_int32_t); + vsnprintf(ed.status_msg, copyamount, msg, args); + trim_message(ed.status_msg, ed.xsize - (fullCursorInfoDisplay ? 45 : 20)); + + ed.dirty = true; + ed.displayStatusOnce = display_once; + return 1; +} + +int clear_status_msg() +{ + if (ed.status_msg != NULL) + free(ed.status_msg); + + ed.status_msg = NULL; + ed.dirty = true; + return 1; +} + +int last_token_position(char *s, const char *token) +{ + + int lastpos = -1; + if (!s || !token) + return lastpos; + + for (size_t i = 0; i < strlen_n(s); i++) + { + for (size_t j = 0; j < strlen_n(token); j++) + { + if (s[i] == token[j]) + lastpos = i; + } + } + return lastpos; +} + +char *last_token(char *tok, const char *char_token) +{ + if (!tok || !char_token) + return tok; + + int pos = last_token_position(tok, char_token); + return tok + pos + 1; +} + +int allocate_buffer(File **tstack) +{ + *tstack = calloc(1, sizeof(File)); + (*tstack)->file_flags = IS_UNTITLED; + + (*tstack)->filename = calloc(MAX_PATH * sizeof(utf8_int32_t) + 1, sizeof(char)); + memcpy((*tstack)->filename, default_filename, MAX_PATH); + + (*tstack)->fwrite_time = time(NULL); + (*tstack)->fread_time = time(NULL); + (*tstack)->language = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->language, default_language, utf8len_n(default_language)); + (*tstack)->linenumber_wide = 3; + (*tstack)->linenumber_padding = 1; + (*tstack)->linecount = 0; + (*tstack)->xpos = 0; + (*tstack)->ypos = 1; + (*tstack)->size = 0; + (*tstack)->encoding = ENCODING_UTF8; + (*tstack)->encoding_bom_len = 0; + (*tstack)->post_load_rendering = true; + + (*tstack)->line = calloc(DEFAULT_ALLOC_LINES, sizeof(Line *)); + + for (size_t i = 0; i <= DEFAULT_ALLOC_LINES; i++) + create_line(*tstack, i); + + (*tstack)->line[0]->str = " Illegal row number. Report this issue to the GitHub repository."; // If for some reason line 0 is accessed + + (*tstack)->newline = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->newline, default_newline, utf8len_n(default_newline)); + + return 1; +} + +int free_buffer(File **tstack) +{ + + for (size_t i = 1; i < (*tstack)->alloc_lines; i++) + { + free((*tstack)->line[i]->render); + free((*tstack)->line[i]->str); + free((*tstack)->line[i]); + } + + // free((*tstack)->line); + + free((*tstack)->newline); + free((*tstack)->filename); + free((*tstack)->language); + + /* free((*tstack)->compilerinfo.path); + free((*tstack)->compilerinfo.flags); + free((*tstack)->compilerinfo.output); + + free((*tstack)->syntaxinfo.syntax_lang); + free((*tstack)->syntaxinfo.syntax_file); + free((*tstack)->syntaxinfo.separators); + free((*tstack)->syntaxinfo.comments); + + for (int i = 0; i < (*tstack)->syntaxinfo.keyword_count; i++) + { + free((*tstack)->syntaxinfo.keywords[i]); + } + + for (int i = 0; i < (*tstack)->syntaxinfo.comment_count; i++) + { + free((*tstack)->syntaxinfo.comments[i]); + } + + free((*tstack)->syntaxinfo.keywords); + free((*tstack)->syntaxinfo.color); + free((*tstack)->syntaxinfo.comments); */ + return 1; +} diff --git a/src/core.h_ b/src/core.h_ new file mode 100644 index 0000000..f36860f --- /dev/null +++ b/src/core.h_ @@ -0,0 +1,169 @@ +#ifndef CORE_H +#define CORE_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "include/wcwidth.h" +#include "utf8/utf8.h" + +#ifdef _WIN32 +#include +#endif + +#ifndef MAX_PATH +#define MAX_PATH 260 +#endif + +#include "dialog.h" +#include "globals.h" + +const int DEFAULT_ALLOC_SIZE = 512; +const size_t LINE_SIZE = 64; +const size_t DEFAULT_ALLOC_LINES = 10; + +const size_t LINE_Y_INCREASE = 5; + +#if !defined ENABLE_VIRTUAL_TERMINAL_PROCESSING || !defined DISABLE_NEWLINE_AUTO_RETURN +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#define DISABLE_NEWLINE_AUTO_RETURN 0x0008 +#endif + +enum file_flags_modifier +{ + IS_MODIFIED = 1, + IS_SAVED = 2, + IS_UNTITLED = 4, + IS_READONLY = 8, +}; + + +enum unicode_encodings +{ + ENCODING_UTF8 = 1, + ENCODING_UTF16LE = 2, + ENCODING_UTF16BE = 3, + ENCODING_UTF8BOM = 4, + ENCODING_UTF32LE = 5, + ENCODING_UTF32BE = 6, +}; + + + +const char newtrodit_version[] = "1.0"; +const char newtrodit_date[] = "2024/09/05"; + +typedef struct Line +{ + char *str; // Buffer that contains the line + char *render; + + size_t bufx; // Allocated line size + size_t render_bufx; // Allocated render size + + size_t len; // Line Length + size_t rlen; // Rendered length + size_t rnlen; // Rendered length without padding + + size_t ulen; // UTF-8 length +} Line; + +typedef struct Position +{ + size_t x; + size_t y; +} Position; + +typedef struct Select +{ + Position start; + Position end; + bool is_selected; +} Select; + +typedef struct File +{ + char *filename; + char *fullpath; + char *language; // Language (e.g: PowerShell, C, C++, etc.) + + // File information + size_t xpos, ypos; + size_t uxpos; // UTF-8 X position + size_t uwxpos; // UTF-8 width position + + Line **line; // Store each line file + size_t alloc_lines; + size_t linecount; + long long size; + + size_t linenumber_wide; + size_t linenumber_padding; + + char *newline; + unsigned int file_flags; + + unsigned int encoding; + size_t encoding_bom_len; + bool post_load_rendering; + + time_t fwrite_time; + time_t fread_time; + Select selection; + Position begin_display; + Position scroll_pos; +} File; // File information. This is used to store all the information about the file. + +typedef struct Editor +{ + size_t xsize, ysize; // Window size + int open_files; // Number of files open + int file_index; // Current file index + + char *log_file_name; + char *status_msg; + bool useLogFile; + bool lineNumbers; + bool dirty; + bool displayStatusOnce; + +} Editor; // Editor information + +typedef struct Color +{ + int r, g, b; + bool background; +} Color; + +Editor ed; +File **file; + +int end_editor(); +int init_editor(); +Line *create_line(File *tstack, size_t ypos); +int codepoint_width(const char *utf8_char, utf8_int32_t val); + +#ifdef _WIN32 +#include "win32/graphics_win32.h" +const char PATHDELIMS[] = "\\/"; // Set the path delimiters for Windows and Linux +#else +#include "linux/graphics_linux.h " +const char PATHDELIMS[] = "/"; +#endif + +#define _xpos file[ed.file_index]->xpos +#define _ypos file[ed.file_index]->ypos +#define _uxpos file[ed.file_index]->uxpos +#define _uwxpos file[ed.file_index]->uwxpos + + +#endif // CORE_H \ No newline at end of file diff --git a/src/dialog.c b/src/dialog.c new file mode 100644 index 0000000..67c69bb --- /dev/null +++ b/src/dialog.c @@ -0,0 +1,216 @@ +/* + * Newtrodit: A console text editor + * Copyright (C) 2021-2025 anic17 Software + * + * This file contains the SINGLE DEFINITIONS for all global dialog strings + * declared in dialog.h. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + * + */ + +#include "dialog.h" + +// --- Definitions (Storage Allocation) --- +// Note: No 'extern' keyword here, as this is where the memory is allocated. + +// Errors +char NEWTRODIT_ERROR_UNKNOWN[] = "Unknown error."; +char NEWTRODIT_ERROR_CLIPBOARD_COPY[] = "Cannot copy string to clipboard."; +char NEWTRODIT_ERROR_CLIPBOARD_PASTE[] = "Cannot paste string from clipboard."; + +char NEWTRODIT_ERROR_INVALID_XPOS[] = "Invalid X cursor position."; +char NEWTRODIT_ERROR_INVALID_YPOS[] = "Invalid row position."; +char NEWTRODIT_ERROR_MANUAL_INVALID_LINE[] = "Invalid line (maximum line number is %d)"; +char NEWTRODIT_ERROR_INVALID_POS_RESET[] = "Invalid position for cursor detected. Resetting coordinates."; +char NEWTRODIT_ERROR_WINDOW_TOO_SMALL[] = "Console window is too small. Please resize it."; +char NEWTRODIT_ERROR_MANUAL_TOO_BIG[] = "Manual file is too big."; +char NEWTRODIT_ERROR_MISSING_MANUAL[] = "Manual file is missing: "; +char NEWTRODIT_ERROR_INVALID_MANUAL[] = "Invalid manual file: "; +char NEWTRODIT_ERROR_LOADING_MANUAL[] = "Error loading manual file. This might be caused due to an outdated OS version "; + +char NEWTRODIT_ERROR_INVALID_INBOUND[] = "Invalid inbound key combination: %s"; +char NEWTRODIT_ERROR_RELOAD_SETTINGS[] = "Cannot reload settings. Settings file doesn't exist or it's corrupt."; +char NEWTRODIT_ERROR_OUT_OF_MEMORY[] = "Out of memory."; +char NEWTRODIT_ERROR_ALLOCATION_FAILED[] = "Memory allocation failed."; +char NEWTRODIT_ERROR_INVALID_SYNTAX[] = "Invalid syntax highlighting file: "; +char NEWTRODIT_ERROR_SYNTAX_RULES[] = "No syntax highlighting rules found."; +char NEWTRODIT_ERROR_FAILED_PROCESS_START[] = "Failed to start the process: "; +char NEWTRODIT_ERROR_FAILED_CLOSE_FILE[] = "Failed to close the file '%s'"; +char NEWTRODIT_ERROR_FAILED_CONSOLE_ATTRIB[] = "Failed to retrieve or set the console attributes."; + +char NEWTRODIT_ERROR_INVALID_MACRO[] = "Invalid macro: "; + +char NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE[] = "Invalid Unicode byte sequence."; +char NEWTRODIT_ERROR_INVALID_UNICODE_POSITION[] = "Invalid Unicode string cursor position."; +char NEWTRODIT_ERROR_UNSUPPORTED_ENCODING[] = "Unsupported encoding found. Newtrodit only supports UTF-8 encoding."; + + +char NEWTRODIT_ERROR_TOO_MANY_FILES_OPEN[] = "Too many files open."; +char NEWTRODIT_ERROR_CANNOT_OPEN_DEVICE[] = "Cannot open device file: "; +char NEWTRODIT_ERROR_CONSOLE_HANDLE[] = "Cannot get console handle."; +char NEWTRODIT_ERROR_UNKNOWN_COMMAND[] = "Unknown command: '%s'"; +char NEWTRODIT_ERROR_INVALID_FILE_INDEX[] = "Invalid file index. Switching to the first file."; +char NEWTRODIT_ERROR_NEW_FILE[] = "Failed to open a new file."; +char NEWTRODIT_ERROR_REDIRECTED_TTY[] = "Newtrodit cannot be redirected to a file."; + + +// Internal errors +char NEWTRODIT_INTERNAL_EXPECTED_NULL[] = "Internal error: expected a non-null string"; + +// Crashes +char NEWTRODIT_CRASH_INVALID_SETTINGS[] = "Invalid settings file."; +char NEWTRODIT_CRASH_UNKNOWN_EXCEPTION[] = "Unknown exception."; + + +// Warnings +char NEWTRODIT_WARNING_SYNTAX_TOO_BIG[] = "Warning: Syntax highlighting file is too big. Using the first keywords."; +char NEWTRODIT_WARNING_READONLY_FILE[] = "Warning: File has read-only attribute."; + +// Command-line arguments +char NEWTRODIT_ERROR_MISSING_ARGUMENT[] = "Missing argument. See 'newtrodit --help'"; +char NEWTRODIT_ERROR_INVALID_COLOR[] = "Invalid color. Color range is between 0 and F."; + +// File IO error/info dialogs +char NEWTRODIT_FS_FILE_TOO_LARGE[] = "File too large: "; +char NEWTRODIT_FS_FILE_OPEN_ERR[] = "Failed to open the file: %s"; +char NEWTRODIT_FS_FILE_SAVE_ERR[] = "Failed to save the file: %s"; +char NEWTRODIT_FS_FILE_INVALID_NAME[] = "Invalid file name: "; +char NEWTRODIT_FS_FILE_NAME_TOO_LONG[] = "File name too long: "; +char NEWTRODIT_FS_FILE_NOT_FOUND[] = "File not found: "; +char NEWTRODIT_FS_DIR_NOT_FOUND[] = "Directory not found: %s"; + +char NEWTRODIT_FS_FILE_RENAME[] = "Cannot rename the file."; +char NEWTRODIT_FS_FILE_DELETE[] = "Failed to delete the file: "; +char NEWTRODIT_FS_SAME_FILE[] = "Cannot open the same file."; +char NEWTRODIT_FS_FOUND_FILES[] = "Showing %d of %d files matching the search pattern."; +char NEWTRODIT_FS_READONLY_SAVE[] = "Cannot write to a read-only file."; +char NEWTRODIT_FS_IS_A_DIRECTORY[] = "Is a directory: "; +char NEWTRODIT_FS_NOT_A_DIRECTORY[] = "Not a directory: %s"; +char NEWTRODIT_FS_NO_FILES_FOUND[] = "No files found matching the specified criteria."; + +char NEWTRODIT_FS_DISK_FULL[] = "Disk is full."; +char NEWTRODIT_FS_ACCESS_DENIED[] = "Access is denied: "; + +// Prompts +char NEWTRODIT_PROMPT_FIND_STRING[] = "String to find: "; +char NEWTRODIT_PROMPT_FIND_STRING_INSENSITIVE[] = "String to find (case insensitive): "; +char NEWTRODIT_PROMPT_REPLACE_STRING[] = "String to replace: "; +char NEWTRODIT_PROMPT_FOPEN[] = "File to open: "; +char NEWTRODIT_PROMPT_ALREADY_OPEN_TAB[] = "'%s' is already open in another tab. Do you want to switch to it? (y/n)"; + +char NEWTRODIT_PROMPT_GOTO_LINE[] = "Line number: "; +char NEWTRODIT_PROMPT_GOTO_COLUMN[] = "Column number: "; +char NEWTRODIT_PROMPT_RENAME_FILE[] = "New file name: "; +char NEWTRODIT_PROMPT_LOCATE_FILE[] = "File to locate: "; + +char NEWTRODIT_PROMPT_OVERWRITE[] = "File already exists. Overwrite? (y/n)"; +char NEWTRODIT_PROMPT_QUIT[] = "Are you sure you want to quit Newtrodit? (y/n)"; +char NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE[] = "File has been modified. Save changes? (y/n)"; +char NEWTRODIT_PROMPT_NEW_FILE[] = "Are you sure you want to create a new file? (y/n)"; +char NEWTRODIT_PROMPT_CLOSE_FILE[] = "Are you sure you want to close the file? (y/n)"; +char NEWTRODIT_PROMPT_RELOAD_FILE[] = "Are you sure you want to reload the file? (y/n)"; +char NEWTRODIT_PROMPT_RELOAD_SETTINGS[] = "Are you sure you want to reload the settings? (y/n)"; +char NEWTRODIT_PROMPT_FILE_CREATING[] = " doesn't exist. Do you want to create it? (y/n)"; // Must be added using join() later +char NEWTRODIT_PROMPT_REOPEN_FILE[] = "Do you want to reopen the file? (y/n)"; +char NEWTRODIT_PROMPT_MODIFIED_FILE_DISK[] = "File has been modified on disk. Do you want to reload it? (y/n)"; +char NEWTRODIT_PROMPT_SAVE_FILE[] = "File to save: "; +char NEWTRODIT_PROMPT_SAVE_FILE_AS[] = "Save file as: "; +char NEWTRODIT_PROMPT_CREATE_MACRO[] = "Macro command line: "; +char NEWTRODIT_PROMPT_SYNTAX_FILE[] = "Syntax highligthing file: "; +char NEWTRODIT_PROMPT_COMMAND_PALETTE[] = "Command palette: "; + + +char NEWTRODIT_PROMPT_FIRST_FILE_COMPARE[] = "First file to compare: "; +char NEWTRODIT_PROMPT_SECOND_FILE_COMPARE[] = "Second file to compare: "; + +// Informational dialogs +char NEWTRODIT_NO_ERROR[] = "No error."; +char NEWTRODIT_FILE_SAVED[] = "File saved successfully."; +char NEWTRODIT_FILE_OPENED[] = "File opened successfully."; +char NEWTRODIT_FILE_RELOADED[] = "File reloaded successfully."; +char NEWTRODIT_NEW_FILE_CREATED[] = "New file created successfully."; +char NEWTRODIT_FILE_CLOSED[] = "File closed successfully."; +char NEWTRODIT_FILE_RENAMED[] = "File renamed successfully to: "; +char NEWTRODIT_FILE_WROTE_BUFFER[] = "Wrote the buffer content to: "; +char NEWTRODIT_SETTINGS_RELOADED[] = "Settings reloaded successfully."; +char NEWTRODIT_SYNTAX_HIGHLIGHTING_LOADED[] = "Syntax highlighting rules for %s language successfully loaded."; +char NEWTRODIT_SYNTAX_HIGHLIGHTING_FAILED[] = "Failed to load syntax highlighting rules."; +char NEWTRODIT_LOCATE_END_REACHED[] = "End of directory reached."; + + +char NEWTRODIT_FIND_STRING_NOT_FOUND[] = "String not found: "; +char NEWTRODIT_FIND_CASE_SENSITIVE[] = "Case sensitive search: "; +char NEWTRODIT_FIND_MATCH_WHOLE_WORD[] = "Match whole word: "; +char NEWTRODIT_FIND_NO_MORE_MATCHES[] = "No more matches."; + +char NEWTRODIT_DEV_TOOLS[] = "Developer tools: "; +char NEWTRODIT_TAB_CONVERSION[] = "Tab conversion: "; +char NEWTRODIT_NULL_CONVERSION[] = "Null character to spaces conversion: "; +char NEWTRODIT_LINE_COUNT[] = "Line count: "; +char NEWTRODIT_SYNTAX_HIGHLIGHTING[] = "Syntax highlighting: "; +char NEWTRODIT_MACRO_SET[] = "Macro set: "; +char NEWTRODIT_OLD_KEYBINDINGS[] = "Old keybindings: "; +char NEWTRODIT_AUTO_SYNTAX_LOAD[] = "Automatically load syntax highlighting rules for supported languages: "; +char NEWTRODIT_FILE_COMPARE_DIFF[] = "Difference found in byte number "; +char NEWTRODIT_FILE_COMPARE_NODIFF[] = "No difference found between files."; +char NEWTRODIT_LOADING_COMPARING_FILES[] = "Comparing files '%s' and '%s'. This may take a while."; +char NEWTRODIT_CURRENT_FILE_SWITCHED[] = "Editing now: "; +char NEWTRODIT_MOUSE[] = "Mouse: "; + +char NEWTRODIT_SHOWING_PREVIOUS_FILE[] = "Showing previous file"; +char NEWTRODIT_SHOWING_NEXT_FILE[] = "Showing next file"; +char NEWTRODIT_SWITCHING_FILE[] = "Switching to file"; +char NEWTRODIT_INFO_NO_FILES_TO_SWITCH[] = "No files to switch to."; +char NEWTRODIT_CLIPBOARD_COPIED[] = "Path copied to the system's clipboard (%s)"; + +// Other dialogs + +char NEWTRODIT_DIALOG_BOTTOM_HELP[] = "For help, press F1"; +char NEWTRODIT_DIALOG_MANUAL[] = "Ctrl-X Close help | Alt-F4 Quit Newtrodit"; +char NEWTRODIT_DIALOG_MANUAL_TITLE[] = " Newtrodit help"; +char NEWTRODIT_DIALOG_BOTTOM_LOCATE[] = " | Space Next page | Ctrl-B Go back | Ctrl-D Go to dir | Ctrl-X Quit"; +char NEWTRODIT_DIALOG_LOCATE_POS[] = "Showing %d-%d out of %d files (%llu total bytes)"; + + +char NEWTRODIT_DIALOG_ENABLED[] = "Enabled"; +char NEWTRODIT_DIALOG_DISABLED[] = "Disabled"; +char NEWTRODIT_FUNCTION_ABORTED[] = "Function aborted."; + +// Constants used internally + +char NEWTRODIT_MANUAL_MAGIC_NUMBER[] = "$NEWTRODIT_MANUAL"; + +char NEWTRODIT_SYNTAX_CAPITAL[] = "$CAPITAL"; +char NEWTRODIT_SYNTAX_CAPITAL_COLOR[] = "$CAPITAL_COLOR"; +char NEWTRODIT_SYNTAX_CAPITAL_MIN[] = "$CAPITAL_MIN"; +char NEWTRODIT_SYNTAX_COMMENT[] = "$COMMENT"; +char NEWTRODIT_SYNTAX_COMMENT_COLOR[] = "$COMMENT_COLOR"; +char NEWTRODIT_SYNTAX_DEFAULT_COLOR[] = "$DEFAULT_COLOR"; +char NEWTRODIT_SYNTAX_LANGUAGE[] = "$LANGUAGE"; +char NEWTRODIT_SYNTAX_MAGIC_NUMBER[] = "$NEWTRODIT_SYNTAX"; +char NEWTRODIT_SYNTAX_NUMBER_COLOR[] = "$NUMBER_COLOR"; +char NEWTRODIT_SYNTAX_QUOTE_COLOR[] = "$QUOTE_COLOR"; +char NEWTRODIT_SYNTAX_SEPARATORS[] = "$SEPARATORS"; +char NEWTRODIT_SYNTAX_SINGLE_QUOTES[] = "$SINGLE_QUOTES"; +char NEWTRODIT_SYNTAX_FINISH_QUOTES[] = "$FINISH_QUOTES"; + + +char NEWTRODIT_MACRO_CURRENT_FILE[] = "$FILE"; +char NEWTRODIT_MACRO_FULL_PATH[] = "$PATH"; +char NEWTRODIT_MACRO_CURRENT_DIR[] = "$DIR"; +char NEWTRODIT_MACRO_CURRENT_EXTENSION[] = "$EXT"; +char NEWTRODIT_MACRO_CURRENT_BASENAME[] = "$BASENAME"; +char NEWTRODIT_MACRO_CURRENT_DRIVE[] = "$DRIVE"; +char NEWTRODIT_SYNTAX_ENCLOSING[] = "$ENCLOSING"; \ No newline at end of file diff --git a/src/dialog.h b/src/dialog.h index e83785e..69cc9e2 100644 --- a/src/dialog.h +++ b/src/dialog.h @@ -1,213 +1,217 @@ /* - Newtrodit: A console text editor - Copyright (C) 2021-2023 anic17 Software - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see - -*/ + * Newtrodit: A console text editor + * Copyright (C) 2021-2025 anic17 Software + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + * + */ + +#ifndef DIALOG_H +#define DIALOG_H + +// --- IMPORTANT: All strings are now DECLARED using 'extern' --- +// This tells the compiler that the string exists, but the storage +// is allocated in dialog.c (or another single .c file). // Errors - -char NEWTRODIT_ERROR_UNKNOWN[] = "Unknown error."; -char NEWTRODIT_ERROR_CLIPBOARD_COPY[] = "Cannot copy string to clipboard."; -char NEWTRODIT_ERROR_CLIPBOARD_PASTE[] = "Cannot paste string from clipboard."; - -char NEWTRODIT_ERROR_INVALID_XPOS[] = "Invalid X cursor position."; -char NEWTRODIT_ERROR_INVALID_YPOS[] = "Invalid row position."; -char NEWTRODIT_ERROR_MANUAL_INVALID_LINE[] = "Invalid line (maximum line number is %d)"; // I could use NEWTRODIT_ERROR_INVALID_YPOS but I prefer more specific errors (or messages) -char NEWTRODIT_ERROR_INVALID_POS_RESET[] = "Invalid position for cursor detected. Resetting coordinates."; -char NEWTRODIT_ERROR_WINDOW_TOO_SMALL[] = "Console window is too small. Please resize it."; -char NEWTRODIT_ERROR_MANUAL_TOO_BIG[] = "Manual file is too big."; -char NEWTRODIT_ERROR_MISSING_MANUAL[] = "Manual file is missing: "; -char NEWTRODIT_ERROR_INVALID_MANUAL[] = "Invalid manual file: "; -char NEWTRODIT_ERROR_LOADING_MANUAL[] = "Error loading manual file. This might be caused due to an outdated OS version "; - -char NEWTRODIT_ERROR_INVALID_INBOUND[] = "Invalid inbound key combination: %s"; -char NEWTRODIT_ERROR_RELOAD_SETTINGS[] = "Cannot reload settings. Settings file doesn't exist or it's corrupt."; -char NEWTRODIT_ERROR_OUT_OF_MEMORY[] = "Out of memory."; -char NEWTRODIT_ERROR_ALLOCATION_FAILED[] = "Memory allocation failed."; -char NEWTRODIT_ERROR_INVALID_SYNTAX[] = "Invalid syntax highlighting file: "; -char NEWTRODIT_ERROR_SYNTAX_RULES[] = "No syntax highlighting rules found."; -char NEWTRODIT_ERROR_FAILED_PROCESS_START[] = "Failed to start the process: "; -char NEWTRODIT_ERROR_FAILED_CLOSE_FILE[] = "Failed to close the file '%s'"; -char NEWTRODIT_ERROR_FAILED_CONSOLE_ATTRIB[] = "Failed to retrieve or set the console attributes."; - -char NEWTRODIT_ERROR_INVALID_MACRO[] = "Invalid macro: "; - -char NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE[] = "Invalid Unicode byte sequence."; -char NEWTRODIT_ERROR_INVALID_UNICODE_POSITION[] = "Invalid Unicode string cursor position."; -char NEWTRODIT_ERROR_UNSUPPORTED_ENCODING[] = "Unsupported encoding found. Newtrodit only supports UTF-8 encoding."; - - -char NEWTRODIT_ERROR_TOO_MANY_FILES_OPEN[] = "Too many files open."; -char NEWTRODIT_ERROR_CANNOT_OPEN_DEVICE[] = "Cannot open device file: "; -char NEWTRODIT_ERROR_CONSOLE_HANDLE[] = "Cannot get console handle."; -char NEWTRODIT_ERROR_UNKNOWN_COMMAND[] = "Unknown command: '%s'"; -char NEWTRODIT_ERROR_INVALID_FILE_INDEX[] = "Invalid file index. Switching to the first file."; -char NEWTRODIT_ERROR_NEW_FILE[] = "Failed to open a new file."; -char NEWTRODIT_ERROR_REDIRECTED_TTY[] = "Newtrodit cannot be redirected to a file."; +extern char NEWTRODIT_ERROR_UNKNOWN[]; +extern char NEWTRODIT_ERROR_CLIPBOARD_COPY[]; +extern char NEWTRODIT_ERROR_CLIPBOARD_PASTE[]; + +extern char NEWTRODIT_ERROR_INVALID_XPOS[]; +extern char NEWTRODIT_ERROR_INVALID_YPOS[]; +extern char NEWTRODIT_ERROR_MANUAL_INVALID_LINE[]; +extern char NEWTRODIT_ERROR_INVALID_POS_RESET[]; +extern char NEWTRODIT_ERROR_WINDOW_TOO_SMALL[]; +extern char NEWTRODIT_ERROR_MANUAL_TOO_BIG[]; +extern char NEWTRODIT_ERROR_MISSING_MANUAL[]; +extern char NEWTRODIT_ERROR_INVALID_MANUAL[]; +extern char NEWTRODIT_ERROR_LOADING_MANUAL[]; + +extern char NEWTRODIT_ERROR_INVALID_INBOUND[]; +extern char NEWTRODIT_ERROR_RELOAD_SETTINGS[]; +extern char NEWTRODIT_ERROR_OUT_OF_MEMORY[]; +extern char NEWTRODIT_ERROR_ALLOCATION_FAILED[]; +extern char NEWTRODIT_ERROR_INVALID_SYNTAX[]; +extern char NEWTRODIT_ERROR_SYNTAX_RULES[]; +extern char NEWTRODIT_ERROR_FAILED_PROCESS_START[]; +extern char NEWTRODIT_ERROR_FAILED_CLOSE_FILE[]; +extern char NEWTRODIT_ERROR_FAILED_CONSOLE_ATTRIB[]; + +extern char NEWTRODIT_ERROR_INVALID_MACRO[]; + +extern char NEWTRODIT_ERROR_INVALID_UNICODE_SEQUENCE[]; +extern char NEWTRODIT_ERROR_INVALID_UNICODE_POSITION[]; +extern char NEWTRODIT_ERROR_UNSUPPORTED_ENCODING[]; + + +extern char NEWTRODIT_ERROR_TOO_MANY_FILES_OPEN[]; +extern char NEWTRODIT_ERROR_CANNOT_OPEN_DEVICE[]; +extern char NEWTRODIT_ERROR_CONSOLE_HANDLE[]; +extern char NEWTRODIT_ERROR_UNKNOWN_COMMAND[]; +extern char NEWTRODIT_ERROR_INVALID_FILE_INDEX[]; +extern char NEWTRODIT_ERROR_NEW_FILE[]; +extern char NEWTRODIT_ERROR_REDIRECTED_TTY[]; // Internal errors -char NEWTRODIT_INTERNAL_EXPECTED_NULL[] = "Internal error: expected a non-null string"; +extern char NEWTRODIT_INTERNAL_EXPECTED_NULL[]; // Crashes - -char NEWTRODIT_CRASH_INVALID_SETTINGS[] = "Invalid settings file."; -char NEWTRODIT_CRASH_UNKNOWN_EXCEPTION[] = "Unknown exception."; +extern char NEWTRODIT_CRASH_INVALID_SETTINGS[]; +extern char NEWTRODIT_CRASH_UNKNOWN_EXCEPTION[]; // Warnings -char NEWTRODIT_WARNING_SYNTAX_TOO_BIG[] = "Warning: Syntax highlighting file is too big. Using the first keywords."; -char NEWTRODIT_WARNING_READONLY_FILE[] = "Warning: File has read-only attribute."; +extern char NEWTRODIT_WARNING_SYNTAX_TOO_BIG[]; +extern char NEWTRODIT_WARNING_READONLY_FILE[]; // Command-line arguments -char NEWTRODIT_ERROR_MISSING_ARGUMENT[] = "Missing argument. See 'newtrodit --help'"; -char NEWTRODIT_ERROR_INVALID_COLOR[] = "Invalid color. Color range is between 0 and F."; +extern char NEWTRODIT_ERROR_MISSING_ARGUMENT[]; +extern char NEWTRODIT_ERROR_INVALID_COLOR[]; // File IO error/info dialogs -char NEWTRODIT_FS_FILE_TOO_LARGE[] = "File too large: "; -char NEWTRODIT_FS_FILE_OPEN_ERR[] = "Failed to open the file: %s"; -char NEWTRODIT_FS_FILE_SAVE_ERR[] = "Failed to save the file: %s"; -char NEWTRODIT_FS_FILE_INVALID_NAME[] = "Invalid file name: "; -char NEWTRODIT_FS_FILE_NAME_TOO_LONG[] = "File name too long: "; -char NEWTRODIT_FS_FILE_NOT_FOUND[] = "File not found: "; -char NEWTRODIT_FS_DIR_NOT_FOUND[] = "Directory not found: %s"; - -char NEWTRODIT_FS_FILE_RENAME[] = "Cannot rename the file."; -char NEWTRODIT_FS_FILE_DELETE[] = "Failed to delete the file: "; -char NEWTRODIT_FS_SAME_FILE[] = "Cannot open the same file."; -char NEWTRODIT_FS_FOUND_FILES[] = "Showing %d of %d files matching the search pattern."; -char NEWTRODIT_FS_READONLY_SAVE[] = "Cannot write to a read-only file."; -char NEWTRODIT_FS_IS_A_DIRECTORY[] = "Is a directory: "; -char NEWTRODIT_FS_NOT_A_DIRECTORY[] = "Not a directory: %s"; -char NEWTRODIT_FS_NO_FILES_FOUND[] = "No files found matching the specified criteria."; - - - -char NEWTRODIT_FS_DISK_FULL[] = "Disk is full."; -char NEWTRODIT_FS_ACCESS_DENIED[] = "Access is denied: "; +extern char NEWTRODIT_FS_FILE_TOO_LARGE[]; +extern char NEWTRODIT_FS_FILE_OPEN_ERR[]; +extern char NEWTRODIT_FS_FILE_SAVE_ERR[]; +extern char NEWTRODIT_FS_FILE_INVALID_NAME[]; +extern char NEWTRODIT_FS_FILE_NAME_TOO_LONG[]; +extern char NEWTRODIT_FS_FILE_NOT_FOUND[]; +extern char NEWTRODIT_FS_DIR_NOT_FOUND[]; + +extern char NEWTRODIT_FS_FILE_RENAME[]; +extern char NEWTRODIT_FS_FILE_DELETE[]; +extern char NEWTRODIT_FS_SAME_FILE[]; +extern char NEWTRODIT_FS_FOUND_FILES[]; +extern char NEWTRODIT_FS_READONLY_SAVE[]; +extern char NEWTRODIT_FS_IS_A_DIRECTORY[]; +extern char NEWTRODIT_FS_NOT_A_DIRECTORY[]; +extern char NEWTRODIT_FS_NO_FILES_FOUND[]; + +extern char NEWTRODIT_FS_DISK_FULL[]; +extern char NEWTRODIT_FS_ACCESS_DENIED[]; // Prompts - -char NEWTRODIT_PROMPT_FIND_STRING[] = "String to find: "; -char NEWTRODIT_PROMPT_FIND_STRING_INSENSITIVE[] = "String to find (case insensitive): "; -char NEWTRODIT_PROMPT_REPLACE_STRING[] = "String to replace: "; -char NEWTRODIT_PROMPT_FOPEN[] = "File to open: "; -char NEWTRODIT_PROMPT_ALREADY_OPEN_TAB[] = "'%s' is already open in another tab. Do you want to switch to it? (y/n)"; - -char NEWTRODIT_PROMPT_GOTO_LINE[] = "Line number: "; -char NEWTRODIT_PROMPT_GOTO_COLUMN[] = "Column number: "; -char NEWTRODIT_PROMPT_RENAME_FILE[] = "New file name: "; -char NEWTRODIT_PROMPT_LOCATE_FILE[] = "File to locate: "; - -char NEWTRODIT_PROMPT_OVERWRITE[] = "File already exists. Overwrite? (y/n)"; -char NEWTRODIT_PROMPT_QUIT[] = "Are you sure you want to quit Newtrodit? (y/n)"; -char NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE[] = "File has been modified. Save changes? (y/n)"; -char NEWTRODIT_PROMPT_NEW_FILE[] = "Are you sure you want to create a new file? (y/n)"; -char NEWTRODIT_PROMPT_CLOSE_FILE[] = "Are you sure you want to close the file? (y/n)"; -char NEWTRODIT_PROMPT_RELOAD_FILE[] = "Are you sure you want to reload the file? (y/n)"; -char NEWTRODIT_PROMPT_RELOAD_SETTINGS[] = "Are you sure you want to reload the settings? (y/n)"; -char NEWTRODIT_PROMPT_FILE_CREATING[] = " doesn't exist. Do you want to create it? (y/n)"; // Must be added using join() later -char NEWTRODIT_PROMPT_REOPEN_FILE[] = "Do you want to reopen the file? (y/n)"; -char NEWTRODIT_PROMPT_MODIFIED_FILE_DISK[] = "File has been modified on disk. Do you want to reload it? (y/n)"; -char NEWTRODIT_PROMPT_SAVE_FILE[] = "File to save: "; -char NEWTRODIT_PROMPT_SAVE_FILE_AS[] = "Save file as: "; -char NEWTRODIT_PROMPT_CREATE_MACRO[] = "Macro command line: "; -char NEWTRODIT_PROMPT_SYNTAX_FILE[] = "Syntax highligthing file: "; -char NEWTRODIT_PROMPT_COMMAND_PALETTE[] = "Command palette: "; - - -char NEWTRODIT_PROMPT_FIRST_FILE_COMPARE[] = "First file to compare: "; -char NEWTRODIT_PROMPT_SECOND_FILE_COMPARE[] = "Second file to compare: "; +extern char NEWTRODIT_PROMPT_FIND_STRING[]; +extern char NEWTRODIT_PROMPT_FIND_STRING_INSENSITIVE[]; +extern char NEWTRODIT_PROMPT_REPLACE_STRING[]; +extern char NEWTRODIT_PROMPT_FOPEN[]; +extern char NEWTRODIT_PROMPT_ALREADY_OPEN_TAB[]; + +extern char NEWTRODIT_PROMPT_GOTO_LINE[]; +extern char NEWTRODIT_PROMPT_GOTO_COLUMN[]; +extern char NEWTRODIT_PROMPT_RENAME_FILE[]; +extern char NEWTRODIT_PROMPT_LOCATE_FILE[]; + +extern char NEWTRODIT_PROMPT_OVERWRITE[]; +extern char NEWTRODIT_PROMPT_QUIT[]; +extern char NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE[]; +extern char NEWTRODIT_PROMPT_NEW_FILE[]; +extern char NEWTRODIT_PROMPT_CLOSE_FILE[]; +extern char NEWTRODIT_PROMPT_RELOAD_FILE[]; +extern char NEWTRODIT_PROMPT_RELOAD_SETTINGS[]; +extern char NEWTRODIT_PROMPT_FILE_CREATING[]; +extern char NEWTRODIT_PROMPT_REOPEN_FILE[]; +extern char NEWTRODIT_PROMPT_MODIFIED_FILE_DISK[]; +extern char NEWTRODIT_PROMPT_SAVE_FILE[]; +extern char NEWTRODIT_PROMPT_SAVE_FILE_AS[]; +extern char NEWTRODIT_PROMPT_CREATE_MACRO[]; +extern char NEWTRODIT_PROMPT_SYNTAX_FILE[]; +extern char NEWTRODIT_PROMPT_COMMAND_PALETTE[]; + + +extern char NEWTRODIT_PROMPT_FIRST_FILE_COMPARE[]; +extern char NEWTRODIT_PROMPT_SECOND_FILE_COMPARE[]; // Informational dialogs -char NEWTRODIT_NO_ERROR[] = "No error."; -char NEWTRODIT_FILE_SAVED[] = "File saved successfully."; -char NEWTRODIT_FILE_OPENED[] = "File opened successfully."; -char NEWTRODIT_FILE_RELOADED[] = "File reloaded successfully."; -char NEWTRODIT_NEW_FILE_CREATED[] = "New file created successfully."; -char NEWTRODIT_FILE_CLOSED[] = "File closed successfully."; -char NEWTRODIT_FILE_RENAMED[] = "File renamed successfully to: "; -char NEWTRODIT_FILE_WROTE_BUFFER[] = "Wrote the buffer content to: "; -char NEWTRODIT_SETTINGS_RELOADED[] = "Settings reloaded successfully."; -char NEWTRODIT_SYNTAX_HIGHLIGHTING_LOADED[] = "Syntax highlighting rules for %s language successfully loaded."; -char NEWTRODIT_SYNTAX_HIGHLIGHTING_FAILED[] = "Failed to load syntax highlighting rules."; -char NEWTRODIT_LOCATE_END_REACHED[] = "End of directory reached."; - - -char NEWTRODIT_FIND_STRING_NOT_FOUND[] = "String not found: "; -char NEWTRODIT_FIND_CASE_SENSITIVE[] = "Case sensitive search: "; -char NEWTRODIT_FIND_MATCH_WHOLE_WORD[] = "Match whole word: "; -char NEWTRODIT_FIND_NO_MORE_MATCHES[] = "No more matches."; - -char NEWTRODIT_DEV_TOOLS[] = "Developer tools: "; -char NEWTRODIT_TAB_CONVERSION[] = "Tab conversion: "; -char NEWTRODIT_NULL_CONVERSION[] = "Null character to spaces conversion: "; -char NEWTRODIT_LINE_COUNT[] = "Line count: "; -char NEWTRODIT_SYNTAX_HIGHLIGHTING[] = "Syntax highlighting: "; -char NEWTRODIT_MACRO_SET[] = "Macro set: "; -char NEWTRODIT_OLD_KEYBINDINGS[] = "Old keybindings: "; -char NEWTRODIT_AUTO_SYNTAX_LOAD[] = "Automatically load syntax highlighting rules for supported languages: "; -char NEWTRODIT_FILE_COMPARE_DIFF[] = "Difference found in byte number "; -char NEWTRODIT_FILE_COMPARE_NODIFF[] = "No difference found between files."; -char NEWTRODIT_LOADING_COMPARING_FILES[] = "Comparing files '%s' and '%s'. This may take a while."; -char NEWTRODIT_CURRENT_FILE_SWITCHED[] = "Editing now: "; -char NEWTRODIT_MOUSE[] = "Mouse: "; - -char NEWTRODIT_SHOWING_PREVIOUS_FILE[] = "Showing previous file"; -char NEWTRODIT_SHOWING_NEXT_FILE[] = "Showing next file"; -char NEWTRODIT_SWITCHING_FILE[] = "Switching to file"; -char NEWTRODIT_INFO_NO_FILES_TO_SWITCH[] = "No files to switch to."; -char NEWTRODIT_CLIPBOARD_COPIED[] = "Path copied to the system's clipboard (%s)"; +extern char NEWTRODIT_NO_ERROR[]; +extern char NEWTRODIT_FILE_SAVED[]; +extern char NEWTRODIT_FILE_OPENED[]; +extern char NEWTRODIT_FILE_RELOADED[]; +extern char NEWTRODIT_NEW_FILE_CREATED[]; +extern char NEWTRODIT_FILE_CLOSED[]; +extern char NEWTRODIT_FILE_RENAMED[]; +extern char NEWTRODIT_FILE_WROTE_BUFFER[]; +extern char NEWTRODIT_SETTINGS_RELOADED[]; +extern char NEWTRODIT_SYNTAX_HIGHLIGHTING_LOADED[]; +extern char NEWTRODIT_SYNTAX_HIGHLIGHTING_FAILED[]; +extern char NEWTRODIT_LOCATE_END_REACHED[]; + + +extern char NEWTRODIT_FIND_STRING_NOT_FOUND[]; +extern char NEWTRODIT_FIND_CASE_SENSITIVE[]; +extern char NEWTRODIT_FIND_MATCH_WHOLE_WORD[]; +extern char NEWTRODIT_FIND_NO_MORE_MATCHES[]; + +extern char NEWTRODIT_DEV_TOOLS[]; +extern char NEWTRODIT_TAB_CONVERSION[]; +extern char NEWTRODIT_NULL_CONVERSION[]; +extern char NEWTRODIT_LINE_COUNT[]; +extern char NEWTRODIT_SYNTAX_HIGHLIGHTING[]; +extern char NEWTRODIT_MACRO_SET[]; +extern char NEWTRODIT_OLD_KEYBINDINGS[]; +extern char NEWTRODIT_AUTO_SYNTAX_LOAD[]; +extern char NEWTRODIT_FILE_COMPARE_DIFF[]; +extern char NEWTRODIT_FILE_COMPARE_NODIFF[]; +extern char NEWTRODIT_LOADING_COMPARING_FILES[]; +extern char NEWTRODIT_CURRENT_FILE_SWITCHED[]; +extern char NEWTRODIT_MOUSE[]; + +extern char NEWTRODIT_SHOWING_PREVIOUS_FILE[]; +extern char NEWTRODIT_SHOWING_NEXT_FILE[]; +extern char NEWTRODIT_SWITCHING_FILE[]; +extern char NEWTRODIT_INFO_NO_FILES_TO_SWITCH[]; +extern char NEWTRODIT_CLIPBOARD_COPIED[]; // Other dialogs -char NEWTRODIT_DIALOG_BOTTOM_HELP[] = "For help, press F1"; -char NEWTRODIT_DIALOG_MANUAL[] = "Ctrl-X Close help | Alt-F4 Quit Newtrodit"; -char NEWTRODIT_DIALOG_MANUAL_TITLE[] = " Newtrodit help"; -char NEWTRODIT_DIALOG_BOTTOM_LOCATE[] = " | Space Next page | Ctrl-B Go back | Ctrl-D Go to dir | Ctrl-X Quit"; -char NEWTRODIT_DIALOG_LOCATE_POS[] = "Showing %d-%d out of %d files (%llu total bytes)"; +extern char NEWTRODIT_DIALOG_BOTTOM_HELP[]; +extern char NEWTRODIT_DIALOG_MANUAL[]; +extern char NEWTRODIT_DIALOG_MANUAL_TITLE[]; +extern char NEWTRODIT_DIALOG_BOTTOM_LOCATE[]; +extern char NEWTRODIT_DIALOG_LOCATE_POS[]; -char NEWTRODIT_DIALOG_ENABLED[] = "Enabled"; -char NEWTRODIT_DIALOG_DISABLED[] = "Disabled"; -char NEWTRODIT_FUNCTION_ABORTED[] = "Function aborted."; +extern char NEWTRODIT_DIALOG_ENABLED[]; +extern char NEWTRODIT_DIALOG_DISABLED[]; +extern char NEWTRODIT_FUNCTION_ABORTED[]; // Constants used internally -char NEWTRODIT_MANUAL_MAGIC_NUMBER[] = "$NEWTRODIT_MANUAL"; - -char NEWTRODIT_SYNTAX_CAPITAL[] = "$CAPITAL"; -char NEWTRODIT_SYNTAX_CAPITAL_COLOR[] = "$CAPITAL_COLOR"; -char NEWTRODIT_SYNTAX_CAPITAL_MIN[] = "$CAPITAL_MIN"; -char NEWTRODIT_SYNTAX_COMMENT[] = "$COMMENT"; -char NEWTRODIT_SYNTAX_COMMENT_COLOR[] = "$COMMENT_COLOR"; -char NEWTRODIT_SYNTAX_DEFAULT_COLOR[] = "$DEFAULT_COLOR"; -char NEWTRODIT_SYNTAX_LANGUAGE[] = "$LANGUAGE"; -char NEWTRODIT_SYNTAX_MAGIC_NUMBER[] = "$NEWTRODIT_SYNTAX"; -char NEWTRODIT_SYNTAX_NUMBER_COLOR[] = "$NUMBER_COLOR"; -char NEWTRODIT_SYNTAX_QUOTE_COLOR[] = "$QUOTE_COLOR"; -char NEWTRODIT_SYNTAX_SEPARATORS[] = "$SEPARATORS"; -char NEWTRODIT_SYNTAX_SINGLE_QUOTES[] = "$SINGLE_QUOTES"; -char NEWTRODIT_SYNTAX_FINISH_QUOTES[] = "$FINISH_QUOTES"; - - -char NEWTRODIT_MACRO_CURRENT_FILE[] = "$FILE"; -char NEWTRODIT_MACRO_FULL_PATH[] = "$PATH"; -char NEWTRODIT_MACRO_CURRENT_DIR[] = "$DIR"; -char NEWTRODIT_MACRO_CURRENT_EXTENSION[] = "$EXT"; -char NEWTRODIT_MACRO_CURRENT_BASENAME[] = "$BASENAME"; -char NEWTRODIT_MACRO_CURRENT_DRIVE[] = "$DRIVE"; -char NEWTRODIT_SYNTAX_ENCLOSING[] = "$ENCLOSING"; \ No newline at end of file +extern char NEWTRODIT_MANUAL_MAGIC_NUMBER[]; + +extern char NEWTRODIT_SYNTAX_CAPITAL[]; +extern char NEWTRODIT_SYNTAX_CAPITAL_COLOR[]; +extern char NEWTRODIT_SYNTAX_CAPITAL_MIN[]; +extern char NEWTRODIT_SYNTAX_COMMENT[]; +extern char NEWTRODIT_SYNTAX_COMMENT_COLOR[]; +extern char NEWTRODIT_SYNTAX_DEFAULT_COLOR[]; +extern char NEWTRODIT_SYNTAX_LANGUAGE[]; +extern char NEWTRODIT_SYNTAX_MAGIC_NUMBER[]; +extern char NEWTRODIT_SYNTAX_NUMBER_COLOR[]; +extern char NEWTRODIT_SYNTAX_QUOTE_COLOR[]; +extern char NEWTRODIT_SYNTAX_SEPARATORS[]; +extern char NEWTRODIT_SYNTAX_SINGLE_QUOTES[]; +extern char NEWTRODIT_SYNTAX_FINISH_QUOTES[]; + + +extern char NEWTRODIT_MACRO_CURRENT_FILE[]; +extern char NEWTRODIT_MACRO_FULL_PATH[]; +extern char NEWTRODIT_MACRO_CURRENT_DIR[]; +extern char NEWTRODIT_MACRO_CURRENT_EXTENSION[]; +extern char NEWTRODIT_MACRO_CURRENT_BASENAME[]; +extern char NEWTRODIT_MACRO_CURRENT_DRIVE[]; +extern char NEWTRODIT_SYNTAX_ENCLOSING[]; + +#endif // DIALOG_H \ No newline at end of file diff --git a/src/fileio.c b/src/fileio.c index 95d9a0e..a67b50d 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1,3 +1,4 @@ +#include "fileio.h" int check_file(char *filename) { @@ -28,8 +29,6 @@ int valid_filename(char *filename) return strpbrk(filename, "*?\"<>|\x1b") == NULL; } - - int write_file(File *tstack, FILE *fp) { size_t nl_len = strlen_n(tstack->newline); // Calculate the length just once and not for every iteration @@ -37,9 +36,7 @@ int write_file(File *tstack, FILE *fp) { fwrite(tstack->line[i]->str, sizeof(char), tstack->line[i]->len, fp); // DANGER: This approach is dangerous and may lead to buffer overflows if (i < tstack->linecount) - { fwrite(tstack->newline, sizeof(char), nl_len, fp); - } } return 1; } @@ -72,7 +69,7 @@ int save_file(File *tstack, char *savefile, bool saveDialog) { load_all_newtrodit(tstack, NULL); print_message("%s%s", NEWTRODIT_FS_FILE_INVALID_NAME, tmp_filename); - display_contents(tstack); + display_contents(tstack); getch_n(); return 0; @@ -89,14 +86,14 @@ int save_file(File *tstack, char *savefile, bool saveDialog) { load_all_newtrodit(tstack, NULL); print_message(NEWTRODIT_FS_FILE_SAVE_ERR, tmp_filename); - display_contents(tstack); + display_contents(tstack); getch_n(); return 0; } set_status_msg(true, NEWTRODIT_FILE_SAVED); load_all_newtrodit(tstack, ed.status_msg); - display_contents(tstack); + display_contents(tstack); write_file(tstack, savefp); fclose(savefp); @@ -165,20 +162,20 @@ int load_file(File *tstack, FILE *fp) tstack->encoding = get_file_encoding(read_header_bom, headerbytesread, &tstack->encoding_bom_len); // Identify the encoding of the file being read, assume UTF-8 if none is detected (could this be an issue?) fseek(fp, 0, SEEK_END); size_t file_size = ftell(fp); - if(tstack->encoding == ENCODING_UTF8) + if (tstack->encoding == ENCODING_UTF8) { - int text_utf16 = is_utf16((unsigned char*) read_header_bom, headerbytesread, file_size); - switch(text_utf16 + 1) + int text_utf16 = is_utf16((unsigned char *)read_header_bom, headerbytesread, file_size); + switch (text_utf16 + 1) { - case ENCODING_UTF16LE: - tstack->encoding = ENCODING_UTF16LE; - break; - case ENCODING_UTF16BE: - tstack->encoding = ENCODING_UTF16BE; - break; - default: - tstack->encoding = ENCODING_UTF8; - break; + case ENCODING_UTF16LE: + tstack->encoding = ENCODING_UTF16LE; + break; + case ENCODING_UTF16BE: + tstack->encoding = ENCODING_UTF16BE; + break; + default: + tstack->encoding = ENCODING_UTF8; + break; } } @@ -300,7 +297,7 @@ int open_file(File *tstack) { set_status_msg(false, NEWTRODIT_FS_FILE_OPEN_ERR, tmp_openfile); load_all_newtrodit(tstack, ed.status_msg); - free(tmp_openfile); + free(tmp_openfile); return 0; } diff --git a/src/fileio.h b/src/fileio.h index 753f4b5..8c43a5d 100644 --- a/src/fileio.h +++ b/src/fileio.h @@ -1 +1,19 @@ -#include "fileio.c" \ No newline at end of file +#ifndef FILEIO_H +#define FILEIO_H +#include "newtrodit_core.h" +#include "line.h" +#include "newtrodit_gui.h" +#include "input.h" + + +int check_file(char *filename); +char *get_full_path(const char *filename); +int valid_filename(char *filename); +int write_file(File *tstack, FILE *fp); +int save_file(File *tstack, char *savefile, bool saveDialog); +int load_file(File *tstack, FILE *fp); +int open_file(File *tstack); +int close_file(File *tstack); +void save_modified_file(File *tstack); + +#endif // FILEIO_H \ No newline at end of file diff --git a/src/globals.h b/src/globals.h index 4d28cd7..2a50aba 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1,11 +1,19 @@ - - - -char manual_file[MAX_PATH] = "newtrodit.man"; -char settings_file[MAX_PATH] = "newtrodit.config"; -char syntax_dir[MAX_PATH] = "syntax"; -char syntax_ext[MAX_PATH] = ".nwtrd-syntax"; -const char newtrodit_commit[] = ""; // Example commit +#ifndef GLOBALS_H +#define GLOBALS_H +#ifndef MAX_PATH + #ifdef _WIN32 + #define MAX_PATH 260 + #else + #include + #define MAX_PATH PATH_MAX-1 // Leave one char for null terminator just in case + #endif +#endif + +extern char manual_file[MAX_PATH] = "newtrodit.man"; +extern char settings_file[MAX_PATH] = "newtrodit.config"; +extern char syntax_dir[MAX_PATH] = "syntax"; +extern char syntax_ext[MAX_PATH] = ".nwtrd-syntax"; +extern const char newtrodit_commit[] = ""; // Example commit //const char* autocomplete_double[] = {"{}", "[]", "()", "\"\"", "''"}; @@ -194,4 +202,5 @@ static File_lang FileLang[] = { {"xhtml|xhtm|xht", "XHTM", 2}, // XHTML {"xm", "XM", 1}, // XML {"yml|yam", "YAM", 2}, // YAML -}; \ No newline at end of file +}; +#endif // GLOBALS_H \ No newline at end of file diff --git a/src/include/tercontrol.h b/src/include/tercontrol.h new file mode 100644 index 0000000..7b6d298 --- /dev/null +++ b/src/include/tercontrol.h @@ -0,0 +1,443 @@ +/********************************************************************************** + + Basic Terminal Control Library + Copyright 2022 Zackery Smith + This library is released under the GPLv3 license + + This library has no dependencies other than the standard C runtime library + +***********************************************************************************/ +#ifndef TC_H +#define TC_H +#endif + +#include +#ifdef _WIN32 +#include +#include // For _getch() function +HANDLE hConsole = INVALID_HANDLE_VALUE, hAlternateScreen = INVALID_HANDLE_VALUE; // WinAPI structures for console +CONSOLE_SCREEN_BUFFER_INFO csbi; +CONSOLE_CURSOR_INFO cci; +#else + +#endif +#include +#include +#include +#include + +#ifdef _WIN32 +#define TC_NRM "" +#else +#define TC_NRM "\x1B[0m" /* Normalize color */ +#endif + +#define TC_RED "\x1B[1;31m" /* Red */ +#define TC_GRN "\x1B[1;32m" /* Green */ +#define TC_YEL "\x1B[1;33m" /* Yellow */ +#define TC_BLU "\x1B[1;34m" /* Blue */ +#define TC_MAG "\x1B[1;35m" /* Magenta */ +#define TC_CYN "\x1B[1;36m" /* Cyan */ +#define TC_WHT "\x1B[1;37m" /* White */ + +#define TC_B_NRM "\x1B[0m" /* Normalize Bright Color */ +#define TC_B_RED "\x1B[0;31m" /* Bright Red */ +#define TC_B_GRN "\x1B[0;32m" /* Bright Green */ +#define TC_B_YEL "\x1B[0;33m" /* Bright Yellow */ +#define TC_B_BLU "\x1B[0;34m" /* Bright Blue */ +#define TC_B_MAG "\x1B[0;35m" /* Bright Magenta */ +#define TC_B_CYN "\x1B[0;36m" /* Bright Cyan */ +#define TC_B_WHT "\x1B[0;37m" /* Bright White */ + +#define TC_BG_NRM "\x1B[40m" /* Normalize Background Color */ +#define TC_BG_RED "\x1B[41m" /* Background Red */ +#define TC_BG_GRN "\x1B[42m" /* Background Green */ +#define TC_BG_YEL "\x1B[43m" /* Background Yellow */ +#define TC_BG_BLU "\x1B[44m" /* Background Blue */ +#define TC_BG_MAG "\x1B[45m" /* Background Magenta*/ +#define TC_BG_CYN "\x1B[46m" /* Background Cyan */ +#define TC_BG_WHT "\x1B[47m" /* Background White */ + +// `asprintf` is usable on any POSIX-2008 compliant system (any modern Linux system) +// My compiler likes to complain about it.. Another way to preform this is with `vfprintf` +// Or maybe I'm just a bad programmer :I + +#ifdef _WIN32 + +char *tc_color_id(uint8_t cid, int l) +{ // "l" flag is ignored, just to make it compatible with the POSIX version + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(hConsole, (cid / 16) << 4 | (cid % 16)); + return ""; +} + +#else + +char *tc_color_id(uint8_t cid, int l) +{ + + char *esc; + if (!l) + { + asprintf(&esc, "\x1B[48;5;%dm", cid); + } + else + { + asprintf(&esc, "\x1B[38;5;%dm", cid); + } + return esc; +} + +////////////////////////////////////////////////////////////////// +// WARNING: WinAPI doesn't natively support 24-bit colors // +// So this function is not available on Windows systems // +////////////////////////////////////////////////////////////////// +char *tc_rgb(int r, int g, int b, int l) +{ + char *esc; + if (!l) + { + asprintf(&esc, "\x1B[48;2;%d;%d;%dm", r, g, b); + } + else + { + asprintf(&esc, "\x1B[38;2;%d;%d;%dm", r, g, b); + } + return esc; +} +#endif + +////////////////////////////////////// +// Additional formatting (ANSI) // +////////////////////////////////////// + +#define TC_BLD "\x1B[1m" /* Bold */ +#define TC_DIM "\x1B[2m" /* Dim */ +#define TC_ITAL "\x1B[3m" /* Standout (italics) */ +#define TC_UNDR "\x1B[4m" /* Underline */ +#define TC_BLNK "\x1B[5m" /* Blink */ +#define TC_REV "\x1B[7m" /* Reverse */ +#define TC_INV "\x1B[8m" /* Invisible */ + +////////////////////////////////////// + +void tc_get_cols_rows(int *cols, int *rows); + +////////////////////////////// +// Common private modes // +////////////////////////////// + +#ifdef _WIN32 + +void tc_hide_cursor() +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + cci.bVisible = FALSE; + SetConsoleCursorInfo(hConsole, &cci); +} +void tc_show_cursor() +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + cci.bVisible = TRUE; + SetConsoleCursorInfo(hConsole, &cci); +} + +void tc_enter_alt_screen() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + hAlternateScreen = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); + SetConsoleActiveScreenBuffer(hAlternateScreen); + SetStdHandle(STD_OUTPUT_HANDLE, hAlternateScreen); +} + +void tc_exit_alt_screen() +{ + if (hConsole == INVALID_HANDLE_VALUE) + { + return; + } + SetConsoleActiveScreenBuffer(hConsole); + CloseHandle(hAlternateScreen); + SetStdHandle(STD_OUTPUT_HANDLE, hConsole); +} + +#else + +#define tc_hide_cursor() puts("\033[?25l") +#define tc_show_cursor() puts("\033[?25h") + +/* These functions don't seem to be doing anything + + #define tc_save_screen() puts("\033[?47h") + #define tc_restore_screen() puts("\033[?47l") + +*/ +#define tc_enter_alt_screen() puts("\033[?1049h\033[H") +#define tc_exit_alt_screen() puts("\033[?1049l") +#endif +////////////////////////////// + +void tc_echo_off(); +void tc_echo_on(); + +void tc_get_cols_rows(int *cols, int *rows) +{ +#ifdef _WIN32 + + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + *cols = csbi.srWindow.Right - csbi.srWindow.Left + 1; + *rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +#else + struct winsize size; + ioctl(1, TIOCGWINSZ, &size); + *cols = size.ws_col; + *rows = size.ws_row; +#endif +} + +#ifdef _WIN32 +void tc_echo_off() // Not intended for user use +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode & (~ENABLE_ECHO_INPUT)); +} +void tc_echo_on() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode | ENABLE_ECHO_INPUT); +} + +void tc_canon_on() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode | ENABLE_ECHO_INPUT); +} + +void tc_canon_off() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD old_mode; + GetConsoleMode(hConsole, &old_mode); + SetConsoleMode(hConsole, old_mode & (~ENABLE_ECHO_INPUT)); +} + +void tc_clear_partial(int x, int y, int width, int height) // Clears a section of the screen +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO csbi; + DWORD count; + COORD homeCoords = {x, y}; + + if (hConsole == INVALID_HANDLE_VALUE) + { + return; + } + + if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) + { + return; + } + for (int i = 0; i < height; i++) + { + FillConsoleOutputCharacter(hConsole, ' ', width, homeCoords, &count); + FillConsoleOutputAttribute(hConsole, csbi.wAttributes, width, homeCoords, &count); + + homeCoords.Y++; + } + homeCoords.Y = y; + SetConsoleCursorPosition(hConsole, homeCoords); + return; +} + +void tc_get_cursor(int *x, int *y) +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + *x = csbi.dwCursorPosition.X; + *y = csbi.dwCursorPosition.Y; +} +void tc_set_cursor(int x, int y) +{ + COORD pos = {x, y}; + SetConsoleCursorPosition(hConsole, pos); +} + +void tc_move_cursor(int x, int y) +{ + GetConsoleScreenBufferInfo(hConsole, &csbi); + int cur_x = csbi.dwCursorPosition.X + x; + int cur_y = csbi.dwCursorPosition.Y + y; + if (cur_x < 0) + { + cur_x = 0; + } + if (cur_y < 0) + { + cur_y = 0; + } + COORD pos = {cur_x, cur_y}; + SetConsoleCursorPosition(hConsole, pos); + +} + +void tc_clear_screen() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + DWORD written; + DWORD bufSize = csbi.dwSize.X * csbi.dwSize.Y; + COORD homeCoords = {0, 0}; // Home coordinates + FillConsoleOutputCharacter(hConsole, ' ', bufSize, homeCoords, &written); +} + +void tc_clear_entire_line() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(0, csbi.dwCursorPosition.Y, csbi.dwSize.X, 1); +} + +void tc_clear_line_till_cursor() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(0, csbi.dwCursorPosition.Y, csbi.dwCursorPosition.X, 1); +} + +void tc_clear_line_from_cursor() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y, csbi.dwSize.X, 1); +} + +void tc_clear_from_top_to_cursor() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(0, 0, csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y); +} + +void tc_clear_from_cursor_to_bottom() +{ + hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(hConsole, &csbi); + tc_clear_partial(csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y, csbi.dwSize.X, csbi.dwSize.Y - csbi.dwCursorPosition.Y); +} + +void tc_print(const char *s) +{ + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), s, strlen(s), NULL, NULL); +} + +int tc_getch() +{ + int ch = _getch(); + if(ch == 0 || ch == 0xE0) + { + ch += 255; + } + return ch; +} + +#else + +#define tc_clear_entire_line() puts("\x1B[2K") +#define tc_clear_line_till_cursor() puts("\x1B[1K") +#define tc_clear_line_from_cursor() puts("\x1B[0K") + +void tc_echo_off() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ECHO; + tcsetattr(1, TCSANOW, &term); +} + +void tc_echo_on() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ECHO; + tcsetattr(1, TCSANOW, &term); +} + +void tc_canon_on() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ICANON; + tcsetattr(1, TCSANOW, &term); +} + +void tc_canon_off() +{ + struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ICANON; + tcsetattr(1, TCSANOW, &term); +} + +void tc_get_cursor(int *X, int *Y) +{ + tc_echo_off(); + tc_canon_off(); + printf("\033[6n"); + scanf("\033[%d;%dR", X, Y); +} +#define tc_set_cursor(X, Y) printf("\033[%d;%dH", Y, X) +void tc_move_cursor(int X, int Y) +{ + if (X > 0) + { + printf("\033[%dC", X); + } + else if (X < 0) + { + printf("\033[%dD", (X * -1)); + } + + if (Y > 0) + { + printf("\033[%dB", Y); + } + else if (Y < 0) + { + printf("\033[%dA", (Y * -1)); + } +} + +#define tc_clear_screen() puts("\x1B[2J") +#define tc_clear_from_top_to_cursor() puts("\x1B[1J") +#define tc_clear_from_cursor_to_bottom() puts("\x1B[0J") + +void tc_clear_partial(int x, int y, int width, int height) +{ + char *buf = (char *)calloc(width + 1, 1); + memset(buf, 32, width); + tc_set_cursor(x, y); + for (int i = 0; i < height; i++) + { + tc_set_cursor(x, y + i); + fwrite(buf, width, 1, stdout); + } + free(buf); +} + +void tc_print(const char *s) +{ + fprintf(stdout, "%s", s); +} + +int tc_getch() // TODO: Implement this +{ + return 0; +} + +#endif diff --git a/src/include/wcwidth.h b/src/include/wcwidth.h new file mode 100644 index 0000000..3b20f9f --- /dev/null +++ b/src/include/wcwidth.h @@ -0,0 +1,330 @@ +/* + * This is an implementation of wcwidth() and wcswidth() (defined in + * IEEE Std 1002.1-2001) for Unicode. + * + * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html + * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html + * + * In fixed-width output devices, Latin characters all occupy a single + * "cell" position of equal width, whereas ideographic CJK characters + * occupy two such cells. Interoperability between terminal-line + * applications and (teletype-style) character terminals using the + * UTF-8 encoding requires agreement on which character should advance + * the cursor by how many cell positions. No established formal + * standards exist at present on which Unicode character shall occupy + * how many cell positions on character terminals. These routines are + * a first attempt of defining such behavior based on simple rules + * applied to data provided by the Unicode Consortium. + * + * For some graphical characters, the Unicode standard explicitly + * defines a character-cell width via the definition of the East Asian + * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. + * In all these cases, there is no ambiguity about which width a + * terminal shall use. For characters in the East Asian Ambiguous (A) + * class, the width choice depends purely on a preference of backward + * compatibility with either historic CJK or Western practice. + * Choosing single-width for these characters is easy to justify as + * the appropriate long-term solution, as the CJK practice of + * displaying these characters as double-width comes from historic + * implementation simplicity (8-bit encoded characters were displayed + * single-width and 16-bit ones double-width, even for Greek, + * Cyrillic, etc.) and not any typographic considerations. + * + * Much less clear is the choice of width for the Not East Asian + * (Neutral) class. Existing practice does not dictate a width for any + * of these characters. It would nevertheless make sense + * typographically to allocate two character cells to characters such + * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be + * represented adequately with a single-width glyph. The following + * routines at present merely assign a single-cell width to all + * neutral characters, in the interest of simplicity. This is not + * entirely satisfactory and should be reconsidered before + * establishing a formal standard in this area. At the moment, the + * decision which Not East Asian (Neutral) characters should be + * represented by double-width glyphs cannot yet be answered by + * applying a simple rule from the Unicode database content. Setting + * up a proper standard for the behavior of UTF-8 character terminals + * will require a careful analysis not only of each Unicode character, + * but also of each presentation form, something the author of these + * routines has avoided to do so far. + * + * http://www.unicode.org/unicode/reports/tr11/ + * + * Markus Kuhn -- 2007-05-26 (Unicode 5.0) + * + * Permission to use, copy, modify, and distribute this software + * for any purpose and without fee is hereby granted. The author + * disclaims all warranties with regard to this software. + * + * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + */ + +#include + +/* + This library has been slightly modified by anic17 in order to change + the type wchar_t to utf_int32_t, equivalent to int32_t + + While wchar_t is 32 bits in Linux and can represent any Unicode character, + wchar_t is just 16 bits in Windows (defined as a short) thus it cannot + represent correctly any Unicode character as the max value possible is + U+10FFFF, way bigger than U+FFFF (the limit for short data type) + + The following two lines have been added and all the cases where wchar_t + was used was replaced to utf8_int32_t to match the code in utf8.h library + (https://github.com/sheredom/utf8.h) + + */ +#include +typedef int32_t utf8_int32_t; + +struct interval { + int first; + int last; +}; + + + + +/* auxiliary function for binary search in interval table */ +static int bisearch(utf8_int32_t ucs, const struct interval *table, int max) { + int min = 0; + int mid; + + if (ucs < table[0].first || ucs > table[max].last) + return 0; + while (max >= min) { + mid = (min + max) / 2; + if (ucs > table[mid].last) + min = mid + 1; + else if (ucs < table[mid].first) + max = mid - 1; + else + return 1; + } + + return 0; +} + + +/* The following two functions define the column width of an ISO 10646 + * character as follows: + * + * - The null character (U+0000) has a column width of 0. + * + * - Other C0/C1 control characters and DEL will lead to a return + * value of -1. + * + * - Non-spacing and enclosing combining characters (general + * category code Mn or Me in the Unicode database) have a + * column width of 0. + * + * - SOFT HYPHEN (U+00AD) has a column width of 1. + * + * - Other format characters (general category code Cf in the Unicode + * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. + * + * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) + * have a column width of 0. + * + * - Spacing characters in the East Asian Wide (W) or East Asian + * Full-width (F) category as defined in Unicode Technical + * Report #11 have a column width of 2. + * + * - All remaining characters (including all printable + * ISO 8859-1 and WGL4 characters, Unicode control characters, + * etc.) have a column width of 1. + * + * This implementation assumes that utf8_int32_t characters are encoded + * in ISO 10646. + */ + + +int mk_wcwidth(utf8_int32_t ucs) +{ + /* sorted list of non-overlapping intervals of non-spacing characters */ + /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ + static const struct interval combining[] = { + { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, + { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, + { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, + { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, + { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, + { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, + { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, + { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, + { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, + { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, + { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, + { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, + { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF } + }; + + /* test for 8-bit control characters */ + if (ucs == 0) + return 0; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return -1; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, combining, + sizeof(combining) / sizeof(struct interval) - 1)) + return 0; + + /* if we arrive here, ucs is not a combining or C0/C1 control character */ + + return 1 + + (ucs >= 0x1100 && + (ucs <= 0x115f || /* Hangul Jamo init. consonants */ + ucs == 0x2329 || ucs == 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && + ucs != 0x303f) || /* CJK ... Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ + (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ + (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2fffd) || + (ucs >= 0x30000 && ucs <= 0x3fffd))); +} + + +int mk_wcswidth(const utf8_int32_t *pwcs, size_t n) +{ + int w, width = 0; + + for (;*pwcs && n-- > 0; pwcs++) + if ((w = mk_wcwidth(*pwcs)) < 0) + return -1; + else + width += w; + + return width; +} + + +/* + * The following functions are the same as mk_wcwidth() and + * mk_wcswidth(), except that spacing characters in the East Asian + * Ambiguous (A) category as defined in Unicode Technical Report #11 + * have a column width of 2. This variant might be useful for users of + * CJK legacy encodings who want to migrate to UCS without changing + * the traditional terminal character-width behaviour. It is not + * otherwise recommended for general use. + */ +int mk_wcwidth_cjk(utf8_int32_t ucs) +{ + /* sorted list of non-overlapping intervals of East Asian Ambiguous + * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ + static const struct interval ambiguous[] = { + { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 }, + { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 }, + { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 }, + { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 }, + { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED }, + { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA }, + { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 }, + { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B }, + { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 }, + { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 }, + { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 }, + { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE }, + { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, + { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, + { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 }, + { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB }, + { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, + { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 }, + { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, + { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 }, + { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, + { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, + { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, + { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 }, + { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, + { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, + { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, + { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 }, + { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 }, + { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, + { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, + { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B }, + { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, + { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, + { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E }, + { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 }, + { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, + { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F }, + { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, + { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, + { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B }, + { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 }, + { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, + { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, + { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, + { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 }, + { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 }, + { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 }, + { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 }, + { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F }, + { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF }, + { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } + }; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, ambiguous, + sizeof(ambiguous) / sizeof(struct interval) - 1)) + return 2; + + return mk_wcwidth(ucs); +} + + +int mk_wcswidth_cjk(const utf8_int32_t *pwcs, size_t n) +{ + int w, width = 0; + + for (;*pwcs && n-- > 0; pwcs++) + if ((w = mk_wcwidth_cjk(*pwcs)) < 0) + return -1; + else + width += w; + + return width; +} diff --git a/src/input.c b/src/input.c new file mode 100644 index 0000000..dc1f57b --- /dev/null +++ b/src/input.c @@ -0,0 +1 @@ +#include "input.h" \ No newline at end of file diff --git a/src/input.h b/src/input.h index d163efa..b84409c 100644 --- a/src/input.h +++ b/src/input.h @@ -1,3 +1,12 @@ +#ifndef INPUT_H +#define INPUT_H + +#ifdef _WIN32 +#include +#include +#endif +#include "unicode.h" + #ifndef _O_U16TEXT #define _O_U16TEXT 0x20000 #endif @@ -24,7 +33,6 @@ enum CONTROL_CODES BS = 0x08, ENTER = 0x0d, CTRLENTER = 0x0a, - CTRLA = 0x01, CTRLB = 0x02, @@ -462,12 +470,12 @@ enum CONTROL_CODES CTRLALTY = 0xa0064d80, CTRLALTZ = 0xa0068d80, }; -#endif +#endif // _WIN32 #ifdef _WIN32 -#include -#include -#include "win32/input_win32.c" +#include "win32/input_win32.h" #else -#include "linux/input_linux.c" -#endif \ No newline at end of file +#include "linux/input_linux.h" +#endif // _WIN32 + +#endif // INPUT_H \ No newline at end of file diff --git a/src/line.c b/src/line.c index f910aca..9547b0c 100644 --- a/src/line.c +++ b/src/line.c @@ -1,7 +1,5 @@ -size_t correct_position(Line *line, size_t *xpos, size_t *uxpos, size_t *uwxpos); -void print_message(const char *str, ...); -int set_scroll(File *tstack); -int increase_scroll(File *tstack, size_t amount); +#include "line.h" +#include "newtrodit_gui.h" Line *create_line(File *tstack, size_t ypos) { @@ -231,4 +229,81 @@ int display_contents(File *tstack) display_line(tstack, i, tstack->line[i]->rlen); } return 0; +} + + +int allocate_buffer(File **tstack) +{ + *tstack = calloc(1, sizeof(File)); + (*tstack)->file_flags = IS_UNTITLED; + + (*tstack)->filename = calloc(MAX_PATH * sizeof(utf8_int32_t) + 1, sizeof(char)); + memcpy((*tstack)->filename, default_filename, MAX_PATH); + + (*tstack)->fwrite_time = time(NULL); + (*tstack)->fread_time = time(NULL); + (*tstack)->language = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->language, default_language, utf8len_n(default_language)); + (*tstack)->linenumber_wide = 3; + (*tstack)->linenumber_padding = 1; + (*tstack)->linecount = 0; + (*tstack)->xpos = 0; + (*tstack)->ypos = 1; + (*tstack)->size = 0; + (*tstack)->encoding = ENCODING_UTF8; + (*tstack)->encoding_bom_len = 0; + (*tstack)->post_load_rendering = true; + + (*tstack)->line = calloc(DEFAULT_ALLOC_LINES, sizeof(Line *)); + + for (size_t i = 0; i <= DEFAULT_ALLOC_LINES; i++) + create_line(*tstack, i); + + (*tstack)->line[0]->str = " Illegal row number. Report this issue to the GitHub repository."; // If for some reason line 0 is accessed + + (*tstack)->newline = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); + memcpy((*tstack)->newline, default_newline, utf8len_n(default_newline)); + + return 1; +} + +int free_buffer(File **tstack) +{ + + for (size_t i = 1; i < (*tstack)->alloc_lines; i++) + { + free((*tstack)->line[i]->render); + free((*tstack)->line[i]->str); + free((*tstack)->line[i]); + } + + // free((*tstack)->line); + + free((*tstack)->newline); + free((*tstack)->filename); + free((*tstack)->language); + + /* free((*tstack)->compilerinfo.path); + free((*tstack)->compilerinfo.flags); + free((*tstack)->compilerinfo.output); + + free((*tstack)->syntaxinfo.syntax_lang); + free((*tstack)->syntaxinfo.syntax_file); + free((*tstack)->syntaxinfo.separators); + free((*tstack)->syntaxinfo.comments); + + for (int i = 0; i < (*tstack)->syntaxinfo.keyword_count; i++) + { + free((*tstack)->syntaxinfo.keywords[i]); + } + + for (int i = 0; i < (*tstack)->syntaxinfo.comment_count; i++) + { + free((*tstack)->syntaxinfo.comments[i]); + } + + free((*tstack)->syntaxinfo.keywords); + free((*tstack)->syntaxinfo.color); + free((*tstack)->syntaxinfo.comments); */ + return 1; } \ No newline at end of file diff --git a/src/line.h b/src/line.h index c85bdee..905db94 100644 --- a/src/line.h +++ b/src/line.h @@ -1,3 +1,19 @@ -int display_line(File *tstack, size_t linenum, size_t rcount); -#include "line.c" \ No newline at end of file +#ifndef LINE_H +#define LINE_H +#include "newtrodit_core.h" + +Line *create_line(File *tstack, size_t ypos); +size_t change_allocated_lines(File *tstack, size_t old_line_count, size_t new_line_count); +Line *increase_line(Line *line, size_t increment); +Line *increase_line_render(Line *line, size_t increment); +Line *insert_row(Line **lines, size_t startpos, size_t arrsize, Line *arrvalue); +Line *delete_row(Line **lines, size_t startpos, size_t arrsize); +char *render_line(File *tstack, size_t yps); +void see_buffer(Line **lines, size_t linecount); +void see_render_buffer(Line **lines, size_t linecount); +int split_row(File *tstack, size_t split_x, size_t *yps); +int display_contents(File *tstack); +int allocate_buffer(File **tstack); +int free_buffer(File **tstack); +#endif \ No newline at end of file diff --git a/src/linux/graphics_linux.h b/src/linux/graphics_linux.h new file mode 100644 index 0000000..e03ef64 --- /dev/null +++ b/src/linux/graphics_linux.h @@ -0,0 +1,168 @@ +#include +#include +#include + +#define TC_NRM "\x1B[0m" /* Normalize color */ + +#define TC_RED "\x1B[1;31m" /* Red */ +#define TC_GRN "\x1B[1;32m" /* Green */ +#define TC_YEL "\x1B[1;33m" /* Yellow */ +#define TC_BLU "\x1B[1;34m" /* Blue */ +#define TC_MAG "\x1B[1;35m" /* Magenta */ +#define TC_CYN "\x1B[1;36m" /* Cyan */ +#define TC_WHT "\x1B[1;37m" /* White */ + +#define TC_B_NRM "\x1B[0m" /* Normalize Bright Color */ +#define TC_B_RED "\x1B[0;31m" /* Bright Red */ +#define TC_B_GRN "\x1B[0;32m" /* Bright Green */ +#define TC_B_YEL "\x1B[0;33m" /* Bright Yellow */ +#define TC_B_BLU "\x1B[0;34m" /* Bright Blue */ +#define TC_B_MAG "\x1B[0;35m" /* Bright Magenta */ +#define TC_B_CYN "\x1B[0;36m" /* Bright Cyan */ +#define TC_B_WHT "\x1B[0;37m" /* Bright White */ + +#define TC_BG_NRM "\x1B[40m" /* Normalize Background Color */ +#define TC_BG_RED "\x1B[41m" /* Background Red */ +#define TC_BG_GRN "\x1B[42m" /* Background Green */ +#define TC_BG_YEL "\x1B[43m" /* Background Yellow */ +#define TC_BG_BLU "\x1B[44m" /* Background Blue */ +#define TC_BG_MAG "\x1B[45m" /* Background Magenta*/ +#define TC_BG_CYN "\x1B[46m" /* Background Cyan */ +#define TC_BG_WHT "\x1B[47m" /* Background White */ + + +#define clear_entire_line() puts("\x1B[2K") +#define clear_line_till_cursor() puts("\x1B[1K") +#define clear_line_from_cursor() puts("\x1B[0K") + + +void color_id(uint8_t cid, int l) +{ + printf((l) ? "\x1B[38;5;%dm" : "\x1B[48;5;%dm", cid); +} + +void set_color(Color color) +{ + if (color.background) + { + printf("\x1B[48;2;%d;%d;%dm", color.r, color.g, color.b); + } + else + { + printf("\x1B[38;2;%d;%d;%dm", color.r, color.g, color.b); + } +} + +void rgb(int r, int g, int b, int l) +{ + printf((l) ? "\x1B[38;5;%d;%d;%dm" : "\x1B[48;5;%d;%d;%dm", r, g, b); +} + +////////////////////////////////////// +// Additional formatting (ANSI) // +////////////////////////////////////// + +#define TC_BLD "\x1B[1m" /* Bold */ +#define TC_DIM "\x1B[2m" /* Dim */ +#define TC_ITAL "\x1B[3m" /* Standout (italics) */ +#define TC_UNDR "\x1B[4m" /* Underline */ +#define TC_BLNK "\x1B[5m" /* Blink */ +#define TC_REV "\x1B[7m" /* Reverse */ +#define TC_INV "\x1B[8m" /* Invisible */ + +void echo_off() +{ + /* struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ECHO; + tcsetattr(1, TCSANOW, &term); */ +} + +void echo_on() +{ + /* struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ECHO; + tcsetattr(1, TCSANOW, &term); */ +} + +void canon_on() +{ +/* struct termios term; + tcgetattr(1, &term); + term.c_lflag |= ICANON; + tcsetattr(1, TCSANOW, &term); + */ +} +void canon_off() +{ + /* struct termios term; + tcgetattr(1, &term); + term.c_lflag &= ~ICANON; + tcsetattr(1, TCSANOW, &term); */ +} + +void get_cursor(int *X, int *Y) +{ + echo_off(); + canon_off(); + printf("\033[6n"); + scanf("\033[%d;%dR", X, Y); +} +void gotoxy(int x, int y) +{ + printf("\033[%d;%df", y+1, x+1); +} + +void move_cursor(int X, int Y) +{ + if (X > 0) + { + printf("\033[%dC", X); + } + else if (X < 0) + { + printf("\033[%dD", (X * -1)); + } + + if (Y > 0) + { + printf("\033[%dB", Y); + } + else if (Y < 0) + { + printf("\033[%dA", (Y * -1)); + } +} + +#define clear_screen() puts("\x1B[2J") +#define clear_from_top_to_cursor() puts("\x1B[1J") +#define clear_from_cursor_to_bottom() puts("\x1B[0J") + +void clear_partial(int x, int y, int width, int height) +{ + char *buf = calloc(width + 1, 1); + memset(buf, 32, width); + gotoxy(x, y); + for (int i = 0; i < height; i++) + { + gotoxy(x, y + i); + fwrite(buf, width, 1, stdout); + } + gotoxy(x, y); + free(buf); +} + +void get_cols_rows(size_t *cols, size_t *rows) +{ + struct winsize size; + ioctl(1, TIOCGWINSZ, &size); + *cols = (size_t) size.ws_col; + *rows = (size_t) size.ws_row; +} + +int alternate_buffer(bool enabled) +{ + fputs(enabled ? "\033[?1049h" : "\033[?1049l", stdout); + return enabled; +} \ No newline at end of file diff --git a/src/linux/input_linux.h b/src/linux/input_linux.h new file mode 100644 index 0000000..f7a9b34 --- /dev/null +++ b/src/linux/input_linux.h @@ -0,0 +1,110 @@ +struct termios orig_termios; + +int raw_mode(int fd) +{ + /* This is taken from kilo, make sure to check the project at https://github.com/antirez/kilo */ + struct termios raw; + + if (!isatty(STDIN_FILENO)) + { + perror("raw_mode()"); + return 0; + } + + raw = orig_termios; /* modify the original mode */ + /* input modes: no break, no CR to NL, no parity check, no strip char, + * no start/stop output control. */ + raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + /* output modes - disable post processing */ + // raw.c_oflag &= ~(OPOST); + /* control modes - set 8 bit chars */ + raw.c_cflag |= (CS8); + /* local modes - choing off, canonical off, no extended functions, + * no signal chars (^Z,^C) */ + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + /* control chars - set return condition: min number of bytes and timer. */ + raw.c_cc[VMIN] = 0; /* Return each byte, or zero for timeout. */ + raw.c_cc[VTIME] = 1; /* 100 ms timeout (unit is tens of second). */ + if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) + { + perror("tcsetattr()"); + return 0; + } + return 1; +} + +void disable_raw_mode(int fd) +{ + /* Don't even check the return value as it's too late. */ + tcsetattr(fd, TCSAFLUSH, &orig_termios); +} + +InputUTF8 get_newtrodit_input() +{ + InputUTF8 inputchar = {0}; + + if (!raw_mode(STDIN_FILENO)) + { + return inputchar; + } + const size_t maxreadsz = 1024; + unsigned char *buf = calloc(sizeof(char), maxreadsz + 1), seq[100] = {0}; // Have enough space for all the buffer + size_t numread; + + numread = read(STDIN_FILENO, buf, maxreadsz); + if (buf[0] == 27) + { + if (numread > 1) // Control code + { + // Key encoding starts here + if ((buf[1] == '[' || buf[1] == 'O')) // -30 is signed 226 + { + if (buf[2] == 226) // Special case for Euro symbol in european layouts + { + buf[2] = 'E'; + } + if (numread > 7) + numread = 7; + inputchar.flags |= 0xFF; + for (size_t i = 2; i < numread; i++) + { + inputchar.flags = inputchar.flags << 8; // Shift only seven bytes + inputchar.flags |= buf[i]; + } + inputchar.inputlen = numread; + } + else + { + inputchar.flags = buf[1]; // Alt-[key] special case + inputchar.inputlen = 2; + } + } + } + + else + { + if (numread > 4) + numread = 4; + inputchar.inputlen = numread; + + for (int i = 0; i < numread; i++) + { + inputchar.utf8char = inputchar.utf8char << 8; + inputchar.utf8char |= buf[i]; + inputchar.equiv[i] = buf[i]; + } + } + /* if(tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios) < 0) // Restore original mode + { + perror("Failed to restore old termios mode!"); + } */ + free(buf); + disable_raw_mode(STDIN_FILENO); + return inputchar; +} + +int getch_n() +{ + InputUTF8 ret = get_newtrodit_input(); + return ret.utf8char; +} diff --git a/src/newtrodit.c b/src/newtrodit.c index 4093b79..c4c2ad1 100644 --- a/src/newtrodit.c +++ b/src/newtrodit.c @@ -1,9 +1,7 @@ + +#include "dialog.h" +#include "globals.h" #include "newtrodit.h" -#include "line.h" -#include "newtrodit_gui.h" -#include "unicode.c" -#include "input.h" -#include "fileio.h" void sigsegv_handler() { @@ -14,7 +12,7 @@ void sigsegv_handler() exit(errno); */ } -int init_editor() +int init_editor(int argc, char* argv[]) { #ifdef WIN32 @@ -46,8 +44,8 @@ int init_editor() file = calloc(open_files, sizeof(File *)); #ifdef _WIN32 - hStdout = GetStdHandle(STD_OUTPUT_HANDLE); - hStdin = GetStdHandle(STD_INPUT_HANDLE); + HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); SetConsoleCtrlHandler(NULL, TRUE); DWORD dwState = 0; @@ -74,7 +72,7 @@ int init_editor() get_cols_rows(&ed.xsize, &ed.ysize); vt_settings(true); - //alternate_buffer(true); + // alternate_buffer(true); allocate_buffer(&file[ed.file_index]); // Pass the address of the file pointer load_all_newtrodit(file[ed.file_index], NULL); @@ -82,6 +80,7 @@ int init_editor() return 1; } + int end_editor() { alternate_buffer(false); @@ -90,6 +89,23 @@ int end_editor() return 1; } +void quit_newtrodit(File *tstack) +{ + if (tstack->file_flags & IS_MODIFIED) + { + print_message(NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); + if (yes_no_prompt()) + save_file(tstack, tstack->filename, !!(tstack->file_flags & IS_UNTITLED)); // tstack->file_flags &~ IS_SAVED isn't needed due to being redundant + } + print_message(NEWTRODIT_PROMPT_QUIT); + if (yes_no_prompt()) + { + end_editor(); + exit(1); + } + ed.dirty = true; +} + int handle_keystrokes(InputUTF8 ch, File *tstack) { if (_ypos >= tstack->alloc_lines - 1) @@ -105,7 +121,7 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) if (_uxpos > 0) { previous_char_xpos(tstack->line[_ypos]->str, &_xpos); - _uwxpos -= previous_char_uwlen(tstack->line[_ypos]->str, _xpos); + _uwxpos -= previous_char_uwlen(tstack->line[_ypos]->str, _xpos); _uxpos--; } @@ -246,9 +262,9 @@ int handle_keystrokes(InputUTF8 ch, File *tstack) } break; case ENTER: - split_row(tstack, _xpos, &_ypos); - increase_scroll(tstack, 1); - + split_row(tstack, _xpos, &_ypos); + increase_scroll(tstack, 1); + break; case CTRLS: save_file(tstack, tstack->filename, ch.flags & SHIFT_BITMASK); // If Shift is pressed, always display save as dialog @@ -353,11 +369,11 @@ int editor_main() return 1; } -int main() +int main(int argc, char* argv[]) { setlocale(LC_ALL, ".utf8"); - init_editor(); + init_editor(argc, argv); editor_main(); diff --git a/src/newtrodit.h b/src/newtrodit.h index 0321947..31c87c4 100644 --- a/src/newtrodit.h +++ b/src/newtrodit.h @@ -1,411 +1,16 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../include/utf8/utf8.h" -#include "../include/wcwidth.h" +#ifndef NEWTRODIT_H +#define NEWTRODIT_H -#ifdef _WIN32 -#include -#endif - -#ifndef MAX_PATH -#define MAX_PATH 260 -#endif - -#include "dialog.h" -#include "globals.h" - -const int DEFAULT_ALLOC_SIZE = 512; -const size_t LINE_SIZE = 64; -const size_t DEFAULT_ALLOC_LINES = 10; - -const size_t LINE_Y_INCREASE = 5; - -#if !defined ENABLE_VIRTUAL_TERMINAL_PROCESSING || !defined DISABLE_NEWLINE_AUTO_RETURN -#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 -#define DISABLE_NEWLINE_AUTO_RETURN 0x0008 -#endif - -enum file_flags_modifier -{ - IS_MODIFIED = 1, - IS_SAVED = 2, - IS_UNTITLED = 4, - IS_READONLY = 8, -}; - -enum unicode_encodings -{ - ENCODING_UTF8 = 1, - ENCODING_UTF16LE = 2, - ENCODING_UTF16BE = 3, - ENCODING_UTF8BOM = 4, - ENCODING_UTF32LE = 5, - ENCODING_UTF32BE = 6, -}; - -const char newtrodit_version[] = "1.0"; -const char newtrodit_date[] = "2024/09/05"; - -typedef struct Line -{ - char *str; // Buffer that contains the line - char *render; - - size_t bufx; // Allocated line size - size_t render_bufx; // Allocated render size - - size_t len; // Line Length - size_t rlen; // Rendered length - size_t rnlen; // Rendered length without padding - - size_t ulen; // UTF-8 length -} Line; - -typedef struct Position -{ - size_t x; - size_t y; -} Position; - -typedef struct Select -{ - Position start; - Position end; - bool is_selected; -} Select; - -typedef struct File -{ - char *filename; - char *fullpath; - char *language; // Language (e.g: PowerShell, C, C++, etc.) - - // File information - size_t xpos, ypos; - size_t uxpos; // UTF-8 X position - size_t uwxpos; // UTF-8 width position - - Line **line; // Store each line file - size_t alloc_lines; - size_t linecount; - long long size; - - size_t linenumber_wide; - size_t linenumber_padding; - - char *newline; - unsigned int file_flags; - - unsigned int encoding; - size_t encoding_bom_len; - bool post_load_rendering; - - time_t fwrite_time; - time_t fread_time; - Select selection; - Position begin_display; - Position scroll_pos; -} File; // File information. This is used to store all the information about the file. - -typedef struct Editor -{ - size_t xsize, ysize; // Window size - int open_files; // Number of files open - int file_index; // Current file index - - char *log_file_name; - char *status_msg; - bool useLogFile; - bool lineNumbers; - bool dirty; - bool displayStatusOnce; - -} Editor; // Editor information - -typedef struct Color -{ - int r, g, b; - bool background; -} Color; - -Editor ed; -File **file; +#include "newtrodit_gui.h" +#include "fileio.h" +#include "input.h" +#include "line.h" +void sigsegv_handler(); +int init_editor(int argc, char* argv[]); int end_editor(); -int init_editor(); -Line *create_line(File *tstack, size_t ypos); -int codepoint_width(const char *utf8_char, utf8_int32_t val); - -#ifdef _WIN32 -#include "win32/graphics_win32.c" -const char PATHDELIMS[] = "\\/"; // Set the path delimiters for Windows and Linux -#else -#include "linux/graphics_linux.c" -const char PATHDELIMS[] = "/"; -#endif - -#define _xpos file[ed.file_index]->xpos -#define _ypos file[ed.file_index]->ypos -#define _uxpos file[ed.file_index]->uxpos -#define _uwxpos file[ed.file_index]->uwxpos - -size_t utf8len_n(const char *s) -{ - if (!s) - return 0; - return utf8len(s); -} - -size_t utf8nlen_n(const char *s, size_t n) -{ - if (!s) - return 0; - return utf8nlen(s, n); -} - -size_t utf8len_null(char *s, size_t max_bytes) // Get the number of UTF-8 characters in a non-null terminated string with a known byte length -{ - if (!s) - return 0; - char *ptr = s; - utf8_int32_t cp=0; - size_t ulen = 0; - while (*ptr != '\0' && ulen < max_bytes) - { - ptr = utf8codepoint(ptr, &cp); // Get a pointer to the next codepoint - ulen++; // Increase the Unicode character counter - } - return ulen; -} - -size_t strlen_n(const char *s) -{ - if (!s) - return 0; - return strlen(s); -} - -int vt_settings(bool enabled) -{ -#ifdef _WIN32 - DWORD lmode; // Process ANSI escape sequences - - if (!GetConsoleMode(hStdout, &lmode)) - return 0; - if (enabled) - lmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING & ~DISABLE_NEWLINE_AUTO_RETURN; - else - lmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN; - - return SetConsoleMode(hStdout, lmode); -#endif - return 0; -} - -/* Safe version of strcpy() and strncpy() */ -char *strncpy_n(char *dest, const char *src, size_t count) -{ - // Better version that str8ncpy() because it always null terminates strings - - if (count) - { - memset(dest, 0, count); - strncat(dest, src, count); - return dest; - } - return NULL; -} - -size_t strrpbrk(char *s, char *find) // Reverse strpbrk, just like strrchr but for multiple characters -{ - size_t findlen = utf8len_n(find); - size_t slen = utf8len_n(s); - for (size_t i = slen; i > 0; i--) - { - for (size_t j = 0; j < findlen; j++) - { - if (s[i - 1] == find[j]) - return i - 1; - } - } - return 0; -} - -void *realloc_n(void *old, size_t old_sz, size_t new_sz) -{ - void *new = malloc(new_sz); - if (!new) - return NULL; - memcpy(new, old, old_sz); - free(old); - return new; -} - -int valid_file_name(char *filename) -{ - return utf8pbrk(filename, "*?\"<>|\x1b") == NULL; -} - -char *remove_quotes(char *s) -{ - size_t len = strlen_n(s); - if (s[0] == '\"' && s[len - 1] == '\"') - { - memmove(s, s + 1, len - 2); - s[len] = '\0'; - } - return s; -} - -int trim_message(char *msg, size_t max_len) -{ - size_t ulen = utf8len(msg); - if (ulen > max_len) - { - msg[max_len] = '\0'; - return 1; - } - return 0; -} - -int set_status_msg(bool display_once, char *msg, ...) -{ - va_list args; - va_start(args, msg); - - ed.status_msg = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(utf8_int32_t)); - if (!ed.status_msg) - return 0; - - size_t copyamount = DEFAULT_ALLOC_SIZE * sizeof(utf8_int32_t); - vsnprintf(ed.status_msg, copyamount, msg, args); - trim_message(ed.status_msg, ed.xsize - (fullCursorInfoDisplay ? 45 : 20)); - - ed.dirty = true; - ed.displayStatusOnce = display_once; - return 1; -} - -int clear_status_msg() -{ - if (ed.status_msg != NULL) - free(ed.status_msg); - - ed.status_msg = NULL; - ed.dirty = true; - return 1; -} - -int last_token_position(char *s, const char *token) -{ - - int lastpos = -1; - if (!s || !token) - return lastpos; - - for (size_t i = 0; i < strlen_n(s); i++) - { - for (size_t j = 0; j < strlen_n(token); j++) - { - if (s[i] == token[j]) - lastpos = i; - } - } - return lastpos; -} - -char *last_token(char *tok, const char *char_token) -{ - if (!tok || !char_token) - return tok; - - int pos = last_token_position(tok, char_token); - return tok + pos + 1; -} - -int allocate_buffer(File **tstack) -{ - *tstack = calloc(1, sizeof(File)); - (*tstack)->file_flags = IS_UNTITLED; - - (*tstack)->filename = calloc(MAX_PATH * sizeof(utf8_int32_t) + 1, sizeof(char)); - memcpy((*tstack)->filename, default_filename, MAX_PATH); - - (*tstack)->fwrite_time = time(NULL); - (*tstack)->fread_time = time(NULL); - (*tstack)->language = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); - memcpy((*tstack)->language, default_language, utf8len_n(default_language)); - (*tstack)->linenumber_wide = 3; - (*tstack)->linenumber_padding = 1; - (*tstack)->linecount = 0; - (*tstack)->xpos = 0; - (*tstack)->ypos = 1; - (*tstack)->size = 0; - (*tstack)->encoding = ENCODING_UTF8; - (*tstack)->encoding_bom_len = 0; - (*tstack)->post_load_rendering = true; - - (*tstack)->line = calloc(DEFAULT_ALLOC_LINES, sizeof(Line *)); - - for (size_t i = 0; i <= DEFAULT_ALLOC_LINES; i++) - create_line(*tstack, i); - - (*tstack)->line[0]->str = " Illegal row number. Report this issue to the GitHub repository."; // If for some reason line 0 is accessed - - (*tstack)->newline = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(char)); - memcpy((*tstack)->newline, default_newline, utf8len_n(default_newline)); - - return 1; -} - -int free_buffer(File **tstack) -{ - - for (size_t i = 1; i < (*tstack)->alloc_lines; i++) - { - free((*tstack)->line[i]->render); - free((*tstack)->line[i]->str); - free((*tstack)->line[i]); - } - - // free((*tstack)->line); - - free((*tstack)->newline); - free((*tstack)->filename); - free((*tstack)->language); - - /* free((*tstack)->compilerinfo.path); - free((*tstack)->compilerinfo.flags); - free((*tstack)->compilerinfo.output); - - free((*tstack)->syntaxinfo.syntax_lang); - free((*tstack)->syntaxinfo.syntax_file); - free((*tstack)->syntaxinfo.separators); - free((*tstack)->syntaxinfo.comments); - - for (int i = 0; i < (*tstack)->syntaxinfo.keyword_count; i++) - { - free((*tstack)->syntaxinfo.keywords[i]); - } - - for (int i = 0; i < (*tstack)->syntaxinfo.comment_count; i++) - { - free((*tstack)->syntaxinfo.comments[i]); - } +void quit_newtrodit(File *tstack); +int handle_keystrokes(InputUTF8 ch, File *tstack); +int editor_main(); - free((*tstack)->syntaxinfo.keywords); - free((*tstack)->syntaxinfo.color); - free((*tstack)->syntaxinfo.comments); */ - return 1; -} +#endif // NEWTRODIT_H \ No newline at end of file diff --git a/src/newtrodit_core.c b/src/newtrodit_core.c new file mode 100644 index 0000000..13f26b0 --- /dev/null +++ b/src/newtrodit_core.c @@ -0,0 +1,180 @@ +#include "newtrodit_core.h" + +const int DEFAULT_ALLOC_SIZE = 512; +const size_t LINE_SIZE = 64; +const size_t DEFAULT_ALLOC_LINES = 10; +const size_t LINE_Y_INCREASE = 5; + +size_t utf8len_n(const char *s) +{ + if (!s) + return 0; + return utf8len(s); +} + +size_t utf8nlen_n(const char *s, size_t n) +{ + if (!s) + return 0; + return utf8nlen(s, n); +} + +size_t utf8len_null(const char *s, size_t max_bytes) // Get the number of UTF-8 characters in a non-null terminated string with a known byte length +{ + if (!s) + return 0; + const char *ptr = s; + utf8_int32_t cp = 0; + size_t ulen = 0; + while (*ptr != '\0' && ulen < max_bytes) + { + ptr = utf8codepoint(ptr, &cp); // Get a pointer to the next codepoint + ulen++; // Increase the Unicode character counter + } + return ulen; +} + +size_t strlen_n(const char *s) +{ + if (!s) + return 0; + return strlen(s); +} + +int vt_settings(bool enabled) +{ +#ifdef _WIN32 + DWORD lmode; // Process ANSI escape sequences + + if (!GetConsoleMode(hStdout, &lmode)) + return 0; + if (enabled) + lmode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING & ~DISABLE_NEWLINE_AUTO_RETURN; + else + lmode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN; + + return SetConsoleMode(hStdout, lmode); +#endif + return 0; +} + +/* Safe version of strcpy() and strncpy() */ +char *strncpy_n(char *dest, const char *src, size_t count) +{ + // Better version that str8ncpy() because it always null terminates strings + + if (count) + { + memset(dest, 0, count); + strncat(dest, src, count); + return dest; + } + return NULL; +} + +size_t strrpbrk(const char *s, const char *find) // Reverse strpbrk, just like strrchr but for multiple characters +{ + size_t findlen = utf8len_n(find); + size_t slen = utf8len_n(s); + for (size_t i = slen; i > 0; i--) + { + for (size_t j = 0; j < findlen; j++) + { + if (s[i - 1] == find[j]) + return i - 1; + } + } + return 0; +} + +void *realloc_n(void *old, size_t old_sz, size_t new_sz) +{ + void *new = malloc(new_sz); + if (!new) + return NULL; + memcpy(new, old, old_sz); + free(old); + return new; +} + +int valid_file_name(const char *filename) +{ + return utf8pbrk(filename, "*?\"<>|\x1b") == NULL; +} + +char *remove_quotes(char *s) +{ + size_t len = strlen_n(s); + if (s[0] == '\"' && s[len - 1] == '\"') + { + memmove(s, s + 1, len - 2); + s[len] = '\0'; + } + return s; +} + +int trim_message(char *msg, size_t max_len) +{ + size_t ulen = utf8len(msg); + if (ulen > max_len) + { + msg[max_len] = '\0'; + return 1; + } + return 0; +} + +int set_status_msg(bool display_once, char *msg, ...) +{ + va_list args; + va_start(args, msg); + + ed.status_msg = calloc(DEFAULT_ALLOC_SIZE + 1, sizeof(utf8_int32_t)); + if (!ed.status_msg) + return 0; + + size_t copyamount = DEFAULT_ALLOC_SIZE * sizeof(utf8_int32_t); + vsnprintf(ed.status_msg, copyamount, msg, args); + trim_message(ed.status_msg, ed.xsize - (fullCursorInfoDisplay ? 45 : 20)); + + ed.dirty = true; + ed.displayStatusOnce = display_once; + return 1; +} + +int clear_status_msg() +{ + if (ed.status_msg != NULL) + free(ed.status_msg); + + ed.status_msg = NULL; + ed.dirty = true; + return 1; +} + +int last_token_position(const char *s, const char *token) +{ + + int lastpos = -1; + if (!s || !token) + return lastpos; + + for (size_t i = 0; i < strlen_n(s); i++) + { + for (size_t j = 0; j < strlen_n(token); j++) + { + if (s[i] == token[j]) + lastpos = i; + } + } + return lastpos; +} + +char *last_token(char *tok, const char *char_token) +{ + if (!tok || !char_token) + return NULL; + + int pos = last_token_position(tok, char_token); + return tok + pos + 1; +} diff --git a/src/newtrodit_core.h b/src/newtrodit_core.h new file mode 100644 index 0000000..2afc36b --- /dev/null +++ b/src/newtrodit_core.h @@ -0,0 +1,170 @@ +#ifndef NEWTRODIT_CORE_H +#define NEWTRODIT_CORE_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "include/wcwidth.h" +#include "utf8/utf8.h" + +#ifdef _WIN32 +#include +#endif + + +extern const int DEFAULT_ALLOC_SIZE; +extern const size_t LINE_SIZE; +extern const size_t DEFAULT_ALLOC_LINES; + +extern const size_t LINE_Y_INCREASE; + +#if !defined ENABLE_VIRTUAL_TERMINAL_PROCESSING || !defined DISABLE_NEWLINE_AUTO_RETURN +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#define DISABLE_NEWLINE_AUTO_RETURN 0x0008 +#endif + +enum file_flags_modifier +{ + IS_MODIFIED = 1, + IS_SAVED = 2, + IS_UNTITLED = 4, + IS_READONLY = 8, +}; + +enum unicode_encodings +{ + ENCODING_UTF8 = 1, + ENCODING_UTF16LE = 2, + ENCODING_UTF16BE = 3, + ENCODING_UTF8BOM = 4, + ENCODING_UTF32LE = 5, + ENCODING_UTF32BE = 6, +}; + +const char newtrodit_version[] = "1.0"; +const char newtrodit_date[] = "2024/09/05"; + +typedef struct Line +{ + char *str; // Buffer that contains the line + char *render; + + size_t bufx; // Allocated line size + size_t render_bufx; // Allocated render size + + size_t len; // Line Length + size_t rlen; // Rendered length + size_t rnlen; // Rendered length without padding + + size_t ulen; // UTF-8 length +} Line; + +typedef struct Position +{ + size_t x; + size_t y; +} Position; + +typedef struct Select +{ + Position start; + Position end; + bool is_selected; +} Select; + +typedef struct File +{ + char *filename; + char *fullpath; + char *language; // Language (e.g: PowerShell, C, C++, etc.) + + // File information + size_t xpos, ypos; + size_t uxpos; // UTF-8 X position + size_t uwxpos; // UTF-8 width position + + Line **line; // Store each line file + size_t alloc_lines; + size_t linecount; + long long size; + + size_t linenumber_wide; + size_t linenumber_padding; + + char *newline; + unsigned int file_flags; + + unsigned int encoding; + size_t encoding_bom_len; + bool post_load_rendering; + + time_t fwrite_time; + time_t fread_time; + Select selection; + Position begin_display; + Position scroll_pos; +} File; // File information. This is used to store all the information about the file. + +typedef struct Editor +{ + size_t xsize, ysize; // Window size + int open_files; // Number of files open + int file_index; // Current file index + + char *log_file_name; + char *status_msg; + bool useLogFile; + bool lineNumbers; + bool dirty; + bool displayStatusOnce; + +} Editor; // Editor information + +typedef struct Color +{ + int r, g, b; + bool background; +} Color; + +Editor ed; +File **file; + +#ifdef _WIN32 +#include "win32/graphics_win32.h" +const char PATHDELIMS[] = "\\/"; // Set the path delimiters for Windows and Linux +#else +#include "linux/graphics_linux.h " +const char PATHDELIMS[] = "/"; +#endif + +#define _xpos file[ed.file_index]->xpos +#define _ypos file[ed.file_index]->ypos +#define _uxpos file[ed.file_index]->uxpos +#define _uwxpos file[ed.file_index]->uwxpos + +size_t utf8len_n(const char *s); +size_t utf8nlen_n(const char *s, size_t max_upos); +size_t utf8len_null(const char *s, size_t max_bytes); // Get the number of UTF-8 characters in a non-null terminated string with a known byte length +size_t strlen_n(const char *s); +int vt_settings(bool enabled); +char *strncpy_n(char *dest, const char *src, size_t count); +size_t strrpbrk(const char *s, const char *find); // Reverse strpbrk, just like strrchr but for multiple characters +void *realloc_n(void *old, size_t old_sz, size_t new_sz); +int valid_file_name(const char *filename); +char *remove_quotes(char *s); +int trim_message(char *msg, size_t max_len); +int set_status_msg(bool display_once, char *msg, ...); +int clear_status_msg(); +int last_token_position(const char *s, const char *token); +char *last_token(char *tok, const char *char_token); + +#endif // NEWTRODIT_CORE_H \ No newline at end of file diff --git a/src/newtrodit_gui.c b/src/newtrodit_gui.c index f065b85..64ddab4 100644 --- a/src/newtrodit_gui.c +++ b/src/newtrodit_gui.c @@ -1,3 +1,4 @@ +#include "newtrodit_gui.h" /* void TopHelpBar() { @@ -68,6 +69,21 @@ void print_message(const char *str, ...) return; } + +void display_status(File *tstack, char *status_msg) +{ + display_bottom_bar(status_msg); + display_cursor_pos(tstack, status_msg); +} + +void function_aborted(File *tstack, char *status_msg) +{ + print_message(NEWTRODIT_FUNCTION_ABORTED); + getch_n(); + display_status(tstack, status_msg); + return; +} + int set_display_pos(File *tstack) { if (tstack->xpos - (ed.lineNumbers ? (tstack->linenumber_wide + tstack->linenumber_padding) : 0) > ed.xsize - 1) @@ -111,19 +127,6 @@ void display_cursor_pos(File *tstack, char *status) */ } -void display_status(File *tstack, char *status_msg) -{ - display_bottom_bar(status_msg); - display_cursor_pos(tstack, status_msg); -} - -void function_aborted(File *tstack, char *status_msg) -{ - print_message(NEWTRODIT_FUNCTION_ABORTED); - getch_n(); - display_status(tstack, status_msg); - return; -} void load_line_numbering(File *tstack) { @@ -243,23 +246,6 @@ int yes_no_prompt() } } -void quit_newtrodit(File *tstack) -{ - if (tstack->file_flags & IS_MODIFIED) - { - print_message(NEWTRODIT_PROMPT_SAVE_MODIFIED_FILE); - if (yes_no_prompt()) - save_file(tstack, tstack->filename, !!(tstack->file_flags & IS_UNTITLED)); // tstack->file_flags &~ IS_SAVED isn't needed due to being redundant - } - print_message(NEWTRODIT_PROMPT_QUIT); - if (yes_no_prompt()) - { - end_editor(); - exit(1); - } - ed.dirty = true; -} - int display_line(File *tstack, size_t linenum, size_t rcount) { gotoxy(file[ed.file_index]->linenumber_wide + file[ed.file_index]->linenumber_padding, tstack->scroll_pos.y); diff --git a/src/newtrodit_gui.h b/src/newtrodit_gui.h index 7d95af4..66a9ac5 100644 --- a/src/newtrodit_gui.h +++ b/src/newtrodit_gui.h @@ -1,18 +1,39 @@ +#ifndef NEWTRODIT_GUI_H +#define NEWTRODIT_GUI_H +#include +#include "newtrodit_core.h" +#include "input.h" + Color title_bg_color = {.r = 204, .g = 204, .b = 204, .background = true}; Color title_font_color = {.r = 12, .g = 12, .b = 12, .background = false}; Color fg_color = {.r = 204, .g = 204, .b = 204, .background = false}; Color bg_color = {.r = 12, .g = 12, .b = 12, .background = true}; -Color line_number_bg_color = {.r = 224, .g = 130, .b = 80 , .background = true}; +Color line_number_bg_color = {.r = 224, .g = 130, .b = 80, .background = true}; Color line_number_font_color = {.r = 30, .g = 30, .b = 30, .background = false}; -void print_message(const char *str, ...); +/* void print_message(const char *str, ...); int save_file(File *tstack, char *savefile, bool saveDialog); -int getch_n(); - -#include "newtrodit_gui.c" - - - - +int getch_n(); */ +void newtrodit_name_load(); +int center_text(char *text, int yps); +void display_file_type(File *tstack); +void display_bottom_bar(char *status); +void print_message(const char *str, ...); +void display_status(File *tstack, char *status_msg); +void function_aborted(File *tstack, char *status_msg); +int set_display_pos(File *tstack); +void display_cursor_pos(File *tstack, char *status); +void load_line_numbering(File *tstack); +void display_line_numbering(File *tstack, size_t ypos); +void load_all_newtrodit(File *tstack, char *status); +void set_cursor_settings(int visible, int size); +int yes_no_prompt(); +int display_line(File *tstack, size_t linenum, size_t rcount); +int set_scroll(File *tstack); +int increase_scroll(File *tstack, size_t amount); +int decrease_scroll(File *tstack, size_t amount); +int toggle_option(int *option, char *msg); + +#endif diff --git a/src/unicode.c b/src/unicode.c index 8f637c3..8bd5a92 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -1,6 +1,4 @@ -#ifndef CP_UTF8 -#define CP_UTF8 65001 -#endif +#include "unicode.h" int get_file_encoding(char *header, size_t header_size, size_t *p_bom_len) { @@ -145,7 +143,7 @@ size_t next_char_uwlen(const char *s, size_t xps) { utf8_int32_t uc = 0; utf8codepoint(s + xps, &uc); - set_status_msg(false, "[U+%04x '%c']", uc, uc); + set_status_msg(false, "[U+%04x '%c']", uc, uc); return codepoint_width(NULL, uc); } @@ -154,35 +152,33 @@ size_t previous_char_uwlen(const char *s, size_t xps) { utf8_int32_t uc = 0; utf8rcodepoint(s + xps, &uc); - set_status_msg(false, "{U+%04x '%c'}", uc, uc); + set_status_msg(false, "{U+%04x '%c'}", uc, uc); return codepoint_width(NULL, uc); } -size_t previous_char_xpos(char *s, size_t *xpos) +size_t next_char_xpos(const char *s, size_t *xpos) { utf8_int32_t cp = 0; - char *prev_ptr = s + *xpos; if (*xpos > 0) { - prev_ptr = utf8rcodepoint(s + *xpos, &cp); - *xpos = prev_ptr - s; - /* printf("pdif: %zu", (prev_ptr-s)); - getch(); */ + char *next_ptr = utf8codepoint(s + *xpos, &cp); + set_status_msg(true, "Increase: %zu, 0x%04x", next_ptr - s, cp); + *xpos = next_ptr - s; return *xpos; } return 0; } -size_t next_char_xpos(char *s, size_t *xpos) +size_t previous_char_xpos(const char *s, size_t *xpos) { utf8_int32_t cp = 0; - char *next_ptr; if (*xpos > 0) { - next_ptr = utf8codepoint(s + *xpos, &cp); - set_status_msg(true, "Increase: %zu, 0x%04x", next_ptr - s, cp); - *xpos = next_ptr-s; + char *prev_ptr = utf8rcodepoint(s + *xpos, &cp); + *xpos = prev_ptr - s; + /* printf("pdif: %zu", (prev_ptr-s)); + getch(); */ return *xpos; } return 0; @@ -196,7 +192,7 @@ size_t utf8getxpos(char *s, size_t uxpos) { if (!valid_position(s, ptr - s)) return 0; - + ptr = utf8rcodepoint(ptr, &out_cp); } return ptr - s; @@ -206,7 +202,7 @@ char *insert_utf8_char(Line *line, int32_t value, size_t index) { if (line->len + sizeof(int32_t) > line->bufx - 1) increase_line(line, LINE_SIZE); - + /* size_t len_check[4] = {0}; for (size_t i = 0; i < 4; i++) { @@ -238,7 +234,6 @@ char *insert_str(Line *line, char *s2, size_t pos) size_t l2 = strlen_n(s2); if (line->len + l2 > line->bufx - 1) increase_line(line, l2); - memmove(line->str + pos + l2, line->str + pos, line->len); memcpy(line->str + pos, s2, l2); diff --git a/src/unicode.h b/src/unicode.h new file mode 100644 index 0000000..db08bd7 --- /dev/null +++ b/src/unicode.h @@ -0,0 +1,33 @@ +#ifndef UNICODE_H +#define UNICODE_H +#include "utf8/utf8.h" +#include "newtrodit_core.h" +#include "line.h" + +#ifndef CP_UTF8 +#define CP_UTF8 65001 +#endif + +int get_file_encoding(char *header, size_t header_size, size_t *p_bom_len); +size_t codepoint_len(int32_t value); +int valid_position(char *s, size_t pos); +size_t utf8wnlen(char *s, size_t max_upos); +size_t utf8wlen(char *s); +size_t correct_position(Line *line, size_t *xpos, size_t *uxpos, size_t *uwxpos); +char *int32_to_char_array(utf8_int32_t value, char *output); +int codepoint_width(const char *utf8_char, utf8_int32_t val); +size_t next_char_uwlen(const char *s, size_t xps); +size_t previous_char_uwlen(const char *s, size_t xps); +size_t next_char_xpos(const char *s, size_t *xpos); +size_t previous_char_xpos(const char *s, size_t *xpos); +size_t utf8getxpos(char *s, size_t uxpos); +char *insert_utf8_char(Line *line, int32_t value, size_t index); +char *insert_str(Line *line, char *s2, size_t pos); +char *delete_str(Line *line, size_t pos, size_t count); +char *delete_char(Line *line, size_t pos); +int display_char(utf8_int32_t chr, FILE *fp); +uint16_t swap_le_be(uint16_t num); +int is_utf16(const unsigned char *header, size_t header_size, size_t file_size); +size_t utf16_to_utf8(const uint16_t *u16_str, size_t u16_str_len, uint8_t *u8_str, size_t u8_str_size, bool big_endian); + +#endif // UNICODE_H \ No newline at end of file diff --git a/src/utf8/LICENSE b/src/utf8/LICENSE new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/src/utf8/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/src/utf8/README.md b/src/utf8/README.md new file mode 100644 index 0000000..8d93ce2 --- /dev/null +++ b/src/utf8/README.md @@ -0,0 +1,389 @@ +# 📚 utf8.. + + +[![Actions Status](https://github.com/sheredom/utf8.h/workflows/CMake/badge.svg)](https://github.com/sheredom/utf8.h/actions) +[![Build status](https://ci.appveyor.com/api/projects/status/phfjjahhs9j4gxvs?svg=true)](https://ci.appveyor.com/project/sheredom/utf8-h) +[![Sponsor](https://img.shields.io/badge/💜-sponsor-blueviolet)](https://github.com/sponsors/sheredom. + + +A simple one header solution to supporting utf8 strings in C and C++. + + +Functions provided from the C header string.h but with a utf8* prefix instead of the str* prefix. + + +[API function docs](#api-function-docs. + + +string.h | utf8.h | complete | C++14 constexpr +---------|--------|---------|--------- +strcat | utf8cat | ✔ | +strchr | utf8chr | ✔ | ✔ +strcmp | utf8cmp | ✔ | ✔ +strcoll | utf8coll | | +strcpy | utf8cpy | ✔ | +strcspn | utf8cspn | ✔ | ✔ +strdup | utf8dup | ✔ | +strfry | utf8fry | | +strlen | utf8len | ✔ | ✔ +strnlen | utf8nlen | ✔ | ✔ +strncat | utf8ncat | ✔ | +strncmp | utf8ncmp | ✔ | ✔ +strncpy | utf8ncpy | ✔ | +strndup | utf8ndup | ✔ | +strpbrk | utf8pbrk | ✔ | ✔ +strrchr | utf8rchr | ✔ | ✔ +strsep | utf8sep | | +strspn | utf8spn | ✔ | ✔ +strstr | utf8str | ✔ | ✔ +strtok | utf8tok | | +strxfrm | utf8xfrm | . + + +Functions provided from the C header strings.h but with a utf8* prefix instead of the str* prefix. + + +strings.h | utf8.h | complete | C++14 constexpr +----------|--------|---------|--------- +strcasecmp | utf8casecmp | ~~✔~~ | ✔ +strncasecmp | utf8ncasecmp | ~~✔~~ | ✔ +strcasestr | utf8casestr | ~~✔~~ | ✔. + + +Functions provided that are unique to utf8.h. + + +utf8.h | complete | C++14 constexpr +-------|---------|--------- +utf8codepoint | ✔ | ✔ +utf8rcodepoint | ✔ | ✔ +utf8size | ✔ | ✔ +utf8size\_lazy | ✔ | ✔ +utf8nsize\_lazy | ✔ | ✔ +utf8valid | ✔ | ✔ +utf8nvalid | ✔ | ✔ +utf8makevalid | ✔ | +utf8codepointsize | ✔ | ✔ +utf8catcodepoint | ✔ | +utf8isupper | ~~✔~~ | ✔ +utf8islower | ~~✔~~ | ✔ +utf8lwr | ~~✔~~ | +utf8upr | ~~✔~~ | +utf8lwrcodepoint | ~~✔~~ | ✔ +utf8uprcodepoint | ~~✔~~ | ✔. + + +## Usage #. + + +Just `#include "utf8.h"` in your code. + + +The current supported platforms are Linux, macOS and Windows. + + +The current supported compilers are gcc, clang, MSVC's cl.exe, and clang-cl.exe. + + +## Design #. + + +The utf8.h API matches the string.h API as much as possible by design. There are a few major differences though. + + +utf8.h uses char8_t* in C++ 20 instead of char. + + +Anywhere in the string.h or strings.h documentation where it refers to 'bytes' I have changed that to utf8 codepoints. For instance, utf8len will return the number of utf8 codepoints in a utf8 string - which does not necessarily equate to the number of bytes. + + +## API function docs #. + + +```c +int utf8casecmp(const void *src1, const void *src2); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, `src1 == src2`, +`src1 > src2` respectively, case insensitive. + + +```c +void *utf8cat(void *dst, const void *src); +``` +Append the utf8 string `src` onto the utf8 string `dst`. + + +```c +void *utf8chr(const void *src, utf8_int32_t chr); +``` +Find the first match of the utf8 codepoint `chr` in the utf8 string `src`. + + +```c +int utf8cmp(const void *src1, const void *src2); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, +`src1 == src2`, `src1 > src2` respectively. + + +```c +void *utf8cpy(void *dst, const void *src); +``` +Copy the utf8 string `src` onto the memory allocated in `dst`. + + +```c +size_t utf8cspn(const void *src, const void *reject); +``` +Number of utf8 codepoints in the utf8 string `src` that consists entirely +of utf8 codepoints not from the utf8 string `reject`. + + +```c +void *utf8dup(const void *src); +``` +Duplicate the utf8 string `src` by getting its size, `malloc`ing a new buffer +copying over the data, and returning that. Or 0 if `malloc` failed. + + +```c +size_t utf8len(const void *str); +``` +Number of utf8 codepoints in the utf8 string `str`, +**excluding** the null terminating byte. + + +```c +size_t utf8nlen(const void *str, size_t n); +``` +Similar to `utf8len`, except that only at most `n` bytes of `src` are looked. + + +```c +int utf8ncasecmp(const void *src1, const void *src2, size_t n); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, `src1 == src2`, +`src1 > src2` respectively, case insensitive. Checking at most `n` +bytes of each utf8 string. + + +```c +void *utf8ncat(void *dst, const void *src, size_t n); +``` +Append the utf8 string `src` onto the utf8 string `dst`, +writing at most `n+1` bytes. Can produce an invalid utf8 +string if `n` falls partway through a utf8 codepoint. + + +```c +int utf8ncmp(const void *src1, const void *src2, size_t n); +``` +Return less than 0, 0, greater than 0 if `src1 < src2`, +`src1 == src2`, `src1 > src2` respectively. Checking at most `n` +bytes of each utf8 string. + + +```c +void *utf8ncpy(void *dst, const void *src, size_t n); +``` +Copy the utf8 string `src` onto the memory allocated in `dst`. +Copies at most `n` bytes. If `n` falls partway through a utf8 +codepoint, or if `dst` doesn't have enough room for a null +terminator, the final string will be cut short to preserve +utf8 validity. + + +```c +void *utf8pbrk(const void *str, const void *accept); +``` +Locates the first occurrence in the utf8 string `str` of any byte in the +utf8 string `accept`, or 0 if no match was found. + + +```c +void *utf8rchr(const void *src, utf8_int32_t chr); +``` +Find the last match of the utf8 codepoint `chr` in the utf8 string `src`. + + +```c +size_t utf8size(const void *str); +``` +Number of bytes in the utf8 string `str`, +including the null terminating byte. + + +```c +size_t utf8size_lazy(const void *str); +``` +Similar to `utf8size`, except that the null terminating byte is **excluded**. + + +```c +size_t utf8nsize_lazy(const void *str, size_t n); +``` +Similar to `utf8size`, except that only at most `n` bytes of `src` are looked and +the null terminating byte is **excluded**. + + +```c +size_t utf8spn(const void *src, const void *accept); +``` +Number of utf8 codepoints in the utf8 string `src` that consists entirely +of utf8 codepoints from the utf8 string `accept`. + + +```c +void *utf8str(const void *haystack, const void *needle); +``` +The position of the utf8 string `needle` in the utf8 string `haystack`. + + +```c +void *utf8casestr(const void *haystack, const void *needle); +``` +The position of the utf8 string `needle` in the utf8 string `haystack`, +case insensitive. + + +```c +void *utf8valid(const void *str); +``` +Return 0 on success, or the position of the invalid utf8 codepoint on failure. + + +```c +void *utf8nvalid(const void *str, size_t n); +``` +Similar to `utf8valid`, except that only at most `n` bytes of `src` are looked. + + +```c +int utf8makevalid(void *str, utf8_int32_t replacement); +``` +Return 0 on success. Makes the `str` valid by replacing invalid sequences with +the 1-byte `replacement` codepoint. + + +```c +void *utf8codepoint(const void *str, utf8_int32_t *out_codepoint); +``` +Sets out_codepoint to the current utf8 codepoint in `str`, and returns the +address of the next utf8 codepoint after the current one in `str`. + + +```c +void *utf8rcodepoint(const void *str, utf8_int32_t *out_codepoint); +``` +Sets out_codepoint to the current utf8 codepoint in `str`, and returns the +address of the previous utf8 codepoint before the current one in `str`. + + +```c +size_t utf8codepointsize(utf8_int32_t chr); +``` +Returns the size of the given codepoint in bytes. + + +```c +void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n); +``` +Write a codepoint to the given string, and return the address to the next +place after the written codepoint. Pass how many bytes left in the buffer to +n. If there is not enough space for the codepoint, this function returns +null. + + +```c +int utf8islower(utf8_int32_t chr); +``` +Returns 1 if the given character is lowercase, or 0 if it is not. + + +```c +int utf8isupper(utf8_int32_t chr); +``` +Returns 1 if the given character is uppercase, or 0 if it is not. + + +```c +void utf8lwr(void *utf8_restrict str); +``` +Transform the given string into all lowercase codepoints. + + +```c +void utf8upr(void *utf8_restrict str); +``` +Transform the given string into all uppercase codepoints. + + +```c +utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); +``` +Make a codepoint lower case if possible. + + +```c +utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); +``` +Make a codepoint upper case if possible. + + +## Codepoint Cas. + + +Various functions provided will do case insensitive compares, or transform utf8 +strings from one case to another. Given the vastness of unicode, and the authors +lack of understanding beyond latin codepoints on whether case means anything, +the following categories are the only ones that will be checked in case +insensitive code. + + +* [ASCII](https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)) +* [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)) +* [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +* [Latin Extended-B](https://en.wikipedia.org/wiki/Latin_Extended-B) +* [Greek and Coptic](https://en.wikipedia.org/wiki/Greek_and_Coptic) +* [Cyrillic](https://en.wikipedia.org/wiki/Cyrillic_(Unicode_block). + + +## Todo #. + + +- Implement utf8coll (akin to strcoll). +- Implement utf8fry (akin to strfry). +- Investigate adding dst buffer sizes for utf8cpy and utf8cat to catch overwrites (as suggested by [@FlohOfWoe](https://twitter.com/FlohOfWoe) in https://twitter.com/FlohOfWoe/status/618669237771608064. + + +## License #. + + +This is free and unencumbered software released into the public domain. + + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +For more information, please refer to diff --git a/src/utf8/appveyor.yml b/src/utf8/appveyor.yml new file mode 100644 index 0000000..cba55a0 --- /dev/null +++ b/src/utf8/appveyor.yml @@ -0,0 +1,51 @@ +version: '{build}' + +skip_tags: true +skip_branch_with_pr: true + +install: [] + +environment: + matrix: + - VSVERSION: Visual Studio 9 2008 + - VSVERSION: Visual Studio 10 2010 + - VSVERSION: Visual Studio 11 2012 + - VSVERSION: Visual Studio 12 2013 + - VSVERSION: Visual Studio 14 2015 + - VSVERSION: Visual Studio 15 2017 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + - VSVERSION: Visual Studio 16 2019 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 + +platform: + - Win32 + - x64 + +matrix: + exclude: + - platform: x64 + VSVERSION: Visual Studio 9 2008 + # VS 2019 / 64-bit is tested in GitHub Actions instead. + - platform: x64 + VSVERSION: Visual Studio 16 2019 + +configuration: + - Debug + # Removed to reduce configuration explosion. + # - RelWithDebInfo + # - MinSizeRel + - Release + +build_script: + - md build + - cd build + - if NOT "%VSVERSION%"=="Visual Studio 16 2019" if "%PLATFORM%"=="x64" cmake -G "%VSVERSION% Win64" ../test + - if NOT "%VSVERSION%"=="Visual Studio 16 2019" if "%PLATFORM%"=="Win32" cmake -G "%VSVERSION%" ../test + - if "%VSVERSION%"=="Visual Studio 16 2019" cmake -G "%VSVERSION%" -A "%PLATFORM%" ../test + - msbuild /m /p:Configuration="%CONFIGURATION%" /p:Platform="%PLATFORM%" utf8.sln + - copy %CONFIGURATION%\utf8_test.exe utf8_test.exe + - copy %CONFIGURATION%\utf8_no_malloc_test.exe utf8_no_malloc_test.exe + +test_script: + - utf8_test.exe + - utf8_no_malloc_test.exe diff --git a/src/utf8/test/CMakeLists.txt b/src/utf8/test/CMakeLists.txt new file mode 100644 index 0000000..a89f926 --- /dev/null +++ b/src/utf8/test/CMakeLists.txt @@ -0,0 +1,117 @@ +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# For more information, please refer to + +project(utf8) +cmake_minimum_required(VERSION 2.8.12) + +set(UTF8_USE_SANITIZER "" CACHE STRING "Set which Clang Sanitizer to use") + +macro(add_sanitizer target) + if(NOT "${UTF8_USE_SANITIZER}" STREQUAL "") + target_compile_options(${target} PUBLIC -fno-omit-frame-pointer -fsanitize=${UTF8_USE_SANITIZER}) + target_link_options(${target} PUBLIC -fno-omit-frame-pointer -fsanitize=${UTF8_USE_SANITIZER}) + endif() +endmacro() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) + +add_executable(utf8_test main.c) +add_sanitizer(utf8_test) + +add_executable(utf8_no_malloc_test no_malloc.c) +add_sanitizer(utf8_no_malloc_test) + +add_executable(utf8_test_c90 test.c) +add_sanitizer(utf8_test_c90) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(utf8_test_c90 PUBLIC "-std=c90") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") + else() + target_compile_options(utf8_test_c90 PUBLIC "-std=c90") + endif() +endif() + +add_executable(utf8_test_c99 test.c) +add_sanitizer(utf8_test_c99) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(utf8_test_c99 PUBLIC "-std=c99") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") + else() + target_compile_options(utf8_test_c99 PUBLIC "-std=c99") + endif() +endif() + +add_executable(utf8_test_c11 test.c) +add_sanitizer(utf8_test_c11) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + target_compile_options(utf8_test_c11 PUBLIC "-std=c11") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") + else() + target_compile_options(utf8_test_c11 PUBLIC "-std=c11") + endif() +endif() + +add_executable(utf8_test_cpp11 test.cpp) +add_sanitizer(utf8_test_cpp11) +set_target_properties(utf8_test_cpp11 PROPERTIES CXX_STANDARD 11) + +add_executable(utf8_test_cpp14 test.cpp) +add_sanitizer(utf8_test_cpp14) +set_target_properties(utf8_test_cpp14 PROPERTIES CXX_STANDARD 14) + +add_executable(utf8_test_cpp17 test.cpp) +add_sanitizer(utf8_test_cpp17) +set_target_properties(utf8_test_cpp17 PROPERTIES CXX_STANDARD 17) + +add_executable(utf8_test_cpp20 test.cpp) +add_sanitizer(utf8_test_cpp20) +set_target_properties(utf8_test_cpp20 PROPERTIES CXX_STANDARD 20) + +if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "-Wall -Wextra -Werror" + ) +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "-Wall -Wextra -Weverything -Werror -Wno-c++98-compat" + ) +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "/Wall /WX /wd4514" + ) + if(${MSVC_VERSION} VERSION_GREATER "15.7") + set_source_files_properties(test.c test.cpp PROPERTIES + COMPILE_FLAGS "/Zc:__cplusplus" + ) + endif() +else() + message(WARNING "Unknown compiler '${CMAKE_C_COMPILER_ID}'!") +endif() diff --git a/src/utf8/test/main.c b/src/utf8/test/main.c new file mode 100644 index 0000000..3739fbe --- /dev/null +++ b/src/utf8/test/main.c @@ -0,0 +1,1669 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +// include the unit testing framework +#include "utest.h" + +// include the header we are testing +#include "utf8.h" + +const char data[] = { + '\xce', '\x93', '\xce', '\xb1', '\xce', '\xb6', '\xce', '\xad', '\xce', + '\xb5', '\xcf', '\x82', '\x20', '\xce', '\xba', '\xce', '\xb1', '\xe1', + '\xbd', '\xb6', '\x20', '\xce', '\xbc', '\xcf', '\x85', '\xcf', '\x81', + '\xcf', '\x84', '\xce', '\xb9', '\xe1', '\xbd', '\xb2', '\xcf', '\x82', + '\x20', '\xce', '\xb4', '\xe1', '\xbd', '\xb2', '\xce', '\xbd', '\x20', + '\xce', '\xb8', '\xe1', '\xbd', '\xb0', '\x20', '\xce', '\xb2', '\xcf', + '\x81', '\xe1', '\xbf', '\xb6', '\x20', '\xcf', '\x80', '\xce', '\xb9', + '\xe1', '\xbd', '\xb0', '\x20', '\xcf', '\x83', '\xcf', '\x84', '\xe1', + '\xbd', '\xb8', '\x20', '\xcf', '\x87', '\xcf', '\x81', '\xcf', '\x85', + '\xcf', '\x83', '\xce', '\xb1', '\xcf', '\x86', '\xe1', '\xbd', '\xb6', + '\x20', '\xce', '\xbe', '\xce', '\xad', '\xcf', '\x86', '\xcf', '\x89', + '\xcf', '\x84', '\xce', '\xbf', '\x0a', '\0'}; + +const char cmp[] = {'\xce', '\xbc', '\xcf', '\x85', '\0'}; + +const char lt[] = {'\xce', '\x93', '\xce', '\xb1', '\xce', + '\xb6', '\xce', '\xac', '\0'}; + +const char gt[] = {'\xce', '\x93', '\xce', '\xb1', '\xce', + '\xb6', '\xce', '\xae', '\0'}; + +const char spn[] = {'\xce', '\x93', '\xce', '\xb1', '\xce', '\xb6', + '\xce', '\xad', '\xce', '\xb5', '\xcf', '\x82', + '\x20', '\xce', '\xba', '\0'}; + +const char pbrk[] = {'\xcf', '\x82', '\x20', '\xce', '\xb5', '\0'}; + +const char ascii1[] = "I lIke GOATS YARHAR."; +const char ascii2[] = "i LIKE goats yarHAR."; +const char allascii1[] = "abcdefghijklmnopqrstuvwyzABCDEFGHIJKLMNOPQRSTUVWYZ"; +const char allascii2[] = "ABCDEFGHIJKLMNOPQRSTUVWYZabcdefghijklmnopqrstuvwyz"; +const char haystack[] = "foobar"; +const char needle[] = "oba"; +const char endfailneedle[] = "ra"; +const char cspnmultisearch[] = "another test; string|one more"; +const char cspnmultidelims[] = "|;"; +const char spnasciisearch[] = ",,hello,,world"; +const char spnasciidelims[] = ","; + +struct LowerUpperPair { + int lower; + int upper; +}; + +const struct LowerUpperPair lowupPairs[] = { + /* ascii */ + {0x0061, 0x0041}, + {0x0062, 0x0042}, + {0x0063, 0x0043}, + {0x0064, 0x0044}, + {0x0065, 0x0045}, + {0x0066, 0x0046}, + {0x0067, 0x0047}, + {0x0068, 0x0048}, + {0x0069, 0x0049}, + {0x006a, 0x004a}, + {0x006b, 0x004b}, + {0x006c, 0x004c}, + {0x006d, 0x004d}, + {0x006e, 0x004e}, + {0x006f, 0x004f}, + {0x0070, 0x0050}, + {0x0071, 0x0051}, + {0x0072, 0x0052}, + {0x0073, 0x0053}, + {0x0074, 0x0054}, + {0x0075, 0x0055}, + {0x0076, 0x0056}, + {0x0077, 0x0057}, + {0x0078, 0x0058}, + {0x0079, 0x0059}, + {0x007a, 0x005a}, + + /* Latin-1 Supplement */ + {0x00e0, 0x00c0}, + {0x00e1, 0x00c1}, + {0x00e2, 0x00c2}, + {0x00e3, 0x00c3}, + {0x00e4, 0x00c4}, + {0x00e5, 0x00c5}, + {0x00e6, 0x00c6}, + {0x00e7, 0x00c7}, + {0x00e8, 0x00c8}, + {0x00e9, 0x00c9}, + {0x00ea, 0x00ca}, + {0x00eb, 0x00cb}, + {0x00ec, 0x00cc}, + {0x00ed, 0x00cd}, + {0x00ee, 0x00ce}, + {0x00ef, 0x00cf}, + {0x00f0, 0x00d0}, + {0x00f1, 0x00d1}, + {0x00f2, 0x00d2}, + {0x00f3, 0x00d3}, + {0x00f4, 0x00d4}, + {0x00f5, 0x00d5}, + {0x00f6, 0x00d6}, + {0x00f8, 0x00d8}, + {0x00f9, 0x00d9}, + {0x00fa, 0x00da}, + {0x00fb, 0x00db}, + {0x00fc, 0x00dc}, + {0x00fd, 0x00dd}, + {0x00fe, 0x00de}, + {0x00ff, 0x0178}, + + /* Latin Extended-A */ + {0x0101, 0x0100}, + {0x0103, 0x0102}, + {0x0105, 0x0104}, + {0x0107, 0x0106}, + {0x0109, 0x0108}, + {0x010b, 0x010a}, + {0x010d, 0x010c}, + {0x010f, 0x010e}, + {0x0111, 0x0110}, + {0x0113, 0x0112}, + {0x0115, 0x0114}, + {0x0117, 0x0116}, + {0x0119, 0x0118}, + {0x011b, 0x011a}, + {0x011d, 0x011c}, + {0x011f, 0x011e}, + {0x0121, 0x0120}, + {0x0123, 0x0122}, + {0x0125, 0x0124}, + {0x0127, 0x0126}, + {0x0129, 0x0128}, + {0x012b, 0x012a}, + {0x012d, 0x012c}, + {0x012f, 0x012e}, + {0x0133, 0x0132}, + {0x0135, 0x0134}, + {0x0137, 0x0136}, + {0x013a, 0x0139}, + {0x013c, 0x013b}, + {0x013e, 0x013d}, + {0x0140, 0x013f}, + {0x0142, 0x0141}, + {0x0144, 0x0143}, + {0x0146, 0x0145}, + {0x0148, 0x0147}, + {0x014b, 0x014a}, + {0x014d, 0x014c}, + {0x014f, 0x014e}, + {0x0151, 0x0150}, + {0x0153, 0x0152}, + {0x0155, 0x0154}, + {0x0157, 0x0156}, + {0x0159, 0x0158}, + {0x015b, 0x015a}, + {0x015d, 0x015c}, + {0x015f, 0x015e}, + {0x0161, 0x0160}, + {0x0163, 0x0162}, + {0x0165, 0x0164}, + {0x0167, 0x0166}, + {0x0169, 0x0168}, + {0x016b, 0x016a}, + {0x016d, 0x016c}, + {0x016f, 0x016e}, + {0x0171, 0x0170}, + {0x0173, 0x0172}, + {0x0175, 0x0174}, + {0x0177, 0x0176}, + {0x017a, 0x0179}, + {0x017c, 0x017b}, + {0x017e, 0x017d}, + + /* Latin Extended-B */ + {0x0180, 0x0243}, + {0x01dd, 0x018e}, + {0x019a, 0x023d}, + {0x019e, 0x0220}, + {0x0292, 0x01b7}, + {0x01c6, 0x01c4}, + {0x01c9, 0x01c7}, + {0x01cc, 0x01ca}, + {0x01f3, 0x01f1}, + {0x01bf, 0x01f7}, + {0x0183, 0x0182}, + {0x0185, 0x0184}, + {0x0188, 0x0187}, + {0x018c, 0x018b}, + {0x0192, 0x0191}, + {0x0199, 0x0198}, + {0x01a1, 0x01a0}, + {0x01a3, 0x01a2}, + {0x01a5, 0x01a4}, + {0x01a8, 0x01a7}, + {0x01ad, 0x01ac}, + {0x01b0, 0x01af}, + {0x01b4, 0x01b3}, + {0x01b6, 0x01b5}, + {0x01b9, 0x01b8}, + {0x01bd, 0x01bc}, + {0x01ce, 0x01cd}, + {0x01d0, 0x01cf}, + {0x01d2, 0x01d1}, + {0x01d4, 0x01d3}, + {0x01d6, 0x01d5}, + {0x01d8, 0x01d7}, + {0x01da, 0x01d9}, + {0x01dc, 0x01db}, + {0x01df, 0x01de}, + {0x01e1, 0x01e0}, + {0x01e3, 0x01e2}, + {0x01e5, 0x01e4}, + {0x01e7, 0x01e6}, + {0x01e9, 0x01e8}, + {0x01eb, 0x01ea}, + {0x01ed, 0x01ec}, + {0x01ef, 0x01ee}, + {0x01f5, 0x01f4}, + {0x01f9, 0x01f8}, + {0x01fb, 0x01fa}, + {0x01fd, 0x01fc}, + {0x01ff, 0x01fe}, + {0x0201, 0x0200}, + {0x0203, 0x0202}, + {0x0205, 0x0204}, + {0x0207, 0x0206}, + {0x0209, 0x0208}, + {0x020b, 0x020a}, + {0x020d, 0x020c}, + {0x020f, 0x020e}, + {0x0211, 0x0210}, + {0x0213, 0x0212}, + {0x0215, 0x0214}, + {0x0217, 0x0216}, + {0x0219, 0x0218}, + {0x021b, 0x021a}, + {0x021d, 0x021c}, + {0x021f, 0x021e}, + {0x0223, 0x0222}, + {0x0225, 0x0224}, + {0x0227, 0x0226}, + {0x0229, 0x0228}, + {0x022b, 0x022a}, + {0x022d, 0x022c}, + {0x022f, 0x022e}, + {0x0231, 0x0230}, + {0x0233, 0x0232}, + {0x023c, 0x023b}, + {0x0242, 0x0241}, + {0x0247, 0x0246}, + {0x0249, 0x0248}, + {0x024b, 0x024a}, + {0x024d, 0x024c}, + {0x024f, 0x024e}, + + /* Greek and Coptic */ + {0x037b, 0x03fd}, + {0x037c, 0x03fe}, + {0x037d, 0x03ff}, + + {0x03f3, 0x037f}, + {0x03ac, 0x0386}, + + {0x03ad, 0x0388}, + {0x03ae, 0x0389}, + {0x03af, 0x038a}, + + {0x03cc, 0x038c}, + + {0x03cd, 0x038e}, + {0x03ce, 0x038f}, + + {0x0371, 0x0370}, + {0x0373, 0x0372}, + {0x0377, 0x0376}, + + {0x03B1, 0x0391}, + {0x03B2, 0x0392}, + {0x03B3, 0x0393}, + {0x03B4, 0x0394}, + {0x03B5, 0x0395}, + {0x03B6, 0x0396}, + {0x03B7, 0x0397}, + {0x03B8, 0x0398}, + {0x03B9, 0x0399}, + {0x03BA, 0x039A}, + {0x03BB, 0x039B}, + {0x03BC, 0x039C}, + {0x03BD, 0x039D}, + {0x03BE, 0x039E}, + {0x03BF, 0x039F}, + {0x03C0, 0x03A0}, + {0x03C1, 0x03A1}, + + {0x03C3, 0x03A3}, + {0x03C4, 0x03A4}, + {0x03C5, 0x03A5}, + {0x03C6, 0x03A6}, + {0x03C7, 0x03A7}, + {0x03C8, 0x03A8}, + {0x03C9, 0x03A9}, + {0x03ca, 0x03aa}, + {0x03cb, 0x03ab}, + + {0x03d1, 0x03f4}, + + {0x03d7, 0x03cf}, + + {0x03d9, 0x03d8}, + {0x03db, 0x03da}, + {0x03dd, 0x03dc}, + {0x03df, 0x03de}, + {0x03e1, 0x03e0}, + {0x03e3, 0x03e2}, + {0x03e5, 0x03e4}, + {0x03e7, 0x03e6}, + {0x03e9, 0x03e8}, + {0x03eb, 0x03ea}, + {0x03ed, 0x03ec}, + {0x03ef, 0x03ee}, + + {0x03f2, 0x03f9}, + + {0x03f8, 0x03f7}, + + {0x03fb, 0x03fa}, + + /* Cyrillic */ + {0x0450, 0x0400}, + {0x0451, 0x0401}, + {0x0452, 0x0402}, + {0x0453, 0x0403}, + {0x0454, 0x0404}, + {0x0455, 0x0405}, + {0x0456, 0x0406}, + {0x0457, 0x0407}, + {0x0458, 0x0408}, + {0x0459, 0x0409}, + {0x045a, 0x040a}, + {0x045b, 0x040b}, + {0x045c, 0x040c}, + {0x045d, 0x040d}, + {0x045e, 0x040e}, + {0x045f, 0x040f}, + + {0x0430, 0x0410}, + {0x0431, 0x0411}, + {0x0432, 0x0412}, + {0x0433, 0x0413}, + {0x0434, 0x0414}, + {0x0435, 0x0415}, + {0x0436, 0x0416}, + {0x0437, 0x0417}, + {0x0438, 0x0418}, + {0x0439, 0x0419}, + {0x043a, 0x041a}, + {0x043b, 0x041b}, + {0x043c, 0x041c}, + {0x043d, 0x041d}, + {0x043e, 0x041e}, + {0x043f, 0x041f}, + {0x0440, 0x0420}, + {0x0441, 0x0421}, + {0x0442, 0x0422}, + {0x0443, 0x0423}, + {0x0444, 0x0424}, + {0x0445, 0x0425}, + {0x0446, 0x0426}, + {0x0447, 0x0427}, + {0x0448, 0x0428}, + {0x0449, 0x0429}, + {0x044a, 0x042a}, + {0x044b, 0x042b}, + {0x044c, 0x042c}, + {0x044d, 0x042d}, + {0x044e, 0x042e}, + {0x044f, 0x042f}, + + {0x0461, 0x0460}, + {0x0463, 0x0462}, + {0x0465, 0x0464}, + {0x0467, 0x0466}, + {0x0469, 0x0468}, + {0x046b, 0x046a}, + {0x046d, 0x046c}, + {0x046f, 0x046e}, + {0x0471, 0x0470}, + {0x0473, 0x0472}, + {0x0475, 0x0474}, + {0x0477, 0x0476}, + {0x0479, 0x0478}, + {0x047b, 0x047a}, + {0x047d, 0x047c}, + {0x047f, 0x047e}, + {0x0481, 0x0480}, + + {0x048b, 0x048a}, + {0x048d, 0x048c}, + {0x048f, 0x048e}, + {0x0491, 0x0490}, + {0x0493, 0x0492}, + {0x0495, 0x0494}, + {0x0497, 0x0496}, + {0x0499, 0x0498}, + {0x049b, 0x049a}, + {0x049d, 0x049c}, + {0x049f, 0x049e}, + {0x04a1, 0x04a0}, + {0x04a3, 0x04a2}, + {0x04a5, 0x04a4}, + {0x04a7, 0x04a6}, + {0x04a9, 0x04a8}, + {0x04ab, 0x04aa}, + {0x04ad, 0x04ac}, + {0x04af, 0x04ae}, + {0x04b1, 0x04b0}, + {0x04b3, 0x04b2}, + {0x04b5, 0x04b4}, + {0x04b7, 0x04b6}, + {0x04b9, 0x04b8}, + {0x04bb, 0x04ba}, + {0x04bd, 0x04bc}, + {0x04bf, 0x04be}, + {0x04c1, 0x04c0}, + {0x04c3, 0x04c2}, + {0x04c5, 0x04c4}, + {0x04c7, 0x04c6}, + {0x04c9, 0x04c8}, + {0x04cb, 0x04ca}, + {0x04cd, 0x04cc}, + {0x04cf, 0x04ce}, + {0x04d1, 0x04d0}, + {0x04d3, 0x04d2}, + {0x04d5, 0x04d4}, + {0x04d7, 0x04d6}, + {0x04d9, 0x04d8}, + {0x04db, 0x04da}, + {0x04dd, 0x04dc}, + {0x04df, 0x04de}, + {0x04e1, 0x04e0}, + {0x04e3, 0x04e2}, + {0x04e5, 0x04e4}, + {0x04e7, 0x04e6}, + {0x04e9, 0x04e8}, + {0x04eb, 0x04ea}, + {0x04ed, 0x04ec}, + {0x04ef, 0x04ee}, + {0x04f1, 0x04f0}, + {0x04f3, 0x04f2}, + {0x04f5, 0x04f4}, + {0x04f7, 0x04f6}, + {0x04f9, 0x04f8}, + {0x04fb, 0x04fa}, + {0x04fd, 0x04fc}, + {0x04ff, 0x04fe}, + + // End of array marker + {0, 0}}; + +const char lowersStr[] = { + '\x61', '\x62', '\x63', '\x64', '\x65', '\x66', '\x67', '\x68', '\x69', + '\x6a', '\x6b', '\x6c', '\x6d', '\x6e', '\x6f', '\x70', '\x71', '\x72', + '\x73', '\x74', '\x75', '\x76', '\x77', '\x78', '\x79', '\x7a', '\xc3', + '\xa0', '\xc3', '\xa1', '\xc3', '\xa2', '\xc3', '\xa3', '\xc3', '\xa4', + '\xc3', '\xa5', '\xc3', '\xa6', '\xc3', '\xa7', '\xc3', '\xa8', '\xc3', + '\xa9', '\xc3', '\xaa', '\xc3', '\xab', '\xc3', '\xac', '\xc3', '\xad', + '\xc3', '\xae', '\xc3', '\xaf', '\xc3', '\xb0', '\xc3', '\xb1', '\xc3', + '\xb2', '\xc3', '\xb3', '\xc3', '\xb4', '\xc3', '\xb5', '\xc3', '\xb6', + '\xc3', '\xb8', '\xc3', '\xb9', '\xc3', '\xba', '\xc3', '\xbb', '\xc3', + '\xbc', '\xc3', '\xbd', '\xc3', '\xbe', '\xc3', '\xbf', '\xc4', '\x81', + '\xc4', '\x83', '\xc4', '\x85', '\xc4', '\x87', '\xc4', '\x89', '\xc4', + '\x8b', '\xc4', '\x8d', '\xc4', '\x8f', '\xc4', '\x91', '\xc4', '\x93', + '\xc4', '\x95', '\xc4', '\x97', '\xc4', '\x99', '\xc4', '\x9b', '\xc4', + '\x9d', '\xc4', '\x9f', '\xc4', '\xa1', '\xc4', '\xa3', '\xc4', '\xa5', + '\xc4', '\xa7', '\xc4', '\xa9', '\xc4', '\xab', '\xc4', '\xad', '\xc4', + '\xaf', '\xc4', '\xb3', '\xc4', '\xb5', '\xc4', '\xb7', '\xc4', '\xba', + '\xc4', '\xbc', '\xc4', '\xbe', '\xc5', '\x80', '\xc5', '\x82', '\xc5', + '\x84', '\xc5', '\x86', '\xc5', '\x88', '\xc5', '\x8b', '\xc5', '\x8d', + '\xc5', '\x8f', '\xc5', '\x91', '\xc5', '\x93', '\xc5', '\x95', '\xc5', + '\x97', '\xc5', '\x99', '\xc5', '\x9b', '\xc5', '\x9d', '\xc5', '\x9f', + '\xc5', '\xa1', '\xc5', '\xa3', '\xc5', '\xa5', '\xc5', '\xa7', '\xc5', + '\xa9', '\xc5', '\xab', '\xc5', '\xad', '\xc5', '\xaf', '\xc5', '\xb1', + '\xc5', '\xb3', '\xc5', '\xb5', '\xc5', '\xb7', '\xc5', '\xba', '\xc5', + '\xbc', '\xc5', '\xbe', '\xc6', '\x80', '\xc7', '\x9d', '\xc6', '\x9a', + '\xc6', '\x9e', '\xca', '\x92', '\xc7', '\x86', '\xc7', '\x89', '\xc7', + '\x8c', '\xc7', '\xb3', '\xc6', '\xbf', '\xc6', '\x83', '\xc6', '\x85', + '\xc6', '\x88', '\xc6', '\x8c', '\xc6', '\x92', '\xc6', '\x99', '\xc6', + '\xa1', '\xc6', '\xa3', '\xc6', '\xa5', '\xc6', '\xa8', '\xc6', '\xad', + '\xc6', '\xb0', '\xc6', '\xb4', '\xc6', '\xb6', '\xc6', '\xb9', '\xc6', + '\xbd', '\xc7', '\x8e', '\xc7', '\x90', '\xc7', '\x92', '\xc7', '\x94', + '\xc7', '\x96', '\xc7', '\x98', '\xc7', '\x9a', '\xc7', '\x9c', '\xc7', + '\x9f', '\xc7', '\xa1', '\xc7', '\xa3', '\xc7', '\xa5', '\xc7', '\xa7', + '\xc7', '\xa9', '\xc7', '\xab', '\xc7', '\xad', '\xc7', '\xaf', '\xc7', + '\xb5', '\xc7', '\xb9', '\xc7', '\xbb', '\xc7', '\xbd', '\xc7', '\xbf', + '\xc8', '\x81', '\xc8', '\x83', '\xc8', '\x85', '\xc8', '\x87', '\xc8', + '\x89', '\xc8', '\x8b', '\xc8', '\x8d', '\xc8', '\x8f', '\xc8', '\x91', + '\xc8', '\x93', '\xc8', '\x95', '\xc8', '\x97', '\xc8', '\x99', '\xc8', + '\x9b', '\xc8', '\x9d', '\xc8', '\x9f', '\xc8', '\xa3', '\xc8', '\xa5', + '\xc8', '\xa7', '\xc8', '\xa9', '\xc8', '\xab', '\xc8', '\xad', '\xc8', + '\xaf', '\xc8', '\xb1', '\xc8', '\xb3', '\xc8', '\xbc', '\xc9', '\x82', + '\xc9', '\x87', '\xc9', '\x89', '\xc9', '\x8b', '\xc9', '\x8d', '\xc9', + '\x8f', '\xcd', '\xbb', '\xcd', '\xbc', '\xcd', '\xbd', '\xcf', '\xb3', + '\xce', '\xac', '\xce', '\xad', '\xce', '\xae', '\xce', '\xaf', '\xcf', + '\x8c', '\xcf', '\x8d', '\xcf', '\x8e', '\xcd', '\xb1', '\xcd', '\xb3', + '\xcd', '\xb7', '\xce', '\xb1', '\xce', '\xb2', '\xce', '\xb3', '\xce', + '\xb4', '\xce', '\xb5', '\xce', '\xb6', '\xce', '\xb7', '\xce', '\xb8', + '\xce', '\xb9', '\xce', '\xba', '\xce', '\xbb', '\xce', '\xbc', '\xce', + '\xbd', '\xce', '\xbe', '\xce', '\xbf', '\xcf', '\x80', '\xcf', '\x81', + '\xcf', '\x83', '\xcf', '\x84', '\xcf', '\x85', '\xcf', '\x86', '\xcf', + '\x87', '\xcf', '\x88', '\xcf', '\x89', '\xcf', '\x8a', '\xcf', '\x8b', + '\xcf', '\x97', '\xcf', '\x99', '\xcf', '\x9b', '\xcf', '\x9d', '\xcf', + '\x9f', '\xcf', '\xa1', '\xcf', '\xa3', '\xcf', '\xa5', '\xcf', '\xa7', + '\xcf', '\xa9', '\xcf', '\xab', '\xcf', '\xad', '\xcf', '\xaf', '\xcf', + '\xb2', '\xcf', '\xb8', '\xcf', '\xbb', '\xd0', '\xb0', '\xd0', '\xb1', + '\xd0', '\xb2', '\xd0', '\xb3', '\xd0', '\xb4', '\xd0', '\xb5', '\xd1', + '\x91', '\xd0', '\xb6', '\xd0', '\xb7', '\xd0', '\xb8', '\xd0', '\xb9', + '\xd0', '\xba', '\xd0', '\xbb', '\xd0', '\xbc', '\xd0', '\xbd', '\xd0', + '\xbe', '\xd0', '\xbf', '\xd1', '\x80', '\xd1', '\x81', '\xd1', '\x82', + '\xd1', '\x83', '\xd1', '\x84', '\xd1', '\x85', '\xd1', '\x86', '\xd1', + '\x87', '\xd1', '\x88', '\xd1', '\x89', '\xd1', '\x8a', '\xd1', '\x8b', + '\xd1', '\x8c', '\xd1', '\x8d', '\xd1', '\x8e', '\xd1', '\x8f', '\0'}; + +const char uppersStr[] = { + '\x41', '\x42', '\x43', '\x44', '\x45', '\x46', '\x47', '\x48', '\x49', + '\x4a', '\x4b', '\x4c', '\x4d', '\x4e', '\x4f', '\x50', '\x51', '\x52', + '\x53', '\x54', '\x55', '\x56', '\x57', '\x58', '\x59', '\x5a', '\xc3', + '\x80', '\xc3', '\x81', '\xc3', '\x82', '\xc3', '\x83', '\xc3', '\x84', + '\xc3', '\x85', '\xc3', '\x86', '\xc3', '\x87', '\xc3', '\x88', '\xc3', + '\x89', '\xc3', '\x8a', '\xc3', '\x8b', '\xc3', '\x8c', '\xc3', '\x8d', + '\xc3', '\x8e', '\xc3', '\x8f', '\xc3', '\x90', '\xc3', '\x91', '\xc3', + '\x92', '\xc3', '\x93', '\xc3', '\x94', '\xc3', '\x95', '\xc3', '\x96', + '\xc3', '\x98', '\xc3', '\x99', '\xc3', '\x9a', '\xc3', '\x9b', '\xc3', + '\x9c', '\xc3', '\x9d', '\xc3', '\x9e', '\xc5', '\xb8', '\xc4', '\x80', + '\xc4', '\x82', '\xc4', '\x84', '\xc4', '\x86', '\xc4', '\x88', '\xc4', + '\x8a', '\xc4', '\x8c', '\xc4', '\x8e', '\xc4', '\x90', '\xc4', '\x92', + '\xc4', '\x94', '\xc4', '\x96', '\xc4', '\x98', '\xc4', '\x9a', '\xc4', + '\x9c', '\xc4', '\x9e', '\xc4', '\xa0', '\xc4', '\xa2', '\xc4', '\xa4', + '\xc4', '\xa6', '\xc4', '\xa8', '\xc4', '\xaa', '\xc4', '\xac', '\xc4', + '\xae', '\xc4', '\xb2', '\xc4', '\xb4', '\xc4', '\xb6', '\xc4', '\xb9', + '\xc4', '\xbb', '\xc4', '\xbd', '\xc4', '\xbf', '\xc5', '\x81', '\xc5', + '\x83', '\xc5', '\x85', '\xc5', '\x87', '\xc5', '\x8a', '\xc5', '\x8c', + '\xc5', '\x8e', '\xc5', '\x90', '\xc5', '\x92', '\xc5', '\x94', '\xc5', + '\x96', '\xc5', '\x98', '\xc5', '\x9a', '\xc5', '\x9c', '\xc5', '\x9e', + '\xc5', '\xa0', '\xc5', '\xa2', '\xc5', '\xa4', '\xc5', '\xa6', '\xc5', + '\xa8', '\xc5', '\xaa', '\xc5', '\xac', '\xc5', '\xae', '\xc5', '\xb0', + '\xc5', '\xb2', '\xc5', '\xb4', '\xc5', '\xb6', '\xc5', '\xb9', '\xc5', + '\xbb', '\xc5', '\xbd', '\xc9', '\x83', '\xc6', '\x8e', '\xc8', '\xbd', + '\xc8', '\xa0', '\xc6', '\xb7', '\xc7', '\x84', '\xc7', '\x87', '\xc7', + '\x8a', '\xc7', '\xb1', '\xc7', '\xb7', '\xc6', '\x82', '\xc6', '\x84', + '\xc6', '\x87', '\xc6', '\x8b', '\xc6', '\x91', '\xc6', '\x98', '\xc6', + '\xa0', '\xc6', '\xa2', '\xc6', '\xa4', '\xc6', '\xa7', '\xc6', '\xac', + '\xc6', '\xaf', '\xc6', '\xb3', '\xc6', '\xb5', '\xc6', '\xb8', '\xc6', + '\xbc', '\xc7', '\x8d', '\xc7', '\x8f', '\xc7', '\x91', '\xc7', '\x93', + '\xc7', '\x95', '\xc7', '\x97', '\xc7', '\x99', '\xc7', '\x9b', '\xc7', + '\x9e', '\xc7', '\xa0', '\xc7', '\xa2', '\xc7', '\xa4', '\xc7', '\xa6', + '\xc7', '\xa8', '\xc7', '\xaa', '\xc7', '\xac', '\xc7', '\xae', '\xc7', + '\xb4', '\xc7', '\xb8', '\xc7', '\xba', '\xc7', '\xbc', '\xc7', '\xbe', + '\xc8', '\x80', '\xc8', '\x82', '\xc8', '\x84', '\xc8', '\x86', '\xc8', + '\x88', '\xc8', '\x8a', '\xc8', '\x8c', '\xc8', '\x8e', '\xc8', '\x90', + '\xc8', '\x92', '\xc8', '\x94', '\xc8', '\x96', '\xc8', '\x98', '\xc8', + '\x9a', '\xc8', '\x9c', '\xc8', '\x9e', '\xc8', '\xa2', '\xc8', '\xa4', + '\xc8', '\xa6', '\xc8', '\xa8', '\xc8', '\xaa', '\xc8', '\xac', '\xc8', + '\xae', '\xc8', '\xb0', '\xc8', '\xb2', '\xc8', '\xbb', '\xc9', '\x81', + '\xc9', '\x86', '\xc9', '\x88', '\xc9', '\x8a', '\xc9', '\x8c', '\xc9', + '\x8e', '\xcf', '\xbd', '\xcf', '\xbe', '\xcf', '\xbf', '\xcd', '\xbf', + '\xce', '\x86', '\xce', '\x88', '\xce', '\x89', '\xce', '\x8a', '\xce', + '\x8c', '\xce', '\x8e', '\xce', '\x8f', '\xcd', '\xb0', '\xcd', '\xb2', + '\xcd', '\xb6', '\xce', '\x91', '\xce', '\x92', '\xce', '\x93', '\xce', + '\x94', '\xce', '\x95', '\xce', '\x96', '\xce', '\x97', '\xce', '\x98', + '\xce', '\x99', '\xce', '\x9a', '\xce', '\x9b', '\xce', '\x9c', '\xce', + '\x9d', '\xce', '\x9e', '\xce', '\x9f', '\xce', '\xa0', '\xce', '\xa1', + '\xce', '\xa3', '\xce', '\xa4', '\xce', '\xa5', '\xce', '\xa6', '\xce', + '\xa7', '\xce', '\xa8', '\xce', '\xa9', '\xce', '\xaa', '\xce', '\xab', + '\xcf', '\x8f', '\xcf', '\x98', '\xcf', '\x9a', '\xcf', '\x9c', '\xcf', + '\x9e', '\xcf', '\xa0', '\xcf', '\xa2', '\xcf', '\xa4', '\xcf', '\xa6', + '\xcf', '\xa8', '\xcf', '\xaa', '\xcf', '\xac', '\xcf', '\xae', '\xcf', + '\xb9', '\xcf', '\xb7', '\xcf', '\xba', '\xd0', '\x90', '\xd0', '\x91', + '\xd0', '\x92', '\xd0', '\x93', '\xd0', '\x94', '\xd0', '\x95', '\xd0', + '\x81', '\xd0', '\x96', '\xd0', '\x97', '\xd0', '\x98', '\xd0', '\x99', + '\xd0', '\x9a', '\xd0', '\x9b', '\xd0', '\x9c', '\xd0', '\x9d', '\xd0', + '\x9e', '\xd0', '\x9f', '\xd0', '\xa0', '\xd0', '\xa1', '\xd0', '\xa2', + '\xd0', '\xa3', '\xd0', '\xa4', '\xd0', '\xa5', '\xd0', '\xa6', '\xd0', + '\xa7', '\xd0', '\xa8', '\xd0', '\xa9', '\xd0', '\xaa', '\xd0', '\xab', + '\xd0', '\xac', '\xd0', '\xad', '\xd0', '\xae', '\xd0', '\xaf', '\0'}; + +UTEST(utf8len, data) { ASSERT_EQ(53, utf8len(data)); } + +UTEST(utf8nlen, data) { ASSERT_EQ(52, utf8nlen(data, 103)); } + +UTEST(utf8cat, empty_cat_data) { + char cat[512] = {'\0'}; + + ASSERT_EQ(0, utf8len(cat)); + + ASSERT_EQ(53, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, one_byte_cat_data) { + char cat[512]; + + cat[0] = 'a'; + cat[1] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, two_bytes_cat_data) { + char cat[512]; + + cat[0] = '\xce'; + cat[1] = '\x93'; + cat[2] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, three_bytes_cat_data) { + char cat[512]; + + cat[0] = '\xe1'; + cat[1] = '\xbd'; + cat[2] = '\xb6'; + cat[3] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, four_bytes_cat_data) { + char cat[512]; + + cat[0] = '\xf0'; + cat[1] = '\x90'; + cat[2] = '\x8d'; + cat[3] = '\x88'; + cat[4] = '\0'; + + ASSERT_EQ(1, utf8len(cat)); + + ASSERT_EQ(54, utf8len(utf8cat(cat, data))); +} + +UTEST(utf8cat, cat_data_data) { + char cat[512] = {'\0'}; + + ASSERT_EQ(0, utf8len(cat)); + + ASSERT_EQ(106, utf8len(utf8cat(utf8cat(cat, data), data))); +} + +UTEST(utf8str, cmp) { ASSERT_EQ(data + 21, utf8str(data, cmp)); } + +UTEST(utf8str, test) { ASSERT_EQ((void *)0, utf8str(data, "test")); } + +UTEST(utf8str, empty) { ASSERT_EQ(data, utf8str(data, "")); } + +UTEST(utf8str, partial) { ASSERT_EQ(haystack + 2, utf8str(haystack, needle)); } + +UTEST(utf8str, endfail) { + ASSERT_EQ((void *)0, utf8str(haystack, endfailneedle)); +} + +UTEST(utf8casestr, cmp) { ASSERT_EQ(data + 21, utf8casestr(data, cmp)); } + +UTEST(utf8casestr, test) { ASSERT_EQ((void *)0, utf8casestr(data, "test")); } + +UTEST(utf8casestr, empty) { ASSERT_EQ(data, utf8casestr(data, "")); } + +UTEST(utf8casestr, partial) { + ASSERT_EQ(haystack + 2, utf8casestr(haystack, needle)); +} + +UTEST(utf8casestr, endfail) { + ASSERT_EQ((void *)0, utf8casestr(haystack, endfailneedle)); +} + +UTEST(utf8casestr, latin) { + ASSERT_EQ(lowersStr, utf8casestr(lowersStr, uppersStr)); +} + +UTEST(utf8chr, a) { ASSERT_EQ(data + 21, utf8chr(data, 0x3bc)); } + +UTEST(utf8chr, b) { ASSERT_EQ(NULL, utf8chr(data, 0x20ac)); } + +UTEST(utf8chr, null_terminator) { ASSERT_EQ(data + 104, utf8chr(data, '\0')); } + +UTEST(utf8chr, 0x20) { ASSERT_EQ(data + 12, utf8chr(data, 0x20)); } + +UTEST(utf8cmp, lt) { ASSERT_LT(0, utf8cmp(data, lt)); } + +UTEST(utf8cmp, eq) { ASSERT_EQ(0, utf8cmp(data, data)); } + +UTEST(utf8cmp, gt) { ASSERT_GT(0, utf8cmp(data, gt)); } + +UTEST(utf8cpy, data) { + char cpy[512] = {'\0'}; + + ASSERT_EQ(53, utf8len(utf8cpy(cpy, data))); +} + +// Matches \xce\x93 \xce\xb1 \xce\xb6 \xce\xad \xce\xb5 \xcf\x82 \x20 \xce\xba +// \xce\xb1 +UTEST(utf8spn, spn) { ASSERT_EQ(9, utf8spn(data, spn)); } + +UTEST(utf8spn, data) { ASSERT_EQ(53, utf8spn(data, data)); } + +UTEST(utf8spn, ascii) { ASSERT_EQ(0, utf8spn(data, "ab")); } + +UTEST(utf8spn, spnasciisearch) { + ASSERT_EQ(2, utf8spn(spnasciisearch, spnasciidelims)); +} + +UTEST(utf8cspn, spn) { ASSERT_EQ(0, utf8cspn(data, spn)); } + +UTEST(utf8cspn, data) { ASSERT_EQ(0, utf8cspn(data, data)); } + +UTEST(utf8cspn, ascii) { ASSERT_EQ(53, utf8cspn(data, "ab")); } + +UTEST(utf8cspn, cspnmultisearch) { + ASSERT_EQ(12, utf8cspn(cspnmultisearch, cspnmultidelims)); +} + +UTEST(utf8rchr, a) { ASSERT_EQ(data + 21, utf8rchr(data, 0x3bc)); } + +UTEST(utf8rchr, b) { ASSERT_EQ(NULL, utf8rchr(data, 0x20ac)); } + +UTEST(utf8rchr, null_terminator) { + ASSERT_EQ(data + 104, utf8rchr(data, '\0')); +} + +UTEST(utf8rchr, 0x20) { ASSERT_EQ(data + 90, utf8rchr(data, 0x20)); } + +UTEST(utf8rchr, overrun) { + const char ascii[] = "Hello\0Hello "; + ASSERT_EQ(4, utf8rchr(ascii, 'o') - ascii); +} + +UTEST(utf8rchr, underrun) { + const char ascii[] = "Helloo"; + ASSERT_EQ(5, utf8rchr(ascii, 'o') - ascii); +} + +UTEST(utf8dup, data) { + void *const dup = utf8dup(data); + ASSERT_TRUE(dup); + ASSERT_EQ(53, utf8len(dup)); + free(dup); +} + +UTEST(utf8dup, ascii) { + void *const dup = utf8dup("ab"); + ASSERT_TRUE(dup); + ASSERT_EQ(2, utf8len(dup)); + free(dup); +} + +UTEST(utf8dup, empty) { + void *const dup = utf8dup(""); + ASSERT_TRUE(dup); + ASSERT_EQ(0, utf8len(dup)); + free(dup); +} + +UTEST(utf8ndup, ascii) { + void *const dup = utf8ndup("1234567890", 4); + ASSERT_TRUE(dup); + ASSERT_EQ(4, utf8len(dup)); + free(dup); +} + +UTEST(utf8ndup, ascii_larger) { + void *const dup = utf8ndup("1234567890", 100); + ASSERT_TRUE(dup); + ASSERT_EQ(10, utf8len(dup)); + free(dup); +} + +static utf8_int8_t *allocate_from_buffer(utf8_int8_t *user_data, size_t n) { + return user_data; +} + +UTEST(utf8dup_ex, ascii) { + char user_data[1024]; + void *const dup = utf8dup_ex("1234567890", allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(10, utf8len(dup)); +} + +UTEST(utf8ndup_ex, ascii) { + char user_data[1024]; + void *const dup = + utf8ndup_ex("1234567890", 4, allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(4, utf8len(dup)); +} + +UTEST(utf8size, data) { ASSERT_EQ(105, utf8size(data)); } + +UTEST(utf8size, ascii) { ASSERT_EQ(3, utf8size("ab")); } + +UTEST(utf8size, empty) { ASSERT_EQ(1, utf8size("")); } + +UTEST(utf8size_lazy, data) { ASSERT_EQ(104, utf8size_lazy(data)); } + +UTEST(utf8size_lazy, ascii) { ASSERT_EQ(2, utf8size_lazy("ab")); } + +UTEST(utf8size_lazy, empty) { ASSERT_EQ(0, utf8size_lazy("")); } + +UTEST(utf8nsize_lazy, data) { ASSERT_EQ(50, utf8nsize_lazy(data, 50)); } + +UTEST(utf8nsize_lazy, ascii) { ASSERT_EQ(2, utf8nsize_lazy("ab", 50)); } + +UTEST(utf8nsize_lazy, empty) { ASSERT_EQ(0, utf8nsize_lazy("", 50)); } + +UTEST(utf8valid, a) { + char invalid[6]; + + invalid[0] = '\xf0'; + invalid[1] = '\x8f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, b) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, c) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, d) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\x3f'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, e) { + char invalid[6]; + + invalid[0] = '\xe0'; + invalid[1] = '\x9f'; + invalid[2] = '\xbf'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, f) { + char invalid[6]; + + invalid[0] = '\xef'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, g) { + char invalid[6]; + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, h) { + char invalid[6]; + + invalid[0] = '\xc1'; + invalid[1] = '\xbf'; + invalid[2] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, i) { + char invalid[6]; + + invalid[0] = '\xdf'; + invalid[1] = '\x3f'; + invalid[2] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, j) { + char invalid[6]; + + invalid[0] = '\x80'; + invalid[1] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, k) { + char invalid[6]; + + invalid[0] = '\xf8'; + invalid[1] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, l) { + char invalid[6]; + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\xbf'; + invalid[5] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, m) { + char invalid[6]; + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, n) { + char invalid[6]; + + invalid[0] = '\xdf'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\0'; + + ASSERT_EQ(invalid, utf8valid(invalid)); +} + +UTEST(utf8valid, data) { ASSERT_EQ(NULL, utf8valid(data)); } + +UTEST(utf8valid, ascii) { ASSERT_EQ(NULL, utf8valid("ab")); } + +UTEST(utf8valid, empty) { ASSERT_EQ(NULL, utf8valid("")); } + +UTEST(utf8nvalid, a) { + char valid[3]; + + const char *invalid = valid; + const size_t invalid_size = 1; + + valid[0] = '\xc2'; + valid[1] = '\x80'; + valid[2] = '\0'; + + ASSERT_EQ(invalid, utf8nvalid(valid, invalid_size)); +} + +UTEST(utf8nvalid, b) { + char valid[4]; + + const char *invalid = valid; + const size_t invalid_size = 2; + + valid[0] = '\xe0'; + valid[1] = '\x80'; + valid[2] = '\x80'; + valid[3] = '\0'; + + ASSERT_EQ(invalid, utf8nvalid(valid, invalid_size)); +} + +UTEST(utf8nvalid, c) { + char valid[5]; + + const char *invalid = valid; + const size_t invalid_size = 3; + + valid[0] = '\xf0'; + valid[1] = '\x80'; + valid[2] = '\x80'; + valid[3] = '\x80'; + valid[4] = '\0'; + ASSERT_EQ(invalid, utf8nvalid(valid, invalid_size)); +} + +UTEST(utf8nvalid, data) { ASSERT_EQ(NULL, utf8nvalid(data, 105)); } + +UTEST(utf8nvalid, ascii) { ASSERT_EQ(NULL, utf8nvalid("ab", 3)); } + +UTEST(utf8nvalid, empty) { ASSERT_EQ(NULL, utf8nvalid("", 1)); } + +UTEST(utf8ncat, ascii_cat_data) { + char cat[512] = {'\0'}; + cat[0] = 'a'; + cat[1] = '\0'; + ASSERT_EQ(2, utf8len(utf8ncat(cat, data, 2))); +} + +UTEST(utf8ncat, cat_data) { + char cat[512] = {'\0'}; + ASSERT_EQ(53, utf8len(utf8ncat(cat, data, 40000))); +} + +UTEST(utf8ncat, bad_cat) { + char cat[512] = {'\0'}; + ASSERT_EQ(cat, utf8valid(utf8ncat(cat, data, 1))); +} + +UTEST(utf8ncat, zero_n) { + char cat[512] = {'\0'}; + ASSERT_EQ(NULL, utf8valid(utf8ncat(cat, data, 0))); +} + +UTEST(utf8ncmp, lt_large) { ASSERT_LT(0, utf8ncmp(data, lt, 4000)); } + +UTEST(utf8ncmp, lt_small) { ASSERT_EQ(0, utf8ncmp(data, lt, 7)); } + +UTEST(utf8ncmp, eq_large) { ASSERT_EQ(0, utf8ncmp(data, data, 4000)); } + +UTEST(utf8ncmp, eq_small) { ASSERT_EQ(0, utf8ncmp(data, data, 7)); } + +UTEST(utf8ncmp, gt_large) { ASSERT_GT(0, utf8ncmp(data, gt, 4000)); } + +UTEST(utf8ncmp, gt_small) { ASSERT_EQ(0, utf8ncmp(data, gt, 7)); } + +UTEST(utf8ncpy, data_null_terminated) { + char cpy[512] = {'\0'}; + ASSERT_EQ('\0', *((char *)utf8ncpy(cpy, data, 106) + 105)); +} + +UTEST(utf8ncpy, data) { + char cpy[512] = {'\0'}; + ASSERT_EQ(53, utf8len(utf8ncpy(cpy, data, 105))); +} + +UTEST(utf8ncpy, check_no_buffer_overflow) { + utf8_int32_t i; + char buffer[11] = {0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd}; + ASSERT_EQ(buffer, utf8ncpy(buffer, "foo", 10)); + + ASSERT_EQ('f', buffer[0]); + ASSERT_EQ('o', buffer[1]); + ASSERT_EQ('o', buffer[2]); + + for (i = 3; 10 != i; i++) { + ASSERT_EQ(0, buffer[i]); + } + + ASSERT_EQ((char)0xdd, buffer[10]); +} + +UTEST(utf8ncpy, check_no_n_overflow) { + char buffer[4] = {1, 2, 3, 4}; + ASSERT_EQ(buffer, utf8ncpy(buffer, "foo", 2)); + + ASSERT_EQ('f', buffer[0]); + ASSERT_EQ('o', buffer[1]); + ASSERT_EQ(3, buffer[2]); + ASSERT_EQ(4, buffer[3]); +} + +UTEST(utf8ncpy, truncated_copy_valid) { + char cpy1[32] = {'\0'}; + char cpy2[3] = {'\0'}; + char cpy3[1] = {'\0'}; + + utf8ncpy(cpy1, data, 32); + ASSERT_EQ(NULL, utf8valid(cpy1)); + + utf8ncpy(cpy2, data, 3); + ASSERT_EQ(NULL, utf8valid(cpy2)); + + utf8ncpy(cpy3, data, 1); + ASSERT_EQ(NULL, utf8valid(cpy3)); +} + +UTEST(utf8ncpy, truncated_copy_null_terminated) { + char cpy1[32] = {'\0'}; + char cpy2[2] = {'\0'}; + char cpy3[3] = {'\0'}; + + utf8ncpy(cpy1, data, 32); + ASSERT_EQ('\0', cpy1[31]); + + utf8ncpy(cpy2, data, 2); + ASSERT_EQ('\0', cpy2[0]); + + utf8ncpy(cpy3, data, 3); + ASSERT_EQ('\0', cpy3[2]); +} + +UTEST(utf8pbrk, pbrk) { ASSERT_EQ(data + 8, utf8pbrk(data, pbrk)); } + +UTEST(utf8pbrk, data) { ASSERT_EQ(data, utf8pbrk(data, data)); } + +UTEST(utf8casecmp, ascii) { ASSERT_EQ(0, utf8casecmp(ascii1, ascii2)); } +UTEST(utf8casecmp, latin_upvslow) { + ASSERT_EQ(0, utf8casecmp(lowersStr, uppersStr)); +} +UTEST(utf8casecmp, latin_lowvsup) { + ASSERT_EQ(0, utf8casecmp(uppersStr, lowersStr)); +} + +UTEST(utf8casecmp, allascii) { + ASSERT_EQ(0, utf8casecmp(allascii1, allascii2)); +} + +UTEST(utf8casecmp, data_lt) { ASSERT_LT(0, utf8casecmp(data, lt)); } + +UTEST(utf8casecmp, data_eq) { ASSERT_EQ(0, utf8casecmp(data, data)); } + +UTEST(utf8casecmp, data_gt) { ASSERT_GT(0, utf8casecmp(data, gt)); } + +UTEST(utf8ncasecmp, lt_large) { ASSERT_LT(0, utf8ncasecmp(data, lt, 4000)); } + +UTEST(utf8ncasecmp, lt_small) { ASSERT_EQ(0, utf8ncasecmp(data, lt, 7)); } + +UTEST(utf8ncasecmp, eq_large) { ASSERT_EQ(0, utf8ncasecmp(data, data, 4000)); } + +UTEST(utf8ncasecmp, eq_small) { ASSERT_EQ(0, utf8ncasecmp(data, data, 7)); } + +UTEST(utf8ncasecmp, gt_large) { ASSERT_GT(0, utf8ncasecmp(data, gt, 4000)); } + +UTEST(utf8ncasecmp, gt_small) { ASSERT_EQ(0, utf8ncasecmp(data, gt, 7)); } + +UTEST(utf8ncasecmp, ascii) { ASSERT_EQ(0, utf8ncasecmp(ascii1, ascii2, 4)); } +UTEST(utf8ncasecmp, latin_upvslow) { + ASSERT_EQ(0, utf8ncasecmp(lowersStr, uppersStr, 120)); +} +UTEST(utf8ncasecmp, latin_lowvsup) { + ASSERT_EQ(0, utf8ncasecmp(uppersStr, lowersStr, 120)); +} + +UTEST(utf8ncasecmp, basic_ascii) { + ASSERT_EQ(-15, utf8ncasecmp(".gdoc", ".GSHeeT", 5)); + ASSERT_EQ(-4, utf8ncasecmp(".gsheet", ".gSLiDe", 7)); + +#ifndef _MSC_VER + ASSERT_EQ(strcasecmp(".gdoc", ".GSHeeT"), + utf8ncasecmp(".gdoc", ".GSHeeT", 5)); + ASSERT_EQ(strcasecmp(".gsheet", ".gSLiDe"), + utf8ncasecmp(".gsheet", ".gSLiDe", 7)); +#endif +} + +UTEST(utf8ncasecmp, latin_extended_a) { + ASSERT_EQ(96, utf8ncasecmp("Camón Romasan", "camu", 4)); +} + +UTEST(utf8codepoint, data) { + utf8_int32_t codepoint; + void *v; + size_t expected_length = utf8len(data) - 1; + for (v = utf8codepoint(data, &codepoint); codepoint; + v = utf8codepoint(v, &codepoint)) { + ASSERT_EQ(expected_length, utf8len(v)); + expected_length -= 1; + } +} + +UTEST(utf8codepointcalcsize, data) { + const char *v; + // No -1 here since we start at the beginning + size_t expected_length = utf8len(data); + for (v = data; *v; v += utf8codepointcalcsize(v)) { + ASSERT_EQ(expected_length, utf8len(v)); + expected_length -= 1; + } +} + +UTEST(utf8codepointsize, size_1) { ASSERT_EQ(1, utf8codepointsize('A')); } + +UTEST(utf8codepointsize, size_4) { ASSERT_EQ(4, utf8codepointsize(0x20C78)); } + +UTEST(utf8catcodepoint, data) { + char buffer[129]; + char *p = buffer; + long cp; + int i; + memset(buffer, 0, 129); + for (i = 0; i < 128; i++) { + cp = (i % 2 == 0 ? 'A' : 0x20C78); + p = utf8catcodepoint(p, cp, 128 - (p - buffer)); + if (!p) { + break; + } + } + ASSERT_EQ(51, utf8len(buffer)); +} + +UTEST(utf8islower, upper) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(0, utf8islower(lowupPairs[i].upper)); + } +} + +UTEST(utf8islower, lower) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(1, utf8islower(lowupPairs[i].lower)); + } +} + +UTEST(utf8isupper, upper) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(1, utf8isupper(lowupPairs[i].upper)); + } +} + +UTEST(utf8isupper, lower) { + utf8_int32_t i; + + for (i = 0; 0 != lowupPairs[i].lower; i++) { + ASSERT_EQ(0, utf8isupper(lowupPairs[i].lower)); + } +} + +UTEST(utf8lwr, ascii) { + size_t sz; + char *str; + sz = strlen(ascii1); + str = (char *)malloc(sz + 1); + memcpy(str, ascii1, sz + 1); + utf8lwr(str); + ASSERT_EQ(0, strcmp(str, "i like goats yarhar.")); + free(str); +} + +UTEST(utf8lwr, latin_lower) { + size_t sz; + void *str; + sz = utf8size(lowersStr); + str = malloc(sz); + memcpy(str, lowersStr, sz); + utf8lwr(str); + ASSERT_EQ(0, utf8cmp(str, lowersStr)); + free(str); +} + +UTEST(utf8lwr, latin_upper) { + size_t sz; + void *str; + sz = utf8size(uppersStr); + str = malloc(sz); + memcpy(str, uppersStr, sz); + utf8lwr(str); + ASSERT_EQ(0, utf8cmp(str, lowersStr)); + free(str); +} + +UTEST(utf8upr, ascii) { + size_t sz; + char *str; + sz = strlen(ascii1); + str = (char *)malloc(sz + 1); + memcpy(str, ascii1, sz + 1); + utf8upr(str); + ASSERT_EQ(0, strcmp(str, "I LIKE GOATS YARHAR.")); + free(str); +} + +UTEST(utf8upr, latin_lower) { + size_t sz; + void *str; + sz = utf8size(lowersStr); + str = malloc(sz); + memcpy(str, lowersStr, sz); + utf8upr(str); + ASSERT_EQ(0, utf8cmp(str, uppersStr)); + free(str); +} + +UTEST(utf8upr, latin_upper) { + size_t sz; + void *str; + sz = utf8size(uppersStr); + str = malloc(sz); + memcpy(str, uppersStr, sz); + utf8upr(str); + ASSERT_EQ(0, utf8cmp(str, uppersStr)); + free(str); +} + +UTEST(utf8casecmp, basic_ascii) { + ASSERT_EQ(-15, utf8casecmp(".gdoc", ".GSHeeT")); + ASSERT_EQ(-4, utf8casecmp(".gsheet", ".gSLiDe")); + +#ifndef _MSC_VER + ASSERT_EQ(strcasecmp(".gdoc", ".GSHeeT"), utf8casecmp(".gdoc", ".GSHeeT")); + ASSERT_EQ(strcasecmp(".gsheet", ".gSLiDe"), + utf8casecmp(".gsheet", ".gSLiDe")); +#endif +} + +UTEST(utf8lwr, greek_capital_theta) { + const char ref[] = {'\xce', '\xb8', '\xce', '\xb8', '\xce', + '\xb8', '\xcf', '\x91', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + utf8lwr(str); + + ASSERT_EQ(0, utf8cmp(str, ref)); +} + +UTEST(utf8upr, greek_capital_theta) { + const char ref[] = {'\xcf', '\xb4', '\xce', '\x98', '\xce', + '\x98', '\xce', '\x98', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + utf8upr(str); + + ASSERT_EQ(0, utf8cmp(str, ref)); +} + +UTEST(utf8casecmp, greek_capital_theta) { + const char ref[] = {'\xcf', '\xb4', '\xce', '\x98', '\xce', + '\x98', '\xce', '\x98', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + ASSERT_EQ(0, utf8casecmp(ref, str)); +} + +UTEST(utf8ncasecmp, greek_capital_theta) { + const char ref[] = {'\xcf', '\xb4', '\xce', '\x98', '\xce', + '\x98', '\xce', '\x98', '\0'}; + char str[] = {'\xcf', '\xb4', '\xce', '\xb8', '\xce', + '\x98', '\xcf', '\x91', '\0'}; + + ASSERT_EQ(0, utf8ncasecmp(ref, str, 8)); +} + +UTEST(utf8rcodepoint, ascii) { + utf8_int32_t codepoint; + + ASSERT_EQ(ascii1, utf8rcodepoint(ascii1 + 1, &codepoint)); + + ASSERT_EQ(ascii1[1], codepoint); +} + +UTEST(utf8rcodepoint, latin) { + utf8_int32_t codepoint; + + ASSERT_EQ(data, utf8rcodepoint(data + 2, &codepoint)); + + ASSERT_EQ(0x3B1, codepoint); +} + +UTEST(utf8makevalid, a) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf0'; + invalid[1] = '\x8f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xef'); +} + +UTEST(utf8makevalid, b) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, c) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, d) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\x3f'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, e) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xe0'; + invalid[1] = '\x9f'; + invalid[2] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xdf'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '\0'); +} + +UTEST(utf8makevalid, f) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xef'; + invalid[1] = '\x3f'; + invalid[2] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '\0'); +} + +UTEST(utf8makevalid, g) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\x3f'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '\0'); +} + +UTEST(utf8makevalid, h) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xc1'; + invalid[1] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\x7f'); + ASSERT_EQ(invalid[1], '\0'); +} + +UTEST(utf8makevalid, i) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xdf'; + invalid[1] = '\x3f'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '?'); + ASSERT_EQ(invalid[2], '\0'); +} + +UTEST(utf8makevalid, j) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\x80'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '\0'); +} + +UTEST(utf8makevalid, k) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf8'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '?'); + ASSERT_EQ(invalid[1], '\0'); +} + +UTEST(utf8makevalid, l) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xf1'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + invalid[4] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xf1'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '\xbf'); + ASSERT_EQ(invalid[3], '\xbf'); + ASSERT_EQ(invalid[4], '?'); + ASSERT_EQ(invalid[5], '\0'); +} + +UTEST(utf8makevalid, m) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xef'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + invalid[3] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xef'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '\xbf'); + ASSERT_EQ(invalid[3], '?'); + ASSERT_EQ(invalid[4], '\0'); +} + +UTEST(utf8makevalid, n) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xdf'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + + ASSERT_EQ(0, utf8makevalid(invalid, '?')); + + ASSERT_EQ(invalid[0], '\xdf'); + ASSERT_EQ(invalid[1], '\xbf'); + ASSERT_EQ(invalid[2], '?'); + ASSERT_EQ(invalid[3], '\0'); +} + +UTEST(utf8makevalid, invalid_replacement) { + char invalid[6]; + memset(invalid, 0, 6); + + invalid[0] = '\xdf'; + invalid[1] = '\xbf'; + invalid[2] = '\xbf'; + + ASSERT_NE(0, utf8makevalid(invalid, 0x80)); +} + +UTEST(utf8nvalid, exactly_2_bytes) { + const char terminated[] = "\xc2\xa3"; + ASSERT_EQ(utf8nvalid(terminated, 2), NULL); +} + +UTEST(utf8nvalid, exactly_3_bytes) { + const char terminated[] = "\xe1\xbd\xb6"; + ASSERT_EQ(utf8nvalid(terminated, 3), NULL); +} + +UTEST(utf8nvalid, exactly_4_bytes) { + const char terminated[] = "\xf0\x90\x8d\x88"; + ASSERT_EQ(utf8nvalid(terminated, 4), NULL); +} + +UTEST_MAIN(); diff --git a/src/utf8/test/no_malloc.c b/src/utf8/test/no_malloc.c new file mode 100644 index 0000000..b0d4a05 --- /dev/null +++ b/src/utf8/test/no_malloc.c @@ -0,0 +1,64 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +// include the unit testing framework +#include "utest.h" + +// include the header we are testing +#define UTF8_NO_STD_MALLOC +#include "utf8.h" + +UTEST(no_malloc_utf8dup, ascii) { + void *const dup = utf8dup("1234567890"); + ASSERT_FALSE(dup); +} + +UTEST(no_malloc_utf8ndup, ascii) { + void *const dup = utf8ndup("1234567890", 4); + ASSERT_FALSE(dup); +} + +static utf8_int8_t *allocate_from_buffer(utf8_int8_t *user_data, size_t n) { + return user_data; +} + +UTEST(no_malloc_utf8dup_ex, ascii) { + char user_data[1024]; + void *const dup = utf8dup_ex("1234567890", allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(10, utf8len(dup)); +} + +UTEST(no_malloc_utf8ndup_ex, ascii) { + char user_data[1024]; + void *const dup = + utf8ndup_ex("1234567890", 4, allocate_from_buffer, user_data); + ASSERT_TRUE(dup); + ASSERT_EQ(dup, user_data); + ASSERT_EQ(4, utf8len(dup)); +} + +UTEST_MAIN(); diff --git a/src/utf8/test/test.c b/src/utf8/test/test.c new file mode 100644 index 0000000..397bcdc --- /dev/null +++ b/src/utf8/test/test.c @@ -0,0 +1,33 @@ +/* This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * For more information, please refer to + */ + +#include "utf8.h" + +int main(const int argc, const char *const argv[]) { + (void)argc; + (void)argv; + return 0; +} diff --git a/src/utf8/test/test.cpp b/src/utf8/test/test.cpp new file mode 100644 index 0000000..81900b1 --- /dev/null +++ b/src/utf8/test/test.cpp @@ -0,0 +1,78 @@ +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +#include "utf8.h" + +// We don't care about the results. We only want to check compilation + +#if defined(__clang__) +#pragma clang diagnostic push + +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +#if defined(__cplusplus) && __cplusplus >= 201402L +constexpr void test() { + constexpr utf8_int8_t in_str[20]{}; + constexpr utf8_int32_t in_chr{}; + utf8_int32_t out_chr{}; + + utf8codepoint(in_str, &out_chr); + utf8rcodepoint(in_str + 1, &out_chr); + static_assert(utf8chr(in_str, utf8_int32_t{}), "utf8 constexpr fail"); + static_assert(utf8cmp(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8cspn(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8len(in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8nlen(in_str, 1) == 0, "utf8 constexpr fail"); + static_assert(utf8ncmp(in_str, in_str, 1) == 0, "utf8 constexpr fail"); + static_assert(utf8pbrk(in_str, in_str) == nullptr, "utf8 constexpr fail"); + static_assert(utf8rchr(in_str, 1) == nullptr, "utf8 constexpr fail"); + static_assert(utf8spn(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8str(in_str, in_str), "utf8 constexpr fail"); + static_assert(utf8casecmp(in_str, in_str) == 0, "utf8 constexpr fail"); + static_assert(utf8ncasecmp(in_str, in_str, 1) == 0, "utf8 constexpr fail"); + static_assert(utf8casestr(in_str, in_str), "utf8 constexpr fail"); + static_assert(utf8size(in_str), "utf8 constexpr fail"); + static_assert(utf8size_lazy(in_str) == 0, "utf8 constexpr faillazy;"); + static_assert(utf8nsize_lazy(in_str, 1) == 0, "utf8 constexpr faillazy;"); + static_assert(utf8valid(in_str) == nullptr, "utf8 constexpr fail"); + static_assert(utf8nvalid(in_str, 1) == nullptr, "utf8 constexpr fail"); + static_assert(utf8codepointsize(in_chr), "utf8 constexpr fail"); + static_assert(utf8isupper(in_chr) == false, "utf8 constexpr fail"); + static_assert(utf8islower(in_chr) == false, "utf8 constexpr fail"); + static_assert(utf8lwrcodepoint(in_chr) == in_chr, "utf8 constexpr fail"); + static_assert(utf8uprcodepoint(in_chr) == in_chr, "utf8 constexpr fail"); +} +#else +static void test() {} +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +int main() { test(); } diff --git a/src/utf8/test/utest.h b/src/utf8/test/utest.h new file mode 100644 index 0000000..8767600 --- /dev/null +++ b/src/utf8/test/utest.h @@ -0,0 +1,1668 @@ +/* + The latest version of this library is available on GitHub; + https://github.com/sheredom/utest.h +*/ + +/* + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +*/ + +#ifndef SHEREDOM_UTEST_H_INCLUDED +#define SHEREDOM_UTEST_H_INCLUDED + +#ifdef _MSC_VER +/* + Disable warning about not inlining 'inline' functions. +*/ +#pragma warning(disable : 4710) + +/* + Disable warning about inlining functions that are not marked 'inline'. +*/ +#pragma warning(disable : 4711) + +/* + Disable warning for alignment padding added +*/ +#pragma warning(disable : 4820) + +#if _MSC_VER > 1900 +/* + Disable warning about preprocessor macros not being defined in MSVC headers. +*/ +#pragma warning(disable : 4668) + +/* + Disable warning about no function prototype given in MSVC headers. +*/ +#pragma warning(disable : 4255) + +/* + Disable warning about pointer or reference to potentially throwing function. +*/ +#pragma warning(disable : 5039) + +/* + Disable warning about macro expansion producing 'defined' has undefined + behavior. +*/ +#pragma warning(disable : 5105) +#endif + +#if _MSC_VER > 1930 +/* + Disable warning about 'const' variable is not used. +*/ +#pragma warning(disable : 5264) +#endif + +#pragma warning(push, 1) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +typedef __int64 utest_int64_t; +typedef unsigned __int64 utest_uint64_t; +typedef unsigned __int32 utest_uint32_t; +#else +#include +typedef int64_t utest_int64_t; +typedef uint64_t utest_uint64_t; +typedef uint32_t utest_uint32_t; +#endif + +#include +#include +#include +#include +#include + +#if defined(__cplusplus) +#if defined(_MSC_VER) && !defined(_CPPUNWIND) +/* We're on MSVC and the compiler is compiling without exception support! */ +#elif !defined(_MSC_VER) && !defined(__EXCEPTIONS) +/* We're on a GCC/Clang compiler that doesn't have exception support! */ +#else +#define UTEST_HAS_EXCEPTIONS 1 +#endif +#endif + +#if defined(UTEST_HAS_EXCEPTIONS) +#include +#endif + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(__cplusplus) +#define UTEST_C_FUNC extern "C" +#else +#define UTEST_C_FUNC +#endif + +#define UTEST_TEST_PASSED (0) +#define UTEST_TEST_FAILURE (1) +#define UTEST_TEST_SKIPPED (2) + +#if defined(__TINYC__) +#define UTEST_ATTRIBUTE(a) __attribute((a)) +#else +#define UTEST_ATTRIBUTE(a) __attribute__((a)) +#endif + +#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__) + +#if defined(__MINGW64__) || defined(__MINGW32__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpragmas" +#pragma GCC diagnostic ignored "-Wunknown-pragmas" +#endif + +#if defined(_WINDOWS_) || defined(_WINDOWS_H) +typedef LARGE_INTEGER utest_large_integer; +#else +// use old QueryPerformanceCounter definitions (not sure is this needed in some +// edge cases or not) on Win7 with VS2015 these extern declaration cause "second +// C linkage of overloaded function not allowed" error +typedef union { + struct { + unsigned long LowPart; + long HighPart; + } DUMMYSTRUCTNAME; + struct { + unsigned long LowPart; + long HighPart; + } u; + utest_int64_t QuadPart; +} utest_large_integer; + +UTEST_C_FUNC __declspec(dllimport) int __stdcall QueryPerformanceCounter( + utest_large_integer *); +UTEST_C_FUNC __declspec(dllimport) int __stdcall QueryPerformanceFrequency( + utest_large_integer *); + +#if defined(__MINGW64__) || defined(__MINGW32__) +#pragma GCC diagnostic pop +#endif +#endif + +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__DragonFly__) || defined(__sun__) || \ + defined(__HAIKU__) +/* + slightly obscure include here - we need to include glibc's features.h, but + we don't want to just include a header that might not be defined for other + c libraries like musl. Instead we include limits.h, which we know on all + glibc distributions includes features.h +*/ +#include + +#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) +#include + +#if ((2 < __GLIBC__) || ((2 == __GLIBC__) && (17 <= __GLIBC_MINOR__))) +/* glibc is version 2.17 or above, so we can just use clock_gettime */ +#define UTEST_USE_CLOCKGETTIME +#else +#include +#include +#endif +#else // Other libc implementations +#include +#define UTEST_USE_CLOCKGETTIME +#endif + +#elif defined(__APPLE__) +#include +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +#define UTEST_PRId64 "I64d" +#define UTEST_PRIu64 "I64u" +#else +#include + +#define UTEST_PRId64 PRId64 +#define UTEST_PRIu64 PRIu64 +#endif + +#if defined(__cplusplus) +#define UTEST_INLINE inline + +#if defined(__clang__) +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wglobal-constructors\"") + +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS _Pragma("clang diagnostic pop") +#else +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS +#endif + +#define UTEST_INITIALIZER(f) \ + struct f##_cpp_struct { \ + f##_cpp_struct(); \ + }; \ + UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS static f##_cpp_struct \ + f##_cpp_global UTEST_INITIALIZER_END_DISABLE_WARNINGS; \ + f##_cpp_struct::f##_cpp_struct() +#elif defined(_MSC_VER) +#define UTEST_INLINE __forceinline + +#if defined(_WIN64) +#define UTEST_SYMBOL_PREFIX +#else +#define UTEST_SYMBOL_PREFIX "_" +#endif + +#if defined(__clang__) +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wmissing-variable-declarations\"") + +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS _Pragma("clang diagnostic pop") +#else +#define UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS +#define UTEST_INITIALIZER_END_DISABLE_WARNINGS +#endif + +#pragma section(".CRT$XCU", read) +#define UTEST_INITIALIZER(f) \ + static void __cdecl f(void); \ + UTEST_INITIALIZER_BEGIN_DISABLE_WARNINGS \ + __pragma(comment(linker, "/include:" UTEST_SYMBOL_PREFIX #f "_")) \ + UTEST_C_FUNC __declspec(allocate(".CRT$XCU")) void(__cdecl * \ + f##_)(void) = f; \ + UTEST_INITIALIZER_END_DISABLE_WARNINGS \ + static void __cdecl f(void) +#else +#if defined(__linux__) +#if defined(__clang__) +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif +#endif + +#define __STDC_FORMAT_MACROS 1 + +#if defined(__clang__) +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic pop +#endif +#endif +#endif + +#define UTEST_INLINE inline + +#define UTEST_INITIALIZER(f) \ + static void f(void) UTEST_ATTRIBUTE(constructor); \ + static void f(void) +#endif + +#if defined(__cplusplus) +#define UTEST_CAST(type, x) static_cast(x) +#define UTEST_PTR_CAST(type, x) reinterpret_cast(x) +#define UTEST_EXTERN extern "C" +#define UTEST_NULL NULL +#else +#define UTEST_CAST(type, x) ((type)(x)) +#define UTEST_PTR_CAST(type, x) ((type)(x)) +#define UTEST_EXTERN extern +#define UTEST_NULL 0 +#endif + +#ifdef _MSC_VER +/* + io.h contains definitions for some structures with natural padding. This is + uninteresting, but for some reason MSVC's behaviour is to warn about + including this system header. That *is* interesting +*/ +#pragma warning(disable : 4820) +#pragma warning(push, 1) +#include +#pragma warning(pop) +#define UTEST_COLOUR_OUTPUT() (_isatty(_fileno(stdout))) +#else +#if defined(__EMSCRIPTEN__) +#include +#define UTEST_COLOUR_OUTPUT() false +#else +#include +#define UTEST_COLOUR_OUTPUT() (isatty(STDOUT_FILENO)) +#endif +#endif + +static UTEST_INLINE void *utest_realloc(void *const pointer, size_t new_size) { + void *const new_pointer = realloc(pointer, new_size); + + if (UTEST_NULL == new_pointer) { + free(new_pointer); + } + + return new_pointer; +} + +static UTEST_INLINE utest_int64_t utest_ns(void) { +#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__) + utest_large_integer counter; + utest_large_integer frequency; + QueryPerformanceCounter(&counter); + QueryPerformanceFrequency(&frequency); + return UTEST_CAST(utest_int64_t, + (counter.QuadPart * 1000000000) / frequency.QuadPart); +#elif defined(__linux__) && defined(__STRICT_ANSI__) + return UTEST_CAST(utest_int64_t, clock()) * 1000000000 / CLOCKS_PER_SEC; +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__DragonFly__) || defined(__sun__) || \ + defined(__HAIKU__) + struct timespec ts; +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(__HAIKU__) + timespec_get(&ts, TIME_UTC); +#else + const clockid_t cid = CLOCK_REALTIME; +#if defined(UTEST_USE_CLOCKGETTIME) + clock_gettime(cid, &ts); +#else + syscall(SYS_clock_gettime, cid, &ts); +#endif +#endif + return UTEST_CAST(utest_int64_t, ts.tv_sec) * 1000 * 1000 * 1000 + ts.tv_nsec; +#elif __APPLE__ + return UTEST_CAST(utest_int64_t, clock_gettime_nsec_np(CLOCK_UPTIME_RAW)); +#elif __EMSCRIPTEN__ + return emscripten_performance_now() * 1000000.0; +#else +#error Unsupported platform! +#endif +} + +typedef void (*utest_testcase_t)(int *, size_t); + +struct utest_test_state_s { + utest_testcase_t func; + size_t index; + char *name; +}; + +struct utest_state_s { + struct utest_test_state_s *tests; + size_t tests_length; + FILE *output; +}; + +/* extern to the global state utest needs to execute */ +UTEST_EXTERN struct utest_state_s utest_state; + +#if defined(_MSC_VER) +#define UTEST_WEAK __forceinline +#elif defined(__MINGW32__) || defined(__MINGW64__) +#define UTEST_WEAK static UTEST_ATTRIBUTE(used) +#elif defined(__clang__) || defined(__GNUC__) || defined(__TINYC__) +#define UTEST_WEAK UTEST_ATTRIBUTE(weak) +#else +#error Non clang, non gcc, non MSVC, non tcc compiler found! +#endif + +#if defined(_MSC_VER) +#define UTEST_UNUSED +#else +#define UTEST_UNUSED UTEST_ATTRIBUTE(unused) +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wvariadic-macros" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#define UTEST_PRINTF(...) \ + if (utest_state.output) { \ + fprintf(utest_state.output, __VA_ARGS__); \ + } \ + printf(__VA_ARGS__) +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wvariadic-macros" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +#ifdef _MSC_VER +#define UTEST_SNPRINTF(BUFFER, N, ...) _snprintf_s(BUFFER, N, N, __VA_ARGS__) +#else +#define UTEST_SNPRINTF(...) snprintf(__VA_ARGS__) +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#if defined(__cplusplus) +/* if we are using c++ we can use overloaded methods (its in the language) */ +#define UTEST_OVERLOADABLE +#elif defined(__clang__) +/* otherwise, if we are using clang with c - use the overloadable attribute */ +#define UTEST_OVERLOADABLE UTEST_ATTRIBUTE(overloadable) +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +#include + +template ::value> +struct utest_type_deducer final { + static void _(const T t); +}; + +template <> struct utest_type_deducer { + static void _(const signed char c) { + UTEST_PRINTF("%d", static_cast(c)); + } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned char c) { + UTEST_PRINTF("%u", static_cast(c)); + } +}; + +template <> struct utest_type_deducer { + static void _(const short s) { UTEST_PRINTF("%d", static_cast(s)); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned short s) { + UTEST_PRINTF("%u", static_cast(s)); + } +}; + +template <> struct utest_type_deducer { + static void _(const float f) { UTEST_PRINTF("%f", static_cast(f)); } +}; + +template <> struct utest_type_deducer { + static void _(const double d) { UTEST_PRINTF("%f", d); } +}; + +template <> struct utest_type_deducer { + static void _(const long double d) { +#if defined(__MINGW32__) || defined(__MINGW64__) + /* MINGW is weird - doesn't like LF at all?! */ + UTEST_PRINTF("%f", (double)d); +#else + UTEST_PRINTF("%Lf", d); +#endif + } +}; + +template <> struct utest_type_deducer { + static void _(const int i) { UTEST_PRINTF("%d", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned int i) { UTEST_PRINTF("%u", i); } +}; + +template <> struct utest_type_deducer { + static void _(const long i) { UTEST_PRINTF("%ld", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned long i) { UTEST_PRINTF("%lu", i); } +}; + +template <> struct utest_type_deducer { + static void _(const long long i) { UTEST_PRINTF("%lld", i); } +}; + +template <> struct utest_type_deducer { + static void _(const unsigned long long i) { UTEST_PRINTF("%llu", i); } +}; + +template struct utest_type_deducer { + static void _(const T *t) { + UTEST_PRINTF("%p", static_cast(const_cast(t))); + } +}; + +template struct utest_type_deducer { + static void _(T *t) { UTEST_PRINTF("%p", static_cast(t)); } +}; + +template struct utest_type_deducer { + static void _(const T t) { + UTEST_PRINTF("%llu", static_cast(t)); + } +}; + +template +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const T t) { + utest_type_deducer::_(t); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#elif defined(UTEST_OVERLOADABLE) + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(signed char c); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(signed char c) { + UTEST_PRINTF("%d", UTEST_CAST(int, c)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned char c); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned char c) { + UTEST_PRINTF("%u", UTEST_CAST(unsigned int, c)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(float f); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(float f) { + UTEST_PRINTF("%f", UTEST_CAST(double, f)); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(double d); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(double d) { + UTEST_PRINTF("%f", d); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long double d); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long double d) { +#if defined(__MINGW32__) || defined(__MINGW64__) + /* MINGW is weird - doesn't like LF at all?! */ + UTEST_PRINTF("%f", (double)d); +#else + UTEST_PRINTF("%Lf", d); +#endif +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(int i) { + UTEST_PRINTF("%d", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(unsigned int i) { + UTEST_PRINTF("%u", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long int i) { + UTEST_PRINTF("%ld", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long unsigned int i) { + UTEST_PRINTF("%lu", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const void *p); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(const void *p) { + UTEST_PRINTF("%p", p); +} + +/* + long long is a c++11 extension +*/ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || \ + defined(__cplusplus) && (__cplusplus >= 201103L) || \ + (defined(__MINGW32__) || defined(__MINGW64__)) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long int i); +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long int i) { + UTEST_PRINTF("%lld", i); +} + +UTEST_WEAK UTEST_OVERLOADABLE void utest_type_printer(long long unsigned int i); +UTEST_WEAK UTEST_OVERLOADABLE void +utest_type_printer(long long unsigned int i) { + UTEST_PRINTF("%llu", i); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !(defined(__MINGW32__) || defined(__MINGW64__)) || \ + defined(__TINYC__) +#define utest_type_printer(val) \ + UTEST_PRINTF(_Generic((val), signed char \ + : "%d", unsigned char \ + : "%u", short \ + : "%d", unsigned short \ + : "%u", int \ + : "%d", long \ + : "%ld", long long \ + : "%lld", unsigned \ + : "%u", unsigned long \ + : "%lu", unsigned long long \ + : "%llu", float \ + : "%f", double \ + : "%f", long double \ + : "%Lf", default \ + : _Generic((val - val), ptrdiff_t \ + : "%p", default \ + : "undef")), \ + (val)) +#else +/* + we don't have the ability to print the values we got, so we create a macro + to tell our users we can't do anything fancy +*/ +#define utest_type_printer(...) UTEST_PRINTF("undef") +#endif + +#if defined(_MSC_VER) +#define UTEST_SURPRESS_WARNING_BEGIN \ + __pragma(warning(push)) __pragma(warning(disable : 4127)) \ + __pragma(warning(disable : 4571)) __pragma(warning(disable : 4130)) +#define UTEST_SURPRESS_WARNING_END __pragma(warning(pop)) +#else +#define UTEST_SURPRESS_WARNING_BEGIN +#define UTEST_SURPRESS_WARNING_END +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) +#define UTEST_AUTO(x) auto +#elif !defined(__cplusplus) + +#if defined(__clang__) +/* clang-format off */ +/* had to disable clang-format here because it malforms the pragmas */ +#define UTEST_AUTO(x) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wgnu-auto-type\"") __auto_type \ + _Pragma("clang diagnostic pop") +/* clang-format on */ +#else +#define UTEST_AUTO(x) __typeof__(x + 0) +#endif + +#else +#define UTEST_AUTO(x) typeof(x + 0) +#endif + +#if defined(__clang__) +#define UTEST_STRNCMP(x, y, size) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdisabled-macro-expansion\"") \ + strncmp(x, y, size) _Pragma("clang diagnostic pop") +#else +#define UTEST_STRNCMP(x, y, size) strncmp(x, y, size) +#endif + +#if defined(_MSC_VER) +#define UTEST_STRNCPY(x, y, size) strcpy_s(x, size, y) +#elif !defined(__clang__) && defined(__GNUC__) +static UTEST_INLINE char * +utest_strncpy_gcc(char *const dst, const char *const src, const size_t size) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" + return strncpy(dst, src, size); +#pragma GCC diagnostic pop +} + +#define UTEST_STRNCPY(x, y, size) utest_strncpy_gcc(x, y, size) +#else +#define UTEST_STRNCPY(x, y, size) strncpy(x, y, size) +#endif + +#define UTEST_SKIP(msg) \ + do { \ + UTEST_PRINTF(" Skipped : '%s'\n", (msg)); \ + *utest_result = UTEST_TEST_SKIPPED; \ + return; \ + } while (0) + +#if defined(__clang__) +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wlanguage-extension-token\"") \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat-pedantic\"") \ + _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") \ + UTEST_AUTO(x) xEval = (x); \ + UTEST_AUTO(y) yEval = (y); \ + if (!((xEval)cond(yEval))) { \ + _Pragma("clang diagnostic pop") \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : ("); \ + UTEST_PRINTF(#x ") " #cond " (" #y); \ + UTEST_PRINTF(")\n"); \ + UTEST_PRINTF(" Actual : "); \ + utest_type_printer(xEval); \ + UTEST_PRINTF(" vs "); \ + utest_type_printer(yEval); \ + UTEST_PRINTF("\n"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#elif defined(__GNUC__) || defined(__TINYC__) +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + UTEST_AUTO(x) xEval = (x); \ + UTEST_AUTO(y) yEval = (y); \ + if (!((xEval)cond(yEval))) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : ("); \ + UTEST_PRINTF(#x ") " #cond " (" #y); \ + UTEST_PRINTF(")\n"); \ + UTEST_PRINTF(" Actual : "); \ + utest_type_printer(xEval); \ + UTEST_PRINTF(" vs "); \ + utest_type_printer(yEval); \ + UTEST_PRINTF("\n"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#else +#define UTEST_COND(x, y, cond, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + if (!((x)cond(y))) { \ + UTEST_PRINTF("%s:%i: Failure (Expected " #cond " Actual)", __FILE__, \ + __LINE__); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s", msg); \ + } \ + UTEST_PRINTF("\n"); \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END +#endif + +#define EXPECT_EQ(x, y) UTEST_COND(x, y, ==, "", 0) +#define EXPECT_EQ_MSG(x, y, msg) UTEST_COND(x, y, ==, msg, 0) +#define ASSERT_EQ(x, y) UTEST_COND(x, y, ==, "", 1) +#define ASSERT_EQ_MSG(x, y, msg) UTEST_COND(x, y, ==, msg, 1) + +#define EXPECT_NE(x, y) UTEST_COND(x, y, !=, "", 0) +#define EXPECT_NE_MSG(x, y, msg) UTEST_COND(x, y, !=, msg, 0) +#define ASSERT_NE(x, y) UTEST_COND(x, y, !=, "", 1) +#define ASSERT_NE_MSG(x, y, msg) UTEST_COND(x, y, !=, msg, 1) + +#define EXPECT_LT(x, y) UTEST_COND(x, y, <, "", 0) +#define EXPECT_LT_MSG(x, y, msg) UTEST_COND(x, y, <, msg, 0) +#define ASSERT_LT(x, y) UTEST_COND(x, y, <, "", 1) +#define ASSERT_LT_MSG(x, y, msg) UTEST_COND(x, y, <, msg, 1) + +#define EXPECT_LE(x, y) UTEST_COND(x, y, <=, "", 0) +#define EXPECT_LE_MSG(x, y, msg) UTEST_COND(x, y, <=, msg, 0) +#define ASSERT_LE(x, y) UTEST_COND(x, y, <=, "", 1) +#define ASSERT_LE_MSG(x, y, msg) UTEST_COND(x, y, <=, msg, 1) + +#define EXPECT_GT(x, y) UTEST_COND(x, y, >, "", 0) +#define EXPECT_GT_MSG(x, y, msg) UTEST_COND(x, y, >, msg, 0) +#define ASSERT_GT(x, y) UTEST_COND(x, y, >, "", 1) +#define ASSERT_GT_MSG(x, y, msg) UTEST_COND(x, y, >, msg, 1) + +#define EXPECT_GE(x, y) UTEST_COND(x, y, >=, "", 0) +#define EXPECT_GE_MSG(x, y, msg) UTEST_COND(x, y, >=, msg, 0) +#define ASSERT_GE(x, y) UTEST_COND(x, y, >=, "", 1) +#define ASSERT_GE_MSG(x, y, msg) UTEST_COND(x, y, >=, msg, 1) + +#define UTEST_TRUE(x, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const int xEval = !!(x); \ + if (!(xEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : true\n"); \ + UTEST_PRINTF(" Actual : %s\n", (xEval) ? "true" : "false"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_TRUE(x) UTEST_TRUE(x, "", 0) +#define EXPECT_TRUE_MSG(x, msg) UTEST_TRUE(x, msg, 0) +#define ASSERT_TRUE(x) UTEST_TRUE(x, "", 1) +#define ASSERT_TRUE_MSG(x, msg) UTEST_TRUE(x, msg, 1) + +#define UTEST_FALSE(x, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const int xEval = !!(x); \ + if (xEval) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : false\n"); \ + UTEST_PRINTF(" Actual : %s\n", (xEval) ? "true" : "false"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_FALSE(x) UTEST_FALSE(x, "", 0) +#define EXPECT_FALSE_MSG(x, msg) UTEST_FALSE(x, msg, 0) +#define ASSERT_FALSE(x) UTEST_FALSE(x, "", 1) +#define ASSERT_FALSE_MSG(x, msg) UTEST_FALSE(x, msg, 1) + +#define UTEST_STREQ(x, y, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 != strcmp(xEval, yEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%s\"\n", xEval); \ + UTEST_PRINTF(" Actual : \"%s\"\n", yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STREQ(x, y) UTEST_STREQ(x, y, "", 0) +#define EXPECT_STREQ_MSG(x, y, msg) UTEST_STREQ(x, y, msg, 0) +#define ASSERT_STREQ(x, y) UTEST_STREQ(x, y, "", 1) +#define ASSERT_STREQ_MSG(x, y, msg) UTEST_STREQ(x, y, msg, 1) + +#define UTEST_STRNE(x, y, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 == strcmp(xEval, yEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%s\"\n", xEval); \ + UTEST_PRINTF(" Actual : \"%s\"\n", yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNE(x, y) UTEST_STRNE(x, y, "", 0) +#define EXPECT_STRNE_MSG(x, y, msg) UTEST_STRNE(x, y, msg, 0) +#define ASSERT_STRNE(x, y) UTEST_STRNE(x, y, "", 1) +#define ASSERT_STRNE_MSG(x, y, msg) UTEST_STRNE(x, y, msg, 1) + +#define UTEST_STRNEQ(x, y, n, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + const size_t nEval = UTEST_CAST(size_t, n); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 != UTEST_STRNCMP(xEval, yEval, nEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%.*s\"\n", UTEST_CAST(int, nEval), xEval); \ + UTEST_PRINTF(" Actual : \"%.*s\"\n", UTEST_CAST(int, nEval), yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNEQ(x, y, n) UTEST_STRNEQ(x, y, n, "", 0) +#define EXPECT_STRNEQ_MSG(x, y, n, msg) UTEST_STRNEQ(x, y, n, msg, 0) +#define ASSERT_STRNEQ(x, y, n) UTEST_STRNEQ(x, y, n, "", 1) +#define ASSERT_STRNEQ_MSG(x, y, n, msg) UTEST_STRNEQ(x, y, n, msg, 1) + +#define UTEST_STRNNE(x, y, n, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const char *xEval = (x); \ + const char *yEval = (y); \ + const size_t nEval = UTEST_CAST(size_t, n); \ + if (UTEST_NULL == xEval || UTEST_NULL == yEval || \ + 0 == UTEST_STRNCMP(xEval, yEval, nEval)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : \"%.*s\"\n", UTEST_CAST(int, nEval), xEval); \ + UTEST_PRINTF(" Actual : \"%.*s\"\n", UTEST_CAST(int, nEval), yEval); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_STRNNE(x, y, n) UTEST_STRNNE(x, y, n, "", 0) +#define EXPECT_STRNNE_MSG(x, y, n, msg) UTEST_STRNNE(x, y, n, msg, 0) +#define ASSERT_STRNNE(x, y, n) UTEST_STRNNE(x, y, n, "", 1) +#define ASSERT_STRNNE_MSG(x, y, n, msg) UTEST_STRNNE(x, y, n, msg, 1) + +#define UTEST_NEAR(x, y, epsilon, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + const double diff = \ + utest_fabs(UTEST_CAST(double, x) - UTEST_CAST(double, y)); \ + if (diff > UTEST_CAST(double, epsilon) || utest_isnan(diff)) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %f\n", UTEST_CAST(double, x)); \ + UTEST_PRINTF(" Actual : %f\n", UTEST_CAST(double, y)); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_NEAR(x, y, epsilon) UTEST_NEAR(x, y, epsilon, "", 0) +#define EXPECT_NEAR_MSG(x, y, epsilon, msg) UTEST_NEAR(x, y, epsilon, msg, 0) +#define ASSERT_NEAR(x, y, epsilon) UTEST_NEAR(x, y, epsilon, "", 1) +#define ASSERT_NEAR_MSG(x, y, epsilon, msg) UTEST_NEAR(x, y, epsilon, msg, 1) + +#if defined(UTEST_HAS_EXCEPTIONS) +#define UTEST_EXCEPTION(x, exception_type, msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + int exception_caught = 0; \ + try { \ + x; \ + } catch (const exception_type &) { \ + exception_caught = 1; \ + } catch (...) { \ + exception_caught = 2; \ + } \ + if (1 != exception_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception\n", #exception_type); \ + UTEST_PRINTF(" Actual : %s\n", (2 == exception_caught) \ + ? "Unexpected exception" \ + : "No exception"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_EXCEPTION(x, exception_type) \ + UTEST_EXCEPTION(x, exception_type, "", 0) +#define EXPECT_EXCEPTION_MSG(x, exception_type, msg) \ + UTEST_EXCEPTION(x, exception_type, msg, 0) +#define ASSERT_EXCEPTION(x, exception_type) \ + UTEST_EXCEPTION(x, exception_type, "", 1) +#define ASSERT_EXCEPTION_MSG(x, exception_type, msg) \ + UTEST_EXCEPTION(x, exception_type, msg, 1) + +#define UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, \ + msg, is_assert) \ + UTEST_SURPRESS_WARNING_BEGIN do { \ + int exception_caught = 0; \ + char *message_caught = UTEST_NULL; \ + try { \ + x; \ + } catch (const exception_type &e) { \ + const char *const what = e.what(); \ + exception_caught = 1; \ + if (0 != \ + UTEST_STRNCMP(what, exception_message, strlen(exception_message))) { \ + const size_t message_size = strlen(what) + 1; \ + message_caught = UTEST_PTR_CAST(char *, malloc(message_size)); \ + UTEST_STRNCPY(message_caught, what, message_size); \ + } \ + } catch (...) { \ + exception_caught = 2; \ + } \ + if (1 != exception_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception\n", #exception_type); \ + UTEST_PRINTF(" Actual : %s\n", (2 == exception_caught) \ + ? "Unexpected exception" \ + : "No exception"); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + if (is_assert) { \ + return; \ + } \ + } else if (UTEST_NULL != message_caught) { \ + UTEST_PRINTF("%s:%i: Failure\n", __FILE__, __LINE__); \ + UTEST_PRINTF(" Expected : %s exception with message %s\n", \ + #exception_type, exception_message); \ + UTEST_PRINTF(" Actual message : %s\n", message_caught); \ + if (strlen(msg) > 0) { \ + UTEST_PRINTF(" Message : %s\n", msg); \ + } \ + *utest_result = UTEST_TEST_FAILURE; \ + free(message_caught); \ + if (is_assert) { \ + return; \ + } \ + } \ + } \ + while (0) \ + UTEST_SURPRESS_WARNING_END + +#define EXPECT_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, "", 0) +#define EXPECT_EXCEPTION_WITH_MESSAGE_MSG(x, exception_type, \ + exception_message, msg) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, msg, 0) +#define ASSERT_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, "", 1) +#define ASSERT_EXCEPTION_WITH_MESSAGE_MSG(x, exception_type, \ + exception_message, msg) \ + UTEST_EXCEPTION_WITH_MESSAGE(x, exception_type, exception_message, msg, 1) +#endif + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#define UTEST_SURPRESS_WARNINGS_BEGIN \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wunsafe-buffer-usage\"") +#define UTEST_SURPRESS_WARNINGS_END _Pragma("clang diagnostic pop") +#else +#define UTEST_SURPRESS_WARNINGS_BEGIN +#define UTEST_SURPRESS_WARNINGS_END +#endif +#elif defined(__GNUC__) && __GNUC__ >= 8 && defined(__cplusplus) +#define UTEST_SURPRESS_WARNINGS_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wclass-memaccess\"") +#define UTEST_SURPRESS_WARNINGS_END _Pragma("GCC diagnostic pop") +#else +#define UTEST_SURPRESS_WARNINGS_BEGIN +#define UTEST_SURPRESS_WARNINGS_END +#endif + +#define UTEST(SET, NAME) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_run_##SET##_##NAME(int *utest_result); \ + static void utest_##SET##_##NAME(int *utest_result, size_t utest_index) { \ + (void)utest_index; \ + utest_run_##SET##_##NAME(utest_result); \ + } \ + UTEST_INITIALIZER(utest_register_##SET##_##NAME) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #SET "." #NAME; \ + const size_t name_size = strlen(name_part) + 1; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_##SET##_##NAME; \ + utest_state.tests[index].name = name; \ + utest_state.tests[index].index = 0; \ + UTEST_SNPRINTF(name, name_size, "%s", name_part); \ + } else if (name) { \ + free(name); \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##SET##_##NAME(int *utest_result) + +#define UTEST_F_SETUP(FIXTURE) \ + static void utest_f_setup_##FIXTURE(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_F_TEARDOWN(FIXTURE) \ + static void utest_f_teardown_##FIXTURE(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_F(FIXTURE, NAME) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_f_setup_##FIXTURE(int *, struct FIXTURE *); \ + static void utest_f_teardown_##FIXTURE(int *, struct FIXTURE *); \ + static void utest_run_##FIXTURE##_##NAME(int *, struct FIXTURE *); \ + static void utest_f_##FIXTURE##_##NAME(int *utest_result, \ + size_t utest_index) { \ + struct FIXTURE fixture; \ + (void)utest_index; \ + memset(&fixture, 0, sizeof(fixture)); \ + utest_f_setup_##FIXTURE(utest_result, &fixture); \ + if (UTEST_TEST_PASSED != *utest_result) { \ + return; \ + } \ + utest_run_##FIXTURE##_##NAME(utest_result, &fixture); \ + utest_f_teardown_##FIXTURE(utest_result, &fixture); \ + } \ + UTEST_INITIALIZER(utest_register_##FIXTURE##_##NAME) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #FIXTURE "." #NAME; \ + const size_t name_size = strlen(name_part) + 1; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_f_##FIXTURE##_##NAME; \ + utest_state.tests[index].name = name; \ + UTEST_SNPRINTF(name, name_size, "%s", name_part); \ + } else if (name) { \ + free(name); \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##FIXTURE##_##NAME(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#define UTEST_I_SETUP(FIXTURE) \ + static void utest_i_setup_##FIXTURE( \ + int *utest_result, struct FIXTURE *utest_fixture, size_t utest_index) + +#define UTEST_I_TEARDOWN(FIXTURE) \ + static void utest_i_teardown_##FIXTURE( \ + int *utest_result, struct FIXTURE *utest_fixture, size_t utest_index) + +#define UTEST_I(FIXTURE, NAME, INDEX) \ + UTEST_SURPRESS_WARNINGS_BEGIN \ + UTEST_EXTERN struct utest_state_s utest_state; \ + static void utest_run_##FIXTURE##_##NAME##_##INDEX(int *, struct FIXTURE *); \ + static void utest_i_##FIXTURE##_##NAME##_##INDEX(int *utest_result, \ + size_t index) { \ + struct FIXTURE fixture; \ + memset(&fixture, 0, sizeof(fixture)); \ + utest_i_setup_##FIXTURE(utest_result, &fixture, index); \ + if (UTEST_TEST_PASSED != *utest_result) { \ + return; \ + } \ + utest_run_##FIXTURE##_##NAME##_##INDEX(utest_result, &fixture); \ + utest_i_teardown_##FIXTURE(utest_result, &fixture, index); \ + } \ + UTEST_INITIALIZER(utest_register_##FIXTURE##_##NAME##_##INDEX) { \ + size_t i; \ + utest_uint64_t iUp; \ + for (i = 0; i < (INDEX); i++) { \ + const size_t index = utest_state.tests_length++; \ + const char *name_part = #FIXTURE "." #NAME; \ + const size_t name_size = strlen(name_part) + 32; \ + char *name = UTEST_PTR_CAST(char *, malloc(name_size)); \ + utest_state.tests = UTEST_PTR_CAST( \ + struct utest_test_state_s *, \ + utest_realloc(UTEST_PTR_CAST(void *, utest_state.tests), \ + sizeof(struct utest_test_state_s) * \ + utest_state.tests_length)); \ + if (utest_state.tests) { \ + utest_state.tests[index].func = &utest_i_##FIXTURE##_##NAME##_##INDEX; \ + utest_state.tests[index].index = i; \ + utest_state.tests[index].name = name; \ + iUp = UTEST_CAST(utest_uint64_t, i); \ + UTEST_SNPRINTF(name, name_size, "%s/%" UTEST_PRIu64, name_part, iUp); \ + } else if (name) { \ + free(name); \ + } \ + } \ + } \ + UTEST_SURPRESS_WARNINGS_END \ + void utest_run_##FIXTURE##_##NAME##_##INDEX(int *utest_result, \ + struct FIXTURE *utest_fixture) + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif + +UTEST_WEAK +double utest_fabs(double d); +UTEST_WEAK +double utest_fabs(double d) { + union { + double d; + utest_uint64_t u; + } both; + both.d = d; + both.u &= 0x7fffffffffffffffu; + return both.d; +} + +UTEST_WEAK +int utest_isnan(double d); +UTEST_WEAK +int utest_isnan(double d) { + union { + double d; + utest_uint64_t u; + } both; + both.d = d; + both.u &= 0x7fffffffffffffffu; + return both.u > 0x7ff0000000000000u; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +UTEST_WEAK +int utest_should_filter_test(const char *filter, const char *testcase); +UTEST_WEAK int utest_should_filter_test(const char *filter, + const char *testcase) { + if (filter) { + const char *filter_cur = filter; + const char *testcase_cur = testcase; + const char *filter_wildcard = UTEST_NULL; + + while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) { + if ('*' == *filter_cur) { + /* store the position of the wildcard */ + filter_wildcard = filter_cur; + + /* skip the wildcard character */ + filter_cur++; + + while (('\0' != *filter_cur) && ('\0' != *testcase_cur)) { + if ('*' == *filter_cur) { + /* + we found another wildcard (filter is something like *foo*) so we + exit the current loop, and return to the parent loop to handle + the wildcard case + */ + break; + } else if (*filter_cur != *testcase_cur) { + /* otherwise our filter didn't match, so reset it */ + filter_cur = filter_wildcard; + } + + /* move testcase along */ + testcase_cur++; + + /* move filter along */ + filter_cur++; + } + + if (('\0' == *filter_cur) && ('\0' == *testcase_cur)) { + return 0; + } + + /* if the testcase has been exhausted, we don't have a match! */ + if ('\0' == *testcase_cur) { + return 1; + } + } else { + if (*testcase_cur != *filter_cur) { + /* test case doesn't match filter */ + return 1; + } else { + /* move our filter and testcase forward */ + testcase_cur++; + filter_cur++; + } + } + } + + if (('\0' != *filter_cur) || + (('\0' != *testcase_cur) && + ((filter == filter_cur) || ('*' != filter_cur[-1])))) { + /* we have a mismatch! */ + return 1; + } + } + + return 0; +} + +static UTEST_INLINE FILE *utest_fopen(const char *filename, const char *mode) { +#ifdef _MSC_VER + FILE *file; + if (0 == fopen_s(&file, filename, mode)) { + return file; + } else { + return UTEST_NULL; + } +#else + return fopen(filename, mode); +#endif +} + +static UTEST_INLINE int utest_main(int argc, const char *const argv[]); +int utest_main(int argc, const char *const argv[]) { + utest_uint64_t failed = 0; + utest_uint64_t skipped = 0; + size_t index = 0; + size_t *failed_testcases = UTEST_NULL; + size_t failed_testcases_length = 0; + size_t *skipped_testcases = UTEST_NULL; + size_t skipped_testcases_length = 0; + const char *filter = UTEST_NULL; + utest_uint64_t ran_tests = 0; + int enable_mixed_units = 0; + int random_order = 0; + utest_uint32_t seed = 0; + + enum colours { RESET, GREEN, RED, YELLOW }; + + const int use_colours = UTEST_COLOUR_OUTPUT(); + const char *colours[] = {"\033[0m", "\033[32m", "\033[31m", "\033[33m"}; + + if (!use_colours) { + for (index = 0; index < sizeof colours / sizeof colours[0]; index++) { + colours[index] = ""; + } + } + /* loop through all arguments looking for our options */ + for (index = 1; index < UTEST_CAST(size_t, argc); index++) { + /* Informational switches */ + const char help_str[] = "--help"; + const char list_str[] = "--list-tests"; + /* Test config switches */ + const char filter_str[] = "--filter="; + const char output_str[] = "--output="; + const char enable_mixed_units_str[] = "--enable-mixed-units"; + const char random_order_str[] = "--random-order"; + const char random_order_with_seed_str[] = "--random-order="; + + if (0 == UTEST_STRNCMP(argv[index], help_str, strlen(help_str))) { + printf("utest.h - the single file unit testing solution for C/C++!\n" + "Command line Options:\n" + " --help Show this message and exit.\n" + " --filter= Filter the test cases to run (EG. " + "MyTest*.a would run MyTestCase.a but not MyTestCase.b).\n" + " --list-tests List testnames, one per line. Output " + "names can be passed to --filter.\n"); + printf(" --output= Output an xunit XML file to the file " + "specified in .\n" + " --enable-mixed-units Enable the per-test output to contain " + "mixed units (s/ms/us/ns).\n" + " --random-order[=] Randomize the order that the tests are " + "ran in. If the optional argument is not provided, then a " + "random starting seed is used.\n"); + goto cleanup; + } else if (0 == + UTEST_STRNCMP(argv[index], filter_str, strlen(filter_str))) { + /* user wants to filter what test cases run! */ + filter = argv[index] + strlen(filter_str); + } else if (0 == + UTEST_STRNCMP(argv[index], output_str, strlen(output_str))) { + utest_state.output = utest_fopen(argv[index] + strlen(output_str), "w+"); + } else if (0 == UTEST_STRNCMP(argv[index], list_str, strlen(list_str))) { + for (index = 0; index < utest_state.tests_length; index++) { + UTEST_PRINTF("%s\n", utest_state.tests[index].name); + } + /* when printing the test list, don't actually run the tests */ + return 0; + } else if (0 == UTEST_STRNCMP(argv[index], enable_mixed_units_str, + strlen(enable_mixed_units_str))) { + enable_mixed_units = 1; + } else if (0 == UTEST_STRNCMP(argv[index], random_order_with_seed_str, + strlen(random_order_with_seed_str))) { + seed = + UTEST_CAST(utest_uint32_t, + strtoul(argv[index] + strlen(random_order_with_seed_str), + UTEST_NULL, 10)); + random_order = 1; + } else if (0 == UTEST_STRNCMP(argv[index], random_order_str, + strlen(random_order_str))) { + const utest_int64_t ns = utest_ns(); + + // Some really poor pseudo-random using the current time. I do this + // because I really want to avoid using C's rand() because that'd mean our + // random would be affected by any srand() usage by the user (which I + // don't want). + seed = UTEST_CAST(utest_uint32_t, ns >> 32) * 31 + + UTEST_CAST(utest_uint32_t, ns & 0xffffffff); + random_order = 1; + } + } + + if (random_order) { + // Use Fisher-Yates with the Durstenfield's version to randomly re-order the + // tests. + for (index = utest_state.tests_length; index > 1; index--) { + // For the random order we'll use PCG. + const utest_uint32_t state = seed; + const utest_uint32_t word = + ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + const utest_uint32_t next = + ((word >> 22u) ^ word) % UTEST_CAST(utest_uint32_t, index); + + // Swap the randomly chosen element into the last location. + const struct utest_test_state_s copy = utest_state.tests[index - 1]; + utest_state.tests[index - 1] = utest_state.tests[next]; + utest_state.tests[next] = copy; + + // Move the seed onwards. + seed = seed * 747796405u + 2891336453u; + } + } + + for (index = 0; index < utest_state.tests_length; index++) { + if (utest_should_filter_test(filter, utest_state.tests[index].name)) { + continue; + } + + ran_tests++; + } + + printf("%s[==========]%s Running %" UTEST_PRIu64 " test cases.\n", + colours[GREEN], colours[RESET], UTEST_CAST(utest_uint64_t, ran_tests)); + + if (utest_state.output) { + fprintf(utest_state.output, "\n"); + fprintf(utest_state.output, + "\n", + UTEST_CAST(utest_uint64_t, ran_tests)); + fprintf(utest_state.output, + "\n", + UTEST_CAST(utest_uint64_t, ran_tests)); + } + + for (index = 0; index < utest_state.tests_length; index++) { + int result = UTEST_TEST_PASSED; + utest_int64_t ns = 0; + + if (utest_should_filter_test(filter, utest_state.tests[index].name)) { + continue; + } + + printf("%s[ RUN ]%s %s\n", colours[GREEN], colours[RESET], + utest_state.tests[index].name); + + if (utest_state.output) { + fprintf(utest_state.output, "", + utest_state.tests[index].name); + } + + ns = utest_ns(); + errno = 0; +#if defined(UTEST_HAS_EXCEPTIONS) + UTEST_SURPRESS_WARNING_BEGIN + try { + utest_state.tests[index].func(&result, utest_state.tests[index].index); + } catch (const std::exception &err) { + printf(" Exception : %s\n", err.what()); + result = UTEST_TEST_FAILURE; + } catch (...) { + printf(" Exception : Unknown\n"); + result = UTEST_TEST_FAILURE; + } + UTEST_SURPRESS_WARNING_END +#else + utest_state.tests[index].func(&result, utest_state.tests[index].index); +#endif + ns = utest_ns() - ns; + + if (utest_state.output) { + fprintf(utest_state.output, "\n"); + } + + // Record the failing test. + if (UTEST_TEST_FAILURE == result) { + const size_t failed_testcase_index = failed_testcases_length++; + failed_testcases = UTEST_PTR_CAST( + size_t *, utest_realloc(UTEST_PTR_CAST(void *, failed_testcases), + sizeof(size_t) * failed_testcases_length)); + if (UTEST_NULL != failed_testcases) { + failed_testcases[failed_testcase_index] = index; + } + failed++; + } else if (UTEST_TEST_SKIPPED == result) { + const size_t skipped_testcase_index = skipped_testcases_length++; + skipped_testcases = UTEST_PTR_CAST( + size_t *, utest_realloc(UTEST_PTR_CAST(void *, skipped_testcases), + sizeof(size_t) * skipped_testcases_length)); + if (UTEST_NULL != skipped_testcases) { + skipped_testcases[skipped_testcase_index] = index; + } + skipped++; + } + + { + const char *const units[] = {"ns", "us", "ms", "s", UTEST_NULL}; + unsigned int unit_index = 0; + utest_int64_t time = ns; + + if (enable_mixed_units) { + for (unit_index = 0; UTEST_NULL != units[unit_index]; unit_index++) { + if (10000 > time) { + break; + } + + time /= 1000; + } + } + + if (UTEST_TEST_FAILURE == result) { + printf("%s[ FAILED ]%s %s (%" UTEST_PRId64 "%s)\n", colours[RED], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } else if (UTEST_TEST_SKIPPED == result) { + printf("%s[ SKIPPED ]%s %s (%" UTEST_PRId64 "%s)\n", colours[YELLOW], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } else { + printf("%s[ OK ]%s %s (%" UTEST_PRId64 "%s)\n", colours[GREEN], + colours[RESET], utest_state.tests[index].name, time, + units[unit_index]); + } + } + } + + printf("%s[==========]%s %" UTEST_PRIu64 " test cases ran.\n", colours[GREEN], + colours[RESET], ran_tests); + printf("%s[ PASSED ]%s %" UTEST_PRIu64 " tests.\n", colours[GREEN], + colours[RESET], ran_tests - failed - skipped); + + if (0 != skipped) { + printf("%s[ SKIPPED ]%s %" UTEST_PRIu64 " tests, listed below:\n", + colours[YELLOW], colours[RESET], skipped); + for (index = 0; index < skipped_testcases_length; index++) { + printf("%s[ SKIPPED ]%s %s\n", colours[YELLOW], colours[RESET], + utest_state.tests[skipped_testcases[index]].name); + } + } + + if (0 != failed) { + printf("%s[ FAILED ]%s %" UTEST_PRIu64 " tests, listed below:\n", + colours[RED], colours[RESET], failed); + for (index = 0; index < failed_testcases_length; index++) { + printf("%s[ FAILED ]%s %s\n", colours[RED], colours[RESET], + utest_state.tests[failed_testcases[index]].name); + } + } + + if (utest_state.output) { + fprintf(utest_state.output, "\n\n"); + } + +cleanup: + for (index = 0; index < utest_state.tests_length; index++) { + free(UTEST_PTR_CAST(void *, utest_state.tests[index].name)); + } + + free(UTEST_PTR_CAST(void *, skipped_testcases)); + free(UTEST_PTR_CAST(void *, failed_testcases)); + free(UTEST_PTR_CAST(void *, utest_state.tests)); + + if (utest_state.output) { + fclose(utest_state.output); + } + + return UTEST_CAST(int, failed); +} + +#if defined(__clang__) +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic pop +#endif +#endif + +/* + we need, in exactly one source file, define the global struct that will hold + the data we need to run utest. This macro allows the user to declare the + data without having to use the UTEST_MAIN macro, thus allowing them to write + their own main() function. +*/ +#define UTEST_STATE() struct utest_state_s utest_state = {0, 0, 0} + +/* + define a main() function to call into utest.h and start executing tests! A + user can optionally not use this macro, and instead define their own main() + function and manually call utest_main. The user must, in exactly one source + file, use the UTEST_STATE macro to declare a global struct variable that + utest requires. +*/ +#define UTEST_MAIN() \ + UTEST_STATE(); \ + int main(int argc, const char *const argv[]) { \ + return utest_main(argc, argv); \ + } + +#endif /* SHEREDOM_UTEST_H_INCLUDED */ diff --git a/src/utf8/test/utfmain.exe b/src/utf8/test/utfmain.exe new file mode 100644 index 0000000000000000000000000000000000000000..ba54a2222ec3129da1335798953712667e76683d GIT binary patch literal 327994 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

  • ^@%k*@6tgu~+I2?mHN+Sf_ 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%0An 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 XHG7a^ziUf$tFJhi<>)r=cjo^GCc~J_ literal 0 HcmV?d00001 diff --git "a/src/utf8/utf8 - c\303\262pia.h" "b/src/utf8/utf8 - c\303\262pia.h" new file mode 100644 index 0000000..5652fe2 --- /dev/null +++ "b/src/utf8/utf8 - c\303\262pia.h" @@ -0,0 +1,1693 @@ +/* The latest version of this library is available on GitHub; + * https://github.com/sheredom/utf8.h */ + +/* This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * For more information, please refer to */ + +#ifndef SHEREDOM_UTF8_H_INCLUDED +#define SHEREDOM_UTF8_H_INCLUDED + +#if defined(_MSC_VER) +#pragma warning(push) + +/* disable warning: no function prototype given: converting '()' to '(void)' */ +#pragma warning(disable : 4255) + +/* disable warning: '__cplusplus' is not defined as a preprocessor macro, + * replacing with '0' for '#if/#elif' */ +#pragma warning(disable : 4668) + +/* disable warning: bytes padding added after construct */ +#pragma warning(disable : 4820) +#endif + +#include +#include + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +typedef __int32 utf8_int32_t; +#else +#include +typedef int32_t utf8_int32_t; +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wcast-qual" + +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_MSC_VER) +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict __restrict +#define utf8_weak __inline +#elif defined(__clang__) || defined(__GNUC__) +#define utf8_nonnull __attribute__((nonnull)) +#define utf8_pure __attribute__((pure)) +#define utf8_restrict __restrict__ +#define utf8_weak __attribute__((weak)) +#else +#error Non clang, non gcc, non MSVC compiler found! +#endif + +#ifdef __cplusplus +#define utf8_null NULL +#else +#define utf8_null 0 +#endif + +#if (defined(__cplusplus) && __cplusplus >= 201402L) +#define utf8_constexpr14 constexpr +#define utf8_constexpr14_impl constexpr +#else +/* constexpr and weak are incompatible. so only enable one of them */ +#define utf8_constexpr14 utf8_weak +#define utf8_constexpr14_impl +#endif + +#if defined(__cplusplus) && __cplusplus >= 202002L +using utf8_int8_t = char8_t; /* Introduced in C++20 */ +#else +typedef char utf8_int8_t; +#endif + +/* Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > + * src2 respectively, case insensitive. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8casecmp(const utf8_int8_t *src1, const utf8_int8_t *src2); + +/* Append the utf8 string src onto the utf8 string dst. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8cat(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src); + +/* Find the first match of the utf8 codepoint chr in the utf8 string src. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8chr(const utf8_int8_t *src, utf8_int32_t chr); + +/* Return less than 0, 0, greater than 0 if src1 < src2, + * src1 == src2, src1 > src2 respectively. */ +utf8_constexpr14 utf8_nonnull utf8_pure int utf8cmp(const utf8_int8_t *src1, + const utf8_int8_t *src2); + +/* Copy the utf8 string src onto the memory allocated in dst. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8cpy(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src); + +/* Number of utf8 codepoints in the utf8 string src that consists entirely + * of utf8 codepoints not from the utf8 string reject. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8cspn(const utf8_int8_t *src, const utf8_int8_t *reject); + +/* Duplicate the utf8 string src by getting its size, malloc'ing a new buffer + * copying over the data, and returning that. Or 0 if malloc failed. */ +utf8_weak utf8_int8_t *utf8dup(const utf8_int8_t *src); + +/* Number of utf8 codepoints in the utf8 string str, + * excluding the null terminating byte. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8len(const utf8_int8_t *str); + +/* Similar to utf8len, except that only at most n bytes of src are looked. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8nlen(const utf8_int8_t *str, + size_t n); + +/* Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > + * src2 respectively, case insensitive. Checking at most n bytes of each utf8 + * string. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8ncasecmp(const utf8_int8_t *src1, const utf8_int8_t *src2, size_t n); + +/* Append the utf8 string src onto the utf8 string dst, + * writing at most n+1 bytes. Can produce an invalid utf8 + * string if n falls partway through a utf8 codepoint. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8ncat(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src, + size_t n); + +/* Return less than 0, 0, greater than 0 if src1 < src2, + * src1 == src2, src1 > src2 respectively. Checking at most n + * bytes of each utf8 string. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8ncmp(const utf8_int8_t *src1, const utf8_int8_t *src2, size_t n); + +/* Copy the utf8 string src onto the memory allocated in dst. + * Copies at most n bytes. If n falls partway through a utf8 + * codepoint, or if dst doesn't have enough room for a null + * terminator, the final string will be cut short to preserve + * utf8 validity. */ + +utf8_nonnull utf8_weak utf8_int8_t * +utf8ncpy(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src, + size_t n); + +/* Similar to utf8dup, except that at most n bytes of src are copied. If src is + * longer than n, only n bytes are copied and a null byte is added. + * + * Returns a new string if successful, 0 otherwise */ +utf8_weak utf8_int8_t *utf8ndup(const utf8_int8_t *src, size_t n); + +/* Locates the first occurrence in the utf8 string str of any byte in the + * utf8 string accept, or 0 if no match was found. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8pbrk(const utf8_int8_t *str, const utf8_int8_t *accept); + +/* Find the last match of the utf8 codepoint chr in the utf8 string src. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8rchr(const utf8_int8_t *src, int chr); + +/* Number of bytes in the utf8 string str, + * including the null terminating byte. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8size(const utf8_int8_t *str); + +/* Similar to utf8size, except that the null terminating byte is excluded. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8size_lazy(const utf8_int8_t *str); + +/* Similar to utf8size, except that only at most n bytes of src are looked and + * the null terminating byte is excluded. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8nsize_lazy(const utf8_int8_t *str, size_t n); + +/* Number of utf8 codepoints in the utf8 string src that consists entirely + * of utf8 codepoints from the utf8 string accept. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8spn(const utf8_int8_t *src, const utf8_int8_t *accept); + +/* The position of the utf8 string needle in the utf8 string haystack. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8str(const utf8_int8_t *haystack, const utf8_int8_t *needle); + +/* The position of the utf8 string needle in the utf8 string haystack, case + * insensitive. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8casestr(const utf8_int8_t *haystack, const utf8_int8_t *needle); + +/* Return 0 on success, or the position of the invalid + * utf8 codepoint on failure. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8valid(const utf8_int8_t *str); + +/* Similar to utf8valid, except that only at most n bytes of src are looked. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8nvalid(const utf8_int8_t *str, size_t n); + +/* Given a null-terminated string, makes the string valid by replacing invalid + * codepoints with a 1-byte replacement. Returns 0 on success. */ +utf8_nonnull utf8_weak int utf8makevalid(utf8_int8_t *str, + const utf8_int32_t replacement); + +/* Sets out_codepoint to the current utf8 codepoint in str, and returns the + * address of the next utf8 codepoint after the current one in str. */ +utf8_constexpr14 utf8_nonnull utf8_int8_t * +utf8codepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +/* Calculates the size of the next utf8 codepoint in str. */ +utf8_constexpr14 utf8_nonnull size_t +utf8codepointcalcsize(const utf8_int8_t *str); + +/* Returns the size of the given codepoint in bytes. */ +utf8_constexpr14 size_t utf8codepointsize(utf8_int32_t chr); + +/* Write a codepoint to the given string, and return the address to the next + * place after the written codepoint. Pass how many bytes left in the buffer to + * n. If there is not enough space for the codepoint, this function returns + * null. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8catcodepoint(utf8_int8_t *str, utf8_int32_t chr, size_t n); + +/* Returns 1 if the given character is lowercase, or 0 if it is not. */ +utf8_constexpr14 int utf8islower(utf8_int32_t chr); + +/* Returns 1 if the given character is uppercase, or 0 if it is not. */ +utf8_constexpr14 int utf8isupper(utf8_int32_t chr); + +/* Transform the given string into all lowercase codepoints. */ +utf8_nonnull utf8_weak void utf8lwr(utf8_int8_t *utf8_restrict str); + +/* Transform the given string into all uppercase codepoints. */ +utf8_nonnull utf8_weak void utf8upr(utf8_int8_t *utf8_restrict str); + +/* Make a codepoint lower case if possible. */ +utf8_constexpr14 utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); + +/* Make a codepoint upper case if possible. */ +utf8_constexpr14 utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); + +/* Sets out_codepoint to the current utf8 codepoint in str, and returns the + * address of the previous utf8 codepoint before the current one in str. */ +utf8_constexpr14 utf8_nonnull utf8_int8_t * +utf8rcodepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +/* Duplicate the utf8 string src by getting its size, calling alloc_func_ptr to + * copy over data to a new buffer, and returning that. Or 0 if alloc_func_ptr + * returned null. */ +utf8_weak utf8_int8_t *utf8dup_ex(const utf8_int8_t *src, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, + size_t), + utf8_int8_t *user_data); + +/* Similar to utf8dup, except that at most n bytes of src are copied. If src is + * longer than n, only n bytes are copied and a null byte is added. + * + * Returns a new string if successful, 0 otherwise. */ +utf8_weak utf8_int8_t *utf8ndup_ex(const utf8_int8_t *src, size_t n, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, + size_t), + utf8_int8_t *user_data); + +#undef utf8_weak +#undef utf8_pure +#undef utf8_nonnull + +utf8_constexpr14_impl int utf8casecmp(const utf8_int8_t *src1, + const utf8_int8_t *src2) { + utf8_int32_t src1_lwr_cp = 0, src2_lwr_cp = 0, src1_upr_cp = 0, + src2_upr_cp = 0, src1_orig_cp = 0, src2_orig_cp = 0; + + for (;;) { + src1 = utf8codepoint(src1, &src1_orig_cp); + src2 = utf8codepoint(src2, &src2_orig_cp); + + /* lower the srcs if required */ + src1_lwr_cp = utf8lwrcodepoint(src1_orig_cp); + src2_lwr_cp = utf8lwrcodepoint(src2_orig_cp); + + /* lower the srcs if required */ + src1_upr_cp = utf8uprcodepoint(src1_orig_cp); + src2_upr_cp = utf8uprcodepoint(src2_orig_cp); + + /* check if the lowered codepoints match */ + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if ((src1_lwr_cp == src2_lwr_cp) || (src1_upr_cp == src2_upr_cp)) { + continue; + } + + /* if they don't match, then we return the difference between the characters + */ + return src1_lwr_cp - src2_lwr_cp; + } +} + +utf8_int8_t *utf8cat(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src) { + utf8_int8_t *d = dst; + /* find the null terminating byte in dst */ + while ('\0' != *d) { + d++; + } + + /* overwriting the null terminating byte in dst, append src byte-by-byte */ + while ('\0' != *src) { + *d++ = *src++; + } + + /* write out a new null terminating byte into dst */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl utf8_int8_t *utf8chr(const utf8_int8_t *src, + utf8_int32_t chr) { + utf8_int8_t c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + /* being asked to return position of null terminating byte, so + * just run s to the end, and return! */ + while ('\0' != *src) { + src++; + } + return (utf8_int8_t *)src; + } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + c[0] = (utf8_int8_t)chr; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)(chr >> 6)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)(chr >> 12)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)(chr >> 18)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } + + /* we've made c into a 2 utf8 codepoint string, one for the chr we are + * seeking, another for the null terminating byte. Now use utf8str to + * search */ + return utf8str(src, c); +} + +utf8_constexpr14_impl int utf8cmp(const utf8_int8_t *src1, + const utf8_int8_t *src2) { + while (('\0' != *src1) || ('\0' != *src2)) { + if (*src1 < *src2) { + return -1; + } else if (*src1 > *src2) { + return 1; + } + + src1++; + src2++; + } + + /* both utf8 strings matched */ + return 0; +} + +utf8_constexpr14_impl int utf8coll(const utf8_int8_t *src1, + const utf8_int8_t *src2); + +utf8_int8_t *utf8cpy(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src) { + utf8_int8_t *d = dst; + + /* overwriting anything previously in dst, write byte-by-byte + * from src */ + while ('\0' != *src) { + *d++ = *src++; + } + + /* append null terminating byte */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl size_t utf8cspn(const utf8_int8_t *src, + const utf8_int8_t *reject) { + size_t chars = 0; + + while ('\0' != *src) { + const utf8_int8_t *r = reject; + size_t offset = 0; + + while ('\0' != *r) { + /* checking that if *r is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *r)) && (0 < offset)) { + return chars; + } else { + if (*r == src[offset]) { + /* part of a utf8 codepoint matched, so move our checking + * onwards to the next byte */ + offset++; + r++; + } else { + /* r could be in the middle of an unmatching utf8 code point, + * so we need to march it on to the next character beginning, */ + + do { + r++; + } while (0x80 == (0xc0 & *r)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* found a match at the end of *r, so didn't get a chance to test it */ + if (0 < offset) { + return chars; + } + + /* the current utf8 codepoint in src did not match reject, but src + * could have been partway through a utf8 codepoint, so we need to + * march it onto the next utf8 codepoint starting byte */ + do { + src++; + } while ((0x80 == (0xc0 & *src))); + chars++; + } + + return chars; +} + +utf8_int8_t *utf8dup(const utf8_int8_t *src) { + return utf8dup_ex(src, utf8_null, utf8_null); +} + +utf8_int8_t *utf8dup_ex(const utf8_int8_t *src, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, size_t), + utf8_int8_t *user_data) { + utf8_int8_t *n = utf8_null; + + /* figure out how many bytes (including the terminator) we need to copy first + */ + size_t bytes = utf8size(src); + + if (alloc_func_ptr) { + n = alloc_func_ptr(user_data, bytes); + } else { +#if !defined(UTF8_NO_STD_MALLOC) + n = (utf8_int8_t *)malloc(bytes); +#else + return utf8_null; +#endif + } + + if (utf8_null == n) { + /* out of memory so we bail */ + return utf8_null; + } else { + bytes = 0; + + /* copy src byte-by-byte into our new utf8 string */ + while ('\0' != src[bytes]) { + n[bytes] = src[bytes]; + bytes++; + } + + /* append null terminating byte */ + n[bytes] = '\0'; + return n; + } +} + +utf8_constexpr14_impl utf8_int8_t *utf8fry(const utf8_int8_t *str); + +utf8_constexpr14_impl size_t utf8len(const utf8_int8_t *str) { + return utf8nlen(str, SIZE_MAX); +} + +utf8_constexpr14_impl size_t utf8nlen(const utf8_int8_t *str, size_t n) { + const utf8_int8_t *t = str; + size_t length = 0; + + while ((size_t)(str - t) < n && '\0' != *str) { + if (0xf0 == (0xf8 & *str)) { + /* 4-byte utf8 code point (began with 0b11110xxx) */ + str += 4; + } else if (0xe0 == (0xf0 & *str)) { + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + str += 3; + } else if (0xc0 == (0xe0 & *str)) { + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + str += 2; + } else { /* if (0x00 == (0x80 & *s)) { */ + /* 1-byte ascii (began with 0b0xxxxxxx) */ + str += 1; + } + + /* no matter the bytes we marched s forward by, it was + * only 1 utf8 codepoint */ + length++; + } + + if ((size_t)(str - t) > n) { + length--; + } + return length; +} + +utf8_constexpr14_impl int utf8ncasecmp(const utf8_int8_t *src1, + const utf8_int8_t *src2, size_t n) { + utf8_int32_t src1_lwr_cp = 0, src2_lwr_cp = 0, src1_upr_cp = 0, + src2_upr_cp = 0, src1_orig_cp = 0, src2_orig_cp = 0; + + do { + const utf8_int8_t *const s1 = src1; + const utf8_int8_t *const s2 = src2; + + /* first check that we have enough bytes left in n to contain an entire + * codepoint */ + if (0 == n) { + return 0; + } + + if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { + const utf8_int32_t c1 = (0xe0 & *s1); + const utf8_int32_t c2 = (0xe0 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { + const utf8_int32_t c1 = (0xf0 & *s1); + const utf8_int32_t c2 = (0xf0 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { + const utf8_int32_t c1 = (0xf8 & *s1); + const utf8_int32_t c2 = (0xf8 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + src1 = utf8codepoint(src1, &src1_orig_cp); + src2 = utf8codepoint(src2, &src2_orig_cp); + n -= utf8codepointsize(src1_orig_cp); + + src1_lwr_cp = utf8lwrcodepoint(src1_orig_cp); + src2_lwr_cp = utf8lwrcodepoint(src2_orig_cp); + + src1_upr_cp = utf8uprcodepoint(src1_orig_cp); + src2_upr_cp = utf8uprcodepoint(src2_orig_cp); + + /* check if the lowered codepoints match */ + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if ((src1_lwr_cp == src2_lwr_cp) || (src1_upr_cp == src2_upr_cp)) { + continue; + } + + /* if they don't match, then we return the difference between the characters + */ + return src1_lwr_cp - src2_lwr_cp; + } while (0 < n); + + /* both utf8 strings matched */ + return 0; +} + +utf8_int8_t *utf8ncat(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src, size_t n) { + utf8_int8_t *d = dst; + + /* find the null terminating byte in dst */ + while ('\0' != *d) { + d++; + } + + /* overwriting the null terminating byte in dst, append src byte-by-byte + * stopping if we run out of space */ + while (('\0' != *src) && (0 != n--)) { + *d++ = *src++; + } + + /* write out a new null terminating byte into dst */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl int utf8ncmp(const utf8_int8_t *src1, + const utf8_int8_t *src2, size_t n) { + while ((0 != n--) && (('\0' != *src1) || ('\0' != *src2))) { + if (*src1 < *src2) { + return -1; + } else if (*src1 > *src2) { + return 1; + } + + src1++; + src2++; + } + + /* both utf8 strings matched */ + return 0; +} + +utf8_int8_t *utf8ncpy(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src, size_t n) { + utf8_int8_t *d = dst; + size_t index = 0, check_index = 0; + + if (n == 0) { + return dst; + } + + /* overwriting anything previously in dst, write byte-by-byte + * from src */ + for (index = 0; index < n; index++) { + d[index] = src[index]; + if ('\0' == src[index]) { + break; + } + } + + for (check_index = index - 1; + check_index > 0 && 0x80 == (0xc0 & d[check_index]); check_index--) { + /* just moving the index */ + } + + if (check_index < index && + ((index - check_index) < utf8codepointcalcsize(&d[check_index]) || + (index - check_index) == n)) { + index = check_index; + } + + /* append null terminating byte */ + for (; index < n; index++) { + d[index] = 0; + } + + return dst; +} + +utf8_int8_t *utf8ndup(const utf8_int8_t *src, size_t n) { + return utf8ndup_ex(src, n, utf8_null, utf8_null); +} + +utf8_int8_t *utf8ndup_ex(const utf8_int8_t *src, size_t n, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, size_t), + utf8_int8_t *user_data) { + utf8_int8_t *c = utf8_null; + size_t bytes = 0; + + /* Find the end of the string or stop when n is reached */ + while ('\0' != src[bytes] && bytes < n) { + bytes++; + } + + /* In case bytes is actually less than n, we need to set it + * to be used later in the copy byte by byte. */ + n = bytes; + + if (alloc_func_ptr) { + c = alloc_func_ptr(user_data, bytes + 1); + } else { +#if !defined(UTF8_NO_STD_MALLOC) + c = (utf8_int8_t *)malloc(bytes + 1); +#else + c = utf8_null; +#endif + } + + if (utf8_null == c) { + /* out of memory so we bail */ + return utf8_null; + } + + bytes = 0; + + /* copy src byte-by-byte into our new utf8 string */ + while ('\0' != src[bytes] && bytes < n) { + c[bytes] = src[bytes]; + bytes++; + } + + /* append null terminating byte */ + c[bytes] = '\0'; + return c; +} + +utf8_constexpr14_impl utf8_int8_t *utf8rchr(const utf8_int8_t *src, int chr) { + + utf8_int8_t *match = utf8_null; + utf8_int8_t c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + /* being asked to return position of null terminating byte, so + * just run s to the end, and return! */ + while ('\0' != *src) { + src++; + } + return (utf8_int8_t *)src; + } else if (0 == ((int)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + c[0] = (utf8_int8_t)chr; + } else if (0 == ((int)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)(chr >> 6)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else if (0 == ((int)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)(chr >> 12)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)(chr >> 18)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } + + /* we've created a 2 utf8 codepoint string in c that is + * the utf8 character asked for by chr, and a null + * terminating byte */ + + while ('\0' != *src) { + size_t offset = 0; + + while ((src[offset] == c[offset]) && ('\0' != src[offset])) { + offset++; + } + + if ('\0' == c[offset]) { + /* we found a matching utf8 code point */ + match = (utf8_int8_t *)src; + src += offset; + + if ('\0' == *src) { + break; + } + } else { + src += offset; + + /* need to march s along to next utf8 codepoint start + * (the next byte that doesn't match 0b10xxxxxx) */ + if ('\0' != *src) { + do { + src++; + } while (0x80 == (0xc0 & *src)); + } + } + } + + /* return the last match we found (or 0 if no match was found) */ + return match; +} + +utf8_constexpr14_impl utf8_int8_t *utf8pbrk(const utf8_int8_t *str, + const utf8_int8_t *accept) { + while ('\0' != *str) { + const utf8_int8_t *a = accept; + size_t offset = 0; + + while ('\0' != *a) { + /* checking that if *a is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + return (utf8_int8_t *)str; + } else { + if (*a == str[offset]) { + /* part of a utf8 codepoint matched, so move our checking + * onwards to the next byte */ + offset++; + a++; + } else { + /* r could be in the middle of an unmatching utf8 code point, + * so we need to march it on to the next character beginning, */ + + do { + a++; + } while (0x80 == (0xc0 & *a)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* we found a match on the last utf8 codepoint */ + if (0 < offset) { + return (utf8_int8_t *)str; + } + + /* the current utf8 codepoint in src did not match accept, but src + * could have been partway through a utf8 codepoint, so we need to + * march it onto the next utf8 codepoint starting byte */ + do { + str++; + } while ((0x80 == (0xc0 & *str))); + } + + return utf8_null; +} + +utf8_constexpr14_impl size_t utf8size(const utf8_int8_t *str) { + return utf8size_lazy(str) + 1; +} + +utf8_constexpr14_impl size_t utf8size_lazy(const utf8_int8_t *str) { + return utf8nsize_lazy(str, SIZE_MAX); +} + +utf8_constexpr14_impl size_t utf8nsize_lazy(const utf8_int8_t *str, size_t n) { + size_t size = 0; + while (size < n && '\0' != str[size]) { + size++; + } + return size; +} + +utf8_constexpr14_impl size_t utf8spn(const utf8_int8_t *src, + const utf8_int8_t *accept) { + size_t chars = 0; + + while ('\0' != *src) { + const utf8_int8_t *a = accept; + size_t offset = 0; + + while ('\0' != *a) { + /* checking that if *r is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + /* found a match, so increment the number of utf8 codepoints + * that have matched and stop checking whether any other utf8 + * codepoints in a match */ + chars++; + src += offset; + offset = 0; + break; + } else { + if (*a == src[offset]) { + offset++; + a++; + } else { + /* a could be in the middle of an unmatching utf8 codepoint, + * so we need to march it on to the next character beginning, */ + do { + a++; + } while (0x80 == (0xc0 & *a)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* found a match at the end of *a, so didn't get a chance to test it */ + if (0 < offset) { + chars++; + src += offset; + continue; + } + + /* if a got to its terminating null byte, then we didn't find a match. + * Return the current number of matched utf8 codepoints */ + if ('\0' == *a) { + return chars; + } + } + + return chars; +} + +utf8_constexpr14_impl utf8_int8_t *utf8str(const utf8_int8_t *haystack, + const utf8_int8_t *needle) { + utf8_int32_t throwaway_codepoint = 0; + + /* if needle has no utf8 codepoints before the null terminating + * byte then return haystack */ + if ('\0' == *needle) { + return (utf8_int8_t *)haystack; + } + + while ('\0' != *haystack) { + const utf8_int8_t *maybeMatch = haystack; + const utf8_int8_t *n = needle; + + while (*haystack == *n && (*haystack != '\0' && *n != '\0')) { + n++; + haystack++; + } + + if ('\0' == *n) { + /* we found the whole utf8 string for needle in haystack at + * maybeMatch, so return it */ + return (utf8_int8_t *)maybeMatch; + } else { + /* h could be in the middle of an unmatching utf8 codepoint, + * so we need to march it on to the next character beginning + * starting from the current character */ + haystack = utf8codepoint(maybeMatch, &throwaway_codepoint); + } + } + + /* no match */ + return utf8_null; +} + +utf8_constexpr14_impl utf8_int8_t *utf8casestr(const utf8_int8_t *haystack, + const utf8_int8_t *needle) { + /* if needle has no utf8 codepoints before the null terminating + * byte then return haystack */ + if ('\0' == *needle) { + return (utf8_int8_t *)haystack; + } + + for (;;) { + const utf8_int8_t *maybeMatch = haystack; + const utf8_int8_t *n = needle; + utf8_int32_t h_cp = 0, n_cp = 0; + + /* Get the next code point and track it */ + const utf8_int8_t *nextH = haystack = utf8codepoint(haystack, &h_cp); + n = utf8codepoint(n, &n_cp); + + while ((0 != h_cp) && (0 != n_cp)) { + h_cp = utf8lwrcodepoint(h_cp); + n_cp = utf8lwrcodepoint(n_cp); + + /* if we find a mismatch, bail out! */ + if (h_cp != n_cp) { + break; + } + + haystack = utf8codepoint(haystack, &h_cp); + n = utf8codepoint(n, &n_cp); + } + + if (0 == n_cp) { + /* we found the whole utf8 string for needle in haystack at + * maybeMatch, so return it */ + return (utf8_int8_t *)maybeMatch; + } + + if (0 == h_cp) { + /* no match */ + return utf8_null; + } + + /* Roll back to the next code point in the haystack to test */ + haystack = nextH; + } +} + +utf8_constexpr14_impl utf8_int8_t *utf8valid(const utf8_int8_t *str) { + return utf8nvalid(str, SIZE_MAX); +} + +utf8_constexpr14_impl utf8_int8_t *utf8nvalid(const utf8_int8_t *str, + size_t n) { + const utf8_int8_t *t = str; + size_t consumed = 0; + + while ((void)(consumed = (size_t)(str - t)), consumed < n && '\0' != *str) { + const size_t remaining = n - consumed; + + if (0xf0 == (0xf8 & *str)) { + /* ensure that there's 4 bytes or more remaining */ + if (remaining < 4) { + return (utf8_int8_t *)str; + } + + /* ensure each of the 3 following bytes in this 4-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & str[1])) || (0x80 != (0xc0 & str[2])) || + (0x80 != (0xc0 & str[3]))) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 4 bytes */ + if ((remaining != 4) && (0x80 == (0xc0 & str[4]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 5 bits of this 4-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if ((0 == (0x07 & str[0])) && (0 == (0x30 & str[1]))) { + return (utf8_int8_t *)str; + } + + /* 4-byte utf8 code point (began with 0b11110xxx) */ + str += 4; + } else if (0xe0 == (0xf0 & *str)) { + /* ensure that there's 3 bytes or more remaining */ + if (remaining < 3) { + return (utf8_int8_t *)str; + } + + /* ensure each of the 2 following bytes in this 3-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & str[1])) || (0x80 != (0xc0 & str[2]))) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 3 bytes */ + if ((remaining != 3) && (0x80 == (0xc0 & str[3]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 5 bits of this 3-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if ((0 == (0x0f & str[0])) && (0 == (0x20 & str[1]))) { + return (utf8_int8_t *)str; + } + + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + str += 3; + } else if (0xc0 == (0xe0 & *str)) { + /* ensure that there's 2 bytes or more remaining */ + if (remaining < 2) { + return (utf8_int8_t *)str; + } + + /* ensure the 1 following byte in this 2-byte + * utf8 codepoint began with 0b10xxxxxx */ + if (0x80 != (0xc0 & str[1])) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 2 bytes */ + if ((remaining != 2) && (0x80 == (0xc0 & str[2]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 4 bits of this 2-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if (0 == (0x1e & str[0])) { + return (utf8_int8_t *)str; + } + + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + str += 2; + } else if (0x00 == (0x80 & *str)) { + /* 1-byte ascii (began with 0b0xxxxxxx) */ + str += 1; + } else { + /* we have an invalid 0b1xxxxxxx utf8 code point entry */ + return (utf8_int8_t *)str; + } + } + + return utf8_null; +} + +int utf8makevalid(utf8_int8_t *str, const utf8_int32_t replacement) { + utf8_int8_t *read = str; + utf8_int8_t *write = read; + const utf8_int8_t r = (utf8_int8_t)replacement; + utf8_int32_t codepoint = 0; + + if (replacement > 0x7f) { + return -1; + } + + while ('\0' != *read) { + if (0xf0 == (0xf8 & *read)) { + /* ensure each of the 3 following bytes in this 4-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & read[1])) || (0x80 != (0xc0 & read[2])) || + (0x80 != (0xc0 & read[3]))) { + *write++ = r; + read++; + continue; + } + + /* 4-byte utf8 code point (began with 0b11110xxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 4); + } else if (0xe0 == (0xf0 & *read)) { + /* ensure each of the 2 following bytes in this 3-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & read[1])) || (0x80 != (0xc0 & read[2]))) { + *write++ = r; + read++; + continue; + } + + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 3); + } else if (0xc0 == (0xe0 & *read)) { + /* ensure the 1 following byte in this 2-byte + * utf8 codepoint began with 0b10xxxxxx */ + if (0x80 != (0xc0 & read[1])) { + *write++ = r; + read++; + continue; + } + + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 2); + } else if (0x00 == (0x80 & *read)) { + /* 1-byte ascii (began with 0b0xxxxxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 1); + } else { + /* if we got here then we've got a dangling continuation (0b10xxxxxx) */ + *write++ = r; + read++; + continue; + } + } + + *write = '\0'; + + return 0; +} + +utf8_constexpr14_impl utf8_int8_t * +utf8codepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) { + if (0xf0 == (0xf8 & str[0])) { + /* 4 byte utf8 codepoint */ + *out_codepoint = ((0x07 & str[0]) << 18) | ((0x3f & str[1]) << 12) | + ((0x3f & str[2]) << 6) | (0x3f & str[3]); + str += 4; + } else if (0xe0 == (0xf0 & str[0])) { + /* 3 byte utf8 codepoint */ + *out_codepoint = + ((0x0f & str[0]) << 12) | ((0x3f & str[1]) << 6) | (0x3f & str[2]); + str += 3; + } else if (0xc0 == (0xe0 & str[0])) { + /* 2 byte utf8 codepoint */ + *out_codepoint = ((0x1f & str[0]) << 6) | (0x3f & str[1]); + str += 2; + } else { + /* 1 byte utf8 codepoint otherwise */ + *out_codepoint = str[0]; + str += 1; + } + + return (utf8_int8_t *)str; +} + +utf8_constexpr14_impl size_t utf8codepointcalcsize(const utf8_int8_t *str) { + if (0xf0 == (0xf8 & str[0])) { + /* 4 byte utf8 codepoint */ + return 4; + } else if (0xe0 == (0xf0 & str[0])) { + /* 3 byte utf8 codepoint */ + return 3; + } else if (0xc0 == (0xe0 & str[0])) { + /* 2 byte utf8 codepoint */ + return 2; + } + + /* 1 byte utf8 codepoint otherwise */ + return 1; +} + +utf8_constexpr14_impl size_t utf8codepointsize(utf8_int32_t chr) { + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + return 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + return 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + return 3; + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + return 4; + } +} + +utf8_int8_t *utf8catcodepoint(utf8_int8_t *str, utf8_int32_t chr, size_t n) { + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + if (n < 1) { + return utf8_null; + } + str[0] = (utf8_int8_t)chr; + str += 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + if (n < 2) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)((chr >> 6) & 0x1f)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + if (n < 3) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)((chr >> 12) & 0x0f)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + str[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 3; + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + if (n < 4) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)((chr >> 18) & 0x07)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + str[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + str[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 4; + } + + return str; +} + +utf8_constexpr14_impl int utf8islower(utf8_int32_t chr) { + return chr != utf8uprcodepoint(chr); +} + +utf8_constexpr14_impl int utf8isupper(utf8_int32_t chr) { + return chr != utf8lwrcodepoint(chr); +} + +void utf8lwr(utf8_int8_t *utf8_restrict str) { + utf8_int32_t cp = 0; + utf8_int8_t *pn = utf8codepoint(str, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(str, lwr_cp, size); + } + + str = pn; + pn = utf8codepoint(str, &cp); + } +} + +void utf8upr(utf8_int8_t *utf8_restrict str) { + utf8_int32_t cp = 0; + utf8_int8_t *pn = utf8codepoint(str, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(str, lwr_cp, size); + } + + str = pn; + pn = utf8codepoint(str, &cp); + } +} + +utf8_constexpr14_impl utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) { + if (((0x0041 <= cp) && (0x005a >= cp)) || + ((0x00c0 <= cp) && (0x00d6 >= cp)) || + ((0x00d8 <= cp) && (0x00de >= cp)) || + ((0x0391 <= cp) && (0x03a1 >= cp)) || + ((0x03a3 <= cp) && (0x03ab >= cp)) || + ((0x0410 <= cp) && (0x042f >= cp))) { + cp += 32; + } else if ((0x0400 <= cp) && (0x040f >= cp)) { + cp += 80; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp)) || + ((0x0460 <= cp) && (0x0481 >= cp)) || + ((0x048a <= cp) && (0x04ff >= cp))) { + cp |= 0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp += 1; + cp &= ~0x1; + } else { + switch (cp) { + default: + break; + case 0x0178: + cp = 0x00ff; + break; + case 0x0243: + cp = 0x0180; + break; + case 0x018e: + cp = 0x01dd; + break; + case 0x023d: + cp = 0x019a; + break; + case 0x0220: + cp = 0x019e; + break; + case 0x01b7: + cp = 0x0292; + break; + case 0x01c4: + cp = 0x01c6; + break; + case 0x01c7: + cp = 0x01c9; + break; + case 0x01ca: + cp = 0x01cc; + break; + case 0x01f1: + cp = 0x01f3; + break; + case 0x01f7: + cp = 0x01bf; + break; + case 0x0187: + cp = 0x0188; + break; + case 0x018b: + cp = 0x018c; + break; + case 0x0191: + cp = 0x0192; + break; + case 0x0198: + cp = 0x0199; + break; + case 0x01a7: + cp = 0x01a8; + break; + case 0x01ac: + cp = 0x01ad; + break; + case 0x01b8: + cp = 0x01b9; + break; + case 0x01bc: + cp = 0x01bd; + break; + case 0x01f4: + cp = 0x01f5; + break; + case 0x023b: + cp = 0x023c; + break; + case 0x0241: + cp = 0x0242; + break; + case 0x03fd: + cp = 0x037b; + break; + case 0x03fe: + cp = 0x037c; + break; + case 0x03ff: + cp = 0x037d; + break; + case 0x037f: + cp = 0x03f3; + break; + case 0x0386: + cp = 0x03ac; + break; + case 0x0388: + cp = 0x03ad; + break; + case 0x0389: + cp = 0x03ae; + break; + case 0x038a: + cp = 0x03af; + break; + case 0x038c: + cp = 0x03cc; + break; + case 0x038e: + cp = 0x03cd; + break; + case 0x038f: + cp = 0x03ce; + break; + case 0x0370: + cp = 0x0371; + break; + case 0x0372: + cp = 0x0373; + break; + case 0x0376: + cp = 0x0377; + break; + case 0x03f4: + cp = 0x03b8; + break; + case 0x03cf: + cp = 0x03d7; + break; + case 0x03f9: + cp = 0x03f2; + break; + case 0x03f7: + cp = 0x03f8; + break; + case 0x03fa: + cp = 0x03fb; + break; + } + } + + return cp; +} + +utf8_constexpr14_impl utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) { + if (((0x0061 <= cp) && (0x007a >= cp)) || + ((0x00e0 <= cp) && (0x00f6 >= cp)) || + ((0x00f8 <= cp) && (0x00fe >= cp)) || + ((0x03b1 <= cp) && (0x03c1 >= cp)) || + ((0x03c3 <= cp) && (0x03cb >= cp)) || + ((0x0430 <= cp) && (0x044f >= cp))) { + cp -= 32; + } else if ((0x0450 <= cp) && (0x045f >= cp)) { + cp -= 80; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp)) || + ((0x0460 <= cp) && (0x0481 >= cp)) || + ((0x048a <= cp) && (0x04ff >= cp))) { + cp &= ~0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp -= 1; + cp |= 0x1; + } else { + switch (cp) { + default: + break; + case 0x00ff: + cp = 0x0178; + break; + case 0x0180: + cp = 0x0243; + break; + case 0x01dd: + cp = 0x018e; + break; + case 0x019a: + cp = 0x023d; + break; + case 0x019e: + cp = 0x0220; + break; + case 0x0292: + cp = 0x01b7; + break; + case 0x01c6: + cp = 0x01c4; + break; + case 0x01c9: + cp = 0x01c7; + break; + case 0x01cc: + cp = 0x01ca; + break; + case 0x01f3: + cp = 0x01f1; + break; + case 0x01bf: + cp = 0x01f7; + break; + case 0x0188: + cp = 0x0187; + break; + case 0x018c: + cp = 0x018b; + break; + case 0x0192: + cp = 0x0191; + break; + case 0x0199: + cp = 0x0198; + break; + case 0x01a8: + cp = 0x01a7; + break; + case 0x01ad: + cp = 0x01ac; + break; + case 0x01b9: + cp = 0x01b8; + break; + case 0x01bd: + cp = 0x01bc; + break; + case 0x01f5: + cp = 0x01f4; + break; + case 0x023c: + cp = 0x023b; + break; + case 0x0242: + cp = 0x0241; + break; + case 0x037b: + cp = 0x03fd; + break; + case 0x037c: + cp = 0x03fe; + break; + case 0x037d: + cp = 0x03ff; + break; + case 0x03f3: + cp = 0x037f; + break; + case 0x03ac: + cp = 0x0386; + break; + case 0x03ad: + cp = 0x0388; + break; + case 0x03ae: + cp = 0x0389; + break; + case 0x03af: + cp = 0x038a; + break; + case 0x03cc: + cp = 0x038c; + break; + case 0x03cd: + cp = 0x038e; + break; + case 0x03ce: + cp = 0x038f; + break; + case 0x0371: + cp = 0x0370; + break; + case 0x0373: + cp = 0x0372; + break; + case 0x0377: + cp = 0x0376; + break; + case 0x03d1: + cp = 0x0398; + break; + case 0x03d7: + cp = 0x03cf; + break; + case 0x03f2: + cp = 0x03f9; + break; + case 0x03f8: + cp = 0x03f7; + break; + case 0x03fb: + cp = 0x03fa; + break; + } + } + + return cp; +} + +utf8_constexpr14_impl utf8_int8_t * +utf8rcodepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) { + const utf8_int8_t *s = (const utf8_int8_t *)str; + + if (0xf0 == (0xf8 & s[0])) { + /* 4 byte utf8 codepoint */ + *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | + ((0x3f & s[2]) << 6) | (0x3f & s[3]); + } else if (0xe0 == (0xf0 & s[0])) { + /* 3 byte utf8 codepoint */ + *out_codepoint = + ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); + } else if (0xc0 == (0xe0 & s[0])) { + /* 2 byte utf8 codepoint */ + *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); + } else { + /* 1 byte utf8 codepoint otherwise */ + *out_codepoint = s[0]; + } + + do { + s--; + } while ((0 != (0x80 & s[0])) && (0x80 == (0xc0 & s[0]))); + + return (utf8_int8_t *)s; +} + +#undef utf8_restrict +#undef utf8_constexpr14 +#undef utf8_null + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif /* SHEREDOM_UTF8_H_INCLUDED */ diff --git a/src/utf8/utf8.h b/src/utf8/utf8.h new file mode 100644 index 0000000..c83f812 --- /dev/null +++ b/src/utf8/utf8.h @@ -0,0 +1,1685 @@ +/* The latest version of this library is available on GitHub; + * https://github.com/sheredom/utf8.h */ + +/* This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * For more information, please refer to */ + +#ifndef SHEREDOM_UTF8_H_INCLUDED +#define SHEREDOM_UTF8_H_INCLUDED + +#if defined(_MSC_VER) +#pragma warning(push) + +/* disable warning: no function prototype given: converting '()' to '(void)' */ +#pragma warning(disable : 4255) + +/* disable warning: '__cplusplus' is not defined as a preprocessor macro, + * replacing with '0' for '#if/#elif' */ +#pragma warning(disable : 4668) + +/* disable warning: bytes padding added after construct */ +#pragma warning(disable : 4820) +#endif + +#include +#include + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +typedef __int32 utf8_int32_t; +#else +#include +typedef int32_t utf8_int32_t; +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wcast-qual" + +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict __restrict +#define utf8_weak __inline + +#ifdef __cplusplus +#define utf8_null NULL +#else +#define utf8_null 0 +#endif + +#if (defined(__cplusplus) && __cplusplus >= 201402L) +#define utf8_constexpr14 constexpr +#define utf8_constexpr14_impl constexpr +#else +/* constexpr and weak are incompatible. so only enable one of them */ +#define utf8_constexpr14 utf8_weak +#define utf8_constexpr14_impl +#endif + +#if defined(__cplusplus) && __cplusplus >= 202002L +using utf8_int8_t = char8_t; /* Introduced in C++20 */ +#else +typedef char utf8_int8_t; +#endif + +/* Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > + * src2 respectively, case insensitive. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8casecmp(const utf8_int8_t *src1, const utf8_int8_t *src2); + +/* Append the utf8 string src onto the utf8 string dst. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8cat(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src); + +/* Find the first match of the utf8 codepoint chr in the utf8 string src. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8chr(const utf8_int8_t *src, utf8_int32_t chr); + +/* Return less than 0, 0, greater than 0 if src1 < src2, + * src1 == src2, src1 > src2 respectively. */ +utf8_constexpr14 utf8_nonnull utf8_pure int utf8cmp(const utf8_int8_t *src1, + const utf8_int8_t *src2); + +/* Copy the utf8 string src onto the memory allocated in dst. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8cpy(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src); + +/* Number of utf8 codepoints in the utf8 string src that consists entirely + * of utf8 codepoints not from the utf8 string reject. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8cspn(const utf8_int8_t *src, const utf8_int8_t *reject); + +/* Duplicate the utf8 string src by getting its size, malloc'ing a new buffer + * copying over the data, and returning that. Or 0 if malloc failed. */ +utf8_weak utf8_int8_t *utf8dup(const utf8_int8_t *src); + +/* Number of utf8 codepoints in the utf8 string str, + * excluding the null terminating byte. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8len(const utf8_int8_t *str); + +/* Similar to utf8len, except that only at most n bytes of src are looked. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8nlen(const utf8_int8_t *str, + size_t n); + +/* Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > + * src2 respectively, case insensitive. Checking at most n bytes of each utf8 + * string. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8ncasecmp(const utf8_int8_t *src1, const utf8_int8_t *src2, size_t n); + +/* Append the utf8 string src onto the utf8 string dst, + * writing at most n+1 bytes. Can produce an invalid utf8 + * string if n falls partway through a utf8 codepoint. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8ncat(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src, + size_t n); + +/* Return less than 0, 0, greater than 0 if src1 < src2, + * src1 == src2, src1 > src2 respectively. Checking at most n + * bytes of each utf8 string. */ +utf8_constexpr14 utf8_nonnull utf8_pure int +utf8ncmp(const utf8_int8_t *src1, const utf8_int8_t *src2, size_t n); + +/* Copy the utf8 string src onto the memory allocated in dst. + * Copies at most n bytes. If n falls partway through a utf8 + * codepoint, or if dst doesn't have enough room for a null + * terminator, the final string will be cut short to preserve + * utf8 validity. */ + +utf8_nonnull utf8_weak utf8_int8_t * +utf8ncpy(utf8_int8_t *utf8_restrict dst, const utf8_int8_t *utf8_restrict src, + size_t n); + +/* Similar to utf8dup, except that at most n bytes of src are copied. If src is + * longer than n, only n bytes are copied and a null byte is added. + * + * Returns a new string if successful, 0 otherwise */ +utf8_weak utf8_int8_t *utf8ndup(const utf8_int8_t *src, size_t n); + +/* Locates the first occurrence in the utf8 string str of any byte in the + * utf8 string accept, or 0 if no match was found. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8pbrk(const utf8_int8_t *str, const utf8_int8_t *accept); + +/* Find the last match of the utf8 codepoint chr in the utf8 string src. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8rchr(const utf8_int8_t *src, int chr); + +/* Number of bytes in the utf8 string str, + * including the null terminating byte. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t utf8size(const utf8_int8_t *str); + +/* Similar to utf8size, except that the null terminating byte is excluded. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8size_lazy(const utf8_int8_t *str); + +/* Similar to utf8size, except that only at most n bytes of src are looked and + * the null terminating byte is excluded. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8nsize_lazy(const utf8_int8_t *str, size_t n); + +/* Number of utf8 codepoints in the utf8 string src that consists entirely + * of utf8 codepoints from the utf8 string accept. */ +utf8_constexpr14 utf8_nonnull utf8_pure size_t +utf8spn(const utf8_int8_t *src, const utf8_int8_t *accept); + +/* The position of the utf8 string needle in the utf8 string haystack. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8str(const utf8_int8_t *haystack, const utf8_int8_t *needle); + +/* The position of the utf8 string needle in the utf8 string haystack, case + * insensitive. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8casestr(const utf8_int8_t *haystack, const utf8_int8_t *needle); + +/* Return 0 on success, or the position of the invalid + * utf8 codepoint on failure. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8valid(const utf8_int8_t *str); + +/* Similar to utf8valid, except that only at most n bytes of src are looked. */ +utf8_constexpr14 utf8_nonnull utf8_pure utf8_int8_t * +utf8nvalid(const utf8_int8_t *str, size_t n); + +/* Given a null-terminated string, makes the string valid by replacing invalid + * codepoints with a 1-byte replacement. Returns 0 on success. */ +utf8_nonnull utf8_weak int utf8makevalid(utf8_int8_t *str, + const utf8_int32_t replacement); + +/* Sets out_codepoint to the current utf8 codepoint in str, and returns the + * address of the next utf8 codepoint after the current one in str. */ +utf8_constexpr14 utf8_nonnull utf8_int8_t * +utf8codepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +/* Calculates the size of the next utf8 codepoint in str. */ +utf8_constexpr14 utf8_nonnull size_t +utf8codepointcalcsize(const utf8_int8_t *str); + +/* Returns the size of the given codepoint in bytes. */ +utf8_constexpr14 size_t utf8codepointsize(utf8_int32_t chr); + +/* Write a codepoint to the given string, and return the address to the next + * place after the written codepoint. Pass how many bytes left in the buffer to + * n. If there is not enough space for the codepoint, this function returns + * null. */ +utf8_nonnull utf8_weak utf8_int8_t * +utf8catcodepoint(utf8_int8_t *str, utf8_int32_t chr, size_t n); + +/* Returns 1 if the given character is lowercase, or 0 if it is not. */ +utf8_constexpr14 int utf8islower(utf8_int32_t chr); + +/* Returns 1 if the given character is uppercase, or 0 if it is not. */ +utf8_constexpr14 int utf8isupper(utf8_int32_t chr); + +/* Transform the given string into all lowercase codepoints. */ +utf8_nonnull utf8_weak void utf8lwr(utf8_int8_t *utf8_restrict str); + +/* Transform the given string into all uppercase codepoints. */ +utf8_nonnull utf8_weak void utf8upr(utf8_int8_t *utf8_restrict str); + +/* Make a codepoint lower case if possible. */ +utf8_constexpr14 utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); + +/* Make a codepoint upper case if possible. */ +utf8_constexpr14 utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); + +/* Sets out_codepoint to the current utf8 codepoint in str, and returns the + * address of the previous utf8 codepoint before the current one in str. */ +utf8_constexpr14 utf8_nonnull utf8_int8_t * +utf8rcodepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +/* Duplicate the utf8 string src by getting its size, calling alloc_func_ptr to + * copy over data to a new buffer, and returning that. Or 0 if alloc_func_ptr + * returned null. */ +utf8_weak utf8_int8_t *utf8dup_ex(const utf8_int8_t *src, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, + size_t), + utf8_int8_t *user_data); + +/* Similar to utf8dup, except that at most n bytes of src are copied. If src is + * longer than n, only n bytes are copied and a null byte is added. + * + * Returns a new string if successful, 0 otherwise. */ +utf8_weak utf8_int8_t *utf8ndup_ex(const utf8_int8_t *src, size_t n, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, + size_t), + utf8_int8_t *user_data); + +#undef utf8_weak +#undef utf8_pure +#undef utf8_nonnull + +utf8_constexpr14_impl int utf8casecmp(const utf8_int8_t *src1, + const utf8_int8_t *src2) { + utf8_int32_t src1_lwr_cp = 0, src2_lwr_cp = 0, src1_upr_cp = 0, + src2_upr_cp = 0, src1_orig_cp = 0, src2_orig_cp = 0; + + for (;;) { + src1 = utf8codepoint(src1, &src1_orig_cp); + src2 = utf8codepoint(src2, &src2_orig_cp); + + /* lower the srcs if required */ + src1_lwr_cp = utf8lwrcodepoint(src1_orig_cp); + src2_lwr_cp = utf8lwrcodepoint(src2_orig_cp); + + /* lower the srcs if required */ + src1_upr_cp = utf8uprcodepoint(src1_orig_cp); + src2_upr_cp = utf8uprcodepoint(src2_orig_cp); + + /* check if the lowered codepoints match */ + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if ((src1_lwr_cp == src2_lwr_cp) || (src1_upr_cp == src2_upr_cp)) { + continue; + } + + /* if they don't match, then we return the difference between the characters + */ + return src1_lwr_cp - src2_lwr_cp; + } +} + +utf8_int8_t *utf8cat(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src) { + utf8_int8_t *d = dst; + /* find the null terminating byte in dst */ + while ('\0' != *d) { + d++; + } + + /* overwriting the null terminating byte in dst, append src byte-by-byte */ + while ('\0' != *src) { + *d++ = *src++; + } + + /* write out a new null terminating byte into dst */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl utf8_int8_t *utf8chr(const utf8_int8_t *src, + utf8_int32_t chr) { + utf8_int8_t c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + /* being asked to return position of null terminating byte, so + * just run s to the end, and return! */ + while ('\0' != *src) { + src++; + } + return (utf8_int8_t *)src; + } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + c[0] = (utf8_int8_t)chr; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)(chr >> 6)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)(chr >> 12)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)(chr >> 18)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } + + /* we've made c into a 2 utf8 codepoint string, one for the chr we are + * seeking, another for the null terminating byte. Now use utf8str to + * search */ + return utf8str(src, c); +} + +utf8_constexpr14_impl int utf8cmp(const utf8_int8_t *src1, + const utf8_int8_t *src2) { + while (('\0' != *src1) || ('\0' != *src2)) { + if (*src1 < *src2) { + return -1; + } else if (*src1 > *src2) { + return 1; + } + + src1++; + src2++; + } + + /* both utf8 strings matched */ + return 0; +} + +utf8_constexpr14_impl int utf8coll(const utf8_int8_t *src1, + const utf8_int8_t *src2); + +utf8_int8_t *utf8cpy(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src) { + utf8_int8_t *d = dst; + + /* overwriting anything previously in dst, write byte-by-byte + * from src */ + while ('\0' != *src) { + *d++ = *src++; + } + + /* append null terminating byte */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl size_t utf8cspn(const utf8_int8_t *src, + const utf8_int8_t *reject) { + size_t chars = 0; + + while ('\0' != *src) { + const utf8_int8_t *r = reject; + size_t offset = 0; + + while ('\0' != *r) { + /* checking that if *r is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *r)) && (0 < offset)) { + return chars; + } else { + if (*r == src[offset]) { + /* part of a utf8 codepoint matched, so move our checking + * onwards to the next byte */ + offset++; + r++; + } else { + /* r could be in the middle of an unmatching utf8 code point, + * so we need to march it on to the next character beginning, */ + + do { + r++; + } while (0x80 == (0xc0 & *r)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* found a match at the end of *r, so didn't get a chance to test it */ + if (0 < offset) { + return chars; + } + + /* the current utf8 codepoint in src did not match reject, but src + * could have been partway through a utf8 codepoint, so we need to + * march it onto the next utf8 codepoint starting byte */ + do { + src++; + } while ((0x80 == (0xc0 & *src))); + chars++; + } + + return chars; +} + +utf8_int8_t *utf8dup(const utf8_int8_t *src) { + return utf8dup_ex(src, utf8_null, utf8_null); +} + +utf8_int8_t *utf8dup_ex(const utf8_int8_t *src, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, size_t), + utf8_int8_t *user_data) { + utf8_int8_t *n = utf8_null; + + /* figure out how many bytes (including the terminator) we need to copy first + */ + size_t bytes = utf8size(src); + + if (alloc_func_ptr) { + n = alloc_func_ptr(user_data, bytes); + } else { +#if !defined(UTF8_NO_STD_MALLOC) + n = (utf8_int8_t *)malloc(bytes); +#else + return utf8_null; +#endif + } + + if (utf8_null == n) { + /* out of memory so we bail */ + return utf8_null; + } else { + bytes = 0; + + /* copy src byte-by-byte into our new utf8 string */ + while ('\0' != src[bytes]) { + n[bytes] = src[bytes]; + bytes++; + } + + /* append null terminating byte */ + n[bytes] = '\0'; + return n; + } +} + +utf8_constexpr14_impl utf8_int8_t *utf8fry(const utf8_int8_t *str); + +utf8_constexpr14_impl size_t utf8len(const utf8_int8_t *str) { + return utf8nlen(str, SIZE_MAX); +} + +utf8_constexpr14_impl size_t utf8nlen(const utf8_int8_t *str, size_t n) { + const utf8_int8_t *t = str; + size_t length = 0; + + while ((size_t)(str - t) < n && '\0' != *str) { + if (0xf0 == (0xf8 & *str)) { + /* 4-byte utf8 code point (began with 0b11110xxx) */ + str += 4; + } else if (0xe0 == (0xf0 & *str)) { + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + str += 3; + } else if (0xc0 == (0xe0 & *str)) { + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + str += 2; + } else { /* if (0x00 == (0x80 & *s)) { */ + /* 1-byte ascii (began with 0b0xxxxxxx) */ + str += 1; + } + + /* no matter the bytes we marched s forward by, it was + * only 1 utf8 codepoint */ + length++; + } + + if ((size_t)(str - t) > n) { + length--; + } + return length; +} + +utf8_constexpr14_impl int utf8ncasecmp(const utf8_int8_t *src1, + const utf8_int8_t *src2, size_t n) { + utf8_int32_t src1_lwr_cp = 0, src2_lwr_cp = 0, src1_upr_cp = 0, + src2_upr_cp = 0, src1_orig_cp = 0, src2_orig_cp = 0; + + do { + const utf8_int8_t *const s1 = src1; + const utf8_int8_t *const s2 = src2; + + /* first check that we have enough bytes left in n to contain an entire + * codepoint */ + if (0 == n) { + return 0; + } + + if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { + const utf8_int32_t c1 = (0xe0 & *s1); + const utf8_int32_t c2 = (0xe0 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { + const utf8_int32_t c1 = (0xf0 & *s1); + const utf8_int32_t c2 = (0xf0 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { + const utf8_int32_t c1 = (0xf8 & *s1); + const utf8_int32_t c2 = (0xf8 & *s2); + + if (c1 != c2) { + return c1 - c2; + } else { + return 0; + } + } + + src1 = utf8codepoint(src1, &src1_orig_cp); + src2 = utf8codepoint(src2, &src2_orig_cp); + n -= utf8codepointsize(src1_orig_cp); + + src1_lwr_cp = utf8lwrcodepoint(src1_orig_cp); + src2_lwr_cp = utf8lwrcodepoint(src2_orig_cp); + + src1_upr_cp = utf8uprcodepoint(src1_orig_cp); + src2_upr_cp = utf8uprcodepoint(src2_orig_cp); + + /* check if the lowered codepoints match */ + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if ((src1_lwr_cp == src2_lwr_cp) || (src1_upr_cp == src2_upr_cp)) { + continue; + } + + /* if they don't match, then we return the difference between the characters + */ + return src1_lwr_cp - src2_lwr_cp; + } while (0 < n); + + /* both utf8 strings matched */ + return 0; +} + +utf8_int8_t *utf8ncat(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src, size_t n) { + utf8_int8_t *d = dst; + + /* find the null terminating byte in dst */ + while ('\0' != *d) { + d++; + } + + /* overwriting the null terminating byte in dst, append src byte-by-byte + * stopping if we run out of space */ + while (('\0' != *src) && (0 != n--)) { + *d++ = *src++; + } + + /* write out a new null terminating byte into dst */ + *d = '\0'; + + return dst; +} + +utf8_constexpr14_impl int utf8ncmp(const utf8_int8_t *src1, + const utf8_int8_t *src2, size_t n) { + while ((0 != n--) && (('\0' != *src1) || ('\0' != *src2))) { + if (*src1 < *src2) { + return -1; + } else if (*src1 > *src2) { + return 1; + } + + src1++; + src2++; + } + + /* both utf8 strings matched */ + return 0; +} + +utf8_int8_t *utf8ncpy(utf8_int8_t *utf8_restrict dst, + const utf8_int8_t *utf8_restrict src, size_t n) { + utf8_int8_t *d = dst; + size_t index = 0, check_index = 0; + + if (n == 0) { + return dst; + } + + /* overwriting anything previously in dst, write byte-by-byte + * from src */ + for (index = 0; index < n; index++) { + d[index] = src[index]; + if ('\0' == src[index]) { + break; + } + } + + for (check_index = index - 1; + check_index > 0 && 0x80 == (0xc0 & d[check_index]); check_index--) { + /* just moving the index */ + } + + if (check_index < index && + ((index - check_index) < utf8codepointcalcsize(&d[check_index]) || + (index - check_index) == n)) { + index = check_index; + } + + /* append null terminating byte */ + for (; index < n; index++) { + d[index] = 0; + } + + return dst; +} + +utf8_int8_t *utf8ndup(const utf8_int8_t *src, size_t n) { + return utf8ndup_ex(src, n, utf8_null, utf8_null); +} + +utf8_int8_t *utf8ndup_ex(const utf8_int8_t *src, size_t n, + utf8_int8_t *(*alloc_func_ptr)(utf8_int8_t *, size_t), + utf8_int8_t *user_data) { + utf8_int8_t *c = utf8_null; + size_t bytes = 0; + + /* Find the end of the string or stop when n is reached */ + while ('\0' != src[bytes] && bytes < n) { + bytes++; + } + + /* In case bytes is actually less than n, we need to set it + * to be used later in the copy byte by byte. */ + n = bytes; + + if (alloc_func_ptr) { + c = alloc_func_ptr(user_data, bytes + 1); + } else { +#if !defined(UTF8_NO_STD_MALLOC) + c = (utf8_int8_t *)malloc(bytes + 1); +#else + c = utf8_null; +#endif + } + + if (utf8_null == c) { + /* out of memory so we bail */ + return utf8_null; + } + + bytes = 0; + + /* copy src byte-by-byte into our new utf8 string */ + while ('\0' != src[bytes] && bytes < n) { + c[bytes] = src[bytes]; + bytes++; + } + + /* append null terminating byte */ + c[bytes] = '\0'; + return c; +} + +utf8_constexpr14_impl utf8_int8_t *utf8rchr(const utf8_int8_t *src, int chr) { + + utf8_int8_t *match = utf8_null; + utf8_int8_t c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + /* being asked to return position of null terminating byte, so + * just run s to the end, and return! */ + while ('\0' != *src) { + src++; + } + return (utf8_int8_t *)src; + } else if (0 == ((int)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + c[0] = (utf8_int8_t)chr; + } else if (0 == ((int)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)(chr >> 6)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else if (0 == ((int)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)(chr >> 12)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + c[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)(chr >> 18)); + c[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + c[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + c[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + } + + /* we've created a 2 utf8 codepoint string in c that is + * the utf8 character asked for by chr, and a null + * terminating byte */ + + while ('\0' != *src) { + size_t offset = 0; + + while ((src[offset] == c[offset]) && ('\0' != src[offset])) { + offset++; + } + + if ('\0' == c[offset]) { + /* we found a matching utf8 code point */ + match = (utf8_int8_t *)src; + src += offset; + + if ('\0' == *src) { + break; + } + } else { + src += offset; + + /* need to march s along to next utf8 codepoint start + * (the next byte that doesn't match 0b10xxxxxx) */ + if ('\0' != *src) { + do { + src++; + } while (0x80 == (0xc0 & *src)); + } + } + } + + /* return the last match we found (or 0 if no match was found) */ + return match; +} + +utf8_constexpr14_impl utf8_int8_t *utf8pbrk(const utf8_int8_t *str, + const utf8_int8_t *accept) { + while ('\0' != *str) { + const utf8_int8_t *a = accept; + size_t offset = 0; + + while ('\0' != *a) { + /* checking that if *a is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + return (utf8_int8_t *)str; + } else { + if (*a == str[offset]) { + /* part of a utf8 codepoint matched, so move our checking + * onwards to the next byte */ + offset++; + a++; + } else { + /* r could be in the middle of an unmatching utf8 code point, + * so we need to march it on to the next character beginning, */ + + do { + a++; + } while (0x80 == (0xc0 & *a)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* we found a match on the last utf8 codepoint */ + if (0 < offset) { + return (utf8_int8_t *)str; + } + + /* the current utf8 codepoint in src did not match accept, but src + * could have been partway through a utf8 codepoint, so we need to + * march it onto the next utf8 codepoint starting byte */ + do { + str++; + } while ((0x80 == (0xc0 & *str))); + } + + return utf8_null; +} + +utf8_constexpr14_impl size_t utf8size(const utf8_int8_t *str) { + return utf8size_lazy(str) + 1; +} + +utf8_constexpr14_impl size_t utf8size_lazy(const utf8_int8_t *str) { + return utf8nsize_lazy(str, SIZE_MAX); +} + +utf8_constexpr14_impl size_t utf8nsize_lazy(const utf8_int8_t *str, size_t n) { + size_t size = 0; + while (size < n && '\0' != str[size]) { + size++; + } + return size; +} + +utf8_constexpr14_impl size_t utf8spn(const utf8_int8_t *src, + const utf8_int8_t *accept) { + size_t chars = 0; + + while ('\0' != *src) { + const utf8_int8_t *a = accept; + size_t offset = 0; + + while ('\0' != *a) { + /* checking that if *r is the start of a utf8 codepoint + * (it is not 0b10xxxxxx) and we have successfully matched + * a previous character (0 < offset) - we found a match */ + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + /* found a match, so increment the number of utf8 codepoints + * that have matched and stop checking whether any other utf8 + * codepoints in a match */ + chars++; + src += offset; + offset = 0; + break; + } else { + if (*a == src[offset]) { + offset++; + a++; + } else { + /* a could be in the middle of an unmatching utf8 codepoint, + * so we need to march it on to the next character beginning, */ + do { + a++; + } while (0x80 == (0xc0 & *a)); + + /* reset offset too as we found a mismatch */ + offset = 0; + } + } + } + + /* found a match at the end of *a, so didn't get a chance to test it */ + if (0 < offset) { + chars++; + src += offset; + continue; + } + + /* if a got to its terminating null byte, then we didn't find a match. + * Return the current number of matched utf8 codepoints */ + if ('\0' == *a) { + return chars; + } + } + + return chars; +} + +utf8_constexpr14_impl utf8_int8_t *utf8str(const utf8_int8_t *haystack, + const utf8_int8_t *needle) { + utf8_int32_t throwaway_codepoint = 0; + + /* if needle has no utf8 codepoints before the null terminating + * byte then return haystack */ + if ('\0' == *needle) { + return (utf8_int8_t *)haystack; + } + + while ('\0' != *haystack) { + const utf8_int8_t *maybeMatch = haystack; + const utf8_int8_t *n = needle; + + while (*haystack == *n && (*haystack != '\0' && *n != '\0')) { + n++; + haystack++; + } + + if ('\0' == *n) { + /* we found the whole utf8 string for needle in haystack at + * maybeMatch, so return it */ + return (utf8_int8_t *)maybeMatch; + } else { + /* h could be in the middle of an unmatching utf8 codepoint, + * so we need to march it on to the next character beginning + * starting from the current character */ + haystack = utf8codepoint(maybeMatch, &throwaway_codepoint); + } + } + + /* no match */ + return utf8_null; +} + +utf8_constexpr14_impl utf8_int8_t *utf8casestr(const utf8_int8_t *haystack, + const utf8_int8_t *needle) { + /* if needle has no utf8 codepoints before the null terminating + * byte then return haystack */ + if ('\0' == *needle) { + return (utf8_int8_t *)haystack; + } + + for (;;) { + const utf8_int8_t *maybeMatch = haystack; + const utf8_int8_t *n = needle; + utf8_int32_t h_cp = 0, n_cp = 0; + + /* Get the next code point and track it */ + const utf8_int8_t *nextH = haystack = utf8codepoint(haystack, &h_cp); + n = utf8codepoint(n, &n_cp); + + while ((0 != h_cp) && (0 != n_cp)) { + h_cp = utf8lwrcodepoint(h_cp); + n_cp = utf8lwrcodepoint(n_cp); + + /* if we find a mismatch, bail out! */ + if (h_cp != n_cp) { + break; + } + + haystack = utf8codepoint(haystack, &h_cp); + n = utf8codepoint(n, &n_cp); + } + + if (0 == n_cp) { + /* we found the whole utf8 string for needle in haystack at + * maybeMatch, so return it */ + return (utf8_int8_t *)maybeMatch; + } + + if (0 == h_cp) { + /* no match */ + return utf8_null; + } + + /* Roll back to the next code point in the haystack to test */ + haystack = nextH; + } +} + +utf8_constexpr14_impl utf8_int8_t *utf8valid(const utf8_int8_t *str) { + return utf8nvalid(str, SIZE_MAX); +} + +utf8_constexpr14_impl utf8_int8_t *utf8nvalid(const utf8_int8_t *str, + size_t n) { + const utf8_int8_t *t = str; + size_t consumed = 0; + + while ((void)(consumed = (size_t)(str - t)), consumed < n && '\0' != *str) { + const size_t remaining = n - consumed; + + if (0xf0 == (0xf8 & *str)) { + /* ensure that there's 4 bytes or more remaining */ + if (remaining < 4) { + return (utf8_int8_t *)str; + } + + /* ensure each of the 3 following bytes in this 4-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & str[1])) || (0x80 != (0xc0 & str[2])) || + (0x80 != (0xc0 & str[3]))) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 4 bytes */ + if ((remaining != 4) && (0x80 == (0xc0 & str[4]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 5 bits of this 4-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if ((0 == (0x07 & str[0])) && (0 == (0x30 & str[1]))) { + return (utf8_int8_t *)str; + } + + /* 4-byte utf8 code point (began with 0b11110xxx) */ + str += 4; + } else if (0xe0 == (0xf0 & *str)) { + /* ensure that there's 3 bytes or more remaining */ + if (remaining < 3) { + return (utf8_int8_t *)str; + } + + /* ensure each of the 2 following bytes in this 3-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & str[1])) || (0x80 != (0xc0 & str[2]))) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 3 bytes */ + if ((remaining != 3) && (0x80 == (0xc0 & str[3]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 5 bits of this 3-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if ((0 == (0x0f & str[0])) && (0 == (0x20 & str[1]))) { + return (utf8_int8_t *)str; + } + + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + str += 3; + } else if (0xc0 == (0xe0 & *str)) { + /* ensure that there's 2 bytes or more remaining */ + if (remaining < 2) { + return (utf8_int8_t *)str; + } + + /* ensure the 1 following byte in this 2-byte + * utf8 codepoint began with 0b10xxxxxx */ + if (0x80 != (0xc0 & str[1])) { + return (utf8_int8_t *)str; + } + + /* ensure that our utf8 codepoint ended after 2 bytes */ + if ((remaining != 2) && (0x80 == (0xc0 & str[2]))) { + return (utf8_int8_t *)str; + } + + /* ensure that the top 4 bits of this 2-byte utf8 + * codepoint were not 0, as then we could have used + * one of the smaller encodings */ + if (0 == (0x1e & str[0])) { + return (utf8_int8_t *)str; + } + + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + str += 2; + } else if (0x00 == (0x80 & *str)) { + /* 1-byte ascii (began with 0b0xxxxxxx) */ + str += 1; + } else { + /* we have an invalid 0b1xxxxxxx utf8 code point entry */ + return (utf8_int8_t *)str; + } + } + + return utf8_null; +} + +int utf8makevalid(utf8_int8_t *str, const utf8_int32_t replacement) { + utf8_int8_t *read = str; + utf8_int8_t *write = read; + const utf8_int8_t r = (utf8_int8_t)replacement; + utf8_int32_t codepoint = 0; + + if (replacement > 0x7f) { + return -1; + } + + while ('\0' != *read) { + if (0xf0 == (0xf8 & *read)) { + /* ensure each of the 3 following bytes in this 4-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & read[1])) || (0x80 != (0xc0 & read[2])) || + (0x80 != (0xc0 & read[3]))) { + *write++ = r; + read++; + continue; + } + + /* 4-byte utf8 code point (began with 0b11110xxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 4); + } else if (0xe0 == (0xf0 & *read)) { + /* ensure each of the 2 following bytes in this 3-byte + * utf8 codepoint began with 0b10xxxxxx */ + if ((0x80 != (0xc0 & read[1])) || (0x80 != (0xc0 & read[2]))) { + *write++ = r; + read++; + continue; + } + + /* 3-byte utf8 code point (began with 0b1110xxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 3); + } else if (0xc0 == (0xe0 & *read)) { + /* ensure the 1 following byte in this 2-byte + * utf8 codepoint began with 0b10xxxxxx */ + if (0x80 != (0xc0 & read[1])) { + *write++ = r; + read++; + continue; + } + + /* 2-byte utf8 code point (began with 0b110xxxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 2); + } else if (0x00 == (0x80 & *read)) { + /* 1-byte ascii (began with 0b0xxxxxxx) */ + read = utf8codepoint(read, &codepoint); + write = utf8catcodepoint(write, codepoint, 1); + } else { + /* if we got here then we've got a dangling continuation (0b10xxxxxx) */ + *write++ = r; + read++; + continue; + } + } + + *write = '\0'; + + return 0; +} + +utf8_constexpr14_impl utf8_int8_t * +utf8codepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) { + if (0xf0 == (0xf8 & str[0])) { + /* 4 byte utf8 codepoint */ + *out_codepoint = ((0x07 & str[0]) << 18) | ((0x3f & str[1]) << 12) | + ((0x3f & str[2]) << 6) | (0x3f & str[3]); + str += 4; + } else if (0xe0 == (0xf0 & str[0])) { + /* 3 byte utf8 codepoint */ + *out_codepoint = + ((0x0f & str[0]) << 12) | ((0x3f & str[1]) << 6) | (0x3f & str[2]); + str += 3; + } else if (0xc0 == (0xe0 & str[0])) { + /* 2 byte utf8 codepoint */ + *out_codepoint = ((0x1f & str[0]) << 6) | (0x3f & str[1]); + str += 2; + } else { + /* 1 byte utf8 codepoint otherwise */ + *out_codepoint = str[0]; + str += 1; + } + + return (utf8_int8_t *)str; +} + +utf8_constexpr14_impl size_t utf8codepointcalcsize(const utf8_int8_t *str) { + if (0xf0 == (0xf8 & str[0])) { + /* 4 byte utf8 codepoint */ + return 4; + } else if (0xe0 == (0xf0 & str[0])) { + /* 3 byte utf8 codepoint */ + return 3; + } else if (0xc0 == (0xe0 & str[0])) { + /* 2 byte utf8 codepoint */ + return 2; + } + + /* 1 byte utf8 codepoint otherwise */ + return 1; +} + +utf8_constexpr14_impl size_t utf8codepointsize(utf8_int32_t chr) { + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + return 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + return 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + return 3; + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + return 4; + } +} + +utf8_int8_t *utf8catcodepoint(utf8_int8_t *str, utf8_int32_t chr, size_t n) { + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + /* 1-byte/7-bit ascii + * (0b0xxxxxxx) */ + if (n < 1) { + return utf8_null; + } + str[0] = (utf8_int8_t)chr; + str += 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + /* 2-byte/11-bit utf8 code point + * (0b110xxxxx 0b10xxxxxx) */ + if (n < 2) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xc0 | (utf8_int8_t)((chr >> 6) & 0x1f)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + /* 3-byte/16-bit utf8 code point + * (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) */ + if (n < 3) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xe0 | (utf8_int8_t)((chr >> 12) & 0x0f)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + str[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 3; + } else { /* if (0 == ((int)0xffe00000 & chr)) { */ + /* 4-byte/21-bit utf8 code point + * (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) */ + if (n < 4) { + return utf8_null; + } + str[0] = (utf8_int8_t)(0xf0 | (utf8_int8_t)((chr >> 18) & 0x07)); + str[1] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 12) & 0x3f)); + str[2] = (utf8_int8_t)(0x80 | (utf8_int8_t)((chr >> 6) & 0x3f)); + str[3] = (utf8_int8_t)(0x80 | (utf8_int8_t)(chr & 0x3f)); + str += 4; + } + + return str; +} + +utf8_constexpr14_impl int utf8islower(utf8_int32_t chr) { + return chr != utf8uprcodepoint(chr); +} + +utf8_constexpr14_impl int utf8isupper(utf8_int32_t chr) { + return chr != utf8lwrcodepoint(chr); +} + +void utf8lwr(utf8_int8_t *utf8_restrict str) { + utf8_int32_t cp = 0; + utf8_int8_t *pn = utf8codepoint(str, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(str, lwr_cp, size); + } + + str = pn; + pn = utf8codepoint(str, &cp); + } +} + +void utf8upr(utf8_int8_t *utf8_restrict str) { + utf8_int32_t cp = 0; + utf8_int8_t *pn = utf8codepoint(str, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(str, lwr_cp, size); + } + + str = pn; + pn = utf8codepoint(str, &cp); + } +} + +utf8_constexpr14_impl utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) { + if (((0x0041 <= cp) && (0x005a >= cp)) || + ((0x00c0 <= cp) && (0x00d6 >= cp)) || + ((0x00d8 <= cp) && (0x00de >= cp)) || + ((0x0391 <= cp) && (0x03a1 >= cp)) || + ((0x03a3 <= cp) && (0x03ab >= cp)) || + ((0x0410 <= cp) && (0x042f >= cp))) { + cp += 32; + } else if ((0x0400 <= cp) && (0x040f >= cp)) { + cp += 80; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp)) || + ((0x0460 <= cp) && (0x0481 >= cp)) || + ((0x048a <= cp) && (0x04ff >= cp))) { + cp |= 0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp += 1; + cp &= ~0x1; + } else { + switch (cp) { + default: + break; + case 0x0178: + cp = 0x00ff; + break; + case 0x0243: + cp = 0x0180; + break; + case 0x018e: + cp = 0x01dd; + break; + case 0x023d: + cp = 0x019a; + break; + case 0x0220: + cp = 0x019e; + break; + case 0x01b7: + cp = 0x0292; + break; + case 0x01c4: + cp = 0x01c6; + break; + case 0x01c7: + cp = 0x01c9; + break; + case 0x01ca: + cp = 0x01cc; + break; + case 0x01f1: + cp = 0x01f3; + break; + case 0x01f7: + cp = 0x01bf; + break; + case 0x0187: + cp = 0x0188; + break; + case 0x018b: + cp = 0x018c; + break; + case 0x0191: + cp = 0x0192; + break; + case 0x0198: + cp = 0x0199; + break; + case 0x01a7: + cp = 0x01a8; + break; + case 0x01ac: + cp = 0x01ad; + break; + case 0x01b8: + cp = 0x01b9; + break; + case 0x01bc: + cp = 0x01bd; + break; + case 0x01f4: + cp = 0x01f5; + break; + case 0x023b: + cp = 0x023c; + break; + case 0x0241: + cp = 0x0242; + break; + case 0x03fd: + cp = 0x037b; + break; + case 0x03fe: + cp = 0x037c; + break; + case 0x03ff: + cp = 0x037d; + break; + case 0x037f: + cp = 0x03f3; + break; + case 0x0386: + cp = 0x03ac; + break; + case 0x0388: + cp = 0x03ad; + break; + case 0x0389: + cp = 0x03ae; + break; + case 0x038a: + cp = 0x03af; + break; + case 0x038c: + cp = 0x03cc; + break; + case 0x038e: + cp = 0x03cd; + break; + case 0x038f: + cp = 0x03ce; + break; + case 0x0370: + cp = 0x0371; + break; + case 0x0372: + cp = 0x0373; + break; + case 0x0376: + cp = 0x0377; + break; + case 0x03f4: + cp = 0x03b8; + break; + case 0x03cf: + cp = 0x03d7; + break; + case 0x03f9: + cp = 0x03f2; + break; + case 0x03f7: + cp = 0x03f8; + break; + case 0x03fa: + cp = 0x03fb; + break; + } + } + + return cp; +} + +utf8_constexpr14_impl utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) { + if (((0x0061 <= cp) && (0x007a >= cp)) || + ((0x00e0 <= cp) && (0x00f6 >= cp)) || + ((0x00f8 <= cp) && (0x00fe >= cp)) || + ((0x03b1 <= cp) && (0x03c1 >= cp)) || + ((0x03c3 <= cp) && (0x03cb >= cp)) || + ((0x0430 <= cp) && (0x044f >= cp))) { + cp -= 32; + } else if ((0x0450 <= cp) && (0x045f >= cp)) { + cp -= 80; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp)) || + ((0x0460 <= cp) && (0x0481 >= cp)) || + ((0x048a <= cp) && (0x04ff >= cp))) { + cp &= ~0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp -= 1; + cp |= 0x1; + } else { + switch (cp) { + default: + break; + case 0x00ff: + cp = 0x0178; + break; + case 0x0180: + cp = 0x0243; + break; + case 0x01dd: + cp = 0x018e; + break; + case 0x019a: + cp = 0x023d; + break; + case 0x019e: + cp = 0x0220; + break; + case 0x0292: + cp = 0x01b7; + break; + case 0x01c6: + cp = 0x01c4; + break; + case 0x01c9: + cp = 0x01c7; + break; + case 0x01cc: + cp = 0x01ca; + break; + case 0x01f3: + cp = 0x01f1; + break; + case 0x01bf: + cp = 0x01f7; + break; + case 0x0188: + cp = 0x0187; + break; + case 0x018c: + cp = 0x018b; + break; + case 0x0192: + cp = 0x0191; + break; + case 0x0199: + cp = 0x0198; + break; + case 0x01a8: + cp = 0x01a7; + break; + case 0x01ad: + cp = 0x01ac; + break; + case 0x01b9: + cp = 0x01b8; + break; + case 0x01bd: + cp = 0x01bc; + break; + case 0x01f5: + cp = 0x01f4; + break; + case 0x023c: + cp = 0x023b; + break; + case 0x0242: + cp = 0x0241; + break; + case 0x037b: + cp = 0x03fd; + break; + case 0x037c: + cp = 0x03fe; + break; + case 0x037d: + cp = 0x03ff; + break; + case 0x03f3: + cp = 0x037f; + break; + case 0x03ac: + cp = 0x0386; + break; + case 0x03ad: + cp = 0x0388; + break; + case 0x03ae: + cp = 0x0389; + break; + case 0x03af: + cp = 0x038a; + break; + case 0x03cc: + cp = 0x038c; + break; + case 0x03cd: + cp = 0x038e; + break; + case 0x03ce: + cp = 0x038f; + break; + case 0x0371: + cp = 0x0370; + break; + case 0x0373: + cp = 0x0372; + break; + case 0x0377: + cp = 0x0376; + break; + case 0x03d1: + cp = 0x0398; + break; + case 0x03d7: + cp = 0x03cf; + break; + case 0x03f2: + cp = 0x03f9; + break; + case 0x03f8: + cp = 0x03f7; + break; + case 0x03fb: + cp = 0x03fa; + break; + } + } + + return cp; +} + +utf8_constexpr14_impl utf8_int8_t * +utf8rcodepoint(const utf8_int8_t *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) { + const utf8_int8_t *s = (const utf8_int8_t *)str; + + if (0xf0 == (0xf8 & s[0])) { + /* 4 byte utf8 codepoint */ + *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | + ((0x3f & s[2]) << 6) | (0x3f & s[3]); + } else if (0xe0 == (0xf0 & s[0])) { + /* 3 byte utf8 codepoint */ + *out_codepoint = + ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); + } else if (0xc0 == (0xe0 & s[0])) { + /* 2 byte utf8 codepoint */ + *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); + } else { + /* 1 byte utf8 codepoint otherwise */ + *out_codepoint = s[0]; + } + + do { + s--; + } while ((0 != (0x80 & s[0])) && (0x80 == (0xc0 & s[0]))); + + return (utf8_int8_t *)s; +} + +#undef utf8_restrict +#undef utf8_constexpr14 +#undef utf8_null + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif /* SHEREDOM_UTF8_H_INCLUDED */ diff --git a/src/win32/graphics_win32.h b/src/win32/graphics_win32.h new file mode 100644 index 0000000..2f07f20 --- /dev/null +++ b/src/win32/graphics_win32.h @@ -0,0 +1,140 @@ +#include +#include + +HANDLE hStdout; + +#define TC_NRM "\x1B[0m" /* Normalize color */ + +#define TC_RED "\x1B[1;31m" /* Red */ +#define TC_GRN "\x1B[1;32m" /* Green */ +#define TC_YEL "\x1B[1;33m" /* Yellow */ +#define TC_BLU "\x1B[1;34m" /* Blue */ +#define TC_MAG "\x1B[1;35m" /* Magenta */ +#define TC_CYN "\x1B[1;36m" /* Cyan */ +#define TC_WHT "\x1B[1;37m" /* White */ + +#define TC_B_NRM "\x1B[0m" /* Normalize Bright Color */ +#define TC_B_RED "\x1B[0;31m" /* Bright Red */ +#define TC_B_GRN "\x1B[0;32m" /* Bright Green */ +#define TC_B_YEL "\x1B[0;33m" /* Bright Yellow */ +#define TC_B_BLU "\x1B[0;34m" /* Bright Blue */ +#define TC_B_MAG "\x1B[0;35m" /* Bright Magenta */ +#define TC_B_CYN "\x1B[0;36m" /* Bright Cyan */ +#define TC_B_WHT "\x1B[0;37m" /* Bright White */ + +#define TC_BG_NRM "\x1B[40m" /* Normalize Background Color */ +#define TC_BG_RED "\x1B[41m" /* Background Red */ +#define TC_BG_GRN "\x1B[42m" /* Background Green */ +#define TC_BG_YEL "\x1B[43m" /* Background Yellow */ +#define TC_BG_BLU "\x1B[44m" /* Background Blue */ +#define TC_BG_MAG "\x1B[45m" /* Background Magenta*/ +#define TC_BG_CYN "\x1B[46m" /* Background Cyan */ +#define TC_BG_WHT "\x1B[47m" /* Background White */ + +#define clear_entire_line() fputs("\x1B[2K") +#define clear_line_till_cursor() fputs("\x1B[1K") +#define clear_line_from_cursor() fputs("\x1B[0K") + +void color_id(uint8_t cid, int l) +{ + printf((l) ? "\x1B[38;5;%dm" : "\x1B[48;5;%dm", cid); +} + +void set_color(Color color) +{ + if (color.background) + { + printf("\x1B[48;2;%d;%d;%dm", color.r, color.g, color.b); + } + else + { + printf("\x1B[38;2;%d;%d;%dm", color.r, color.g, color.b); + } +} + +////////////////////////////////////// +// Additional formatting (ANSI) // +////////////////////////////////////// + +#define TC_BLD "\x1B[1m" /* Bold */ +#define TC_DIM "\x1B[2m" /* Dim */ +#define TC_ITAL "\x1B[3m" /* Standout (italics) */ +#define TC_UNDR "\x1B[4m" /* Underline */ +#define TC_BLNK "\x1B[5m" /* Blink */ +#define TC_REV "\x1B[7m" /* Reverse */ +#define TC_INV "\x1B[8m" /* Invisible */ + +#define echo_off() +#define echo_on() +#define canon_off() +#define canon_on() + +void get_cursor(int *X, int *Y) +{ + echo_off(); + canon_off(); + printf("\033[6n"); + scanf("\033[%d;%dR", X, Y); +} +void gotoxy(int x, int y) +{ + printf("\033[%d;%df", y+1, x+1); +} +void move_cursor(int X, int Y) +{ + if (X > 0) + { + printf("\033[%dC", X); + } + else if (X < 0) + { + printf("\033[%dD", (X * -1)); + } + + if (Y > 0) + { + printf("\033[%dB", Y); + } + else if (Y < 0) + { + printf("\033[%dA", (Y * -1)); + } +} + +#define clear_screen() fputs("\x1B[2J", stdout) +#define clear_from_top_to_cursor() fputs("\x1B[1J", stdout) +#define clear_from_cursor_to_bottom() fputs("\x1B[0J", stdout) + +void clear_partial(int x, int y, int width, int height) +{ + char *buf = calloc(width + 1, sizeof(char)); + memset(buf, (char) ' ', width); + for (int i = 0; i < height; i++) + { + gotoxy(x, y + i); + fwrite(buf, width, sizeof(char), stdout); + } + gotoxy(x, y); + free(buf); +} + +void get_cols_rows(size_t *cols, size_t *rows) +{ + if (hStdout == INVALID_HANDLE_VALUE) + { + return; + } + CONSOLE_SCREEN_BUFFER_INFO csbi; + if (!GetConsoleScreenBufferInfo(hStdout, &csbi)) + { + return; + } + *cols = (size_t) csbi.srWindow.Right - csbi.srWindow.Left + 1; + *rows = (size_t) csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +} + +int alternate_buffer(bool enabled) +{ + fputs(enabled ? "\033[?1049h" : "\033[?1049l", stdout); + return enabled; +} diff --git a/src/win32/input_win32.h b/src/win32/input_win32.h new file mode 100644 index 0000000..05533fc --- /dev/null +++ b/src/win32/input_win32.h @@ -0,0 +1,173 @@ +#include +#include "..\unicode.h" +HANDLE hStdin; + +int getch_n() +{ + int gc_n = 0; + gc_n = getch(); + if (gc_n == 0) + { + gc_n = getch(); + gc_n |= BIT_ESC0; + } + else if (gc_n == 0xE0) + { + gc_n = getch(); + gc_n |= BIT_ESC224; + } + + return gc_n; +} + +InputUTF8 get_newtrodit_input() +{ + DWORD fdwSaveOldMode, cNumRead; + INPUT_RECORD irInBuf[128]; + InputUTF8 inputchar = {0}; + + if (!GetConsoleMode(hStdin, &fdwSaveOldMode)) + return inputchar; + + SetConsoleMode(hStdin, 0); + long other_flags = 0; + + int ukey_counter = 0, waiting_combination = FALSE; + const int replacement_char = 0xefbfbd; // Replacement char is in hexadecimal EF BF BD + static size_t pushback_char_count = 0; + static INPUT_RECORD pushback_inputchar[128] = {0}; + INPUT_RECORD *ptr_irInBuf = NULL; + char unicodestr[5] = {0}; + while (1) + { + // Wait for the input events + + WaitForSingleObject(hStdin, INFINITE); + + if (pushback_char_count > 0) + { + cNumRead = pushback_char_count; + } + else + { + if (!ReadConsoleInput(hStdin, irInBuf, 128, &cNumRead)) + return inputchar; + } + + for (DWORD i = 0; i < cNumRead; i++) + { + if (pushback_char_count > 0) + { + ptr_irInBuf = &pushback_inputchar[0]; + + for (size_t j = 0; j < pushback_char_count - 1; j++) + pushback_inputchar[j] = pushback_inputchar[j + 1]; + + pushback_char_count--; + } + else + { + ptr_irInBuf = &irInBuf[i]; + } + + switch (ptr_irInBuf->EventType) + { + case KEY_EVENT: // We are only interested in keyboard input + if (ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar) + { + if (inputchar.utf8char == replacement_char) // If we receive the UTF-8 replacement character, stop the input + break; + + ukey_counter++; + if (ptr_irInBuf->Event.KeyEvent.bKeyDown && ukey_counter <= 4 && (((ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar & 0xff) < 0x80 && cNumRead <= 1) || ((ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar & 0xff) > 0x80 && cNumRead > 1))) + { + inputchar.utf8char <<= 8; + inputchar.utf8char |= (ptr_irInBuf->Event.KeyEvent.uChar.UnicodeChar & 0xff); + } + else + { + if (ptr_irInBuf->Event.KeyEvent.bKeyDown) + { + if (pushback_char_count < 127 && pushback_char_count < cNumRead) + pushback_inputchar[pushback_char_count++] = *ptr_irInBuf; + } + } + waiting_combination = FALSE; + } + else + { + if (ptr_irInBuf->Event.KeyEvent.bKeyDown) + { + switch (ptr_irInBuf->Event.KeyEvent.wVirtualKeyCode) + { + case VK_CONTROL: + case VK_LCONTROL: + case VK_RCONTROL: + other_flags |= CTRL_BITMASK; + waiting_combination = TRUE; + break; + case VK_SHIFT: + case VK_LSHIFT: + case VK_RSHIFT: + other_flags |= SHIFT_BITMASK; + waiting_combination = TRUE; + break; + case VK_LWIN: // Ignore Windows keys + case VK_RWIN: + break; + case VK_MENU: // Windows calls ALT keys 'menu keys' for some reason + case VK_LMENU: + case VK_RMENU: + other_flags |= ALT_BITMASK; + waiting_combination = TRUE; + break; + default: + inputchar.flags <<= 8; + inputchar.flags |= ptr_irInBuf->Event.KeyEvent.wVirtualKeyCode; // If not one of the above cases, save the virtual key code + break; + } + } + else + { + other_flags = 0; + } + } + break; + } + } + + if (!(other_flags && inputchar.flags == 0)) + waiting_combination = FALSE; + + if (!waiting_combination) + { + if (GetKeyState(VK_CONTROL) & 0x8000) // Make sure the key is still pressed, for example, making another combination without releasing the control key + other_flags |= CTRL_BITMASK; + if (GetKeyState(VK_SHIFT) & 0x8000) // Same thing as above, now for shift + other_flags |= SHIFT_BITMASK; + if (GetKeyState(VK_MENU) & 0x8000) // ALT bitmask + other_flags |= ALT_BITMASK; + + if (ptr_irInBuf->EventType == KEY_EVENT && ptr_irInBuf->Event.KeyEvent.bKeyDown) + { + inputchar.flags |= other_flags; // Add the other flags in case they are defined + + int32_to_char_array(inputchar.utf8char, unicodestr); + if (utf8valid(unicodestr) != 0) + { + inputchar.utf8char = 0; + inputchar.flags = -EILSEQ; // Invalid sequence + } + if (inputchar.utf8char != 0 && ukey_counter > 4) + { + inputchar.utf8char = 0; + inputchar.flags = replacement_char; // If a possibly invalid sequence is inputted, replace it with the replacement char + } + SetConsoleMode(hStdin, fdwSaveOldMode); + return inputchar; + } + } + + FlushConsoleInputBuffer(hStdin); // Flush the input buffer so previous keystrokes are ignored + } +}