dotall
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>
Sat, 14 Jul 2018 10:18:12 +0000 (12:18 +0200)
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>
Sat, 14 Jul 2018 10:18:12 +0000 (12:18 +0200)
modules/language/python/module/re.scm
modules/language/python/module/re/compile.scm
modules/language/python/module/re/flags.scm
modules/language/python/module/re/parser.scm

index 139393e42d8522d397f36d31bc0ccf62047e5d26..4da213896ff4a953468717592dff0d330f1d3f15 100644 (file)
@@ -16,7 +16,8 @@
                                    f-seq! f-and! f-nl
                                    f-reg f-seq Ds f-or! ff* f-ftr))
   #:use-module ((ice-9 match) #:select ((match . ice-match)))
-  #:re-export (A ASCII DEBUG I IGNORECASE L LOCALE M MULTILINE X VERBOSE)
+  #: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
                     purge escape))
 
                      (f-seq
                       (f-or!
                        (f-seq! e-start (f-and! e) e-end
-                               (f-ftr (lambda (c) (yield (ReMatch c re (gs) (ge) s)) '())))
+                               (f-ftr (lambda (c)
+                                         (yield (ReMatch c re (gs) (ge) s))
+                                         '())))
                        (f-seq (f-reg ".")))
                       (Ds (lp)))))))))))
 
           (() #t)))
 
        (set self '__t t)
-       (set self 'regs (__regs self)))))
+       (set self 'regs (__regs self))
+        (pk (span self)))))
 
   (define er (list 'er))
   (define group
index ca7663df17be1e0a32348b3ae49bf7feecbd2508..210a2ad2630fbde4cfc59f09dec8540148df956f 100644 (file)
@@ -6,7 +6,7 @@
   #:use-module ((parser stis-parser) #:select 
                ((parse . stisparse) <p-lambda> <p-cc> .. f-nl! f-nl
                 f-tag! f-tag f-seq f-or f-or! f-and f-true g* g+ gmn ng* ng+
-                 ngmn f-reg! f-and! f-test N M X XL
+                 ngmn f-reg! f-and! f-test N M X XL f-pk
                 g? ng? f-test! f-eof f-not! f-prev f-not f-out f-rev
                  *whitespace*
                 f-nm f-pos))
      (when (= N 0)
        (<p-cc> (wrap L c)))))
 
+(define dotall
+  (<pp-lambda> (L c)
+   (let ((x (fluid-ref *flags*)))
+     (when (pk (not (= 0 (logand x DOTALL))))
+       (<p-cc> (wrap L c))))))
+
+(define multiline
+  (<pp-lambda> (L c)
+   (let ((x (fluid-ref *flags*)))
+     (when (not (= 0 (logand x DOTALL)))
+       (<p-cc> (wrap L c))))))
+
 (define (gt f)
   (<pp-lambda> (L c)
     (let ((x #f))
     ((#:?<= f) f)
     ((#:?<! f) (#:not f))
     ((#:not f) (list #:not (reverse-form f)))
-    (#:$  #:^)
-    (#:^  #:$)
+    (#:$   #:^)
+    (#:^   #:$)
+    (#:dot #:dot)
     ((#:op  x #:* ) (list #:op  (reverse-form x) #:*)) 
     ((#:op  x #:+ ) (list #:op  (reverse-form x) #:+)) 
     ((#:op  x (#:rep  m n)) (list #:op  (reverse-form x) (#:rep  m n)))
     ((#:op  x #:? ) (list #:op  (reverse-form x) #:?)) 
     ((#:op  x #:*?) (list #:op  (reverse-form x) #:*?)) 
     ((#:op  x #:+?) (list #:op  (reverse-form x) #:+?)) 
-    ((#:op  x #:??) (list #:op  (reverse-form x) #:??)) 
+    ((#:op  x #:??) (list #:op  (reverse-form x) #:??))
     ((and a (#:ch (#:class x))) a)
     ((and a (#:ch x)) a)
     ((and a (#:bracket not ch ...)) a)))
         (and
          (= (logand fl ASCII) 0)
          (char-whitespace? x)))))
+   f-nl!
    (f-reg! "[\n\r \t\f\v]")))
 
 (define (get-class tag)
            no))
     (#:$
      (f-or! f-eof
-            (f-and (f-test (lambda (c)
-                             (let ((x (fluid-ref *flags*)))
-                               (not (= 0 (logior x MULTILINE))))))
+            (f-and multiline
                    f-nl
                    f-true)))
     (#:^
      (f-or! (f-nm 0 1)
-            (f-and (f-test (lambda (c)
-                             (let ((x (fluid-ref *flags*)))
-                               (not (= 0 (logior x MULTILINE))))))
+            (f-and multiline
                    startline
                    f-true)))
-
+    (#:dot
+     (f-or! (fw (f-reg! "."))
+            (f-and
+             dotall
+             (fw f-nl!))))
+    
     ((#:op  x #:* ) (g*   (compile x)    ))
     ((#:op  x #:+ ) (g+   (compile x)    ))
     ((#:op  x (#:rep  m n)) (gmn   (compile x) m n))
index 4db839a3269f234773f7035342213c65959f3c78..37630f8fe97d6fd72180f4e3b518610f3057bb1b 100644 (file)
@@ -1,6 +1,7 @@
 (define-module (language python module re flags)
   #:export (set-flags get-flags *flags*
-                     A ASCII DEBUG I IGNORECASE L LOCALE M MULTILINE X VERBOSE))
+                     A ASCII DEBUG I IGNORECASE L LOCALE M MULTILINE
+                      X VERBOSE S DOTALL))
 
 (define *flags* (make-fluid 0))
 (define (set-flags x) (fluid-set! *flags* x))
@@ -23,3 +24,6 @@
 (define X          32)
 (define VERBOSE    X)
 
+(define S          64)
+(define DOTALL     X)
+
index a7210d1c7c32aa68f8e43bb0514627933208ebf1..45a7a5c29e6fbf5224636832659234b9b1a29aed 100644 (file)
@@ -55,7 +55,7 @@
 
 
 (define f-bar  (f-tag "|"))
-(define qq     (ch (f-reg "[][?+|*.$^() \\]")))
+(define qq     (ch (f-reg "[][?+|*.$^()\\]")))
 (define atom   (f-or qq f-. choice subexpr anongroup namegroup incant coment lookh lookh! rev rev! f-^ f-$))
 (define spec   (f-list #:op atom (f-or! q+? q?? q*? q* q? q+ repn? repnm? repn repnm)))
 (define aatom  (f-or! spec atom))