cmark
My personal build of CMark ✏️
cmark_ctype.c (1745B)
1 #include <stdint.h> 2 3 #include "cmark_ctype.h" 4 5 /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other 6 */ 7 static const uint8_t cmark_ctype_class[256] = { 8 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ 9 /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 10 /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11 /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12 /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 13 /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 14 /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 15 /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16 /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, 17 /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18 /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19 /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20 /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21 /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22 /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23 /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24 /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 25 26 /** 27 * Returns 1 if c is a "whitespace" character as defined by the spec. 28 */ 29 int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; } 30 31 /** 32 * Returns 1 if c is an ascii punctuation character. 33 */ 34 int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; } 35 36 int cmark_isalnum(char c) { 37 uint8_t result; 38 result = cmark_ctype_class[(uint8_t)c]; 39 return (result == 3 || result == 4); 40 } 41 42 int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; } 43 44 int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; }