diff options
| author | Gerd Moellmann <gerd@gnu.org> | 2000-09-19 13:40:08 +0000 |
|---|---|---|
| committer | Gerd Moellmann <gerd@gnu.org> | 2000-09-19 13:40:08 +0000 |
| commit | c113de23613952ed67a3bca79363b30ab7e406c3 (patch) | |
| tree | fd8063340169da2af53fa73046debd7a220904ac /lisp/gnus/format-spec.el | |
| parent | 16409b0bb832ae376894cbad5892bf7623caeaaf (diff) | |
| download | emacs-c113de23613952ed67a3bca79363b30ab7e406c3.tar.gz | |
*** empty log message ***
Diffstat (limited to 'lisp/gnus/format-spec.el')
| -rw-r--r-- | lisp/gnus/format-spec.el | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lisp/gnus/format-spec.el b/lisp/gnus/format-spec.el new file mode 100644 index 00000000000..6cd39ede721 --- /dev/null +++ b/lisp/gnus/format-spec.el @@ -0,0 +1,71 @@ +;;; format-spec.el --- functions for formatting arbitrary formatting strings +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. + +;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> +;; 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) + +;;; format-spec.el ends here |
