Browse Source

Add support for "%g" character class in patterns (from Lua 5.2).

Mike Pall 15 years ago
parent
commit
52fd87bf34
2 changed files with 5 additions and 3 deletions
  1. 3 3
      src/lib_string.c
  2. 2 0
      src/lj_char.h

+ 3 - 3
src/lib_string.c

@@ -181,9 +181,9 @@ static const char *classend(MatchState *ms, const char *p)
 }
 
 static const unsigned char match_class_map[32] = {
-  0, LJ_CHAR_ALPHA, 0, LJ_CHAR_CNTRL, LJ_CHAR_DIGIT, 0,0,0,0,0,0,0,
-  LJ_CHAR_LOWER, 0,0,0, LJ_CHAR_PUNCT, 0,0, LJ_CHAR_SPACE, 0,
-  LJ_CHAR_UPPER, 0, LJ_CHAR_ALNUM, LJ_CHAR_XDIGIT, 0,0,0,0,0,0,0
+  0,LJ_CHAR_ALPHA,0,LJ_CHAR_CNTRL,LJ_CHAR_DIGIT,0,0,LJ_CHAR_GRAPH,0,0,0,0,
+  LJ_CHAR_LOWER,0,0,0,LJ_CHAR_PUNCT,0,0,LJ_CHAR_SPACE,0,
+  LJ_CHAR_UPPER,0,LJ_CHAR_ALNUM,LJ_CHAR_XDIGIT,0,0,0,0,0,0,0
 };
 
 static int match_class(int c, int cl)

+ 2 - 0
src/lj_char.h

@@ -18,6 +18,7 @@
 #define LJ_CHAR_IDENT	0x80
 #define LJ_CHAR_ALPHA	(LJ_CHAR_LOWER|LJ_CHAR_UPPER)
 #define LJ_CHAR_ALNUM	(LJ_CHAR_ALPHA|LJ_CHAR_DIGIT)
+#define LJ_CHAR_GRAPH	(LJ_CHAR_ALNUM|LJ_CHAR_PUNCT)
 
 /* Only pass -1 or 0..255 to these macros. Never pass a signed char! */
 #define lj_char_isa(c, t)	(lj_char_bits[(c)+1] & t)
@@ -31,6 +32,7 @@
 #define lj_char_isident(c)	lj_char_isa((c), LJ_CHAR_IDENT)
 #define lj_char_isalpha(c)	lj_char_isa((c), LJ_CHAR_ALPHA)
 #define lj_char_isalnum(c)	lj_char_isa((c), LJ_CHAR_ALNUM)
+#define lj_char_isgraph(c)	lj_char_isa((c), LJ_CHAR_GRAPH)
 
 #define lj_char_toupper(c)	((c) - (lj_char_islower(c) >> 1))
 #define lj_char_tolower(c)	((c) + lj_char_isupper(c))