Index: trunk/lex.lisp
===================================================================
--- trunk/lex.lisp	(revision 10)
+++ trunk/lex.lisp	(revision 12)
@@ -33,7 +33,5 @@
 		 regex-list)))
     (when (rest mapped) (setq mapped `((:alternation ,@mapped))))
-    `(:sequence (:flags :single-line-mode-p) :start-anchor
-      (:group ,@mapped)
-      (:register (:greedy-repetition 0 nil :everything)))))
+    `(:sequence (:flags :single-line-mode-p) :start-anchor ,@mapped)))
 
 (defmacro deflexer (name &body body)
@@ -47,12 +45,15 @@
 	(classes (map 'vector #'second body))
 	(filters (map 'vector #'third body)))
-    `(defun ,name (line)
-      (let ((parts
-	     (nth-value 1 (scan-to-strings (quote ,regex) line))))
+    `(defun ,name (input &optional (start 0))
+      (let ((parts (nth-value 3 (scan (quote ,regex) input :start start))))
 	(let ((idx (position-if #'identity parts)))
 	  (when idx
-	    (let ((token (aref parts idx))
-		  (filter (aref ,filters idx)))
-	      (values (aref ,classes idx)
-		      (if filter (funcall filter token) token)
-		      (aref parts ,(length classes))))))))))
+	    (let ((end (aref parts idx)))
+	      (let ((image (make-array (- end start)
+				       :element-type 'character
+				       :displaced-to input
+				       :displaced-index-offset start))
+		    (filter (aref ,filters idx)))
+		(values (aref ,classes idx)
+			(if filter (funcall filter image) image)
+			end)))))))))
