-;;; elmo-date.el -- Date processing module for ELMO.
+;;; elmo-date.el --- Date processing module for ELMO.
;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
;;
;;; Commentary:
-;;
+;;
;;; Code:
-;;
+;;
(require 'path-util)
-(if (module-installed-p 'timezone)
- (require 'timezone))
+(require 'timezone)
(require 'elmo-vars)
+(defmacro elmo-match-substring (pos string from)
+ "Substring of POSth matched string of STRING."
+ (` (substring (, string)
+ (+ (match-beginning (, pos)) (, from))
+ (match-end (, pos)))))
+
+(defmacro elmo-match-string (pos string)
+ "Substring POSth matched STRING."
+ (` (substring (, string) (match-beginning (, pos)) (match-end (, pos)))))
+
+(defmacro elmo-match-buffer (pos)
+ "Substring POSth matched from the current buffer."
+ (` (buffer-substring-no-properties
+ (match-beginning (, pos)) (match-end (, pos)))))
+
+;; from subr.el
+(defun elmo-replace-in-string (str regexp newtext &optional literal)
+ "Replace all matches in STR for REGEXP with NEWTEXT string.
+And returns the new string.
+Optional LITERAL non-nil means do a literal replacement.
+Otherwise treat \\ in NEWTEXT string as special:
+ \\& means substitute original matched text,
+ \\N means substitute match for \(...\) number N,
+ \\\\ means insert one \\."
+ (let ((rtn-str "")
+ (start 0)
+ (special)
+ match prev-start)
+ (while (setq match (string-match regexp str start))
+ (setq prev-start start
+ start (match-end 0)
+ rtn-str
+ (concat
+ rtn-str
+ (substring str prev-start match)
+ (cond (literal newtext)
+ (t (mapconcat
+ (function
+ (lambda (c)
+ (if special
+ (progn
+ (setq special nil)
+ (cond ((eq c ?\\) "\\")
+ ((eq c ?&)
+ (elmo-match-string 0 str))
+ ((and (>= c ?0) (<= c ?9))
+ (if (> c (+ ?0 (length
+ (match-data))))
+ ;; Invalid match num
+ (error "Invalid match num: %c" c)
+ (setq c (- c ?0))
+ (elmo-match-string c str)))
+ (t (char-to-string c))))
+ (if (eq c ?\\) (progn (setq special t) nil)
+ (char-to-string c)))))
+ newtext ""))))))
+ (concat rtn-str (substring str start))))
+
(defvar elmo-date-descriptions
'((yesterday . [0 0 1])
(lastweek . [0 0 7])
(error "%s is not supported yet" suffix)))))
((string-match "[0-9]+-[A-Za-z]+-[0-9]+" description)
(timezone-fix-time
- (concat (elmo-replace-in-string description "-" " ") " 0:00")
- nil nil))))
+ (concat (elmo-replace-in-string description "-" " ") " 0:0")
+ (current-time-zone) nil))
+ ((string-match "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)" description)
+ (vector (string-to-number (match-string 1 description))
+ (string-to-number (match-string 2 description))
+ (string-to-number (match-string 3 description))
+ 0 0 0
+ (current-time-zone)))))
(defun elmo-datevec-substitute (datevec1 datevec2)
(if (/= (aref datevec2 2) 0)
(setq p 1)
(while (< p month)
(setq days (+ days (timezone-last-day-of-month p year)))
- (setq p (+ p 1))
- )
+ (setq p (+ p 1)))
(setq days (+ days mday))
(aref wday (% days 7))))
(aref (, datevec) 0)
(aref (, datevec) 1)
(aref (, datevec) 2)
- (aref (, datevec) 3))))
+ (timezone-make-time-string
+ (aref (, datevec) 3)
+ (aref (, datevec) 4)
+ (aref (, datevec) 5)))))
(require 'product)
(product-provide (provide 'elmo-date) (require 'elmo-version))