diff --git a/inc-c/ufn/ufn_ascii.h b/inc-c/ufn/ufn_ascii.h new file mode 100644 index 0000000..c712162 --- /dev/null +++ b/inc-c/ufn/ufn_ascii.h @@ -0,0 +1,199 @@ + +#ifndef UFN_ASCII_H +#define UFN_ASCII_H + +#include +#include + +bool ufn_is_ascii_lowercase(char character); +bool ufn_is_ascii_uppercase(char character); +bool ufn_is_ascii_letter(char character); +bool ufn_is_ascii_digit(char character); +bool ufn_is_ascii_sign(char character); +bool ufn_is_ascii_blank(char character); +bool ufn_is_ascii_control(char character); +uint8_t ufn_check_ascii_newline(const char *text, uint32_t remaining); + +#ifdef UFN_IMPLEMENTATION + +bool ufn_is_ascii_lowercase(char character) +{ + if(character < 'a') + { + return false; + } + if(character > 'z') + { + return false; + } + return true; +} + +bool ufn_is_ascii_uppercase(char character) +{ + if(character < 'A') + { + return false; + } + if(character > 'Z') + { + return false; + } + return true; +} + +bool ufn_is_ascii_letter(char character) +{ + if(ufn_is_ascii_uppercase(character)) + { + return true; + } + if(ufn_is_ascii_lowercase(character)) + { + return true; + } + return false; +} + +bool ufn_is_ascii_digit(char character) +{ + if(character < '0') + { + return false; + } + if(character > '9') + { + return false; + } + return true; +} + +bool ufn_is_ascii_sign_1(char character) +{ + if(character < 0x21) + { + return false; + } + if(character > 0x2f) + { + return false; + } + return true; +} + +bool ufn_is_ascii_sign_2(char character) +{ + + if(character < 0x3a) + { + return false; + } + if(character > 0x40) + { + return false; + } + return true; +} + +bool ufn_is_ascii_sign_3(char character) +{ + if(character < 0x5b) + { + return false; + } + if(character > 0x60) + { + return false; + } + return true; +} + +bool ufn_is_ascii_sign_4(char character) +{ + if(character < 0x7b) + { + return false; + } + if(character > 0x7e) + { + return false; + } + return true; +} + +bool ufn_is_ascii_sign(char character) +{ + if(ufn_is_ascii_sign_1(character)) + { + return true; + } + if(ufn_is_ascii_sign_2(character)) + { + return true; + } + if(ufn_is_ascii_sign_3(character)) + { + return true; + } + if(ufn_is_ascii_sign_4(character)) + { + return true; + } + return false; +} + +bool ufn_is_ascii_blank(char character) +{ + if(character == ' ') + { + return true; + } + if(character == '\t') + { + return true; + } + return false; +} + +bool ufn_is_ascii_control(char character) +{ + if(character < 32) + { + return true; + } + if(character == 127) + { + return true; + } + return false; +} + +uint8_t ufn_check_ascii_newline(const char *text, uint32_t remaining) +{ + if(remaining == 0) + { + return 0; + } + if(remaining < 2) + { + if(text[0] == '\n') + { + return 1; + } + return 0; + } + uint8_t length = 0; + if(text[0] == '\r') + { + length = 1; + } + if(text[length] == '\r') + { + ++length; + } + return length; +} + +#endif // UFN_IMPLEMENTATION + +#endif // UFN_ASCII_H