[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master da878fa 18/60: Use parsec-query for other return values
From: |
Junpeng Qiu |
Subject: |
[elpa] master da878fa 18/60: Use parsec-query for other return values |
Date: |
Tue, 25 Oct 2016 17:45:13 +0000 (UTC) |
branch: master
commit da878faffda606ce46faee8fd8e91ae468b29ae2
Author: Junpeng Qiu <address@hidden>
Commit: Junpeng Qiu <address@hidden>
Use parsec-query for other return values
---
parsec.el | 71 ++++++++++++++++++++++++++-----------------------------------
1 file changed, 30 insertions(+), 41 deletions(-)
diff --git a/parsec.el b/parsec.el
index 3104776..d46047b 100644
--- a/parsec.el
+++ b/parsec.el
@@ -64,20 +64,12 @@
(format "Found \"%s\" -> Expected \"%s\""
found expected))))))))
-(defun parsec-ch (ch &rest args)
+(defun parsec-ch (ch)
(let ((next-char (char-after)))
(if (and (not (eobp))
(char-equal next-char ch))
- (prog1
- (cond
- ((memq :nil args) nil)
- ((memq :beg args)
- (point))
- ((memq :end args)
- (1+ (point)))
- (t
- (char-to-string ch)))
- (forward-char 1))
+ (progn (forward-char 1)
+ (char-to-string ch))
(parsec-stop :expected (char-to-string ch)
:found (parsec-eob-or-char-as-string)))))
@@ -85,16 +77,8 @@
(let ((next-char (char-after)))
(if (and (not (eobp))
(funcall pred next-char))
- (prog1
- (cond
- ((memq :nil args) nil)
- ((memq :beg args)
- (point))
- ((memq :end args)
- (1+ (point)))
- (t
- (char-to-string ch)))
- (forward-char 1))
+ (progn (forward-char 1)
+ (char-to-string ch))
(parsec-stop :expected (format "%s" pred)
:found (parsec-eob-or-char-as-string)))))
@@ -103,30 +87,14 @@
(parsec-stop :expected "`eob'"
:found (parsec-eob-or-char-as-string))))
-(defun parsec-re (regexp &rest args)
+(defun parsec-re (regexp)
(if (looking-at regexp)
- (prog1
- (cond
- ((memq :nil args) nil)
- ((memq :beg args)
- (match-beginning 0))
- ((memq :end args)
- (match-end 0))
- ((memq :group args)
- (let ((group
- (cl-loop named outer for arg on args
- when (eq (car arg) :group) do
- (return-from outer (cadr arg)))))
- (if group
- (match-string group)
- (error "Unexpected regexp :group %s" group))))
- (t
- (match-string 0)))
- (goto-char (match-end 0)))
+ (progn (goto-char (match-end 0))
+ (match-string 0))
(parsec-stop :expected regexp
:found (parsec-eob-or-char-as-string))))
-(defsubst parsec-str (str &rest args)
+(defsubst parsec-str (str)
(parsec-re (regexp-quote str)))
(defsubst parsec-num (num &rest args)
@@ -264,6 +232,27 @@
(parsec-return ,parser
,close)))
+(defmacro parsec-query (parser &rest args)
+ (let ((orig-pt-sym (make-symbol "orig-pt"))
+ (res-sym (make-symbol "results")))
+ `(let ((,orig-pt-sym (point))
+ (,res-sym ,parser))
+ ,(cond
+ ((memq :beg args) orig-pt-sym)
+ ((memq :end args) '(point))
+ ((memq :nil args) nil)
+ ((and (memq :group args)
+ (consp parser)
+ (eq (car parser) 'parsec-re))
+ (let ((group
+ (cl-loop named outer for arg on args
+ when (eq (car arg) :group) do
+ (cl-return-from outer (cadr arg)))))
+ (if (and group (integerp group))
+ `(match-string ,group)
+ (error "Invalid query :group %s" group))))
+ (t res-sym)))))
+
(defun parsec-just (x) (cons 'Just x))
(defvar parsec-nothing 'Nothing)
- [elpa] master a06220c 42/60: Update README, (continued)
- [elpa] master a06220c 42/60: Update README, Junpeng Qiu, 2016/10/25
- [elpa] master f7e8629 26/60: Add tests, Junpeng Qiu, 2016/10/25
- [elpa] master bc11325 50/60: Add file examples/.nosearch, Junpeng Qiu, 2016/10/25
- [elpa] master 1da4344 32/60: Update url-str-parser, Junpeng Qiu, 2016/10/25
- [elpa] master 89dd2ac 54/60: Fix some wording in README, Junpeng Qiu, 2016/10/25
- [elpa] master 55515ca 48/60: Add missing dependencies, Junpeng Qiu, 2016/10/25
- [elpa] master 2e9f962 59/60: Add new package parsec to externals-list, Junpeng Qiu, 2016/10/25
- [elpa] master 3827d26 36/60: Add docs for user-interface functions & combinators, Junpeng Qiu, 2016/10/25
- [elpa] master 8c108be 56/60: Add parsec-peek and parsec-peek-p, Junpeng Qiu, 2016/10/25
- [elpa] master 6001a70 12/60: Refine and add more parsec API, Junpeng Qiu, 2016/10/25
- [elpa] master da878fa 18/60: Use parsec-query for other return values,
Junpeng Qiu <=
- [elpa] master 054a753 06/60: Rename to parsec, Junpeng Qiu, 2016/10/25
- [elpa] master 2cce1e3 37/60: Rename parsec-from-just to parsec-from-maybe, Junpeng Qiu, 2016/10/25
- [elpa] master cdb8c0d 47/60: Remove unused symbols, Junpeng Qiu, 2016/10/25
- [elpa] master fdb3d99 44/60: Fix some code in simple-csv-parser.el, Junpeng Qiu, 2016/10/25
- [elpa] master 701964f 57/60: Prepare headers for GNU ELPA, Junpeng Qiu, 2016/10/25
- [elpa] master cbd3352 55/60: Add parsec-lookahead, Junpeng Qiu, 2016/10/25
- [elpa] master a951fbe 41/60: Unify tag names, Junpeng Qiu, 2016/10/25
- [elpa] master dfb3af0 60/60: Add 'packages/parsec/' from commit '8f0c266d8b9b0ee5fcf9b80c518644b2849ff3b3', Junpeng Qiu, 2016/10/25
- [elpa] master 6cc3100 07/60: Fix indentations, Junpeng Qiu, 2016/10/25
- [elpa] master d98e8c8 05/60: Add url-encoded string parser, Junpeng Qiu, 2016/10/25