gnus-registry.el: Correct function argument order.
[gnus] / lisp / mm-url.el
index c963bda..6d5f2a3 100644 (file)
@@ -1,7 +1,6 @@
 ;;; mm-url.el --- a wrapper of url functions/commands for Gnus
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 
@@ -22,7 +21,7 @@
 
 ;;; Commentary:
 
-;; Some codes are stolen from w3 and url packages. Some are moved from
+;; Some code is stolen from w3 and url packages. Some are moved from
 ;; nnweb.
 
 ;; TODO: Support POST, cookie.
@@ -84,13 +83,6 @@ Likely values are `wget', `w3m', `lynx' and `curl'."
 \f
 ;;; Internal variables
 
-(defvar mm-url-package-name
-  (gnus-replace-in-string
-   (gnus-replace-in-string gnus-version " v.*$" "")
-   " " "-"))
-
-(defvar        mm-url-package-version gnus-version-number)
-
 ;; Stolen from w3.
 (defvar mm-url-html-entities
   '(
@@ -272,8 +264,6 @@ This is taken from RFC 2396.")
                (require 'url-parse)
                (require 'url-vars))
            (error nil))
-    ;; w3-4.0pre0.46 or earlier version.
-    (require 'w3-vars)
     (require 'url)))
 
 ;;;###autoload
@@ -299,10 +289,6 @@ If `mm-url-use-external' is non-nil, use `mm-url-program'."
           (if (not (and (boundp 'url-version)
                         (equal url-version "Emacs")))
               (list (cons "Connection" "Close"))))
-         (url-package-name (or mm-url-package-name
-                               url-package-name))
-         (url-package-version (or mm-url-package-version
-                                  url-package-version))
          result)
       (setq result (url-insert-file-contents url))
       (save-excursion
@@ -365,15 +351,23 @@ If FOLLOW-REFRESH is non-nil, redirect refresh url in META."
 (defun mm-url-decode-entities ()
   "Decode all HTML entities."
   (goto-char (point-min))
-  (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+[0-9]*\\);" nil t)
-    (let ((elem (if (eq (aref (match-string 1) 0) ?\#)
-                       (let ((c (mm-ucs-to-char
-                                 (string-to-number
-                                  (substring (match-string 1) 1)))))
-                         (if (mm-char-or-char-int-p c) c ?#))
-                     (or (cdr (assq (intern (match-string 1))
-                                    mm-url-html-entities))
-                         ?#))))
+  (while (re-search-forward "&\\(#[0-9]+\\|#x[0-9a-f]+\\|[a-z]+[0-9]*\\);"
+                           nil t)
+    (let* ((entity (match-string 1))
+          (elem (if (eq (aref entity 0) ?\#)
+                    (let ((c
+                           ;; Hex number: &#x3212
+                           (if (eq (aref entity 1) ?x)
+                               (string-to-number (substring entity 2)
+                                                 16)
+                             ;; Decimal number: &#23
+                             (string-to-number (substring entity 1)))))
+                      (setq c (or (cdr (assq c mm-extra-numeric-entities))
+                                  (mm-ucs-to-char c)))
+                      (if (mm-char-or-char-int-p c) c ?#))
+                  (or (cdr (assq (intern entity)
+                                 mm-url-html-entities))
+                      ?#))))
       (unless (stringp elem)
        (setq elem (char-to-string elem)))
       (replace-match elem t t))))
@@ -423,78 +417,52 @@ spaces.  Die Die Die."
 (defun mm-url-encode-multipart-form-data (pairs &optional boundary)
   "Return PAIRS encoded in multipart/form-data."
   ;; RFC1867
-
   ;; Get a good boundary
   (unless boundary
     (setq boundary (mml-compute-boundary '())))
-
   (concat
-
    ;; Start with the boundary
    "--" boundary "\r\n"
-
    ;; Create name value pairs
    (mapconcat
     'identity
     ;; Delete any returned items that are empty
     (delq nil
           (mapcar (lambda (data)
-            (when (car data)
-              ;; For each pair
-              (concat
-
-               ;; Encode the name
-               "Content-Disposition: form-data; name=\""
-               (car data) "\"\r\n"
-               "Content-Type: text/plain; charset=utf-8\r\n"
-               "Content-Transfer-Encoding: binary\r\n\r\n"
-
-               (cond ((stringp (cdr data))
-                      (cdr data))
-                     ((integerp (cdr data))
-                      (int-to-string (cdr data))))
-
-               "\r\n")))
+                    (cond ((equal (car data) "file")
+                           ;; For each pair
+                           (format
+                            ;; Encode the name
+                            "Content-Disposition: form-data; name=%S; filename=%S\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: binary\r\n\r\n%s"
+                            (cdr (assoc "name" (cdr data))) (cdr (assoc "filename" (cdr data)))
+                            (cond ((stringp (cdr (assoc "filedata" (cdr data))))
+                                   (cdr (assoc "filedata" (cdr data))))
+                                  ((integerp (cdr (assoc "filedata" (cdr data))))
+                                   (number-to-string (cdr (assoc "filedata" (cdr data))))))))
+                          ((equal (car data) "submit")
+                           "Content-Disposition: form-data; name=\"submit\"\r\n\r\nSubmit\r\n")
+                          (t
+                           (format
+                            "Content-Disposition: form-data;name=%S\r\n\r\n%s\r\n"
+                            (car data) (concat (mm-url-form-encode-xwfu (cdr data)))
+                            ))))
                   pairs))
     ;; use the boundary as a separator
-    (concat "--" boundary "\r\n"))
-
+    (concat "\r\n--" boundary "\r\n"))
    ;; put a boundary at the end.
    "--" boundary "--\r\n"))
 
-(defun mm-url-fetch-form (url pairs)
-  "Fetch a form from URL with PAIRS as the data using the POST method."
-  (mm-url-load-url)
-  (let ((url-request-data (mm-url-encode-www-form-urlencoded pairs))
-       (url-request-method "POST")
-       (url-request-extra-headers
-        '(("Content-type" . "application/x-www-form-urlencoded"))))
-    (url-insert-file-contents url)
-    (setq buffer-file-name nil))
-  t)
-
-(defun mm-url-fetch-simple (url content)
-  (mm-url-load-url)
-  (let ((url-request-data content)
-       (url-request-method "POST")
-       (url-request-extra-headers
-        '(("Content-type" . "application/x-www-form-urlencoded"))))
-    (url-insert-file-contents url)
-    (setq buffer-file-name nil))
-  t)
-
 (defun mm-url-remove-markup ()
   "Remove all HTML markup, leaving just plain text."
   (goto-char (point-min))
   (while (search-forward "<!--" nil t)
     (delete-region (match-beginning 0)
-                  (or (search-forward "-->" nil t)
-                      (point-max))))
+                   (or (search-forward "-->" nil t)
+                       (point-max))))
   (goto-char (point-min))
   (while (re-search-forward "<[^>]+>" nil t)
     (replace-match "" t t)))
 
 (provide 'mm-url)
 
-;; arch-tag: 0594f9b3-417c-48b0-adc2-5082e1e7917f
 ;;; mm-url.el ends here