+ else if (ch == '[' && p[1] == ':') {
+ unsigned const char *s = p += 2;
+ int i;
+ while ((ch = *p) && (ch != ':' || p[1] != ']')) p++;
+ if (!ch)
+ return FALSE;
+ i = p - s;
+ ch = *text;
+ if ((CC_EQ(s,i, "alnum") && ISALNUM(ch))
+ || (CC_EQ(s,i, "alpha") && ISALPHA(ch))
+ || (CC_EQ(s,i, "blank") && ISBLANK(ch))
+ || (CC_EQ(s,i, "cntrl") && ISCNTRL(ch))
+ || (CC_EQ(s,i, "digit") && ISDIGIT(ch))
+ || (CC_EQ(s,i, "graph") && ISGRAPH(ch))
+ || (CC_EQ(s,i, "lower") && ISLOWER(ch))
+ || (CC_EQ(s,i, "print") && ISPRINT(ch))
+ || (CC_EQ(s,i, "punct") && ISPUNCT(ch))
+ || (CC_EQ(s,i, "space") && ISSPACE(ch))
+ || (CC_EQ(s,i, "upper") && ISUPPER(ch))
+ || (CC_EQ(s,i,"xdigit") && ISXDIGIT(ch)))
+ matched = TRUE;
+ p++;
+ ch = 0; /* This makes "prev" get set to 0. */
+ }