emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/gnus/format-spec.el [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/gnus/format-spec.el [lexbind]
Date: Tue, 14 Oct 2003 19:34:52 -0400

Index: emacs/lisp/gnus/format-spec.el
diff -c /dev/null emacs/lisp/gnus/format-spec.el:1.1.18.1
*** /dev/null   Tue Oct 14 19:34:52 2003
--- emacs/lisp/gnus/format-spec.el      Tue Oct 14 19:34:50 2003
***************
*** 0 ****
--- 1,72 ----
+ ;;; format-spec.el --- functions for formatting arbitrary formatting strings
+ ;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+ 
+ ;; Author: Lars Magne Ingebrigtsen <address@hidden>
+ ;; Keywords: tools
+ 
+ ;; This file is part of GNU Emacs.
+ 
+ ;; GNU Emacs is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 2, or (at your option)
+ ;; any later version.
+ 
+ ;; GNU Emacs is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ 
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GNU Emacs; see the file COPYING.  If not, write to the
+ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ ;; Boston, MA 02111-1307, USA.
+ 
+ ;;; Commentary:
+ 
+ ;;; Code:
+ 
+ (eval-when-compile (require 'cl))
+ 
+ (defun format-spec (format specification)
+   "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."
+   (with-temp-buffer
+     (insert format)
+     (goto-char (point-min))
+     (while (search-forward "%" nil t)
+       (cond
+        ;; Quoted percent sign.
+        ((eq (char-after) ?%)
+       (delete-char 1))
+        ;; Valid format spec.
+        ((looking-at "\\([-0-9.]*\\)\\([a-zA-Z]\\)")
+       (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: %s" spec))
+         (insert (format (concat "%" num "s") val))))
+        ;; Signal an error on bogus format strings.
+        (t
+       (error "Invalid format string"))))
+     (buffer-string)))
+ 
+ (defun format-spec-make (&rest pairs)
+   "Return an alist suitable for use in `format-spec' based on PAIRS.
+ PAIRS is a list where every other element is a character and a value,
+ starting with a character."
+   (let (alist)
+     (while pairs
+       (unless (cdr pairs)
+       (error "Invalid list of pairs"))
+       (push (cons (car pairs) (cadr pairs)) alist)
+       (setq pairs (cddr pairs)))
+     (nreverse alist)))
+ 
+ (provide 'format-spec)
+ 
+ ;;; arch-tag: c22d49cf-d167-445d-b7f1-2504d4173f53
+ ;;; format-spec.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]