emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/parseclj 67171853f5 026/185: lex characters


From: ELPA Syncer
Subject: [nongnu] elpa/parseclj 67171853f5 026/185: lex characters
Date: Tue, 28 Dec 2021 14:05:10 -0500 (EST)

branch: elpa/parseclj
commit 67171853f585dd3e447ce4f0147400c1ddf8598b
Author: Arne Brasseur <arne@arnebrasseur.net>
Commit: Arne Brasseur <arne@arnebrasseur.net>

    lex characters
---
 clj-lex-test.el | 17 ++++++++++++-----
 clj-lex.el      | 30 ++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/clj-lex-test.el b/clj-lex-test.el
index d70b706e35..89035d54cd 100644
--- a/clj-lex-test.el
+++ b/clj-lex-test.el
@@ -63,11 +63,18 @@
     (goto-char 1)
     (should (equal (clj-lex-next) '((type . :symbol) (form . "hello-world") 
(pos . 1)))))
 
-  ;; (with-temp-buffer
-  ;;   (insert "\\newline\\return\\space\\tab\\a\\b\\c")
-  ;;   (goto-char 1)
-  ;;   (should (equal (clj-lex-next) (clj-lex-token :character "\\newline" 
1))))
-  )
+  (with-temp-buffer
+    (insert "\\newline\\return\\space\\tab\\a\\b\\c")
+    (goto-char 1)
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\newline" 1)))
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\return" 9)))
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\space" 16)))
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\tab" 22)))
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\a" 26)))
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\b" 28)))
+    (should (equal (clj-lex-next) (clj-lex-token :character "\\c" 30)))
+
+    ))
 
 (ert-deftest clj-lex-test-at-number? ()
   (dolist (str '("123" ".9" "+1" "0" "-456"))
diff --git a/clj-lex.el b/clj-lex.el
index 0dc28a0da0..38f1b7d00c 100644
--- a/clj-lex.el
+++ b/clj-lex.el
@@ -111,6 +111,33 @@
           (clj-lex-token :string (buffer-substring-no-properties pos (point)) 
pos))
       (clj-lex-token :lex-error (buffer-substring-no-properties pos (point)) 
pos))))
 
+(defun clj-lex-lookahead (n)
+  (buffer-substring-no-properties (point) (min (+ (point) n) (point-max))))
+
+(defun clj-lex-character ()
+  (let ((pos (point)))
+    (right-char)
+    (cond
+     ((equal (clj-lex-lookahead 3) "tab")
+      (right-char 3)
+      (clj-lex-token :character (buffer-substring-no-properties pos (point)) 
pos))
+
+     ((equal (clj-lex-lookahead 5) "space")
+      (right-char 5)
+      (clj-lex-token :character (buffer-substring-no-properties pos (point)) 
pos))
+
+     ((equal (clj-lex-lookahead 6) "return")
+      (right-char 6)
+      (clj-lex-token :character (buffer-substring-no-properties pos (point)) 
pos))
+
+     ((equal (clj-lex-lookahead 7) "newline")
+      (right-char 7)
+      (clj-lex-token :character (buffer-substring-no-properties pos (point)) 
pos))
+
+     (t
+      (right-char)
+      (clj-lex-token :character (buffer-substring-no-properties pos (point)) 
pos)))))
+
 (defun clj-lex-next ()
   (if (clj-lex-at-eof?)
       (clj-lex-token :eof nil (point))
@@ -137,6 +164,9 @@
        ((equal char ?\")
         (clj-lex-string))
 
+       ((equal char ?\\)
+        (clj-lex-character))
+
        ":("))))
 
 (provide 'clj-lex)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]