[climacs-cvs] CVS climacs

thenriksen thenriksen at common-lisp.net
Thu Nov 16 15:05:23 UTC 2006


Update of /project/climacs/cvsroot/climacs
In directory clnet:/tmp/cvs-serv2794

Modified Files:
	prolog-syntax.lisp 
Log Message:
Fix Prolog-syntax (well, one can hope). Should now work with the crazy
Drei cursor-positioning code, and not defer redisplay to the method
for Fundamental syntax.


--- /project/climacs/cvsroot/climacs/prolog-syntax.lisp	2006/11/12 16:06:06	1.30
+++ /project/climacs/cvsroot/climacs/prolog-syntax.lisp	2006/11/16 15:05:23	1.31
@@ -1218,31 +1218,32 @@
 
 (defvar *white-space-start* nil)
 
-(defvar *cursor-positions* nil)
 (defvar *current-line* 0)
 
 (defun handle-whitespace (pane buffer start end)
   (let ((space-width (space-width pane))
-	(tab-width (tab-width pane)))
-    (loop while (< start end)
-       do (case (buffer-object buffer start)
-	    (#\Newline (terpri pane)
-                       (stream-increment-cursor-position
-                        pane (first (aref *cursor-positions* *current-line*)) 0)
-		       (setf (aref *cursor-positions* (incf *current-line*))
-			     (multiple-value-list (stream-cursor-position pane))))
-	    ((#\Page #\Return #\Space) (stream-increment-cursor-position
-                                        pane space-width 0))
-	    (#\Tab (let ((x (stream-cursor-position pane)))
-		     (stream-increment-cursor-position
-		      pane (- tab-width (mod x tab-width)) 0))))
-       (incf start))))		    
+        (tab-width (tab-width pane)))
+    (with-sheet-medium (medium pane)
+      (with-accessors ((cursor-positions cursor-positions)) (syntax buffer)
+        (loop while (< start end)
+           do (case (buffer-object buffer start)
+                (#\Newline (record-line-vertical-offset pane (syntax buffer) (incf *current-line*))
+                           (terpri pane)
+                           (stream-increment-cursor-position
+                            pane (first (aref cursor-positions 0)) 0))
+                ((#\Page #\Return #\Space) (stream-increment-cursor-position
+                                            pane space-width 0))
+                (#\Tab (let ((x (stream-cursor-position pane)))
+                         (stream-increment-cursor-position
+                          pane (- tab-width (mod x tab-width)) 0))))
+           (incf start))))))		    
 
 (defmethod display-parse-tree :around ((entity prolog-parse-tree) (syntax prolog-syntax)
                                        (stream extended-output-stream) (drei drei))
   (with-slots (top bot) drei
-     (when (and (end-offset entity) (mark> (end-offset entity) top))
-       (call-next-method))))
+    (when (and (end-offset entity)
+               (mark> (end-offset entity) top))
+      (call-next-method))))
 
 (defmethod display-parse-tree ((entity prolog-token) (syntax prolog-syntax)
                                (stream extended-output-stream) (drei drei))
@@ -1313,12 +1314,15 @@
 (defun nb-valid-lexemes (lexer)
   (slot-value lexer 'valid-lex))
 
-(defmethod display-drei-contents ((stream extended-output-stream) (drei drei) (syntax prolog-syntax))
+(defmethod display-drei-contents ((stream clim-stream-pane) (drei drei) (syntax prolog-syntax))
   (with-slots (top bot) drei
     (with-accessors ((cursor-positions cursor-positions)) syntax
-      (setf cursor-positions (make-array (1+ (number-of-lines-in-region top bot)))
+      (setf cursor-positions (make-array (1+ (number-of-lines-in-region top bot))
+                                         :initial-element nil)
             *current-line* 0
-            (aref cursor-positions 0) (multiple-value-list (stream-cursor-position stream))))
+            (aref cursor-positions 0) (multiple-value-list
+                                       (stream-cursor-position stream))))
+    (setf *white-space-start* (offset top))
     (with-slots (lexer) syntax
       (let ((average-token-size (max (float (/ (size (buffer drei)) (nb-valid-lexemes lexer)))
                                      1.0)))
@@ -1338,17 +1342,16 @@
                             (not (parse-state-empty-p 
                                   (slot-value (lexeme lexer (1- start-token-index)) 'state))))
                do (decf start-token-index))
-            (let ((*white-space-start* (offset top)))
-              ;; display the parse tree if any
-              (unless (parse-state-empty-p (slot-value (lexeme lexer (1- start-token-index)) 'state))
-                (display-parse-state (slot-value (lexeme lexer (1- start-token-index)) 'state)
-                                     syntax stream drei))
-              ;; display the lexemes
-              (with-drawing-options (stream :ink +red+)
-                (loop while (< start-token-index end-token-index)
-                   do (let ((token (lexeme lexer start-token-index)))
-                        (display-parse-tree token syntax stream drei))
-                   (incf start-token-index))))))))))
+            ;; display the parse tree if any
+            (unless (parse-state-empty-p (slot-value (lexeme lexer (1- start-token-index)) 'state))
+              (display-parse-state (slot-value (lexeme lexer (1- start-token-index)) 'state)
+                                   syntax stream drei))
+            ;; display the lexemes
+            (with-drawing-options (stream :ink +red+)
+              (loop while (< start-token-index end-token-index)
+                 do (let ((token (lexeme lexer start-token-index)))
+                      (display-parse-tree token syntax stream drei))
+                 (incf start-token-index)))))))))
 
 #|
 (climacs-gui::define-named-command com-inspect-lex ()




More information about the Climacs-cvs mailing list