diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-08-01 18:31:01 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-08-01 18:31:01 +0200 |
commit | 12222fe9ee6851feb80c5f2b7980487bea87bf5e (patch) | |
tree | 588e658c1f9025f252c79dda9ef438f3df66df68 /modules/language/python/module/re.scm | |
parent | fe67dde08972f32e0d66a240a2a3610f22e740f7 (diff) |
better python 2 formatting conformation
Diffstat (limited to 'modules/language/python/module/re.scm')
-rw-r--r-- | modules/language/python/module/re.scm | 70 |
1 files changed, 46 insertions, 24 deletions
diff --git a/modules/language/python/module/re.scm b/modules/language/python/module/re.scm index 5ba3114..1e9f316 100644 --- a/modules/language/python/module/re.scm +++ b/modules/language/python/module/re.scm @@ -5,7 +5,7 @@ #:use-module (language python dict) #:use-module (language python try) #:use-module (language python exceptions) - #:use-module ((language python module python) #:select (str isinstance range)) + #:use-module ((language python module _python) #:select (str isinstance range)) #:use-module (language python string) #:use-module (language python for) #:use-module (language python def) @@ -18,7 +18,7 @@ #:use-module ((ice-9 match) #:select ((match . ice-match))) #:re-export (A ASCII DEBUG I IGNORECASE L LOCALE M MULTILINE X VERBOSE S DOTALL) - #:export (compile match fullmatch search split finditer findall sub subn + #:export (compile match fullmatch search split splitm splitmm finditer findall sub subn purge escape)) (define start (make-fluid 0)) @@ -58,10 +58,19 @@ (lam (self s (= flags 0)) (set self 'flags flags) (set self 'pattern s) - (let ((l (compile-reg s))) - (set self '__re (list-ref l 0)) - (set self 'groups (- (list-ref l 1) 1)) - (set self 'groupindex (list-ref l 2))))) + (let lp ((l s)) + (if (string? l) + (lp (compile-reg l)) + (if (list? l) + (begin + (set self '__re (list-ref l 0)) + (set self 'groups (- (list-ref l 1) 1)) + (set self 'groupindex (list-ref l 2))) + (begin + (set self '__re l) + (set self 'groups 0) + (set self 'groupindex '()))))))) + (define __repr__ (lambda (self) @@ -149,17 +158,25 @@ (define (grps m) (reverse ((ref m 'groups)))) -(define-syntax-rule (mk split- grps) +(define (mku re ss) + (lambda (m) + (ReMatch (caddr m) re (car m) (cadr m) ss))) + +(define (mkid re ss) id) + +(define-syntax-rule (mk split- grps mku) (def (split- re ss (= maxsplit 0) (= flags 0)) - (if (isinstance re str) + (if (not (isinstance re Regexp)) (split- (Regexp re) ss maxsplit flags) (begin - (set-flags flags) + (set-flags flags) (set-maxsplit maxsplit) (let ((m (parse ss (ff* (f-seq! e-maxsplit (e-search (ref re '__re)) (f-ftr (lambda (c) (list (gs) (ge) c)))))))) - (let lp ((s 0) (l (map (lambda (m) (ReMatch (caddr m) re (car m) (cadr m) ss)) m)) (r '())) + (let lp ((s 0) + (l (map (mku re ss) m)) + (r '())) (if (pair? l) (let* ((m (car l)) (i ((ref m 'start))) @@ -170,13 +187,17 @@ r))) (reverse (cons (pylist-slice ss s None None) r))))))))) -(mk split- grps) +(mk split- grps mku) (define split split-) (define (id x) (list x)) -(mk splitm- id) +(mk splitm- id mku) (define splitm splitm-) +(define (id2 x) (list (ref x '__m))) +(mk splitmm- id2 mku) +(define splitmm splitmm-) + (def (finditer- re s (= flags 0)) (if (isinstance re str) (finditer- (Regexp re) s flags) @@ -310,24 +331,25 @@ (set self 'string ss) (let ((t (make-hash-table))) - (for ((k v : (ref re 'groupindex))) () (hash-set! t k None)) (for ((i : (range (ref re 'groups)))) () (hash-set! t i None)) - - (let lp ((l (list-ref m 0))) - (ice-match l - ((((n . i) . v) . l) - (hash-set! t n v) - (hash-set! t i v) - (lp l)) - (((i . v) . l) - (hash-set! t i v) - (lp l)) - (() #t))) + (if (string? (ref re 'pattern)) + (let lp ((l (list-ref m 0))) + (ice-match l + ((((n . i) . v) . l) + (hash-set! t n v) + (hash-set! t i v) + (lp l)) + (((i . v) . l) + (hash-set! t i v) + (lp l)) + (() #t)))) + + (set self '__m m) (set self '__t t) (set self 'regs (__regs self))))) |