Update of /project/mcclim/cvsroot/mcclim/Drei In directory clnet:/tmp/cvs-serv22310/Drei
Modified Files: drawing-options.lisp lisp-syntax.lisp lr-syntax.lisp packages.lisp Log Message: My last commit was a broken monster, here's the rest.
--- /project/mcclim/cvsroot/mcclim/Drei/drawing-options.lisp 2008/01/07 22:37:17 1.1 +++ /project/mcclim/cvsroot/mcclim/Drei/drawing-options.lisp 2008/01/07 22:55:11 1.2 @@ -57,7 +57,9 @@
;;; Some drawing options for specific syntactical elements, ;;; approximately like GNU Emacs. These are not constants, as users -;;; may want to change them to fit their colour scheme. +;;; may want to change them to fit their colour scheme. Of course, +;;; syntax highlighting rules are free to ignore these, but I think +;;; the default rules should at least use these.
(defvar *keyword-drawing-options* (make-drawing-options :face (make-face :ink +orchid+)) "The drawing options used for drawing the syntactical @@ -75,3 +77,17 @@ somehow special. In Lisp, this is used for globally bound non-constant variables with dynamic scope. In other language, it should probably be used for global variables or similar.") + +(defvar *string-drawing-options* (make-drawing-options + :face (make-face :ink +rosy-brown+ + :style +italic-face-style+)) + "The drawing options used for syntax-highlighting strings.") + +(defvar *comment-drawing-options* (make-drawing-options + :face (make-face :ink +maroon+ + :style (make-text-style nil :bold nil))) + "The drawing options used for drawing comments in source +code.") + +(defvar *error-drawing-options* (make-drawing-options :face (make-face :ink +red+)) + "The drawing options used for drawing syntax errors.") --- /project/mcclim/cvsroot/mcclim/Drei/lisp-syntax.lisp 2008/01/07 22:37:17 1.56 +++ /project/mcclim/cvsroot/mcclim/Drei/lisp-syntax.lisp 2008/01/07 22:55:11 1.57 @@ -1832,10 +1832,9 @@ (global-boundp symbol-form))))
(define-syntax-highlighting-rules emacs-style-highlighting - (error-lexeme (:face :ink +red+)) - (string-form (:face :ink +rosy-brown+ - :style +italic-face-style+)) - (comment (:face :ink +maroon+ :style (make-text-style :serif :bold :large))) + (error-lexeme (*error-drawing-options*)) + (string-form (*string-drawing-options*)) + (comment (*comment-drawing-options*)) (literal-object-form (:options :function (object-drawer))) (complete-token-form (:function #'(lambda (view form) (cond ((symbol-form-is-keyword-p (syntax view) form) @@ -1854,14 +1853,22 @@ +default-drawing-options+)))))
(define-syntax-highlighting-rules retro-highlighting - (error-symbol (:face :ink +red+)) + (error-symbol (*error-drawing-options*)) (string-form (:face :style +italic-face-style+)) (comment (:face :ink +dimgray+)) (literal-object-form (:options :function (object-drawer))) (complete-token-form (:function #'(lambda (syntax form) (cond ((symbol-form-is-macrobound-p syntax form) +bold-face-drawing-options+) - (t +default-drawing-options+)))))) + (t +default-drawing-options+))))) + ;; XXX: Ugh, copied from above. + (parenthesis-lexeme (:function #'(lambda (view form) + (if (and (typep view 'point-mark-view) + (or (mark= (point view) (start-offset (parent form))) + (mark= (point view) (end-offset (parent form)))) + (form-complete-p (parent form))) + +bold-face-drawing-options+ + +default-drawing-options+)))))
(defparameter *syntax-highlighting-rules* 'emacs-style-highlighting "The syntax highlighting rules used for highlighting Lisp --- /project/mcclim/cvsroot/mcclim/Drei/lr-syntax.lisp 2008/01/07 22:05:22 1.12 +++ /project/mcclim/cvsroot/mcclim/Drei/lr-syntax.lisp 2008/01/07 22:55:11 1.13 @@ -420,7 +420,7 @@ `parser-symbol' is a type that might be encountered in a parse tree for the syntax. The rule specifies how to highlight that kind of object (and all its children). `Type' can be one of three -symbols. +special symbols.
`:face', in which case `args' will be used as arguments to a call to `make-face'. The resulting face will be used to draw @@ -434,7 +434,11 @@ function that takes two arguments. These arguments are the view of the syntax and the parser symbol, and the return value of this function is the `drawing-options' object that will be used - to draw the parser-symbol." + to draw the parser-symbol. + +Alternatively, `type' can be any object (usually a dynamically +bound symbol), in which case it will be evaluated to get the +drawing options." (check-type name symbol) `(progn (fmakunbound ',name) @@ -442,7 +446,7 @@ (:method (view (parser-symbol parser-symbol)) nil)) ,@(flet ((make-rule-exp (type args) - (ecase type + (case type (:face `(let ((options (make-drawing-options :face (make-face ,@args)))) #'(lambda (view parser-symbol) (declare (ignore view parser-symbol)) @@ -450,7 +454,10 @@ (:options `#'(lambda (view parser-symbol) (declare (ignore view parser-symbol)) (make-drawing-options ,@args))) - (:function (first args))))) + (:function (first args)) + (t `#'(lambda (view parser-symbol) + (declare (ignore view parser-symbol)) + ,type))))) (loop for (parser-symbol (type . args)) in rules collect `(let ((rule ,(make-rule-exp type args))) (defmethod ,name (view (parser-symbol ,parser-symbol)) --- /project/mcclim/cvsroot/mcclim/Drei/packages.lisp 2008/01/07 22:37:17 1.36 +++ /project/mcclim/cvsroot/mcclim/Drei/packages.lisp 2008/01/07 22:55:11 1.37 @@ -270,6 +270,9 @@ #:*keyword-drawing-options* #:*special-operator-drawing-options* #:*special-variable-drawing-options* + #:*string-drawing-options* + #:*comment-drawing-options* + #:*error-drawing-options*
;; DREI program interface stuff. #:with-drei-options