Fix typo.
[elisp/flim.git] / ew-unit.el
index b658dca..e780853 100644 (file)
@@ -1,41 +1,14 @@
 (require 'closure)
 (require 'ew-line)
 (require 'ew-quote)
-(require 'mel)
+(require 'ew-bq)
 
 (provide 'ew-unit)
 
-(defconst ew-anchored-encoded-word-regexp
-  (concat "\\`" ew-encoded-word-regexp "\\'"))
-
-(defconst ew-b-regexp
-  (concat "\\`\\("
-         "[A-Za-z0-9+/]"
-         "[A-Za-z0-9+/]"
-         "[A-Za-z0-9+/]"
-         "[A-Za-z0-9+/]"
-         "\\)*"
-         "[A-Za-z0-9+/]"
-         "[A-Za-z0-9+/]"
-         "\\(==\\|"
-         "[A-Za-z0-9+/]"
-         "[A-Za-z0-9+/=]"
-         "\\)\\'"))
-
-(defconst ew-q-regexp "\\`\\([^=?]\\|=[0-9A-Fa-f][0-9A-Fa-f]\\)*\\'")
-
-(defconst ew-byte-decoder-alist
-  '(("B" . ew-b-decode)
-    ("Q" . ew-q-decode)))
-
-(defconst ew-byte-checker-alist
-  '(("B" . ew-b-check)
-    ("Q" . ew-q-check)))
-
 (defun ew-b-check (encoding encoded-text) (string-match ew-b-regexp encoded-text))
 (defun ew-q-check (encoding encoded-text) (string-match ew-q-regexp encoded-text))
 
-(defun ew-eword-p (str)
+(defsubst ew-eword-p (str)
   (let ((len (length str)))
     (and
      (<= 3 len)
@@ -44,7 +17,7 @@
      (eq (aref str (- len 2)) ??)
      (eq (aref str (1- len)) ?=))))
 
-(defun ew-decode-eword (str &optional eword-filter1 eword-filter2)
+(defun ew-decode-eword (str)
   (if (string-match ew-anchored-encoded-word-regexp str)
       (let ((charset (match-string 1 str))
            (encoding (match-string 2 str))
            bdec cdec
            bcheck
            tmp)
-       (if (and (setq bdec (ew-byte-decoder encoding))
-                (setq cdec (ew-char-decoder charset)))
-           (if (or (null (setq bcheck (ew-byte-checker encoding)))
-                   (funcall bcheck encoding encoded-text))
-               (progn
-                 (setq tmp (closure-call cdec (funcall bdec encoded-text)))
-                 (when eword-filter1 (setq tmp (closure-call eword-filter1 tmp)))
-                 (setq tmp (ew-quote tmp))
-                 (when eword-filter2 (setq tmp (closure-call eword-filter2 tmp)))
-                 tmp)
-             (ew-quote str))
-         (ew-quote-eword charset encoding encoded-text)))
+       (if (or ew-permit-null-encoded-text
+               (< 0 (length encoded-text)))
+           (if (and (setq bdec (ew-byte-decoder encoding))
+                    (setq cdec (ew-char-decoder charset)))
+               (if (or (null (setq bcheck (ew-byte-checker encoding)))
+                       (funcall bcheck encoding encoded-text))
+                   (ew-quote (closure-call cdec (funcall bdec encoded-text)))
+                 (ew-quote str))
+             (ew-quote-eword charset encoding encoded-text))
+         (ew-quote str)))
     (ew-quote str)))
 
 (defun ew-byte-decoder (encoding)
 (defun ew-byte-checker (encoding)
   (cdr (assoc (upcase encoding) ew-byte-checker-alist)))
 
-(defalias 'ew-b-decode 'base64-decode-string)
-(defalias 'ew-q-decode 'q-encoding-decode-string)
-
-(defconst ew-charset-aliases
-  '((us-ascii . iso-8859-1)
-    (iso-2022-jp-2 . iso-2022-7bit-ss2)
-    (x-ctext . ctext)
-    ))
-
 (defun ew-char-decoder (charset)
-  (let ((sym (intern (downcase charset)))
-        tmp cs)
-    (when (setq tmp (assq sym ew-charset-aliases))
-      (setq sym (cdr tmp)))
-    (setq cs (intern (concat (symbol-name sym) "-unix")))
-    (when (coding-system-p cs)
+  (let ((sym (intern (downcase charset))))
+    (when (mime-charset-to-coding-system sym 'LF)
       (closure-make
-        (lambda (str) (decode-coding-string str cs))
-        cs))))
+       (lambda (str) (decode-mime-charset-string str sym 'LF))
+       sym))))