annotate lisp/calendar/parse-time.el @ 46205:6676ac71682b

Update mouse button info. Don't give the names of Emacs commands that the characters run. Clarify what SPC and DEL do. Clarify the description of the minibuffer. Wording change for completion. Explain Mouse-2 better.
author Richard M. Stallman <rms@gnu.org>
date Sun, 07 Jul 2002 11:31:31 +0000
parents ebb4fa093863
children 827133772385
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43048
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1 ;;; parse-time.el --- parsing time strings
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1996, 2000 by Free Software Foundation, Inc.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
5 ;; Author: Erik Naggum <erik@naggum.no>
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
6 ;; Keywords: util
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
7
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
9
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
13 ;; any later version.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
14
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
19
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
22 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
24
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
26
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
27 ;; With the introduction of the `encode-time', `decode-time', and
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
28 ;; `format-time-string' functions, dealing with time became simpler in
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
29 ;; Emacs. However, parsing time strings is still largely a matter of
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
30 ;; heuristics and no common interface has been designed.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
31
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
32 ;; `parse-time-string' parses a time in a string and returns a list of 9
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
33 ;; values, just like `decode-time', where unspecified elements in the
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
34 ;; string are returned as nil. `encode-time' may be applied on these
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
35 ;; valuse to obtain an internal time value.
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
36
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
37 ;;; Code:
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
38
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
39 (eval-when-compile (require 'cl)) ;and ah ain't kiddin' 'bout it
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
40
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
41 (defvar parse-time-syntax (make-vector 256 nil))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
42 (defvar parse-time-digits (make-vector 256 nil))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
43
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
44 ;; Byte-compiler warnings
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
45 (defvar elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
46 (defvar val)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
47
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
48 (unless (aref parse-time-digits ?0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
49 (loop for i from ?0 to ?9
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
50 do (aset parse-time-digits i (- i ?0))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
51
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
52 (unless (aref parse-time-syntax ?0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
53 (loop for i from ?0 to ?9
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
54 do (aset parse-time-syntax i ?0))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
55 (loop for i from ?A to ?Z
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
56 do (aset parse-time-syntax i ?A))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
57 (loop for i from ?a to ?z
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
58 do (aset parse-time-syntax i ?a))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
59 (aset parse-time-syntax ?+ 1)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
60 (aset parse-time-syntax ?- -1)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
61 (aset parse-time-syntax ?: ?d)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
62 )
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
63
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
64 (defsubst digit-char-p (char)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
65 (aref parse-time-digits char))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
66
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
67 (defsubst parse-time-string-chars (char)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
68 (aref parse-time-syntax char))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
69
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
70 (put 'parse-error 'error-conditions '(parse-error error))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
71 (put 'parse-error 'error-message "Parsing error")
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
72
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
73 (defsubst parse-integer (string &optional start end)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
74 "[CL] Parse and return the integer in STRING, or nil if none."
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
75 (let ((integer 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
76 (digit 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
77 (index (or start 0))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
78 (end (or end (length string))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
79 (when (< index end)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
80 (let ((sign (aref string index)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
81 (if (or (eq sign ?+) (eq sign ?-))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
82 (setq sign (parse-time-string-chars sign)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
83 index (1+ index))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
84 (setq sign 1))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
85 (while (and (< index end)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
86 (setq digit (digit-char-p (aref string index))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
87 (setq integer (+ (* integer 10) digit)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
88 index (1+ index)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
89 (if (/= index end)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
90 (signal 'parse-error `("not an integer"
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
91 ,(substring string (or start 0) end)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
92 (* sign integer))))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
93
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
94 (defun parse-time-tokenize (string)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
95 "Tokenize STRING into substrings."
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
96 (let ((start nil)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
97 (end (length string))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
98 (all-digits nil)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
99 (list ())
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
100 (index 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
101 (c nil))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
102 (while (< index end)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
103 (while (and (< index end) ;skip invalid characters
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
104 (not (setq c (parse-time-string-chars (aref string index)))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
105 (incf index))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
106 (setq start index all-digits (eq c ?0))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
107 (while (and (< (incf index) end) ;scan valid characters
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
108 (setq c (parse-time-string-chars (aref string index))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
109 (setq all-digits (and all-digits (eq c ?0))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
110 (if (<= index end)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
111 (push (if all-digits (parse-integer string start index)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
112 (substring string start index))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
113 list)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
114 (nreverse list)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
115
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
116 (defvar parse-time-months '(("jan" . 1) ("feb" . 2) ("mar" . 3)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
117 ("apr" . 4) ("may" . 5) ("jun" . 6)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
118 ("jul" . 7) ("aug" . 8) ("sep" . 9)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
119 ("oct" . 10) ("nov" . 11) ("dec" . 12)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
120 (defvar parse-time-weekdays '(("sun" . 0) ("mon" . 1) ("tue" . 2)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
121 ("wed" . 3) ("thu" . 4) ("fri" . 5) ("sat" . 6)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
122 (defvar parse-time-zoneinfo `(("z" 0) ("ut" 0) ("gmt" 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
123 ("pst" ,(* -8 3600)) ("pdt" ,(* -7 3600) t)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
124 ("mst" ,(* -7 3600)) ("mdt" ,(* -6 3600) t)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
125 ("cst" ,(* -6 3600)) ("cdt" ,(* -5 3600) t)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
126 ("est" ,(* -5 3600)) ("edt" ,(* -4 3600) t))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
127 "(zoneinfo seconds-off daylight-savings-time-p)")
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
128
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
129 (defvar parse-time-rules
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
130 `(((6) parse-time-weekdays)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
131 ((3) (1 31))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
132 ((4) parse-time-months)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
133 ((5) (100 4038))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
134 ((2 1 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
135 ,#'(lambda () (and (stringp elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
136 (= (length elt) 8)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
137 (= (aref elt 2) ?:)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
138 (= (aref elt 5) ?:)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
139 [0 2] [3 5] [6 8])
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
140 ((8 7) parse-time-zoneinfo
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
141 ,#'(lambda () (car val))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
142 ,#'(lambda () (cadr val)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
143 ((8)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
144 ,#'(lambda ()
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
145 (and (stringp elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
146 (= 5 (length elt))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
147 (or (= (aref elt 0) ?+) (= (aref elt 0) ?-))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
148 ,#'(lambda () (* 60 (+ (parse-integer elt 3 5)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
149 (* 60 (parse-integer elt 1 3)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
150 (if (= (aref elt 0) ?-) -1 1))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
151 ((5 4 3)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152 ,#'(lambda () (and (stringp elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
153 (= (length elt) 10)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
154 (= (aref elt 4) ?-)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
155 (= (aref elt 7) ?-)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
156 [0 4] [5 7] [8 10])
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
157 ((2 1 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158 ,#'(lambda () (and (stringp elt) (= (length elt) 5) (= (aref elt 2) ?:)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159 [0 2] [3 5] ,#'(lambda () 0))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 ((2 1 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161 ,#'(lambda () (and (stringp elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162 (= (length elt) 4)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 (= (aref elt 1) ?:)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 [0 1] [2 4] ,#'(lambda () 0))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165 ((2 1 0)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166 ,#'(lambda () (and (stringp elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167 (= (length elt) 7)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 (= (aref elt 1) ?:)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 [0 1] [2 4] [5 7])
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170 ((5) (50 110) ,#'(lambda () (+ 1900 elt)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171 ((5) (0 49) ,#'(lambda () (+ 2000 elt))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
172 "(slots predicate extractor...)")
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174 (defun parse-time-string (string)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175 "Parse the time-string STRING into (SEC MIN HOUR DAY MON YEAR DOW DST TZ).
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 The values are identical to those of `decode-time', but any values that are
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 unknown are returned as nil."
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 (let ((time (list nil nil nil nil nil nil nil nil nil))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 (temp (parse-time-tokenize (downcase string))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180 (while temp
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 (let ((elt (pop temp))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182 (rules parse-time-rules)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183 (exit nil))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 (while (and (not (null rules)) (not exit))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 (let* ((rule (pop rules))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186 (slots (pop rule))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 (predicate (pop rule))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188 (val))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 (when (and (not (nth (car slots) time)) ;not already set
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190 (setq val (cond ((and (consp predicate)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 (not (eq (car predicate)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192 'lambda)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
193 (and (numberp elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
194 (<= (car predicate) elt)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
195 (<= elt (cadr predicate))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
196 elt))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
197 ((symbolp predicate)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
198 (cdr (assoc elt
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
199 (symbol-value predicate))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
200 ((funcall predicate)))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201 (setq exit t)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202 (while slots
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203 (let ((new-val (and rule
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204 (let ((this (pop rule)))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205 (if (vectorp this)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 (parse-integer
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207 elt (aref this 0) (aref this 1))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208 (funcall this))))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
209 (rplaca (nthcdr (pop slots) time) (or new-val val)))))))))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
210 time))
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212 (provide 'parse-time)
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213
ebb4fa093863 Moved parse-time.el from lisp/gnus to lisp/calendar.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
214 ;;; parse-time.el ends here