* elmo-util.el (elmo-token-valid-p): New function.
authorhmurata <hmurata>
Tue, 7 Jun 2005 08:52:50 +0000 (08:52 +0000)
committerhmurata <hmurata>
Tue, 7 Jun 2005 08:52:50 +0000 (08:52 +0000)
(elmo-parse-token): Add optional argument `requirement'.
(elmo-parse-prefixed-element): Likewise.

* elmo-net.el (elmo-net-quote-chars): Renamed from
`elmo-net-quote-chars-regexp'.
(elmo-net-format-quoted): Add optional argument `extra-chars'.

* elmo-pop3.el (elmo-folder-initialize): Fix the token separators
by info document. Check token `uidl' is started an alphabet.

* elmo-nntp.el (elmo-folder-initialize): Fix the token separators
by info document. Check token `user' is started an alphabet.

* elmo-imap4.el (elmo-folder-initialize): Ditto.
(elmo-folder-list-subfolders): Quote user.

elmo/ChangeLog
elmo/elmo-imap4.el
elmo/elmo-net.el
elmo/elmo-nntp.el
elmo/elmo-pop3.el
elmo/elmo-util.el

index f76ef43..6faa594 100644 (file)
@@ -1,3 +1,22 @@
+2005-06-07  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
+
+       * elmo-util.el (elmo-token-valid-p): New function.
+       (elmo-parse-token): Add optional argument `requirement'.
+       (elmo-parse-prefixed-element): Likewise.
+
+       * elmo-net.el (elmo-net-quote-chars): Renamed from
+       `elmo-net-quote-chars-regexp'.
+       (elmo-net-format-quoted): Add optional argument `extra-chars'.
+
+       * elmo-pop3.el (elmo-folder-initialize): Fix the token separators
+       by info document. Check token `uidl' is started an alphabet.
+
+       * elmo-nntp.el (elmo-folder-initialize): Fix the token separators
+       by info document. Check token `user' is started an alphabet.
+
+       * elmo-imap4.el (elmo-folder-initialize): Ditto.
+       (elmo-folder-list-subfolders): Quote user.
+
 2005-06-05  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
 
        * elmo-util.el (elmo-quoted-specials-list): New constant.
index 4b59548..978a3bc 100644 (file)
@@ -1852,18 +1852,19 @@ Return nil if no complete line has arrived."
       (setq default-user (elmo-match-string 1 default-server))
       (setq default-server (elmo-match-string 2 default-server)))
     ;; mailbox
-    (setq parse (elmo-parse-token name ":/@"))
+    (setq parse (elmo-parse-token name ":@:!"))
     (elmo-imap4-folder-set-mailbox-internal folder
                                            (elmo-imap4-encode-folder-string
                                             (car parse)))
     ;; user
-    (setq parse (elmo-parse-prefixed-element ?: (cdr parse) "/@"))
+    (setq parse (elmo-parse-prefixed-element ?: (cdr parse) "/@:!"
+                                            "^[A-Za-z]+"))
     (elmo-net-folder-set-user-internal folder
                                       (if (eq (length (car parse)) 0)
                                           default-user
                                         (car parse)))
     ;; auth
-    (setq parse (elmo-parse-prefixed-element ?/ (cdr parse) "@"))
+    (setq parse (elmo-parse-prefixed-element ?/ (cdr parse) "@:!"))
     (elmo-net-folder-set-auth-internal
      folder
      (if (eq (length (car parse)) 0)
@@ -1990,7 +1991,9 @@ Return nil if no complete line has arrived."
                            elmo-imap4-default-user))
              (not (eq (elmo-net-folder-auth-internal folder)
                       (or elmo-imap4-default-authenticate-type 'clear))))
-      (setq append-serv (concat ":" (elmo-net-folder-user-internal folder))))
+      (setq append-serv (concat ":"
+                               (elmo-net-format-quoted
+                                (elmo-net-folder-user-internal folder) "/"))))
     (unless (eq (elmo-net-folder-auth-internal folder)
                (or elmo-imap4-default-authenticate-type 'clear))
       (setq append-serv
@@ -2041,7 +2044,7 @@ Return nil if no complete line has arrived."
                                  (cdr result)))
                  folder (concat prefix
                                 (elmo-net-format-quoted
-                                 (elmo-imap4-decode-folder-string folder))
+                                 (elmo-imap4-decode-folder-string folder) ":")
                                 (and append-serv
                                      (eval append-serv)))
                  ret (append ret (if has-child-p
@@ -2051,7 +2054,7 @@ Return nil if no complete line has arrived."
       (mapcar (lambda (fld)
                (concat prefix
                        (elmo-net-format-quoted
-                        (elmo-imap4-decode-folder-string fld))
+                        (elmo-imap4-decode-folder-string fld) ":")
                        (and append-serv
                             (eval append-serv))))
              result))))
