Changeset 14630 in project


Ignore:
Timestamp:
05/14/09 16:46:53 (10 years ago)
Author:
Alex Shinn
Message:

fixing \xNN escapes in char-set ranges

File:
1 edited

Legend:

Unmodified
Added
Removed
  • chicken/trunk/irregex.scm

    r14377 r14630  
    821821                (else
    822822                 (let* ((c1 (car chars))
    823                         (c2 (string-ref str (+ i 1)))
    824                         (len (if utf8? (utf8-start-char->length c2) 1))
    825                         (c2 (if (and utf8? (<= #x80 (char->integer c2) #xFF))
    826                                 (utf8-string-ref str (+ i 1) len)
    827                                 c2)))
    828                    (if (char<? c2 c1)
    829                        (error "inverted range in char-set" c1 c2)
    830                        (go (+ i 1 len) (cdr chars) (cons (cons c1 c2) ranges))
    831                      )))))
     823                        (c2 (string-ref str (+ i 1))))
     824                   (apply
     825                    (lambda (c2 j)
     826                      (if (char<? c2 c1)
     827                          (error "inverted range in char-set" c1 c2)
     828                          (go j (cdr chars) (cons (cons c1 c2) ranges))))
     829                    (cond
     830                     ((and (eqv? #\\ c2) (assv c2 posix-escape-sequences))
     831                      => (lambda (x) (list (cdr x) (+ i 3))))
     832                     ((and (eqv? #\\ c2)
     833                           (eqv? (string-ref str (+ i 2)) #\x))
     834                      (string-parse-hex-escape str (+ i 3) end))
     835                     ((and utf8? (<= #x80 (char->integer c2) #xFF))
     836                      (let ((len (utf8-start-char->length c2)))
     837                        (list (utf8-string-ref str (+ i 1) len) (+ i 1 len))))
     838                     (else
     839                      (list c2 (+ i 2)))))))))
    832840              ((#\[)
    833841               (let* ((inv? (eqv? #\^ (string-ref str (+ i 1))))
     
    860868                    (apply
    861869                     (lambda (ch j)
    862                        (go (+ j 1) (cons ch chars) ranges))
     870                       (go j (cons ch chars) ranges))
    863871                     (string-parse-hex-escape str (+ i 2) end)))
    864872                   (else
Note: See TracChangeset for help on using the changeset viewer.