summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/re1.5/charclass.c
diff options
context:
space:
mode:
Diffstat (limited to 'extmod/re1.5/charclass.c')
-rw-r--r--extmod/re1.5/charclass.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/extmod/re1.5/charclass.c b/extmod/re1.5/charclass.c
index c9df403750..7f6388c93d 100644
--- a/extmod/re1.5/charclass.c
+++ b/extmod/re1.5/charclass.c
@@ -11,3 +11,23 @@ int _re1_5_classmatch(const char *pc, const char *sp)
}
return !is_positive;
}
+
+int _re1_5_namedclassmatch(const char *pc, const char *sp)
+{
+ // pc points to name of class
+ int off = (*pc >> 5) & 1;
+ if ((*pc | 0x20) == 'd') {
+ if (!(*sp >= '0' && *sp <= '9')) {
+ off ^= 1;
+ }
+ } else if ((*pc | 0x20) == 's') {
+ if (!(*sp == ' ' || (*sp >= '\t' && *sp <= '\r'))) {
+ off ^= 1;
+ }
+ } else { // w
+ if (!((*sp >= 'A' && *sp <= 'Z') || (*sp >= 'a' && *sp <= 'z') || (*sp >= '0' && *sp <= '9') || *sp == '_')) {
+ off ^= 1;
+ }
+ }
+ return off;
+}