Remove dependency in herbie-utility
authorFrank Duncan <frank@consxy.com>
Mon, 10 Jan 2022 20:33:14 +0000 (14:33 -0600)
committerFrank Duncan <frank@consxy.com>
Mon, 10 Jan 2022 20:34:08 +0000 (14:34 -0600)
honey.asd
src/main/parse.lisp

index 94eacaf4b7a76be80d0b8c7243519a23815f0274..ec78242f997cab81a2a4ce90806f54d224a58d27 100644 (file)
--- a/honey.asd
+++ b/honey.asd
@@ -7,4 +7,4 @@
  :pathname "src/main"
  :components ((:file "package")
               (:file "parse"))
- :depends-on (:webthiteth :herbie-utility))
+ :depends-on (:webthiteth))
index af3fca9a4e73795c0de31d17a13707024633f4a4..74745bc750e392efe53821b680855b58081d5ebe 100644 (file)
@@ -30,10 +30,13 @@ DESCRIPTION:
   (list prev)
   (let*
    ((line (car lines))
-    (parser (getf (cadr (find-if #1'(funcall (getf $1 :checker) line) (reverse *line-parsers*) :key #'cadr)) :parser)))
+    (parser
+     (getf
+      (cadr (find-if (lambda (parser) (funcall (getf parser :checker) line)) (reverse *line-parsers*) :key #'cadr))
+      :parser)))
    (when (not parser) (error "Weird!  Couldn't find a match for ~A" line))
    (multiple-value-bind (parsed-line squash-prev suspension) (funcall (funcall parser line) prev)
-    (cond 
+    (cond
      (squash-prev (parse-lines (cdr lines) parsed-line))
      (suspension
       (let*
@@ -58,37 +61,46 @@ DESCRIPTION:
 
 (defun parse-inline (str)
  (let
-  ((parser (getf (cadr (find-if #1'(funcall (getf $1 :checker) str) (reverse *inline-parsers*) :key #'cadr)) :parser)))
+  ((parser
+    (getf
+     (cadr (find-if (lambda (parser) (funcall (getf parser :checker) str)) (reverse *inline-parsers*) :key #'cadr))
+     :parser)))
   (if parser (funcall parser str) str)))
 
 (defmacro defline-parser (regex handler)
  (let
   ((regex (format nil "^~A$" regex)))
   `(progn
-    (when (not (utils:strassoc ,regex *line-parsers*)) (push (list ,regex nil) *line-parsers*))
-    (setf (utils:strassoc ,regex *line-parsers*)
-     (list
-      :checker (lambda (str) (cl-ppcre:scan ,regex str))
-      :parser (lambda (str)
-               (apply
-                (function ,handler)
-                (mapcar
-                 #'as-text
-                 (coerce (second (multiple-value-list (cl-ppcre:scan-to-strings ,regex str))) 'list)))))))))
+    (when (not (find ,regex *line-parsers* :key #'car :test #'string=)) (push (list ,regex nil) *line-parsers*))
+    (let
+     ((parser (find ,regex *line-parsers* :key #'car :test #'string=)))
+     (setf
+      (cadr parser)
+      (list
+       :checker (lambda (str) (cl-ppcre:scan ,regex str))
+       :parser (lambda (str)
+                (apply
+                 (function ,handler)
+                 (mapcar
+                  #'as-text
+                  (coerce (second (multiple-value-list (cl-ppcre:scan-to-strings ,regex str))) 'list))))))))))
 
 (defmacro definline-parser (regex handler)
  (let
   ((regex (format nil "^~A$" regex)))
   `(progn
-    (when (not (utils:strassoc ,regex *inline-parsers*)) (push (list ,regex nil) *inline-parsers*))
-    (setf (utils:strassoc ,regex *inline-parsers*)
-     (list
-      :checker (lambda (str) (cl-ppcre:scan ,regex str))
-      :parser (lambda (str)
-               (apply (function ,handler)
-                (mapcar
-                 #'parse-inline
-                 (coerce (second (multiple-value-list (cl-ppcre:scan-to-strings ,regex str))) 'list)))))))))
+    (when (not (find ,regex *inline-parsers* :key #'car :test #'string=)) (push (list ,regex nil) *inline-parsers*))
+    (let
+     ((parser (find ,regex *inline-parsers* :key #'car :test #'string=)))
+     (setf
+      (cadr parser)
+      (list
+       :checker (lambda (str) (cl-ppcre:scan ,regex str))
+       :parser (lambda (str)
+                (apply (function ,handler)
+                 (mapcar
+                  #'parse-inline
+                  (coerce (second (multiple-value-list (cl-ppcre:scan-to-strings ,regex str))) 'list))))))))))
 
 ; each parser function needs to return a function that takes the previous line and returns
 ;