Update of /project/climacs/cvsroot/climacs In directory clnet:/tmp/cvs-serv4377
Modified Files: lisp-syntax.lisp Log Message: Added clear highlighting of macros and special forms.
--- /project/climacs/cvsroot/climacs/lisp-syntax.lisp 2006/04/23 21:36:23 1.57 +++ /project/climacs/cvsroot/climacs/lisp-syntax.lisp 2006/05/02 14:25:24 1.58 @@ -1294,6 +1294,17 @@ form (form-toplevel (parent form) syntax)))
+(defgeneric operator-p (token syntax) + (:documentation "Return true if `token' is the operator of its form. Otherwise, + return nil.") + (:method (token syntax) + (with-accessors ((pre-token preceding-parse-tree)) token + (cond ((typep pre-token 'left-parenthesis-lexeme) + t) + ((typep pre-token 'comment) + (operator-p pre-token syntax)) + (t nil))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; display @@ -1305,8 +1316,10 @@
(defparameter *standard-faces* `((:error ,+red+ nil) - (:string ,+foreground-ink+ ,(make-text-style nil :italic nil)) + (:string ,+coral+ ,(make-text-style nil :italic nil)) (:keyword ,+dark-violet+ nil) + (:macro ,+cyan+) + (:special-form ,+cyan+) (:lambda-list-keyword ,+dark-green+ nil) (:comment ,+maroon+ nil) (:reader-conditional ,+gray50+ nil))) @@ -1315,6 +1328,8 @@ `((:error ,+red+ nil) (:string ,+gray50+ ,(make-text-style nil :italic nil)) (:keyword ,+gray50+ nil) + (:macro ,+gray50+ nil) + (:special-form ,+gray50+ nil) (:lambda-list-keyword ,+gray50+ nil) (:comment ,+gray50+ nil) (:reader-conditional ,+gray50+ nil))) @@ -1399,7 +1414,7 @@ (end-offset parse-symbol)) 'string))) (multiple-value-bind (symbol status) - (token-to-symbol syntax parse-symbol) + (token-to-object syntax parse-symbol) (with-output-as-presentation (pane (if status symbol string) (if status 'symbol 'unknown-symbol) :single-box :highlighting) @@ -1409,8 +1424,15 @@ ((eql (buffer-object (buffer syntax) (start-offset parse-symbol)) #&) (with-face (:lambda-list-keyword) (call-next-method))) - (t (call-next-method))) - ))) + ((and (macro-function symbol) + (operator-p parse-symbol syntax)) + (with-face (:macro) + (call-next-method))) + ((and (special-operator-p symbol) + (operator-p parse-symbol syntax)) + (with-face (:special-form) + (call-next-method))) + (t (call-next-method)))))) (call-next-method)))
(defmethod display-parse-tree ((parser-symbol lisp-lexeme) (syntax lisp-syntax) pane)