summaryrefslogtreecommitdiff
path: root/modules/language/python/module/re.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-08-01 18:31:01 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-08-01 18:31:01 +0200
commit12222fe9ee6851feb80c5f2b7980487bea87bf5e (patch)
tree588e658c1f9025f252c79dda9ef438f3df66df68 /modules/language/python/module/re.scm
parentfe67dde08972f32e0d66a240a2a3610f22e740f7 (diff)
better python 2 formatting conformation
Diffstat (limited to 'modules/language/python/module/re.scm')
-rw-r--r--modules/language/python/module/re.scm70
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)))))