[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)
- [nongnu] elpa/parseclj 3ec632ed66 008/185: Travis show Emacs version, (continued)
- [nongnu] elpa/parseclj 3ec632ed66 008/185: Travis show Emacs version, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 7cf7dc99cd 011/185: Travis: only install the necessary ppa/package for each matrix line, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 710511ff79 013/185: Seems these packages dont actually package the versioned executable names, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj b2e97ecb57 017/185: Lets try that again #travis, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj d7adaa5177 018/185: Lets try that again #travis, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj abe7edb04b 019/185: Bunch of refactoring, but we're green now, supposedly, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 56bb020a9e 020/185: Fix the travis yaml?, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 972161dd23 022/185: Make sure we test against the version we think we are testing against, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 792ba04647 024/185: A more elaborate test, nesting works!, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 452fe7cc76 023/185: Implement nil, true, false, symbol, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 67171853f5 026/185: lex characters,
ELPA Syncer <=
- [nongnu] elpa/parseclj 4f54ba52fe 033/185: Add support for sets, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 4f647c8cff 036/185: Remove duplicate defination of clj-lex--token-token, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 1b2b221c98 038/185: Add AST to Elisp and Clojure/EDN printers, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 9404763e11 042/185: Make sure Travis uses the right Emacs, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 29411e2103 045/185: Add a design document to share vision and collect feedback, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 0702332e5d 046/185: Merge branch 'master' of https://github.com/lambdaisland/clj-parse, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 553f8618e1 044/185: Rework `clj-parse-deftest` macro, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj da89bf82a3 050/185: Allow colons inside symbols, ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj 81fe979450 051/185: Handle parsing of semicolon-based comments., ELPA Syncer, 2021/12/28
- [nongnu] elpa/parseclj a424f87c1b 054/185: :#/# is a valid keyword. :::hello is not, ELPA Syncer, 2021/12/28