Commit e921af9e authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

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

to loss of case of letters when performing case-insensitive
expansions on certain abbreviations.
parent 0ce7de92
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):
......
......@@ -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))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment