[climacs-cvs] CVS update: climacs/prolog-syntax.lisp
Christophe Rhodes
crhodes at common-lisp.net
Sun Apr 17 15:44:41 UTC 2005
Update of /project/climacs/cvsroot/climacs
In directory common-lisp.net:/tmp/cvs-serv23440
Modified Files:
prolog-syntax.lisp
Log Message:
Deal with #\Tabs a bit better.
* although ISO doesn't mandate it, treat a Tab as whitespace, because
let's face it, it's pretty useless not to;
* deal with #\Tab also in lexemes (necessary whether or not Tab is whitespace
in Prolog syntax, where lexemes can contain whitespace characters);
Highlight "" char-code-lists in green
Date: Sun Apr 17 17:44:40 2005
Author: crhodes
Index: climacs/prolog-syntax.lisp
diff -u climacs/prolog-syntax.lisp:1.16 climacs/prolog-syntax.lisp:1.17
--- climacs/prolog-syntax.lisp:1.16 Tue Apr 12 23:48:19 2005
+++ climacs/prolog-syntax.lisp Sun Apr 17 17:44:39 2005
@@ -177,7 +177,7 @@
((eql object #\") (fo) (go CHAR-CODE-LIST))
((eql object #\()
(if (or (beginning-of-buffer-p scan)
- (not (member (object-before scan) '(#\Space #\Newline))))
+ (not (member (object-before scan) '(#\Space #\Tab #\Newline))))
(progn (fo) (return (make-instance 'open-ct-lexeme)))
(progn (fo) (return (make-instance 'open-lexeme)))))
((eql object #\)) (fo) (return (make-instance 'close-lexeme)))
@@ -277,7 +277,8 @@
do (fo))
(if (end-of-buffer-p scan)
(return (make-instance 'error-lexeme))
- (return (make-instance 'char-code-list-lexeme)))))))))
+ (progn (fo)
+ (return (make-instance 'char-code-list-lexeme))))))))))
;;; parser
@@ -438,6 +439,10 @@
(display-parse-tree ({ entity) syntax pane)
(display-parse-tree (term entity) syntax pane)
(display-parse-tree (} entity) syntax pane))
+(defmethod display-parse-tree
+ ((entity char-code-list-compound-term) (syntax prolog-syntax) pane)
+ (with-drawing-options (pane :ink (make-rgb-color 0.0 0.6 0.0))
+ (display-parse-tree (ccl entity) syntax pane)))
(defclass atom (prolog-nonterminal)
((value :initarg :value :accessor value)))
@@ -902,7 +907,7 @@
(incf valid-parse))))))
(defmethod inter-lexeme-object-p ((lexer prolog-lexer) object)
- (member object '(#\Space #\Newline)))
+ (member object '(#\Space #\Newline #\Tab)))
(defmethod update-syntax (buffer (syntax prolog-syntax))
(with-slots (lexer valid-parse) syntax
@@ -983,8 +988,9 @@
(loop
(when (>= start end)
(return))
- (let ((nl (position #\Newline string
- :start start :end end)))
+ (let ((nl (position-if
+ (lambda (x) (member x '(#\Tab #\Newline)))
+ string :start start :end end)))
(unless nl
(present (subseq string start end) 'string :stream pane)
(return))
@@ -1055,7 +1061,11 @@
(let* ((cursor-line (number-of-lines-in-region top (point pane)))
(height (text-style-height (medium-text-style pane) pane))
(cursor-y (+ (* cursor-line (+ height (stream-vertical-spacing pane)))))
- (cursor-column (column-number (point pane)))
+ (cursor-column
+ ;; FIXME: surely this should be more abstracted?
+ (buffer-display-column
+ (buffer (point pane)) (offset (point pane))
+ (round (tab-width pane) (space-width pane))))
(cursor-x (* cursor-column (text-style-width (medium-text-style pane) pane))))
(updating-output (pane :unique-id -1)
(draw-rectangle* pane
More information about the Climacs-cvs
mailing list