]> git.eshelyaron.com Git - emacs.git/commitdiff
(dabbrev--substitute-expansion): Fix a bug which lead
authorRichard M. Stallman <rms@gnu.org>
Wed, 21 Apr 2004 19:22:52 +0000 (19:22 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 21 Apr 2004 19:22:52 +0000 (19:22 +0000)
to loss of case of letters when performing case-insensitive
expansions on certain abbreviations.

lisp/ChangeLog
lisp/dabbrev.el

index 71673e8e6c72dd55c6574cf4752c0c8453a751c8..29a589c222d43836b9aae38f3f36d2dda4093dca 100644 (file)
@@ -1,3 +1,9 @@
+2003-04-21  Paul Pogonyshev  <pogonyshev@gmx.net>
+
+       * dabbrev.el (dabbrev--substitute-expansion): Fix a bug which lost
+       the case of letters in case-insensitive expansions on certain
+       abbreviations.
+
 2004-04-21  Richard M. Stallman  <rms@gnu.org>
 
        * progmodes/cperl-mode.el (cperl-putback-char):
index 3763f2ccab842b6e03d6cd0b93ef927e9c500bbb..47ffba9873dbac5378174d3324f82b0cf604ce9b 100644 (file)
@@ -888,23 +888,28 @@ to record whether we upcased the expansion, downcased it, or did neither."
     ;; matches the start of the expansion,
     ;; copy the expansion's case
     ;; instead of downcasing all the rest.
-    ;; Treat a one-capital-letter abbrev as "not all upper case",
-    ;; so as to force preservation of the expansion's pattern
-    ;; if the expansion starts with a capital letter.
-    (let ((expansion-rest (substring expansion 1)))
-      (if (and (not (and (or (string= expansion-rest (downcase expansion-rest))
-                            (string= expansion-rest (upcase expansion-rest)))
-                        (or (string= abbrev (downcase abbrev))
-                            (and (string= abbrev (upcase abbrev))
-                                 (> (length abbrev) 1)))))
-              (string= abbrev
-                       (substring expansion 0 (length abbrev))))
+    ;;
+    ;; Treat a one-capital-letter (possibly with preceding non-letter
+    ;; characters) abbrev as "not all upper case", so as to force
+    ;; preservation of the expansion's pattern if the expansion starts
+    ;; with a capital letter.
+    (let ((expansion-rest (substring expansion 1))
+         (first-letter-position (string-match "[[:alpha:]]" abbrev)))
+      (if (or (null first-letter-position)
+             (and (not (and (or (string= expansion-rest (downcase expansion-rest))
+                                (string= expansion-rest (upcase expansion-rest)))
+                            (or (string= abbrev (downcase abbrev))
+                                (and (string= abbrev (upcase abbrev))
+                                     (> (- (length abbrev) first-letter-position)
+                                        1)))))
+                  (string= abbrev
+                           (substring expansion 0 (length abbrev)))))
          (setq use-case-replace nil)))
 
     ;; If the abbrev and the expansion are both all-lower-case
     ;; then don't do any conversion.  The conversion would be a no-op
     ;; for this replacement, but it would carry forward to subsequent words.
-    ;; The goal of this is to preven that carrying forward.
+    ;; The goal of this is to prevent that carrying forward.
     (if (and (string= expansion (downcase expansion))
             (string= abbrev (downcase abbrev)))
        (setq use-case-replace nil))