Function: parseclj-lex-next
parseclj-lex-next is a byte-compiled function defined in
parseclj-lex.el.
Signature
(parseclj-lex-next)
Documentation
Consume characters at point and return the next lexical token.
See parseclj-lex-token.
Source Code
;; Defined in ~/.emacs.d/elpa/parseclj-20231203.1905/parseclj-lex.el
(defun parseclj-lex-next ()
"Consume characters at point and return the next lexical token.
See `parseclj-lex-token'."
(if (parseclj-lex-at-eof-p)
(parseclj-lex-token :eof nil (point))
(let ((char (char-after (point)))
(pos (point)))
(cond
((parseclj-lex-at-whitespace-p)
(parseclj-lex-whitespace))
((equal char ?\()
(right-char)
(parseclj-lex-token :lparen "(" pos))
((equal char ?\))
(right-char)
(parseclj-lex-token :rparen ")" pos))
((equal char ?\[)
(right-char)
(parseclj-lex-token :lbracket "[" pos))
((equal char ?\])
(right-char)
(parseclj-lex-token :rbracket "]" pos))
((equal char ?{)
(right-char)
(parseclj-lex-token :lbrace "{" pos))
((equal char ?})
(right-char)
(parseclj-lex-token :rbrace "}" pos))
((equal char ?')
(right-char)
(parseclj-lex-token :quote "'" pos))
((equal char ?`)
(right-char)
(parseclj-lex-token :backquote "`" pos))
((equal char ?~)
(right-char)
(if (eq ?@ (char-after (point)))
(progn
(right-char)
(parseclj-lex-token :unquote-splice "~@" pos))
(parseclj-lex-token :unquote "~" pos)))
((parseclj-lex-at-number-p)
(parseclj-lex-number))
((parseclj-lex-symbol-start-p char)
(parseclj-lex-symbol))
((equal char ?\")
(parseclj-lex-string))
((equal char ?\\)
(parseclj-lex-character))
((equal char ?:)
(parseclj-lex-keyword))
((equal char ?\;)
(parseclj-lex-comment))
((equal char ?^)
(right-char)
(parseclj-lex-token :metadata "^" pos))
((equal char ?@)
(right-char)
(parseclj-lex-token :deref "@" pos))
((equal char ?#)
(right-char)
(let ((char (char-after (point))))
(cond
((equal char ?{)
(right-char)
(parseclj-lex-token :set "#{" pos))
((equal char ?_)
(right-char)
(parseclj-lex-token :discard "#_" pos))
((equal char ?\()
(right-char)
(parseclj-lex-token :lambda "#(" pos))
((equal char ?')
(right-char)
(parseclj-lex-token :var "#'" pos))
((equal char ?=)
(right-char)
(parseclj-lex-token :eval "#=" pos))
((equal char ?#)
(right-char)
(let ((sym (parseclj-lex-get-symbol-at-point (point))))
(parseclj-lex-token :symbolic-value (concat "##" sym) pos)))
((equal char ?\")
(parseclj-lex-regex))
((equal char ?:)
(parseclj-lex-map-prefix))
((equal char ?\?)
(right-char)
(if (eq ?@ (char-after (point)))
(progn
(right-char)
(parseclj-lex-token :reader-conditional-splice "#?@" pos))
(parseclj-lex-token :reader-conditional "#?" pos)))
((parseclj-lex-symbol-start-p char t)
(right-char)
(parseclj-lex-token :tag (concat "#" (parseclj-lex-get-symbol-at-point (1+ pos))) pos))
((equal char ?!) ;; shebang
(left-char)
(parseclj-lex-comment))
(t
(while (not (or (parseclj-lex-at-whitespace-p)
(parseclj-lex-at-eof-p)))
(right-char))
(parseclj-lex-error-token pos :invalid-hashtag-dispatcher)))))
(t
(progn
(right-char)
(parseclj-lex-error-token pos)))))))