Function: url-default-expander
url-default-expander is an autoloaded and byte-compiled function
defined in url-expand.el.gz.
Signature
(url-default-expander URLOBJ DEFOBJ)
Aliases
url-ldap-expand-file-name
url-file-expand-file-name
url-ftp-expand-file-name
url-http-expand-file-name
url-https-expand-file-name
Source Code
;; Defined in /usr/src/emacs/lisp/url/url-expand.el.gz
(defun url-default-expander (urlobj defobj)
;; The default expansion routine - urlobj is modified by side effect!
(if (url-type urlobj)
;; Well, they told us the scheme, let's just go with it.
nil
(setf (url-type urlobj) (or (url-type urlobj) (url-type defobj)))
(setf (url-portspec urlobj) (or (url-portspec urlobj)
(and (string= (url-type urlobj)
(url-type defobj))
(url-port defobj))))
(if (not (string= "file" (url-type urlobj)))
(setf (url-host urlobj) (or (url-host urlobj) (url-host defobj))))
(if (string= "ftp" (url-type urlobj))
(setf (url-user urlobj) (or (url-user urlobj) (url-user defobj))))
;; If the object we're expanding from is full, then we are now
;; full.
(unless (url-fullness urlobj)
(setf (url-fullness urlobj) (url-fullness defobj)))
(let* ((pathandquery (url-path-and-query urlobj))
(defpathandquery (url-path-and-query defobj))
(file (car pathandquery))
(query (or (cdr pathandquery) (and (equal file "") (cdr defpathandquery)))))
(if (string-match "^/" (url-filename urlobj))
(setq file (url-expander-remove-relative-links file))
;; We use concat rather than expand-file-name to combine
;; directory and file name, since urls do not follow the same
;; rules as local files on all platforms.
(setq file (url-expander-remove-relative-links
(if (equal file "")
(or (car (url-path-and-query defobj)) "")
(concat (url-file-directory (url-filename defobj)) file)))))
(setf (url-filename urlobj) (if query (concat file "?" query) file)))))