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