Update of /project/climacs/cvsroot/climacs In directory common-lisp.net:/tmp/cvs-serv12579
Modified Files: climacs.asd gui.lisp packages.lisp syntax.lisp Added Files: lisp-syntax.lisp Log Message: Alternative syntax for editing common lisp (called "Lisp").
I have not completely lost hope of making the Earley-based syntax module fast enough, but as of now I don't know how.
This syntax module provides an incremental resynchronizing LR parser for Common Lisp. It is fast enough the parse tree for the entire buffer is kept updated, as opposed to just for what is visible in the CLIM pane.
Ultimately, I hope to factor out the parts that are not specific to Lisp into a different module, perhaps the existing syntax.lisp file. I'll be interested in your opinions.
Date: Mon May 30 09:25:14 2005 Author: rstrandh
Index: climacs/climacs.asd diff -u climacs/climacs.asd:1.29 climacs/climacs.asd:1.30 --- climacs/climacs.asd:1.29 Mon May 23 03:00:24 2005 +++ climacs/climacs.asd Mon May 30 09:25:13 2005 @@ -65,6 +65,7 @@ "html-syntax" "prolog-syntax" "ttcn3-syntax" + "lisp-syntax" "gui" ;;---- optional ---- "testing/rt"
Index: climacs/gui.lisp diff -u climacs/gui.lisp:1.140 climacs/gui.lisp:1.141 --- climacs/gui.lisp:1.140 Thu May 26 10:31:53 2005 +++ climacs/gui.lisp Mon May 30 09:25:13 2005 @@ -270,7 +270,11 @@ (motion-before-beginning () (beep) (display-message "Beginning of buffer")) (motion-after-end () - (beep) (display-message "End of buffer"))) + (beep) (display-message "End of buffer")) + (no-expression () + (beep) (display-message "No expression around point")) + (no-such-operation () + (beep) (display-message "Operation unavailable for syntax"))) (setf (previous-command *standard-output*) (if (consp command) (car command) @@ -1375,6 +1379,33 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; +;;; For testing purposes + +(define-named-command com-reset-profile () + (sb-profile:reset)) + +(define-named-command com-report-profile () + (sb-profile:report)) + +(define-named-command com-recompile () + (asdf:operate 'asdf:load-op :climacs)) + +(define-named-command com-backward-expression ((count 'integer :prompt "Number of expressions")) + (declare (ignore count)) + (let* ((pane (current-window)) + (point (point pane)) + (syntax (syntax (buffer pane)))) + (backward-expression point syntax))) + +(define-named-command com-forward-expression ((count 'integer :prompt "Number of expresssions")) + (declare (ignore count)) + (let* ((pane (current-window)) + (point (point pane)) + (syntax (syntax (buffer pane)))) + (forward-expression point syntax))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;;; Global and dead-escape command tables
(make-command-table 'global-climacs-table :errorp nil) @@ -1459,6 +1490,9 @@ (global-set-key #\Backspace `(com-backward-delete-object ,*numeric-argument-marker*))
(global-set-key '(:insert) 'com-toggle-overwrite-mode) + +(global-set-key '(#\b :control :meta) `(com-backward-expression ,*numeric-argument-marker*)) +(global-set-key '(#\f :control :meta) `(com-forward-expression ,*numeric-argument-marker*))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;
Index: climacs/packages.lisp diff -u climacs/packages.lisp:1.62 climacs/packages.lisp:1.63 --- climacs/packages.lisp:1.62 Sat May 7 00:32:28 2005 +++ climacs/packages.lisp Mon May 30 09:25:13 2005 @@ -103,7 +103,9 @@ #:parse-stack-top #:target-parse-tree #:parse-state-empty-p #:parse-stack-next #:parse-stack-symbol #:parse-stack-parse-trees #:map-over-parse-trees + #:no-such-operation #:no-expression #:syntax-line-indentation + #:forward-expression #:backward-expression #:redisplay-pane-with-syntax #:beginning-of-paragraph #:end-of-paragraph))
@@ -149,6 +151,11 @@ (:shadow "ATOM" "CLOSE" "EXP" "INTEGER" "OPEN" "VARIABLE"))
(defpackage :climacs-cl-syntax + (:use :clim-lisp :clim :climacs-buffer :climacs-base + :climacs-syntax :flexichain :climacs-pane) + (:export)) + +(defpackage :climacs-lisp-syntax (:use :clim-lisp :clim :climacs-buffer :climacs-base :climacs-syntax :flexichain :climacs-pane) (:export))
Index: climacs/syntax.lisp diff -u climacs/syntax.lisp:1.50 climacs/syntax.lisp:1.51 --- climacs/syntax.lisp:1.50 Thu May 26 10:31:53 2005 +++ climacs/syntax.lisp Mon May 30 09:25:13 2005 @@ -25,6 +25,20 @@ (defclass syntax (name-mixin) ((buffer :initarg :buffer :reader buffer)))
+(define-condition no-such-operation (simple-error) + () + (:report (lambda (condition stream) + (format stream "Operation unavailable for this syntax"))) + (:documentation "This condition is signaled whenever an attempt is +made to execute an operation that is unavailable for the particular syntax" )) + +(define-condition no-expression (simple-error) + () + (:report (lambda (condition stream) + (format stream "No expression at point"))) + (:documentation "This condition is signaled whenever an attempt is +made to execute a by-experssion motion command and no expression is available." )) + (defgeneric update-syntax (buffer syntax))
(defgeneric update-syntax-for-display (buffer syntax from to)) @@ -33,6 +47,10 @@ (:documentation "Return the correct indentation for the line containing the mark, according to the specified syntax."))
+(defgeneric forward-expression (mark syntax)) + +(defgeneric backward-expression (mark syntax)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Syntax completion @@ -124,6 +142,12 @@ (defmethod syntax-line-indentation (mark tab-width (syntax basic-syntax)) (declare (ignore mark tab-width)) 0) + +(defmethod forward-expression (mark syntax) + (error 'no-such-operation)) + +(defmethod backward-expression (mark syntax) + (error 'no-such-operation))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;