annotate lisp/url/url-util.el @ 112396:e79e716435f4

Make Nextstep port handle multiple screens for resize and move. * nsterm.h (ns_output): Add dont_constrain and zooming. (EmacsView): Add ns_userRect. * nsterm.m (keyDown): If ns_right_alternate_modifier is Qleft, check if ns_alternate_modifier is none. * nsterm.m (x_set_offset, windowDidMove): When calculating y, use first screen, not the window screen. (x_set_window_size): Remove constraints. Calculate origin.y only if zooming is 0 and without referring to a screen. (windowWillResize): Don't modify frameSize. (windowDidBecomeKey, mouseDown): Set dont_constrain to 1. (initFrameFromEmacs): Initialize ns_userRect. (windowShouldZoom): Set zooming to one. Remove all other code. (windowWillUseStandardFrame): Move static ns_userRect to EmacsView. Zero it after restore. (constrainFrameRect): New method for EmacsWindow. (mouseDragged): Always post NSWindowDidResizeNotification after call to windowWillResize.
author Jan D. <jan.h.d@swipnet.se>
date Fri, 21 Jan 2011 15:19:44 +0100
parents ef719132ddfa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; url-util.el --- Miscellaneous helper routines for URL library
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
2
101912
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
3 ;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005, 2006, 2007,
112218
376148b31b5e Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 108663
diff changeset
4 ;; 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
5
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 ;; Author: Bill Perry <wmperry@gnu.org>
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7 ;; Keywords: comm, data, processes
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
9 ;; This file is part of GNU Emacs.
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
10 ;;
94668
8259d0d8e107 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92401
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94668
8259d0d8e107 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92401
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
8259d0d8e107 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92401
diff changeset
14 ;; (at your option) any later version.
8259d0d8e107 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92401
diff changeset
15
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
19 ;; GNU General Public License for more details.
94668
8259d0d8e107 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92401
diff changeset
20
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94668
8259d0d8e107 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92401
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
23
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
24 ;;; Commentary:
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
25
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
26 ;;; Code:
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 (require 'url-parse)
106965
2eca6c2d9334 * url-util.el: Require url-vars (Bug#5459).
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
29 (require 'url-vars)
92401
b7d3823f3c26 Require cl when compiling.
Andreas Schwab <schwab@suse.de>
parents: 92305
diff changeset
30 (eval-when-compile (require 'cl))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 (autoload 'timezone-parse-date "timezone")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32 (autoload 'timezone-make-date-arpa-standard "timezone")
54803
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
33 (autoload 'mail-header-extract "mailheader")
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 (defvar url-parse-args-syntax-table
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36 (copy-syntax-table emacs-lisp-mode-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 "A syntax table for parsing sgml attributes.")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 (modify-syntax-entry ?' "\"" url-parse-args-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 (modify-syntax-entry ?` "\"" url-parse-args-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 (modify-syntax-entry ?{ "(" url-parse-args-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 (modify-syntax-entry ?} ")" url-parse-args-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 (defcustom url-debug nil
110307
5495085c9b6c lisp/url tiny fixes.
Glenn Morris <rgm@gnu.org>
parents: 108663
diff changeset
46 "What types of debug messages from the URL library to show.
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47 Debug messages are logged to the *URL-DEBUG* buffer.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 If t, all messages will be logged.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 If a number, all messages will be logged, as well shown via `message'.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 If a list, it is a list of the types of messages to be logged."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 :type '(choice (const :tag "none" nil)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 (const :tag "all" t)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 (checklist :tag "custom"
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 (const :tag "HTTP" :value http)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 (const :tag "DAV" :value dav)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 (const :tag "General" :value retrieval)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 (const :tag "Filename handlers" :value handlers)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 (symbol :tag "Other")))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 :group 'url-hairy)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63 (defun url-debug (tag &rest args)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 (if quit-flag
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 (error "Interrupted!"))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 (if (or (eq url-debug t)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 (numberp url-debug)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 (and (listp url-debug) (memq tag url-debug)))
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
69 (with-current-buffer (get-buffer-create "*URL-DEBUG*")
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 (goto-char (point-max))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 (insert (symbol-name tag) " -> " (apply 'format args) "\n")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 (if (numberp url-debug)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 (apply 'message args)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 (defun url-parse-args (str &optional nodowncase)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 ;; Return an assoc list of attribute/value pairs from an RFC822-type string
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 (let (
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 name ; From name=
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 value ; its value
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 results ; Assoc list of results
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 name-pos ; Start of XXXX= position
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 val-pos ; Start of value position
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 st
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 nd
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
86 )
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 (save-excursion
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 (save-restriction
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 (set-buffer (get-buffer-create " *urlparse-temp*"))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 (set-syntax-table url-parse-args-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 (erase-buffer)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 (insert str)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 (setq st (point-min)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94 nd (point-max))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 (set-syntax-table url-parse-args-syntax-table)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 (narrow-to-region st nd)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 (goto-char (point-min))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 (while (not (eobp))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 (skip-chars-forward "; \n\t")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
100 (setq name-pos (point))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
101 (skip-chars-forward "^ \n\t=;")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 (if (not nodowncase)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103 (downcase-region name-pos (point)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104 (setq name (buffer-substring name-pos (point)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 (skip-chars-forward " \t\n")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 (if (/= (or (char-after (point)) 0) ?=) ; There is no value
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107 (setq value nil)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108 (skip-chars-forward " \t\n=")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 (setq val-pos (point)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 value
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 (cond
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 ((or (= (or (char-after val-pos) 0) ?\")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 (= (or (char-after val-pos) 0) ?'))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 (buffer-substring (1+ val-pos)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 (condition-case ()
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 (prog2
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117 (forward-sexp 1)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118 (1- (point))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119 (skip-chars-forward "\""))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 (error
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (skip-chars-forward "^ \t\n")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 (point)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 (t
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124 (buffer-substring val-pos
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125 (progn
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 (skip-chars-forward "^;")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 (skip-chars-backward " \t")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 (point)))))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 (setq results (cons (cons name value) results))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 (skip-chars-forward "; \n\t"))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131 results))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
132
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 (defun url-insert-entities-in-string (string)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 "Convert HTML markup-start characters to entity references in STRING.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 Also replaces the \" character, so that the result may be safely used as
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137 an attribute value in a tag. Returns a new string with the result of the
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138 conversion. Replaces these characters as follows:
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139 & ==> &amp;
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 < ==> &lt;
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 > ==> &gt;
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 \" ==> &quot;"
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 (if (string-match "[&<>\"]" string)
105829
328150f0cf76 * url-util.el (url-insert-entities-in-string):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101912
diff changeset
144 (with-current-buffer (get-buffer-create " *entity*")
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 (erase-buffer)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146 (buffer-disable-undo (current-buffer))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 (insert string)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 (goto-char (point-min))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 (while (progn
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (skip-chars-forward "^&<>\"")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
151 (not (eobp)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 (insert (cdr (assq (char-after (point))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153 '((?\" . "&quot;")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 (?& . "&amp;")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155 (?< . "&lt;")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 (?> . "&gt;")))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 (delete-char 1))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 (buffer-string))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159 string))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 (defun url-normalize-url (url)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 "Return a 'normalized' version of URL.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 Strips out default port numbers, etc."
72218
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
165 (let (type data retval)
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 (setq data (url-generic-parse-url url)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 type (url-type data))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 (if (member type '("www" "about" "mailto" "info"))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 (setq retval url)
98338
b41e5dc22535 Comment.
Glenn Morris <rgm@gnu.org>
parents: 96486
diff changeset
170 ;; FIXME all this does, and all this function seems to do in
b41e5dc22535 Comment.
Glenn Morris <rgm@gnu.org>
parents: 96486
diff changeset
171 ;; most cases, is remove any trailing "#anchor" part of a url.
83823
dd2bcc6758a0 * url-parse.el (url): Use defstruct rather than macros. Update all callers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78222
diff changeset
172 (setf (url-target data) nil)
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 (setq retval (url-recreate-url data)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 retval))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177 (defun url-lazy-message (&rest args)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 "Just like `message', but is a no-op if called more than once a second.
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
179 Will not do anything if `url-show-status' is nil."
110693
754df5a0efe9 Modify url-retrieve and related functions and structures to respect a
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents: 110307
diff changeset
180 (if (or (and url-current-object
754df5a0efe9 Modify url-retrieve and related functions and structures to respect a
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents: 110307
diff changeset
181 (url-silent url-current-object))
754df5a0efe9 Modify url-retrieve and related functions and structures to respect a
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents: 110307
diff changeset
182 (null url-show-status)
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 (active-minibuffer-window)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184 (= url-lazy-message-time
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 (setq url-lazy-message-time (nth 1 (current-time)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 nil
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 (apply 'message args)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 (defun url-get-normalized-date (&optional specified-time)
92305
76175fc0a2f9 (url-get-normalized-date): Simplify
Teodor Zlatanov <tzz@lifelogs.com>
parents: 87649
diff changeset
191 "Return a 'real' date string that most HTTP servers can understand."
76175fc0a2f9 (url-get-normalized-date): Simplify
Teodor Zlatanov <tzz@lifelogs.com>
parents: 87649
diff changeset
192 (let ((system-time-locale "C"))
76175fc0a2f9 (url-get-normalized-date): Simplify
Teodor Zlatanov <tzz@lifelogs.com>
parents: 87649
diff changeset
193 (format-time-string "%a, %d %b %Y %T GMT"
76175fc0a2f9 (url-get-normalized-date): Simplify
Teodor Zlatanov <tzz@lifelogs.com>
parents: 87649
diff changeset
194 (or specified-time (current-time)) t)))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
196 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
197 (defun url-eat-trailing-space (x)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 "Remove spaces/tabs at the end of a string."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
199 (let ((y (1- (length x)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 (skip-chars (list ? ?\t ?\n)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201 (while (and (>= y 0) (memq (aref x y) skip-chars))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
202 (setq y (1- y)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
203 (substring x 0 (1+ y))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
204
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 (defun url-strip-leading-spaces (x)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
207 "Remove spaces at the front of a string."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
208 (let ((y (1- (length x)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
209 (z 0)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
210 (skip-chars (list ? ?\t ?\n)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211 (while (and (<= z y) (memq (aref x z) skip-chars))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 (setq z (1+ z)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
213 (substring x z nil)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
216 (defun url-pretty-length (n)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217 (cond
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
218 ((< n 1024)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219 (format "%d bytes" n))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
220 ((< n (* 1024 1024))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221 (format "%dk" (/ n 1024.0)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 (t
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 (format "%2.2fM" (/ n (* 1024 1024.0))))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 (defun url-display-percentage (fmt perc &rest args)
110693
754df5a0efe9 Modify url-retrieve and related functions and structures to respect a
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents: 110307
diff changeset
227 (when (and url-show-status
754df5a0efe9 Modify url-retrieve and related functions and structures to respect a
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents: 110307
diff changeset
228 (or (null url-current-object)
754df5a0efe9 Modify url-retrieve and related functions and structures to respect a
Lars Magne Ingebrigtsen <larsi@gnus.org>
parents: 110307
diff changeset
229 (not (url-silent url-current-object))))
74135
e125bce98ce9 (url-display-percentage): Only show a message if `url-show-status' is non-nil.
Magnus Henoch <mange@freemail.hu>
parents: 72218
diff changeset
230 (if (null fmt)
e125bce98ce9 (url-display-percentage): Only show a message if `url-show-status' is non-nil.
Magnus Henoch <mange@freemail.hu>
parents: 72218
diff changeset
231 (if (fboundp 'clear-progress-display)
e125bce98ce9 (url-display-percentage): Only show a message if `url-show-status' is non-nil.
Magnus Henoch <mange@freemail.hu>
parents: 72218
diff changeset
232 (clear-progress-display))
e125bce98ce9 (url-display-percentage): Only show a message if `url-show-status' is non-nil.
Magnus Henoch <mange@freemail.hu>
parents: 72218
diff changeset
233 (if (and (fboundp 'progress-display) perc)
e125bce98ce9 (url-display-percentage): Only show a message if `url-show-status' is non-nil.
Magnus Henoch <mange@freemail.hu>
parents: 72218
diff changeset
234 (apply 'progress-display fmt perc args)
e125bce98ce9 (url-display-percentage): Only show a message if `url-show-status' is non-nil.
Magnus Henoch <mange@freemail.hu>
parents: 72218
diff changeset
235 (apply 'message fmt args)))))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
238 (defun url-percentage (x y)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239 (if (fboundp 'float)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 (round (* 100 (/ x (float y))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 (/ (* x 100) y)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
242
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
243 ;;;###autoload
99385
7b5dc2894014 (url-basepath): Add url-basepath as an alias for url-file-directory.
Chong Yidong <cyd@stupidchicken.com>
parents: 98338
diff changeset
244 (defalias 'url-basepath 'url-file-directory)
7b5dc2894014 (url-basepath): Add url-basepath as an alias for url-file-directory.
Chong Yidong <cyd@stupidchicken.com>
parents: 98338
diff changeset
245
7b5dc2894014 (url-basepath): Add url-basepath as an alias for url-file-directory.
Chong Yidong <cyd@stupidchicken.com>
parents: 98338
diff changeset
246 ;;;###autoload
79064
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
247 (defun url-file-directory (file)
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
248 "Return the directory part of FILE, for a URL."
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
249 (cond
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250 ((null file) "")
110744
dab4cfd7ea71 Cosmetic changes for some lisp/url files.
Glenn Morris <rgm@gnu.org>
parents: 110701
diff changeset
251 ((string-match "\\?" file)
79064
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
252 (file-name-directory (substring file 0 (match-beginning 0))))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
253 (t (file-name-directory file))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
254
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
255 ;;;###autoload
79064
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
256 (defun url-file-nondirectory (file)
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
257 "Return the nondirectory part of FILE, for a URL."
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
258 (cond
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
259 ((null file) "")
110744
dab4cfd7ea71 Cosmetic changes for some lisp/url files.
Glenn Morris <rgm@gnu.org>
parents: 110701
diff changeset
260 ((string-match "\\?" file)
79064
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
261 (file-name-nondirectory (substring file 0 (match-beginning 0))))
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
262 (t (file-name-nondirectory file))))
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
263
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
264 ;;;###autoload
65312
915d671fef52 *** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents: 64748
diff changeset
265 (defun url-parse-query-string (query &optional downcase allow-newlines)
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (let (retval pairs cur key val)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 (setq pairs (split-string query "&"))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
268 (while pairs
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
269 (setq cur (car pairs)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
270 pairs (cdr pairs))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
271 (if (not (string-match "=" cur))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
272 nil ; Grace
65312
915d671fef52 *** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents: 64748
diff changeset
273 (setq key (url-unhex-string (substring cur 0 (match-beginning 0))
915d671fef52 *** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents: 64748
diff changeset
274 allow-newlines))
915d671fef52 *** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents: 64748
diff changeset
275 (setq val (url-unhex-string (substring cur (match-end 0) nil)
915d671fef52 *** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents: 64748
diff changeset
276 allow-newlines))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
277 (if downcase
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
278 (setq key (downcase key)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
279 (setq cur (assoc key retval))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
280 (if cur
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
281 (setcdr cur (cons val (cdr cur)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
282 (setq retval (cons (list key val) retval)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283 retval))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
284
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
285 (defun url-unhex (x)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
286 (if (> x ?9)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
287 (if (>= x ?a)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
288 (+ 10 (- x ?a))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
289 (+ 10 (- x ?A)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
290 (- x ?0)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
291
54803
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
292 ;; Fixme: Is this definition better, and does it ever matter?
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
293
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
294 ;; (defun url-unhex-string (str &optional allow-newlines)
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
295 ;; "Remove %XX, embedded spaces, etc in a url.
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
296 ;; If optional second argument ALLOW-NEWLINES is non-nil, then allow the
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
297 ;; decoding of carriage returns and line feeds in the string, which is normally
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
298 ;; forbidden in URL encoding."
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
299 ;; (setq str (or str ""))
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
300 ;; (setq str (replace-regexp-in-string "%[[:xdigit:]]\\{2\\}"
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
301 ;; (lambda (match)
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
302 ;; (string (string-to-number
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
303 ;; (substring match 1) 16)))
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
304 ;; str t t))
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
305 ;; (if allow-newlines
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
306 ;; (replace-regexp-in-string "[\n\r]" (lambda (match)
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
307 ;; (format "%%%.2X" (aref match 0)))
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
308 ;; str t t)
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
309 ;; str))
a78c94aa182d (url-hexify-string): Don't give multibyte error for char <16.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54770
diff changeset
310
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
311 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
312 (defun url-unhex-string (str &optional allow-newlines)
96486
7369ded3b436 Typo and docstring fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 94668
diff changeset
313 "Remove %XX embedded spaces, etc in a URL.
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
314 If optional second argument ALLOW-NEWLINES is non-nil, then allow the
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
315 decoding of carriage returns and line feeds in the string, which is normally
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
316 forbidden in URL encoding."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
317 (setq str (or str ""))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
318 (let ((tmp "")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
319 (case-fold-search t))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
320 (while (string-match "%[0-9a-f][0-9a-f]" str)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
321 (let* ((start (match-beginning 0))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
322 (ch1 (url-unhex (elt str (+ start 1))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
323 (code (+ (* 16 ch1)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
324 (url-unhex (elt str (+ start 2))))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
325 (setq tmp (concat
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
326 tmp (substring str 0 start)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
327 (cond
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
328 (allow-newlines
108663
a224d29f3386 * url-util.el (url-unhex-string): Don't accidentally decode as latin-1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106965
diff changeset
329 (byte-to-string code))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
330 ((or (= code ?\n) (= code ?\r))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
331 " ")
108663
a224d29f3386 * url-util.el (url-unhex-string): Don't accidentally decode as latin-1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106965
diff changeset
332 (t (byte-to-string code))))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
333 str (substring str (match-end 0)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
334 (setq tmp (concat tmp str))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
335 tmp))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
336
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
337 (defconst url-unreserved-chars
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
338 '(
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
339 ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
340 ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
341 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
342 ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
343 "A list of characters that are _NOT_ reserved in the URL spec.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
344 This is taken from RFC 2396.")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
345
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
346 ;;;###autoload
72196
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
347 (defun url-hexify-string (string)
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
348 "Return a new string that is STRING URI-encoded.
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
349 First, STRING is converted to utf-8, if necessary. Then, for each
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
350 character in the utf-8 string, those found in `url-unreserved-chars'
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
351 are left as-is, all others are represented as a three-character
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
352 string: \"%\" followed by two lowercase hex digits."
72218
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
353 ;; To go faster and avoid a lot of consing, we could do:
96486
7369ded3b436 Typo and docstring fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 94668
diff changeset
354 ;;
72218
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
355 ;; (defconst url-hexify-table
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
356 ;; (let ((map (make-vector 256 nil)))
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
357 ;; (dotimes (byte 256) (aset map byte
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
358 ;; (if (memq byte url-unreserved-chars)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
359 ;; (char-to-string byte)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
360 ;; (format "%%%02x" byte))))
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
361 ;; map))
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
362 ;;
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
363 ;; (mapconcat (curry 'aref url-hexify-table) ...)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
364 (mapconcat (lambda (byte)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
365 (if (memq byte url-unreserved-chars)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
366 (char-to-string byte)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
367 (format "%%%02x" byte)))
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
368 (if (multibyte-string-p string)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
369 (encode-coding-string string 'utf-8)
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
370 string)
72196
5b336ff592bb (url-hexify-string): Rewrite.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68640
diff changeset
371 ""))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
372
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
373 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
374 (defun url-file-extension (fname &optional x)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
375 "Return the filename extension of FNAME.
96486
7369ded3b436 Typo and docstring fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 94668
diff changeset
376 If optional argument X is t, then return the basename
7369ded3b436 Typo and docstring fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 94668
diff changeset
377 of the file with the extension stripped off."
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
378 (if (and fname
79064
5299839279f5 (url-basepath): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 78850
diff changeset
379 (setq fname (url-file-nondirectory fname))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
380 (string-match "\\.[^./]+$" fname))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
381 (if x (substring fname 0 (match-beginning 0))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
382 (substring fname (match-beginning 0) nil))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
383 ;;
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
384 ;; If fname has no extension, and x then return fname itself instead of
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
385 ;; nothing. When caching it allows the correct .hdr file to be produced
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
386 ;; for filenames without extension.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
387 ;;
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
388 (if x
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
389 fname
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
390 "")))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
391
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
392 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
393 (defun url-truncate-url-for-viewing (url &optional width)
101145
b375012e7a7a * url-util.el (url-truncate-url-for-viewing): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
394 "Return a shortened version of URL that is WIDTH characters wide or less.
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
395 WIDTH defaults to the current frame width."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
396 (let* ((fr-width (or width (frame-width)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
397 (str-width (length url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
398 (fname nil)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
399 (modified 0)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
400 (urlobj nil))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
401 ;; The first thing that can go are the search strings
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
402 (if (and (>= str-width fr-width)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
403 (string-match "?" url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
404 (setq url (concat (substring url 0 (match-beginning 0)) "?...")
72218
23d71f51857b (url-hexify-string): Only utf-8 encode if it's a multibyte string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72196
diff changeset
405 str-width (length url)))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
406 (if (< str-width fr-width)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
407 nil ; Hey, we are done!
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
408 (setq urlobj (url-generic-parse-url url)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
409 fname (url-filename urlobj)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
410 fr-width (- fr-width 4))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
411 (while (and (>= str-width fr-width)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
412 (string-match "/" fname))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
413 (setq fname (substring fname (match-end 0) nil)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
414 modified (1+ modified))
83823
dd2bcc6758a0 * url-parse.el (url): Use defstruct rather than macros. Update all callers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78222
diff changeset
415 (setf (url-filename urlobj) fname)
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
416 (setq url (url-recreate-url urlobj)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
417 str-width (length url)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
418 (if (> modified 1)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
419 (setq fname (concat "/.../" fname))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
420 (setq fname (concat "/" fname)))
83823
dd2bcc6758a0 * url-parse.el (url): Use defstruct rather than macros. Update all callers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78222
diff changeset
421 (setf (url-filename urlobj) fname)
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
422 (setq url (url-recreate-url urlobj)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
423 url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
424
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
425 ;;;###autoload
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
426 (defun url-view-url (&optional no-show)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
427 "View the current document's URL.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
428 Optional argument NO-SHOW means just return the URL, don't show it in
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
429 the minibuffer.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
430
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
431 This uses `url-current-object', set locally to the buffer."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
432 (interactive)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
433 (if (not url-current-object)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
434 nil
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
435 (if no-show
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
436 (url-recreate-url url-current-object)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
437 (message "%s" (url-recreate-url url-current-object)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
438
110744
dab4cfd7ea71 Cosmetic changes for some lisp/url files.
Glenn Morris <rgm@gnu.org>
parents: 110701
diff changeset
439 (defvar url-get-url-filename-chars "-%.?@a-zA-Z0-9()_/:~=&"
dab4cfd7ea71 Cosmetic changes for some lisp/url files.
Glenn Morris <rgm@gnu.org>
parents: 110701
diff changeset
440 "Valid characters in a URL.")
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
441
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
442 (defun url-get-url-at-point (&optional pt)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
443 "Get the URL closest to point, but don't change position.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
444 Has a preference for looking backward when not directly on a symbol."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
445 ;; Not at all perfect - point must be right in the name.
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
446 (save-excursion
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
447 (if pt (goto-char pt))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
448 (let (start url)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
449 (save-excursion
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
450 ;; first see if you're just past a filename
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
451 (if (not (eobp))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
452 (if (looking-at "[] \t\n[{}()]") ; whitespace or some parens
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
453 (progn
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
454 (skip-chars-backward " \n\t\r({[]})")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
455 (if (not (bobp))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
456 (backward-char 1)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
457 (if (and (char-after (point))
110744
dab4cfd7ea71 Cosmetic changes for some lisp/url files.
Glenn Morris <rgm@gnu.org>
parents: 110701
diff changeset
458 (string-match (concat "[" url-get-url-filename-chars "]")
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
459 (char-to-string (char-after (point)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
460 (progn
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
461 (skip-chars-backward url-get-url-filename-chars)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
462 (setq start (point))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
463 (skip-chars-forward url-get-url-filename-chars))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
464 (setq start (point)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
465 (setq url (buffer-substring-no-properties start (point))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
466 (if (and url (string-match "^(.*)\\.?$" url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
467 (setq url (match-string 1 url)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
468 (if (and url (string-match "^URL:" url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
469 (setq url (substring url 4 nil)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
470 (if (and url (string-match "\\.$" url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
471 (setq url (substring url 0 -1)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
472 (if (and url (string-match "^www\\." url))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
473 (setq url (concat "http://" url)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
474 (if (and url (not (string-match url-nonrelative-link url)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
475 (setq url nil))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
476 url)))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
477
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
478 (defun url-generate-unique-filename (&optional fmt)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
479 "Generate a unique filename in `url-temporary-directory'."
101912
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
480 ;; This variable is obsolete, but so is this function.
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
481 (let ((tempdir (with-no-warnings url-temporary-directory)))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
482 (if (not fmt)
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
483 (let ((base (format "url-tmp.%d" (user-real-uid)))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
484 (fname "")
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
485 (x 0))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
486 (setq fname (format "%s%d" base x))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
487 (while (file-exists-p
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
488 (expand-file-name fname tempdir))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
489 (setq x (1+ x)
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
490 fname (concat base (int-to-string x))))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
491 (expand-file-name fname tempdir))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
492 (let ((base (concat "url" (int-to-string (user-real-uid))))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
493 (fname "")
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
494 (x 0))
101912
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
495 (setq fname (format fmt (concat base (int-to-string x))))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
496 (while (file-exists-p
101912
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
497 (expand-file-name fname tempdir))
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
498 (setq x (1+ x)
101912
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
499 fname (format fmt (concat base (int-to-string x)))))
c28ecc931e8c (url-generate-unique-filename): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents: 101887
diff changeset
500 (expand-file-name fname tempdir)))))
101887
3a192c2f3ada (url-generate-unique-filename): Mark as obsolete.
Chong Yidong <cyd@stupidchicken.com>
parents: 101145
diff changeset
501 (make-obsolete 'url-generate-unique-filename 'make-temp-file "23.1")
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
502
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
503 (defun url-extract-mime-headers ()
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
504 "Set `url-current-mime-headers' in current buffer."
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
505 (save-excursion
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
506 (goto-char (point-min))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
507 (unless url-current-mime-headers
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
508 (set (make-local-variable 'url-current-mime-headers)
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
509 (mail-header-extract)))))
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
510
79558
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
511 (defun url-make-private-file (file)
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
512 "Make FILE only readable and writable by the current user.
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
513 Creates FILE and its parent directories if they do not exist."
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
514 (let ((dir (file-name-directory file)))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
515 (when dir
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
516 ;; For historical reasons.
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
517 (make-directory dir t)))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
518 ;; Based on doc-view-make-safe-dir.
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
519 (condition-case nil
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
520 (let ((umask (default-file-modes)))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
521 (unwind-protect
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
522 (progn
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
523 (set-default-file-modes #o0600)
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
524 (with-temp-buffer
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
525 (write-region (point-min) (point-max)
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
526 file nil 'silent nil 'excl)))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
527 (set-default-file-modes umask)))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
528 (file-already-exists
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
529 (if (file-symlink-p file)
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
530 (error "Danger: `%s' is a symbolic link" file))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
531 (set-file-modes file #o0600))))
ba4da6f08090 (url-make-private-file): New function.
Glenn Morris <rgm@gnu.org>
parents: 79064
diff changeset
532
54695
3fb37923e567 Initial revision
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
533 (provide 'url-util)
54699
7784ae10206d Resolve CVS conflicts
Miles Bader <miles@gnu.org>
parents: 54695
diff changeset
534
54935
efddc239393d (url-debug): Use with-current-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54803
diff changeset
535 ;;; url-util.el ends here