X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-def.el;h=f362130abcebdf60e30966c118715f6ff125ccd6;hb=4a15ad0838f7f2ab125b4f766b127aefc828580c;hp=0babafb2d6824f806fa7eede8e46c934e09a0e8a;hpb=68225705cf702783ad31f9ba05c206b546ad080e;p=elisp%2Fflim.git diff --git a/mime-def.el b/mime-def.el index 0babafb..f362130 100644 --- a/mime-def.el +++ b/mime-def.el @@ -5,7 +5,7 @@ ;; Author: MORIOKA Tomohiko ;; 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 @@ -24,7 +24,8 @@ ;;; Code: -(defconst mime-library-version-string "FLIM 1.5.0 - \"Mukaijima\"") +(defconst mime-library-version-string + "FLAM-DOODLE 1.9.1 - \"黄丹\" 10R5.5/14.0") ;;; @ variables @@ -52,6 +53,11 @@ :group 'mime :type 'directory) +(defcustom mime-uuencode-encoding-name-list '("x-uue" "x-uuencode") + "*List of encoding names for uuencode format." + :group 'mime + :type '(repeat string)) + ;;; @ required functions ;;; @@ -177,49 +183,75 @@ ;;; @ MIME entity ;;; -(defsubst make-mime-entity (buffer - header-start header-end body-start body-end - &optional node-id - content-type content-disposition - encoding children) - (vector buffer header-start header-end body-start body-end - node-id content-type content-disposition encoding nil - children nil)) - -(defsubst mime-entity-buffer (entity) (aref entity 0)) -(defsubst mime-entity-header-start (entity) (aref entity 1)) -(defsubst mime-entity-header-end (entity) (aref entity 2)) -(defsubst mime-entity-body-start (entity) (aref entity 3)) -(defsubst mime-entity-body-end (entity) (aref entity 4)) -(defsubst mime-entity-node-id (entity) (aref entity 5)) -(defsubst mime-entity-content-type (entity) (aref entity 6)) -(defsubst mime-entity-content-disposition (entity) (aref entity 7)) -(defsubst mime-entity-encoding (entity) (aref entity 8)) -(defsubst mime-entity-original-header (entity) (aref entity 9)) -(defsubst mime-entity-children (entity) (aref entity 10)) -(defsubst mime-entity-parsed-header (entity) (aref entity 11)) - -(defsubst mime-entity-set-original-header (entity header) - (aset entity 9 header)) -(defsubst mime-entity-set-parsed-header (entity header) - (aset entity 11 header)) - -(defsubst mime-entity-number (entity) - (reverse (mime-entity-node-id entity))) - -(defalias 'mime-entity-point-min 'mime-entity-header-start) -(defalias 'mime-entity-point-max 'mime-entity-body-end) - -(defsubst mime-entity-media-type (entity) - (mime-content-type-primary-type (mime-entity-content-type entity))) -(defsubst mime-entity-media-subtype (entity) - (mime-content-type-subtype (mime-entity-content-type entity))) -(defsubst mime-entity-parameters (entity) - (mime-content-type-parameters (mime-entity-content-type entity))) - -(defsubst mime-entity-type/subtype (entity-info) - (mime-type/subtype-string (mime-entity-media-type entity-info) - (mime-entity-media-subtype entity-info))) +(defsubst make-mime-entity-internal (representation-type location + &optional content-type + children parent node-id + buffer + header-start header-end + 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 3 disposition)) +(defsubst mime-entity-encoding-internal (entity) + (aref entity 4)) +(defsubst mime-entity-set-encoding-internal (entity encoding) + (aset entity 4 encoding)) + +(defsubst mime-entity-children-internal (entity) + (aref entity 5)) +(defsubst mime-entity-set-children-internal (entity 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 14 header)) ;;; @ message structure @@ -249,6 +281,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 ;;;