index efef0ee..e4c6ecc 100644 (file)
@@ -310,10 +310,11 @@ Returned value is searched from `elmo-network-stream-type-alist'."
       (setq alist (cdr alist)))
     spec))
 
-(defconst elmo-net-quote-chars-regexp "[@:!]")
+(defconst elmo-net-quote-chars "@:!")
 
-(defun elmo-net-format-quoted (string)
-  (if (string-match elmo-net-quote-chars-regexp string)
+(defun elmo-net-format-quoted (string &optional extra-chars)
+  (if (string-match (concat "[" elmo-net-quote-chars extra-chars "]")
+                   string)
       (elmo-quoted-token string)
     string))
 
index 120ae00..0a2ab4e 100644 (file)
@@ -95,12 +95,13 @@ Debug information is inserted in the buffer \"*NNTP DEBUG*\"")
                           elmo-network-stream-type-alist))
           elmo-network-stream-type-alist))
        explicit-user parse)
-    (setq parse (elmo-parse-token name ":@"))
+    (setq parse (elmo-parse-token name ":@!"))
     (elmo-nntp-folder-set-group-internal folder
                                         (elmo-nntp-encode-group-string
                                          (car parse)))
     (setq explicit-user (eq ?: (string-to-char (cdr parse))))
-    (setq parse (elmo-parse-prefixed-element ?: (cdr parse) "@"))
+    (setq parse (elmo-parse-prefixed-element ?: (cdr parse) "@:!"
+                                            "^[A-Za-z]+"))
     (elmo-net-folder-set-user-internal folder
                                       (if (eq (length (car parse)) 0)
                                           (unless explicit-user
index 0a7585f..6a78d94 100644 (file)
@@ -95,19 +95,19 @@ Debug information is inserted in the buffer \"*POP3 DEBUG*\"")
           elmo-network-stream-type-alist))
        parse)
     ;; user
-    (setq parse (elmo-parse-token name "/:@"))
+    (setq parse (elmo-parse-token name "/@:!"))
     (elmo-net-folder-set-user-internal folder
                                       (if (eq (length (car parse)) 0)
                                           elmo-pop3-default-user
                                         (car parse)))
     ;; auth
-    (setq parse (elmo-parse-prefixed-element ?/ (cdr parse) ":@"))
+    (setq parse (elmo-parse-prefixed-element ?/ (cdr parse) ":@!"))
     (elmo-net-folder-set-auth-internal folder
                                       (if (eq (length (car parse)) 0)
                                           elmo-pop3-default-authenticate-type
                                         (intern (downcase (car parse)))))
     ;; uidl
-    (setq parse (elmo-parse-prefixed-element ?: (cdr parse) "@"))
+    (setq parse (elmo-parse-prefixed-element ?: (cdr parse) "@:!" "^[a-z]+"))
     (elmo-pop3-folder-set-use-uidl-internal folder
                                            (if (eq (length (car parse)) 0)
                                                elmo-pop3-default-use-uidl
index e3768c1..88a9741 100644 (file)
@@ -1457,7 +1457,14 @@ ELT must be a string.  Upper-case and lower-case letters are treated as equal."
          (std11-wrap-as-quoted-pairs string elmo-quoted-specials-list)
          "\""))
 
-(defun elmo-parse-token (string &optional seps)
+(defun elmo-token-valid-p (token requirement)
+  (cond ((null requirement))
+       ((stringp requirement)
+        (string-match requirement token))
+       ((functionp requirement)
+        (funcall requirement token))))
+
+(defun elmo-parse-token (string &optional seps requirement)
   "Parse atom from STRING using SEPS as a string of separator char list."
   (let ((len (length string))
        (seps (and seps (string-to-char-list seps)))
@@ -1483,14 +1490,21 @@ ELT must be a string.  Upper-case and lower-case letters are treated as equal."
         (t (setq content (cons c content)
                  i (1+ i)))))
       (if in (error "Parse error in quoted"))
-      (cons (if (null content) "" (char-list-to-string (nreverse content)))
-           (substring string i)))))
-
-(defun elmo-parse-prefixed-element (prefix string &optional seps)
-  (if (and (not (eq (length string) 0))
-          (eq (aref string 0) prefix))
-      (elmo-parse-token (substring string 1) seps)
-    (cons "" string)))
+      (let ((atom (if (null content)
+                     ""
+                   (char-list-to-string (nreverse content)))))
+       (if (elmo-token-valid-p atom requirement)
+           (cons atom (substring string i))
+         (cons "" string))))))
+
+(defun elmo-parse-prefixed-element (prefix string &optional seps requirement)
+  (let (parsed)
+    (if (and (not (eq (length string) 0))
+            (eq (aref string 0) prefix)
+            (setq parsed (elmo-parse-token (substring string 1) seps))
+            (elmo-token-valid-p (car parsed) requirement))
+       parsed
+      (cons "" string))))
 
 ;;; Number set defined by OKAZAKI Tetsurou <okazaki@be.to>
 ;;