From dcbb2fcfbdbd3b35ddc44a4c542b7c6375e47214 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 15 Aug 2016 14:54:45 +0100 Subject: Full Unicode Support --- src/unicode.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/unicode.cpp (limited to 'src/unicode.cpp') diff --git a/src/unicode.cpp b/src/unicode.cpp new file mode 100644 index 000000000..1495101fc --- /dev/null +++ b/src/unicode.cpp @@ -0,0 +1,39 @@ +#pragma warning(push) +#pragma warning(disable: 4245) + +#include "utf8proc/utf8proc.h" + +#pragma warning(pop) + +// TODO(bill): Unicode support +b32 rune_is_letter(Rune r) { + if (r < 0x80 && gb_char_is_alpha(cast(char)r) || r == '_') { + return true; + } + switch (utf8proc_category(r)) { + case UTF8PROC_CATEGORY_LU: + case UTF8PROC_CATEGORY_LL: + case UTF8PROC_CATEGORY_LT: + case UTF8PROC_CATEGORY_LM: + case UTF8PROC_CATEGORY_LO: + return true; + } + return false; +} + +b32 rune_is_digit(Rune r) { + if (r < 0x80 && gb_is_between(r, '0', '9')) + return true; + return utf8proc_category(r) == UTF8PROC_CATEGORY_ND; +} + +b32 rune_is_whitespace(Rune r) { + switch (r) { + case ' ': + case '\t': + case '\n': + case '\r': + return true; + } + return false; +} -- cgit v1.2.3