+(eval-when-compile
+ (defmacro filename-special-filter-1 (string)
+ (let (sref inc-i)
+ (if (or (not (fboundp 'sref))
+ (>= emacs-major-version 21)
+ (and (= emacs-major-version 20)
+ (>= emacs-minor-version 3)))
+ (setq sref 'aref
+ inc-i '(1+ i))
+ (setq sref 'aref
+ inc-i '(+ i (char-length chr))))
+ (` (let ((len (length (, string)))
+ (b 0)(i 0)
+ (dest ""))
+ (while (< i len)
+ (let ((chr ((, sref) (, string) i))
+ (lst filename-replacement-alist)
+ ret)
+ (while (and lst (not ret))
+ (if (if (functionp (car (car lst)))
+ (setq ret (funcall (car (car lst)) chr))
+ (setq ret (memq chr (car (car lst)))))
+ t ; quit this loop.
+ (setq lst (cdr lst))))
+ (if ret
+ (setq dest (concat dest (substring (, string) b i)
+ (cdr (car lst)))
+ i (, inc-i)
+ b i)
+ (setq i (, inc-i)))))
+ (concat dest (substring (, string) b)))))))
+