From c12f0e22cb14e913cac629082979389798484bf8 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Thu, 13 Oct 2005 07:33:02 +0000 Subject: [PATCH] Revision: miles@gnu.org--gnu-2005/gnus--devo--0--patch-235 Merge from gnus--rel--5.10 Patches applied: * emacs--cvs-trunk--0 (patch 587, 589) - Update from CVS * gnus--rel--5.10 (patch 139) - Merge from emacs--cvs-trunk--0 2005-10-09 Daniel Brockman * lisp/format-spec.el (format-spec): Propagate text properties of % spec. --- lisp/ChangeLog | 4 ++++ lisp/format-spec.el | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index decdb0e40..8903d37e8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2005-10-09 Daniel Brockman + + * format-spec.el (format-spec): Propagate text properties of % spec. + 2005-10-12 Reiner Steib * gnus-art.el (gnus-treat-predicate): Add `first'. diff --git a/lisp/format-spec.el b/lisp/format-spec.el index 86b9b55fc..da7ba8747 100644 --- a/lisp/format-spec.el +++ b/lisp/format-spec.el @@ -33,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)) @@ -47,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")))) -- 2.34.1