diff options
author | Damien George <damien.p.george@gmail.com> | 2015-02-21 10:33:20 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-02-21 10:33:20 +0000 |
commit | d09a5b51c2c96e0315ec000589fdf81ca41c3fec (patch) | |
tree | bae8802dce4789da6d7e25ef1fe4076cb1b416e0 /extmod/re1.5/charclass.c | |
parent | 2e24034c3f90f9111d1f07cf1ff6276e7c6809a2 (diff) | |
download | micropython-d09a5b51c2c96e0315ec000589fdf81ca41c3fec.tar.gz micropython-d09a5b51c2c96e0315ec000589fdf81ca41c3fec.zip |
extmod: Pull in upstream changes to re1.5; fixes bug, adds named class.
Diffstat (limited to 'extmod/re1.5/charclass.c')
-rw-r--r-- | extmod/re1.5/charclass.c | 20 |
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; +} |