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