(define-mail-alias): Handle backslash-quoting

within "-strings in DEFINITION if it comes from .mailrc.
This commit is contained in:
Richard M. Stallman 1997-12-21 02:07:32 +00:00
parent 7317d9e8fc
commit 255359cbcc

View file

@ -317,21 +317,33 @@ if it is quoted with double-quotes."
;; If DEFINITION is null string, avoid looping even once.
(start (and (not (equal definition "")) 0))
(L (length definition))
convert-backslash
end tem)
(while start
(setq convert-backslash nil)
;; If we're reading from the mailrc file, then addresses are delimited
;; by spaces, and addresses with embedded spaces must be surrounded by
;; double-quotes. Otherwise, addresses are separated by commas.
(if from-mailrc-file
(if (eq ?\" (aref definition start))
(setq start (1+ start)
end (string-match "\"[ \t,]*" definition start))
(progn (string-match "[^\\]\\(\\([\\][\\]\\)*\\)\"[ \t,]*" definition start)
(setq start (1+ start)
end (match-end 1)
convert-backslash t))
(setq end (string-match "[ \t,]+" definition start)))
(setq end (string-match "[ \t\n,]*,[ \t\n,]*" definition start)))
(setq result (cons (substring definition start end) result))
(setq start (and end
(/= (match-end 0) L)
(match-end 0))))
(let ((temp (substring definition start end))
(pos 0))
(setq start (and end
(/= (match-end 0) L)
(match-end 0)))
(if convert-backslash
(while (string-match "[\\]" temp pos)
(setq temp (replace-match "" t t temp))
(if start
(setq start (1- start)))
(setq pos (match-end 0))))
(setq result (cons temp result))))
(setq definition (mapconcat (function identity)
(nreverse result)
", "))