1#include <stdint.h>
2
3#include "cmark_ctype.h"
4
5/** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other
6 */
7static 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 */
29int 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 */
34int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; }
35
36int cmark_isalnum(char c) {
37 uint8_t result;
38 result = cmark_ctype_class[(uint8_t)c];
39 return (result == 3 || result == 4);
40}
41
42int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; }
43
44int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; }
45