libUFN/inc-c/ufn/ufn_ascii.h

200 lines
3.1 KiB
C

#ifndef UFN_ASCII_H
#define UFN_ASCII_H
#include <stdbool.h>
#include <stdint.h>
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