1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 ;; Code shared by all chess displays
6 (defgroup chess-message nil
7 "Support for message catalogs in chess.el."
10 (defcustom chess-message-language 'english
11 "The language to use when reporting messages."
13 :group 'chess-message)
17 (defvar chess-message-catalog nil)
19 (defun chess-message-catalog (catalog definitions)
20 (let ((entry (assq catalog chess-message-catalog)))
22 (dolist (def definitions)
23 (let ((str (assq (car def) (cdr entry))))
25 (setcdr str (cdr def))
26 (setcdr entry (cons def (cdr entry))))))
27 (push (cons catalog definitions) chess-message-catalog))))
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))))))
33 (apply 'format msg arguments)
34 (format "Message not found: %s" key))))
36 (defsubst chess-message (key &rest arguments)
37 (message (apply 'chess-string key arguments)))
39 (defsubst chess-error (key &rest arguments)
40 (error (apply 'chess-string key arguments)))
42 (put 'chess-message-catalog 'lisp-indent-function 1)
44 (provide 'chess-message)
46 ;;; chess-message.el ends here