diff lisp/gnus/nnoo.el @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents e04119814345
children 0d2f883870bc
line wrap: on
line diff
--- a/lisp/gnus/nnoo.el	Mon Aug 13 09:00:04 2007 +0200
+++ b/lisp/gnus/nnoo.el	Mon Aug 13 09:02:59 2007 +0200
@@ -1,5 +1,5 @@
 ;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996,97 Free Software Foundation, Inc.
+;; Copyright (C) 1996 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
 ;; Keywords: news
@@ -25,8 +25,7 @@
 
 ;;; Code:
 
-(require 'nnheader)
-(require 'cl)
+(eval-when-compile (require 'cl))
 
 (defvar nnoo-definition-alist nil)
 (defvar nnoo-state-alist nil)
@@ -39,6 +38,7 @@
 	  `(defvar ,var ,init))
      (nnoo-define ',var ',map)))
 (put 'defvoo 'lisp-indent-function 2)
+(put 'defvoo 'lisp-indent-hook 2)
 (put 'defvoo 'edebug-form-spec '(var init &optional doc &rest map))
 
 (defmacro deffoo (func args &rest forms)
@@ -47,10 +47,11 @@
        (defun ,func ,args ,@forms)
      (nnoo-register-function ',func)))
 (put 'deffoo 'lisp-indent-function 2)
+(put 'deffoo 'lisp-indent-hook 2)
 (put 'deffoo 'edebug-form-spec '(&define name lambda-list def-body))
 
 (defun nnoo-register-function (func)
-  (let ((funcs (nthcdr 3 (assoc (nnoo-backend func)
+  (let ((funcs (nthcdr 3 (assoc (nnoo-backend func) 
 				nnoo-definition-alist))))
     (unless funcs
       (error "%s belongs to a backend that hasn't been declared" func))
@@ -58,13 +59,12 @@
 
 (defmacro nnoo-declare (backend &rest parents)
   `(eval-and-compile
-     (push (list ',backend
+     (push (list ',backend 
 		 (mapcar (lambda (p) (list p)) ',parents)
 		 nil nil)
-	   nnoo-definition-alist)
-     (push (list ',backend "*internal-non-initialized-backend*")
-	   nnoo-state-alist)))
+	   nnoo-definition-alist)))
 (put 'nnoo-declare 'lisp-indent-function 1)
+(put 'nnoo-declare 'lisp-indent-hook 1)
 
 (defun nnoo-parents (backend)
   (nth 1 (assoc backend nnoo-definition-alist)))
@@ -78,6 +78,7 @@
 (defmacro nnoo-import (backend &rest imports)
   `(nnoo-import-1 ',backend ',imports))
 (put 'nnoo-import 'lisp-indent-function 1)
+(put 'nnoo-import 'lisp-indent-hook 1)
 
 (defun nnoo-import-1 (backend imports)
   (let ((call-function
@@ -90,7 +91,7 @@
       (while functions
 	(unless (fboundp (setq function
 			       (nnoo-symbol backend (nnoo-rest-symbol
-						     (car functions)))))
+							 (car functions)))))
 	  (eval `(deffoo ,function (&rest args)
 		   (,call-function ',backend ',(car functions) args))))
 	(pop functions)))))
