Update of /project/climacs/cvsroot/climacs In directory common-lisp.net:/tmp/cvs-serv31702
Modified Files: base-test.lisp base.lisp Log Message: Changes to indent-line, copyrights. Tests for indent-line.
Date: Sun Feb 6 17:33:50 2005 Author: abakic
Index: climacs/base-test.lisp diff -u climacs/base-test.lisp:1.5 climacs/base-test.lisp:1.6 --- climacs/base-test.lisp:1.5 Sun Feb 6 01:03:26 2005 +++ climacs/base-test.lisp Sun Feb 6 17:33:50 2005 @@ -869,6 +869,15 @@ (deftest standard-buffer-indent-line.test-2 (let ((buffer (make-instance 'standard-buffer))) (insert-buffer-sequence buffer 0 " climacs ") + (let ((m (make-instance 'standard-left-sticky-mark + :buffer buffer :offset 0))) + (indent-line m 5 4) + (buffer-sequence buffer 0 (size buffer)))) + " climacs ") + +(deftest standard-buffer-indent-line.test-3 + (let ((buffer (make-instance 'standard-buffer))) + (insert-buffer-sequence buffer 0 " climacs ") (let ((m (make-instance 'standard-right-sticky-mark :buffer buffer :offset 0))) (indent-line m 5 4)
Index: climacs/base.lisp diff -u climacs/base.lisp:1.32 climacs/base.lisp:1.33 --- climacs/base.lisp:1.32 Sun Feb 6 01:03:26 2005 +++ climacs/base.lisp Sun Feb 6 17:33:50 2005 @@ -6,6 +6,8 @@ ;;; Elliott Johnson (ejohnson@fasl.info) ;;; (c) copyright 2005 by ;;; Matthieu Villeneuve (matthieu.villeneuve@free.fr) +;;; (c) copyright 2005 by +;;; Aleksandar Bakic (a_bakic@yahoo.com)
;;; This library is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Library General Public @@ -442,22 +444,33 @@ ;;; ;;; Indentation
-(defun indent-line (mark indentation tab-width) - "Indent the line containing mark with indentation spaces. Use tabs and spaces -if tab-width is not nil, otherwise use spaces only." +(defgeneric indent-line (mark indentation tab-width) + (:documentation "Indent the line containing mark with indentation +spaces. Use tabs and spaces if tab-width is not nil, otherwise use +spaces only.")) + +(defun indent-line* (mark indentation tab-width left) (let ((mark2 (clone-mark mark))) (beginning-of-line mark2) (loop until (end-of-buffer-p mark2) - as object = (object-after mark2) - while (or (eql object #\Space) (eql object #\Tab)) - do (delete-range mark2 1)) + as object = (object-after mark2) + while (or (eql object #\Space) (eql object #\Tab)) + do (delete-range mark2 1)) (loop until (zerop indentation) - do (cond ((and tab-width (>= indentation tab-width)) - (insert-object mark2 #\Tab) - (decf indentation tab-width)) - (t - (insert-object mark2 #\Space) - (decf indentation)))))) + do (cond ((and tab-width (>= indentation tab-width)) + (insert-object mark2 #\Tab) + (when left ; spaces must follow tabs + (forward-object mark2)) + (decf indentation tab-width)) + (t + (insert-object mark2 #\Space) + (decf indentation)))))) + +(defmethod indent-line ((mark left-sticky-mark) indentation tab-width) + (indent-line* mark indentation tab-width t)) + +(defmethod indent-line ((mark right-sticky-mark) indentation tab-width) + (indent-line* mark indentation tab-width nil))
(defun delete-indentation (mark) (beginning-of-line mark)