;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: definition, MIME, multimedia, mail, news
-;; This file is part of FLIM (Faithful Library about Internet Message).
+;; This file is part of FLAM (Faithful Library About MIME).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;;; Code:
-(defconst mime-library-version-string "FLIM 1.6.1 - \"Iseda\"")
+(defconst mime-spadework-module-version-string
+ "FLIM-FLAM 1.9.0 - \"\e$B6d<k\e(B\" 5.0R4.5/13.0")
;;; @ variables
;;; @ MIME entity
;;;
-(defsubst make-mime-entity-internal (buffer
+(defsubst make-mime-entity-internal (representation-type location
+ &optional content-type
+ children parent node-id
+ buffer
header-start header-end
- body-start body-end
- &optional node-id
- content-type children)
- (vector buffer header-start header-end body-start body-end
- node-id content-type nil nil nil children nil))
-
-(defsubst mime-entity-buffer-internal (entity) (aref entity 0))
-(defsubst mime-entity-header-start-internal (entity) (aref entity 1))
-(defsubst mime-entity-header-end-internal (entity) (aref entity 2))
-(defsubst mime-entity-body-start-internal (entity) (aref entity 3))
-(defsubst mime-entity-body-end-internal (entity) (aref entity 4))
-(defsubst mime-entity-node-id-internal (entity) (aref entity 5))
-(defsubst mime-entity-content-type-internal (entity) (aref entity 6))
-(defsubst mime-entity-content-disposition-internal (entity) (aref entity 7))
-(defsubst mime-entity-encoding-internal (entity) (aref entity 8))
-(defsubst mime-entity-original-header-internal (entity) (aref entity 9))
-(defsubst mime-entity-children-internal (entity) (aref entity 10))
-(defsubst mime-entity-parsed-header-internal (entity) (aref entity 11))
-
+ body-start body-end)
+ (vector representation-type location
+ content-type nil nil children parent node-id
+ buffer header-start header-end body-start body-end
+ nil nil))
+
+(defsubst mime-entity-representation-type-internal (entity)
+ (aref entity 0))
+(defsubst mime-entity-set-representation-type-internal (entity type)
+ (aset entity 0 type))
+(defsubst mime-entity-location-internal (entity)
+ (aref entity 1))
+
+(defsubst mime-entity-content-type-internal (entity)
+ (aref entity 2))
+(defsubst mime-entity-set-content-type-internal (entity type)
+ (aset entity 2 type))
+(defsubst mime-entity-content-disposition-internal (entity)
+ (aref entity 3))
(defsubst mime-entity-set-content-disposition-internal (entity disposition)
- (aset entity 7 disposition))
+ (aset entity 3 disposition))
+(defsubst mime-entity-encoding-internal (entity)
+ (aref entity 4))
(defsubst mime-entity-set-encoding-internal (entity encoding)
- (aset entity 8 encoding))
-(defsubst mime-entity-set-original-header-internal (entity header)
- (aset entity 9 header))
+ (aset entity 4 encoding))
+
+(defsubst mime-entity-children-internal (entity)
+ (aref entity 5))
(defsubst mime-entity-set-children-internal (entity children)
- (aset entity 10 children))
+ (aset entity 5 children))
+(defsubst mime-entity-parent-internal (entity)
+ (aref entity 6))
+(defsubst mime-entity-node-id-internal (entity)
+ (aref entity 7))
+
+(defsubst mime-entity-buffer-internal (entity)
+ (aref entity 8))
+(defsubst mime-entity-set-buffer-internal (entity buffer)
+ (aset entity 8 buffer))
+(defsubst mime-entity-header-start-internal (entity)
+ (aref entity 9))
+(defsubst mime-entity-set-header-start-internal (entity point)
+ (aset entity 9 point))
+(defsubst mime-entity-header-end-internal (entity)
+ (aref entity 10))
+(defsubst mime-entity-set-header-end-internal (entity point)
+ (aset entity 10 point))
+(defsubst mime-entity-body-start-internal (entity)
+ (aref entity 11))
+(defsubst mime-entity-set-body-start-internal (entity point)
+ (aset entity 11 point))
+(defsubst mime-entity-body-end-internal (entity)
+ (aref entity 12))
+(defsubst mime-entity-set-body-end-internal (entity point)
+ (aset entity 12 point))
+
+(defsubst mime-entity-original-header-internal (entity)
+ (aref entity 13))
+(defsubst mime-entity-set-original-header-internal (entity header)
+ (aset entity 13 header))
+(defsubst mime-entity-parsed-header-internal (entity)
+ (aref entity 14))
(defsubst mime-entity-set-parsed-header-internal (entity header)
- (aset entity 11 header))
+ (aset entity 14 header))
;;; @ message structure
(make-variable-buffer-local 'mime-message-structure)
+;;; @ for mm-backend
+;;;
+
+(defvar mime-entity-implementation-alist nil)
+
+(defmacro mm-define-backend (type &optional parents)
+ (if parents
+ `(let ((rest ',(reverse parents)))
+ (while rest
+ (set-alist 'mime-entity-implementation-alist
+ ',type
+ (copy-alist
+ (cdr (assq (car rest)
+ mime-entity-implementation-alist))))
+ (setq rest (cdr rest))
+ ))))
+
+(defmacro mm-define-method (name args &rest body)
+ (let* ((specializer (car args))
+ (class (nth 1 specializer))
+ (self (car specializer)))
+ `(let ((imps (cdr (assq ',class mime-entity-implementation-alist)))
+ (func (lambda ,(if self
+ (cons self (cdr args))
+ (cdr args))
+ ,@body)))
+ (if imps
+ (set-alist 'mime-entity-implementation-alist
+ ',class (put-alist ',name func imps))
+ (set-alist 'mime-entity-implementation-alist
+ ',class
+ (list (cons ',name func)))
+ ))))
+
+(put 'mm-define-method 'lisp-indent-function 'defun)
+
+
;;; @ end
;;;