]> code.delx.au - gnu-emacs-elpa/blob - chess-message.el
removed dependencies on cl
[gnu-emacs-elpa] / chess-message.el
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;;
3 ;; Code shared by all chess displays
4 ;;
5
6 (defgroup chess-message nil
7 "Support for message catalogs in chess.el."
8 :group 'chess)
9
10 (defcustom chess-message-language 'english
11 "The language to use when reporting messages."
12 :type 'symbol
13 :group 'chess-message)
14
15 ;;; Code:
16
17 (defvar chess-message-catalog nil)
18
19 (defun chess-message-catalog (catalog definitions)
20 (let ((entry (assq catalog chess-message-catalog)))
21 (if entry
22 (dolist (def definitions)
23 (let ((str (assq (car def) (cdr entry))))
24 (if str
25 (setcdr str (cdr def))
26 (setcdr entry (cons def (cdr entry))))))
27 (push (cons catalog definitions) chess-message-catalog))))
28
29 (defun chess-string (key &rest arguments)
30 (let* ((entry (assq chess-message-language chess-message-catalog))
31 (msg (and entry (cdr (assq key (cdr entry))))))
32 (if msg
33 (apply 'format msg arguments)
34 "message not found")))
35
36 (defsubst chess-message (key &rest arguments)
37 (message (apply 'chess-string key arguments)))
38
39 (defsubst chess-error (key &rest arguments)
40 (error (apply 'chess-string key arguments)))
41
42 (put 'chess-message-catalog 'lisp-indent-function 1)
43
44 (provide 'chess-message)
45
46 ;;; chess-message.el ends here