1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-21 06:55:39 +00:00

(dabbrev--substitute-expansion): Fix a bug which lead

to loss of case of letters when performing case-insensitive
expansions on certain abbreviations.
This commit is contained in:
Richard M. Stallman 2004-04-21 19:22:52 +00:00
parent 0ce7de922c
commit e921af9e6c
2 changed files with 23 additions and 12 deletions

View 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):

View 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))