@@ -111,6 +112,7 @@
 (defmacro nnoo-map-functions (backend &rest maps)
   `(nnoo-map-functions-1 ',backend ',maps))
 (put 'nnoo-map-functions 'lisp-indent-function 1)
+(put 'nnoo-map-functions 'lisp-indent-hook 1)
 
 (defun nnoo-map-functions-1 (backend maps)
   (let (m margs i)
@@ -124,9 +126,9 @@
 	(incf i))
       (eval `(deffoo ,(nnoo-symbol backend (nnoo-rest-symbol (car m)))
 		 (&rest args)
-	       (nnoo-parent-function ',backend ',(car m)
+	       (nnoo-parent-function ',backend ',(car m) 
 				     ,(cons 'list (nreverse margs))))))))
-
+  
 (defun nnoo-backend (symbol)
   (string-match "^[^-]+-" (symbol-name symbol))
   (intern (substring (symbol-name symbol) 0 (1- (match-end 0)))))
@@ -144,7 +146,7 @@
 	 (parents (nth 1 def)))
     (unless def
       (error "%s belongs to a backend that hasn't been declared." var))
-    (setcar (nthcdr 2 def)
+    (setcar (nthcdr 2 def) 
 	    (delq (assq var (nth 2 def)) (nth 2 def)))
     (setcar (nthcdr 2 def)
 	    (cons (cons var (symbol-value var))
@@ -155,10 +157,10 @@
 
 (defun nnoo-change-server (backend server defs)
   (let* ((bstate (cdr (assq backend nnoo-state-alist)))
+	 (sdefs (assq backend nnoo-definition-alist))
 	 (current (car bstate))
 	 (parents (nnoo-parents backend))
-	 (bvariables (nnoo-variables backend))
-	 state def)
+	 state)
     (unless bstate
       (push (setq bstate (list backend nil))
 	    nnoo-state-alist)
@@ -173,15 +175,12 @@
 	(pop state))
       (setcar bstate server)
       (unless (cdr (assoc server (cddr bstate)))
-	(while (setq def (pop defs))
-	  (unless (assq (car def) bvariables)
-	    (nconc bvariables
- 		   (list (cons (car def) (and (boundp (car def))
- 					      (symbol-value (car def)))))))
-	  (set (car def) (cadr def))))
+	(while defs
+	  (set (caar defs) (cadar defs))
+	  (pop defs)))
       (while parents
-	(nnoo-change-server
-	 (caar parents) server
+	(nnoo-change-server 
+	 (caar parents) server 
 	 (mapcar (lambda (def) (list (car def) (symbol-value (cadr def))))
 		 (cdar parents)))
 	(pop parents))))
@@ -192,14 +191,6 @@
 	(defs (nnoo-variables backend)))
     ;; Remove the old definition.
     (setcdr (cdr bstate) (delq (assoc current (cddr bstate)) (cddr bstate)))
-    ;; If this is the first time we push the server (i. e., this is
-    ;; the nil server), then we update the default values of
-    ;; all the variables to reflect the current values.
-    (when (equal current "*internal-non-initialized-backend*")
-      (let ((defaults (nnoo-variables backend))
-	    def)
-	(while (setq def (pop defaults))
-	  (setcdr def (symbol-value (car def))))))
     (let (state)
       (while defs
 	(push (cons (caar defs) (symbol-value (caar defs)))
@@ -207,7 +198,7 @@
 	(pop defs))
       (nconc bstate (list (cons current state))))))
 
-(defsubst nnoo-current-server-p (backend server)
+(defun nnoo-current-server-p (backend server)
   (equal (nnoo-current-server backend) server))
 
 (defun nnoo-current-server (backend)
@@ -242,38 +233,19 @@
        (buffer-name nntp-server-buffer)))
 
 (defmacro nnoo-define-basics (backend)
-  "Define `close-server', `server-opened' and `status-message'."
   `(eval-and-compile
      (nnoo-define-basics-1 ',backend)))
 
 (defun nnoo-define-basics-1 (backend)
   (let ((functions '(close-server server-opened status-message)))
     (while functions
-      (eval `(deffoo ,(nnoo-symbol backend (car functions))
+      (eval `(deffoo ,(nnoo-symbol backend (car functions)) 
 		 (&optional server)
 	       (,(nnoo-symbol 'nnoo (pop functions)) ',backend server)))))
   (eval `(deffoo ,(nnoo-symbol backend 'open-server)
 	     (server &optional defs)
 	   (nnoo-change-server ',backend server defs))))
 
-(defmacro nnoo-define-skeleton (backend)
-  "Define all required backend functions for BACKEND.
-All functions will return nil and report an error."
-  `(eval-and-compile
-     (nnoo-define-skeleton-1 ',backend)))
-
-(defun nnoo-define-skeleton-1 (backend)
-  (let ((functions '(retrieve-headers
-		     request-close request-article
-		     request-group close-group
-		     request-list request-post request-list-newsgroups))
-	function fun)
-    (while (setq function (pop functions))
-      (when (not (fboundp (setq fun (nnoo-symbol backend function))))
-	(eval `(deffoo ,fun
-		   (&rest args)
-		 (nnheader-report ',backend ,(format "%s-%s not implemented"
-						     backend function))))))))
 (provide 'nnoo)
 
 ;;; nnoo.el ends here.