update.
[elisp/flim.git] / mime-def.el
index 810aa2b..8729508 100644 (file)
@@ -24,7 +24,7 @@
 
 ;;; Code:
 
-(defconst mime-library-version-string "FLIM 1.7.0 - \"Iseda\"")
+(defconst mime-library-version-string "FLIM 1.9.0 - \"Kutsukawa\"")
 
 
 ;;; @ 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
@@ -242,6 +280,43 @@ message/rfc822, `mime-entity' structures of them are included in
 (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
 ;;;