From 0d8f342b8ad952137d786475912f63038aaa4465 Mon Sep 17 00:00:00 2001 From: morioka Date: Wed, 25 Feb 1998 13:28:53 +0000 Subject: [PATCH] (eword-lexical-analyzers): New variable. (eword-analyze-quoted-string): Add second argument. (eword-analyze-domain-literal): New function. (eword-analyze-spaces): New function. (eword-analyze-special): New function. (eword-analyze-atom): Add second argument. (eword-lexical-analyze-internal): Use `eword-lexical-analyzers'. --- eword-decode.el | 57 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/eword-decode.el b/eword-decode.el index 9b6870f..5fa3aed 100644 --- a/eword-decode.el +++ b/eword-decode.el @@ -10,7 +10,7 @@ ;; Renamed: 1993/06/03 to tiny-mime.el ;; Renamed: 1995/10/03 from tiny-mime.el (split off encoder) ;; Renamed: 1997/02/22 from tm-ew-d.el -;; Version: $Revision: 1.9 $ +;; Version: $Revision: 1.10 $ ;; Keywords: encoded-word, MIME, multilingual, header, mail, news ;; This file is part of SEMI (SEMI is Emacs MIME Interfaces). @@ -45,7 +45,7 @@ ;;; (defconst eword-decode-RCS-ID - "$Id: eword-decode.el,v 1.9 1998-02-17 13:45:57 morioka Exp $") + "$Id: eword-decode.el,v 1.10 1998-02-25 13:28:53 morioka Exp $") (defconst eword-decode-version (get-version-string eword-decode-RCS-ID)) @@ -365,7 +365,30 @@ as a version of Net$cape)." "*Max position of eword-lexical-analyze-cache. It is max size of eword-lexical-analyze-cache - 1.") -(defun eword-analyze-quoted-string (string) +(defcustom eword-lexical-analyzers + '(eword-analyze-quoted-string + eword-analyze-domain-literal + eword-analyze-comment + eword-analyze-spaces + eword-analyze-special + eword-analyze-encoded-word + eword-analyze-atom) + "*List of functions to return result of lexical analyze. +Each function must have two arguments: STRING and MUST-UNFOLD. +STRING is the target string to be analyzed. +If MUST-UNFOLD is not nil, each function must unfold and eliminate +bare-CR and bare-LF from the result even if they are included in +content of the encoded-word. +Each function must return nil if it can not analyze STRING as its +format. + +Previous function is preferred to next function. If a function +returns nil, next function is used. Otherwise the return value will +be the result." + :group 'eword-decode + :type '(repeat function)) + +(defun eword-analyze-quoted-string (string &optional must-unfold) (let ((p (std11-check-enclosure string ?\" ?\"))) (if p (cons (cons 'quoted-string @@ -375,6 +398,9 @@ It is max size of eword-lexical-analyze-cache - 1.") (substring string p)) ))) +(defun eword-analyze-domain-literal (string &optional must-unfold) + (std11-analyze-domain-literal string)) + (defun eword-analyze-comment (string &optional must-unfold) (let ((p (std11-check-enclosure string ?\( ?\) t))) (if p @@ -387,6 +413,12 @@ It is max size of eword-lexical-analyze-cache - 1.") (substring string p)) ))) +(defun eword-analyze-spaces (string &optional must-unfold) + (std11-analyze-spaces string)) + +(defun eword-analyze-special (string &optional must-unfold) + (std11-analyze-special string)) + (defun eword-analyze-encoded-word (string &optional must-unfold) (if (eq (string-match eword-encoded-word-regexp string) 0) (let ((end (match-end 0)) @@ -409,7 +441,7 @@ It is max size of eword-lexical-analyze-cache - 1.") (cons (cons 'atom dest) string) ))) -(defun eword-analyze-atom (string) +(defun eword-analyze-atom (string &optional must-unfold) (if (string-match std11-atom-regexp string) (let ((end (match-end 0))) (cons (cons 'atom (decode-mime-charset-string @@ -422,15 +454,14 @@ It is max size of eword-lexical-analyze-cache - 1.") (let (dest ret) (while (not (string-equal string "")) (setq ret - (or (eword-analyze-quoted-string string) - (std11-analyze-domain-literal string) - (eword-analyze-comment string must-unfold) - (std11-analyze-spaces string) - (std11-analyze-special string) - (eword-analyze-encoded-word string must-unfold) - (eword-analyze-atom string) - '((error) . "") - )) + (let ((rest eword-lexical-analyzers) + func r) + (while (and (setq func (car rest)) + (null (setq r (funcall func string must-unfold))) + ) + (setq rest (cdr rest))) + (or r '((error) . "")) + )) (setq dest (cons (car ret) dest)) (setq string (cdr ret)) ) -- 1.7.10.4