| 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; } |
| 45 | |