X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=eword-decode.el;h=46636106602c76a3bfdd76fa16ba7fd3bb0c3df7;hb=8a3113daa75934774a9cff658c360a7719b2407f;hp=fa07ab16f53f1cac361f818e5fd6369dd5e55139;hpb=e791364898616771469e70c43bacc3daa2f8aea6;p=elisp%2Fflim.git diff --git a/eword-decode.el b/eword-decode.el index fa07ab1..4663610 100644 --- a/eword-decode.el +++ b/eword-decode.el @@ -575,16 +575,18 @@ be the result." (defun eword-analyze-quoted-string (string &optional must-unfold) (let ((p (std11-check-enclosure string ?\" ?\"))) (if p - (cons (cons 'quoted-string - (if eword-decode-quoted-encoded-word - (eword-decode-quoted-string - (substring string 0 p) - default-mime-charset) - (decode-mime-charset-string - (std11-strip-quoted-pair (substring string 0 p)) - default-mime-charset))) - (substring string p))) - )) + (cons (cons 'quoted-string + (if eword-decode-quoted-encoded-word + (std11-wrap-as-quoted-string + (eword-decode-quoted-string + (substring string 1 (1- p)) + default-mime-charset)) + (std11-wrap-as-quoted-string + (decode-mime-charset-string + (std11-strip-quoted-pair (substring string 1 (1- p))) + default-mime-charset)))) + (substring string p))) + )) (defun eword-analyze-domain-literal (string &optional must-unfold) (std11-analyze-domain-literal string)) @@ -611,12 +613,20 @@ be the result." (defun eword-analyze-encoded-word (string &optional must-unfold) (let ((decoded (eword-decode-first-encoded-words - string - eword-encoded-word-in-phrase-regexp - eword-after-encoded-word-in-phrase-regexp - must-unfold))) + string + eword-encoded-word-in-phrase-regexp + eword-after-encoded-word-in-phrase-regexp + must-unfold))) (if decoded - (cons (cons 'atom (car decoded)) (cdr decoded))))) + (let ((s (car decoded))) + (while (or (string-match std11-atom-regexp s) + (string-match std11-spaces-regexp s)) + (setq s (substring s (match-end 0)))) + (if (= (length s) 0) + (cons (cons 'atom (car decoded)) (cdr decoded)) + (cons (cons 'quoted-string + (std11-wrap-as-quoted-string (car decoded))) + (cdr decoded))))))) (defun eword-analyze-atom (string &optional must-unfold) (if (let ((enable-multibyte-characters nil)) @@ -634,17 +644,24 @@ be the result." )))) (defun eword-lexical-analyze-internal (string must-unfold) - (let (dest ret) + (let ((last 'eword-analyze-spaces) + dest ret) (while (not (string-equal string "")) (setq ret - (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 . ,string) . "")) - )) + (let ((rest eword-lexical-analyzers) + func r) + (while (and (setq func (car rest)) + (or + (and + (not eword-decode-sticked-encoded-word) + (not (eq last 'eword-analyze-spaces)) + (eq func 'eword-analyze-encoded-word)) + (null (setq r (funcall func string must-unfold)))) + ) + (setq rest (cdr rest))) + (setq last func) + (or r `((error . ,string) . "")) + )) (setq dest (cons (car ret) dest)) (setq string (cdr ret)) )