| #include <stdint.h> |
| |
| #include "cmark_ctype.h" |
| |
| /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other |
| */ |
| static const uint8_t cmark_ctype_class[256] = { |
| /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ |
| /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, |
| /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
| /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, |
| /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, |
| /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, |
| /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; |
| |
| /** |
| * Returns 1 if c is a "whitespace" character as defined by the spec. |
| */ |
| int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; } |
| |
| /** |
| * Returns 1 if c is an ascii punctuation character. |
| */ |
| int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; } |
| |
| int cmark_isalnum(char c) { |
| uint8_t result; |
| result = cmark_ctype_class[(uint8_t)c]; |
| return (result == 3 || result == 4); |
| } |
| |
| int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; } |