emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/textmodes/artist.el,v


From: Chong Yidong
Subject: [Emacs-diffs] Changes to emacs/lisp/textmodes/artist.el,v
Date: Wed, 27 Aug 2008 17:23:30 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Chong Yidong <cyd>      08/08/27 17:23:29

Index: artist.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/textmodes/artist.el,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- artist.el   12 Jun 2008 03:56:20 -0000      1.40
+++ artist.el   27 Aug 2008 17:23:29 -0000      1.41
@@ -723,14 +723,14 @@
                 2
                 artist-draw-rect
                 (artist-undraw-rect
-                 artist-t artist-cut-rect)
+                 artist-t artist-cut-rect))
                ("cut square" cut-s "cut-s"
                 artist-no-arrows nil
                 nil nil nil
                 2
                 artist-draw-square
                 (artist-undraw-square
-                 artist-t artist-cut-square))))))
+                 artist-t artist-cut-square)))))
 
        (graphics-operation
        ("Copy" (("copy rectangle" copy-r "copy-r"
@@ -739,14 +739,14 @@
                  2
                  artist-draw-rect
                  (artist-undraw-rect
-                  artist-t artist-copy-rect)
+                  artist-t artist-copy-rect))
                 ("copy square" copy-s "copy-s"
                  artist-no-arrows nil
                  nil nil nil
                  2
                  artist-draw-square
                  (artist-undraw-square
-                  artist-t artist-copy-square))))))
+                  artist-t artist-copy-square)))))
 
        (graphics-operation
        ("Paste" (("paste" paste "paste"
@@ -1375,6 +1375,9 @@
 ;; Init and exit
 (defun artist-mode-init ()
   "Init Artist mode.  This will call the hook `artist-mode-init-hook'."
+  ;; Set up a conversion table for mapping tabs and new-lines to spaces.
+  ;; the last case, 0, is for the last position in buffer/region, where
+  ;; the `following-char' function returns 0.
   (let ((i 0))
     (while (< i 256)
       (aset artist-replacement-table i i)
@@ -1382,6 +1385,7 @@
   (aset artist-replacement-table ?\n ?\s)
   (aset artist-replacement-table ?\t ?\s)
   (aset artist-replacement-table 0 ?\s)
+  ;; More setup
   (make-local-variable 'artist-key-is-drawing)
   (make-local-variable 'artist-key-endpoint1)
   (make-local-variable 'artist-key-poly-point-list)
@@ -1944,10 +1948,21 @@
   (following-char))
 
 
+(defsubst artist-get-replacement-char (c)
+  "Retrieve a replacement for character C from `artist-replacement-table'.
+The replacement is used to convert tabs and new-lines to spaces."
+  ;; Characters may be outside the range of the `artist-replacement-table',
+  ;; for example if they are unicode code points >= 256.
+  ;; Check so we don't attempt to access the array out of its bounds,
+  ;; assuming no such character needs to be replaced.
+  (if (< c (length artist-replacement-table))
+      (aref artist-replacement-table c)
+    c))
+
 (defun artist-get-char-at-xy-conv (x y)
   "Retrieve the character at X, Y, converting tabs and new-lines to spaces."
   (save-excursion
-    (aref artist-replacement-table (artist-get-char-at-xy x y))))
+    (artist-get-replacement-char (artist-get-char-at-xy x y))))
 
 
 (defun artist-replace-char (new-char)
@@ -1963,12 +1978,12 @@
        (artist-move-to-xy (1+ (artist-current-column))
                           (artist-current-line))
        (delete-char -1)
-       (insert (aref artist-replacement-table new-char)))
+       (insert (artist-get-replacement-char new-char)))
     ;; In emacs-19, the self-insert-command works better and faster
     (let ((overwrite-mode 'overwrite-mode-textual)
          (fill-column 32765)           ; Large :-)
          (blink-matching-paren nil))
-      (setq last-command-event (aref artist-replacement-table new-char))
+      (setq last-command-event (artist-get-replacement-char new-char))
       (self-insert-command 1))))
 
 (defun artist-replace-chars (new-char count)
@@ -1980,7 +1995,7 @@
       ;; The self-insert-command doesn't care about the overwrite-mode,
       ;; so the insertion is done in the same way as in picture mode.
       ;; This seems to be a little bit slower.
-      (let* ((replaced-c (aref artist-replacement-table new-char))
+      (let* ((replaced-c (artist-get-replacement-char new-char))
             (replaced-s (make-string count replaced-c)))
        (artist-move-to-xy (+ (artist-current-column) count)
                           (artist-current-line))
@@ -1990,7 +2005,7 @@
     (let ((overwrite-mode 'overwrite-mode-textual)
          (fill-column 32765)           ; Large :-)
          (blink-matching-paren nil))
-      (setq last-command-event (aref artist-replacement-table new-char))
+      (setq last-command-event (artist-get-replacement-char new-char))
       (self-insert-command count))))
 
 (defsubst artist-replace-string (string &optional see-thru)
@@ -2003,7 +2018,7 @@
        (blink-matching-paren nil))
     (while char-list
       (let ((c (car char-list)))
-       (if (and see-thru (= (aref artist-replacement-table c) ?\s))
+       (if (and see-thru (= (artist-get-replacement-char c) ?\s))
            (artist-move-to-xy (1+ (artist-current-column))
                               (artist-current-line))
          (artist-replace-char c)))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]