+(defun mu-cite-load-registration-file ()
+ (if (file-readable-p mu-registration-file)
+ (with-temp-buffer
+ (set-buffer-multibyte t)
+ (if mu-registration-file-coding-system-for-read
+ (insert-file-contents-as-coding-system
+ mu-registration-file-coding-system-for-read
+ mu-registration-file)
+ (insert-file-contents mu-registration-file))
+ (setq mu-registration-file-coding-system
+ (static-cond
+ ((boundp 'buffer-file-coding-system)
+ (symbol-value 'buffer-file-coding-system))
+ ((boundp 'file-coding-system)
+ (symbol-value 'file-coding-system))
+ (t
+ nil)))
+ (let ((exp (read (current-buffer))))
+ (or (eq (car (cdr exp)) mu-registration-symbol)
+ (setcar (cdr exp) mu-registration-symbol))
+ (eval exp))))
+ (or (boundp mu-registration-symbol)
+ (set mu-registration-symbol nil)))
+
+(defun mu-cite-save-registration-file ()
+ (with-temp-buffer
+ (set-buffer-multibyte t)
+ (let ((name (file-name-nondirectory mu-registration-file))
+ (coding-system (or mu-registration-file-coding-system-for-write
+ mu-registration-file-coding-system)))
+ (insert (format "\
+;;; %s -*- mode: emacs-lisp; coding: %s -*-
+;; This file is generated automatically by MU-CITE v%s.
+
+"
+ name coding-system mu-cite-version))
+ (insert "(setq "
+ (symbol-name mu-registration-symbol)
+ "\n '(")
+ (insert (mapconcat
+ (function
+ (lambda (elem)
+ (format "(%s . %s)"
+ (prin1-to-string
+ (mu-cite-remove-text-properties (car elem)))
+ (prin1-to-string
+ (mu-cite-remove-text-properties (cdr elem))))))
+ (symbol-value mu-registration-symbol) "\n\t"))
+ (insert "))\n\n")
+ (insert ";;; " name " ends here\n")
+ (write-region-as-coding-system coding-system
+ (point-min) (point-max)
+ mu-registration-file nil 'nomsg)
+ (condition-case nil
+ (set-file-modes mu-registration-file mu-registration-file-modes)
+ (error nil)))))
+
+
+;;; @ database accessors