[climacs-cvs] CVS update: climacs/lisp-syntax.lisp
Dave Murray
dmurray at common-lisp.net
Mon Aug 8 08:53:33 UTC 2005
Update of /project/climacs/cvsroot/climacs
In directory common-lisp.net:/tmp/cvs-serv11688
Modified Files:
lisp-syntax.lisp
Log Message:
Added greying-out of readmacro conditionalized forms.
Also added *climacs-features*, which is initialized from *features*,
and which lives (for the moment) in the climacs-gui package, so
Eval Expression can easily manipulate it.
Date: Mon Aug 8 10:53:30 2005
Author: dmurray
Index: climacs/lisp-syntax.lisp
diff -u climacs/lisp-syntax.lisp:1.21 climacs/lisp-syntax.lisp:1.22
--- climacs/lisp-syntax.lisp:1.21 Fri Aug 5 10:21:04 2005
+++ climacs/lisp-syntax.lisp Mon Aug 8 10:53:30 2005
@@ -1183,7 +1183,56 @@
(defmethod display-parse-tree ((parse-symbol long-comment-form) (syntax lisp-syntax) pane)
(with-drawing-options (pane :ink +maroon+)
(call-next-method)))
-
+
+(defmethod display-parse-tree ((parse-symbol reader-conditional-positive-form)
+ (syntax lisp-syntax) pane)
+ (let ((conditional (second (children parse-symbol))))
+ (if (eval-feature-conditional conditional syntax)
+ (call-next-method)
+ (with-drawing-options (pane :ink +gray50+)
+ (call-next-method)))))
+
+(defmethod display-parse-tree ((parse-symbol reader-conditional-negative-form)
+ (syntax lisp-syntax) pane)
+ (let ((conditional (second (children parse-symbol))))
+ (if (eval-feature-conditional conditional syntax)
+ (with-drawing-options (pane :ink +gray50+)
+ (call-next-method))
+ (call-next-method))))
+
+(defparameter climacs-gui::*climacs-features* (copy-list *features*))
+
+(defgeneric eval-feature-conditional (conditional-form syntax))
+
+;; Adapted from slime.el
+
+(defmethod eval-feature-conditional ((conditional token-mixin) (syntax lisp-syntax))
+ (let* ((string (coerce (buffer-sequence (buffer syntax)
+ (start-offset conditional)
+ (end-offset conditional))
+ 'string))
+ (symbol (parse-symbol string keyword-package)))
+ (member symbol climacs-gui::*climacs-features*)))
+
+(defmethod eval-feature-conditional ((conditional list-form) (syntax lisp-syntax))
+ (let ((children (children conditional)))
+ (when (third children)
+ (flet ((eval-fc (conditional)
+ (funcall #'eval-feature-conditional conditional syntax)))
+ (let* ((type (second children))
+ (conditionals (butlast (nthcdr 2 children)))
+ (type-string (coerce (buffer-sequence (buffer syntax)
+ (start-offset type)
+ (end-offset type))
+ 'string))
+ (type-symbol (parse-symbol type-string keyword-package)))
+ (case type-symbol
+ (:and (funcall #'every #'eval-fc conditionals))
+ (:or (funcall #'some #'eval-fc conditionals))
+ (:not (when conditionals
+ (funcall #'(lambda (f l) (not (apply f l)))
+ #'eval-fc conditionals)))))))))
+
(defmethod display-parse-tree ((parse-symbol complete-list-form) (syntax lisp-syntax) pane)
(let ((children (children parse-symbol)))
(if (= (end-offset parse-symbol) (offset (point pane)))
More information about the Climacs-cvs
mailing list