X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fformat-spec.el;h=0b41e98ab95e74131669a37341c9fb2a56980c51;hb=5835aa3205a79608e81c5534e73826f3d6823c03;hp=99116ef52fbd45c75ee194e19985d7f4bddc44ed;hpb=8c2a5a5cf5226f37cbe192d6aee9df67d8ec93c9;p=elisp%2Fgnus.git- diff --git a/lisp/format-spec.el b/lisp/format-spec.el index 99116ef..0b41e98 100644 --- a/lisp/format-spec.el +++ b/lisp/format-spec.el @@ -1,5 +1,7 @@ ;;; format-spec.el --- functions for formatting arbitrary formatting strings -;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. + +;; Copyright (C) 1999, 2000, 2002, 2003, 2004, +;; 2005 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: tools @@ -31,7 +33,8 @@ "Return a string based on FORMAT and SPECIFICATION. FORMAT is a string containing `format'-like specs like \"bash %u %k\", while SPECIFICATION is an alist mapping from format spec characters -to values." +to values. Any text properties on a %-spec itself are propagated to +the text that it generates." (with-temp-buffer (insert format) (goto-char (point-min)) @@ -45,10 +48,17 @@ to values." (let* ((num (match-string 1)) (spec (string-to-char (match-string 2))) (val (cdr (assq spec specification)))) - (delete-region (1- (match-beginning 0)) (match-end 0)) (unless val - (error "Invalid format character: `%%%c'" spec)) - (insert (format (concat "%" num "s") val)))) + (error "Invalid format character: `%%%c'" spec)) + ;; Pad result to desired length. + (let ((text (format (concat "%" num "s") val))) + ;; Insert first, to preserve text properties. + (insert-and-inherit text) + ;; Delete the specifier body. + (delete-region (+ (match-beginning 0) (length text)) + (+ (match-end 0) (length text))) + ;; Delete the percent sign. + (delete-region (1- (match-beginning 0)) (match-beginning 0))))) ;; Signal an error on bogus format strings. (t (error "Invalid format string"))))