Mercurial > emacs
changeset 92993:61c2483cb400
(calendar-mark-complex): Autoload it.
(mark-hebrew-calendar-date-pattern): Add optional argument `color'.
Use calendar-mark-complex.
(calendar-absolute-from-hebrew, hebrew-calendar-yahrzeit)
(insert-hebrew-diary-entry, insert-monthly-hebrew-diary-entry)
(insert-yearly-hebrew-diary-entry): Use let rather than let*.
(calendar-hebrew-prompt-for-date): New function.
(calendar-goto-hebrew-date): Use calendar-hebrew-prompt-for-date.
(holiday-tisha-b-av-etc): Use unless, let.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sun, 16 Mar 2008 01:25:11 +0000 |
parents | 49c4ea77b83a |
children | deb2f6126df1 |
files | lisp/calendar/cal-hebrew.el |
diffstat | 1 files changed, 93 insertions(+), 126 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/calendar/cal-hebrew.el Sun Mar 16 01:24:55 2008 +0000 +++ b/lisp/calendar/cal-hebrew.el Sun Mar 16 01:25:11 2008 +0000 @@ -111,9 +111,9 @@ "Absolute date of Hebrew DATE. The absolute date is the number of days elapsed since the (imaginary) Gregorian date Sunday, December 31, 1 BC." - (let* ((month (extract-calendar-month date)) - (day (extract-calendar-day date)) - (year (extract-calendar-year date))) + (let ((month (extract-calendar-month date)) + (day (extract-calendar-day date)) + (year (extract-calendar-year date))) (+ day ; days so far this month (if (< month 7) ; before Tishri ;; Then add days in prior months this year before and after Nisan. @@ -135,10 +135,10 @@ The absolute date is the number of days elapsed since the (imaginary) Gregorian date Sunday, December 31, 1 BC." (let* ((greg-date (calendar-gregorian-from-absolute date)) + (year (+ 3760 (extract-calendar-year greg-date))) (month (aref [9 10 11 12 1 2 3 4 7 7 7 8] (1- (extract-calendar-month greg-date)))) - (day) - (year (+ 3760 (extract-calendar-year greg-date)))) + day) (while (>= date (calendar-absolute-from-hebrew (list 7 1 (1+ year)))) (setq year (1+ year))) (let ((length (hebrew-calendar-last-month-of-year year))) @@ -185,9 +185,9 @@ (defun hebrew-calendar-yahrzeit (death-date year) "Absolute date of the anniversary of Hebrew DEATH-DATE in Hebrew YEAR." - (let* ((death-day (extract-calendar-day death-date)) - (death-month (extract-calendar-month death-date)) - (death-year (extract-calendar-year death-date))) + (let ((death-day (extract-calendar-day death-date)) + (death-month (extract-calendar-month death-date)) + (death-year (extract-calendar-year death-date))) (cond ;; If it's Heshvan 30 it depends on the first anniversary; if ;; that was not Heshvan 30, use the day before Kislev 1. @@ -216,49 +216,52 @@ (t (calendar-absolute-from-hebrew (list death-month death-day year)))))) +(defun calendar-hebrew-prompt-for-date () + "Ask for a Hebrew date." + (let* ((today (calendar-current-date)) + (year (calendar-read + "Hebrew calendar year (>3760): " + (lambda (x) (> x 3760)) + (int-to-string + (extract-calendar-year + (calendar-hebrew-from-absolute + (calendar-absolute-from-gregorian today)))))) + (month-array (if (hebrew-calendar-leap-year-p year) + calendar-hebrew-month-name-array-leap-year + calendar-hebrew-month-name-array-common-year)) + (completion-ignore-case t) + (month (cdr (assoc-string + (completing-read + "Hebrew calendar month name: " + (mapcar 'list (append month-array nil)) + (if (= year 3761) + (lambda (x) + (let ((m (cdr + (assoc-string + (car x) + (calendar-make-alist month-array) + t)))) + (< 0 + (calendar-absolute-from-hebrew + (list m + (hebrew-calendar-last-day-of-month + m year) + year)))))) + t) + (calendar-make-alist month-array 1) t))) + (last (hebrew-calendar-last-day-of-month month year)) + (first (if (and (= year 3761) (= month 10)) + 18 1)) + (day (calendar-read + (format "Hebrew calendar day (%d-%d): " + first last) + (lambda (x) (and (<= first x) (<= x last)))))) + (list (list month day year)))) + ;;;###cal-autoload (defun calendar-goto-hebrew-date (date &optional noecho) "Move cursor to Hebrew DATE; echo Hebrew date unless NOECHO is non-nil." - (interactive - (let* ((today (calendar-current-date)) - (year (calendar-read - "Hebrew calendar year (>3760): " - (lambda (x) (> x 3760)) - (int-to-string - (extract-calendar-year - (calendar-hebrew-from-absolute - (calendar-absolute-from-gregorian today)))))) - (month-array (if (hebrew-calendar-leap-year-p year) - calendar-hebrew-month-name-array-leap-year - calendar-hebrew-month-name-array-common-year)) - (completion-ignore-case t) - (month (cdr (assoc-string - (completing-read - "Hebrew calendar month name: " - (mapcar 'list (append month-array nil)) - (if (= year 3761) - (lambda (x) - (let ((m (cdr - (assoc-string - (car x) - (calendar-make-alist month-array) - t)))) - (< 0 - (calendar-absolute-from-hebrew - (list m - (hebrew-calendar-last-day-of-month - m year) - year)))))) - t) - (calendar-make-alist month-array 1) t))) - (last (hebrew-calendar-last-day-of-month month year)) - (first (if (and (= year 3761) (= month 10)) - 18 1)) - (day (calendar-read - (format "Hebrew calendar day (%d-%d): " - first last) - (lambda (x) (and (<= first x) (<= x last)))))) - (list (list month day year)))) + (interactive (calendar-hebrew-prompt-for-date)) (calendar-goto-date (calendar-gregorian-from-absolute (calendar-absolute-from-hebrew date))) (or noecho (calendar-print-hebrew-date))) @@ -308,9 +311,8 @@ ;;;###holiday-autoload (defun holiday-rosh-hashanah-etc () "List of dates related to Rosh Hashanah, as visible in calendar window." - (if (or (< displayed-month 8) - (> displayed-month 11)) - nil ; none of the dates is visible + (unless (or (< displayed-month 8) ; none of the dates is visible + (> displayed-month 11)) (let* ((abs-r-h (calendar-absolute-from-hebrew (list 7 1 (+ displayed-year 3761)))) (mandatory @@ -403,8 +405,7 @@ ;;;###holiday-autoload (defun holiday-passover-etc () "List of dates related to Passover, as visible in calendar window." - (if (< 7 displayed-month) - nil ; none of the dates is visible + (unless (< 7 displayed-month) ; none of the dates is visible (let* ((abs-p (calendar-absolute-from-hebrew (list 1 15 (+ displayed-year 3760)))) (mandatory @@ -488,12 +489,10 @@ ;;;###holiday-autoload (defun holiday-tisha-b-av-etc () "List of dates around Tisha B'Av, as visible in calendar window." - (if (or (< displayed-month 5) - (> displayed-month 9)) - nil ; none of the dates is visible - (let* ((abs-t-a (calendar-absolute-from-hebrew - (list 5 9 (+ displayed-year 3760))))) - + (unless (or (< displayed-month 5) ; none of the dates is visible + (> displayed-month 9)) + (let ((abs-t-a (calendar-absolute-from-hebrew + (list 5 9 (+ displayed-year 3760))))) (holiday-filter-visible-calendar (list (list (calendar-gregorian-from-absolute @@ -528,10 +527,15 @@ hebrew-diary-entry-symbol 'calendar-hebrew-from-absolute)) +(autoload 'calendar-mark-complex "diary-lib") + ;;;###diary-autoload -(defun mark-hebrew-calendar-date-pattern (month day year) +(defun mark-hebrew-calendar-date-pattern (month day year &optional color) "Mark dates in calendar window that conform to Hebrew date MONTH/DAY/YEAR. -A value of 0 in any position is a wildcard." +A value of 0 in any position is a wildcard. Optional argument COLOR is +passed to `mark-visible-calendar-date' as MARK." + ;; FIXME not the same as the Bahai and Islamic cases, so can't use + ;; calendar-mark-1. (save-excursion (set-buffer calendar-buffer) (if (and (not (zerop month)) (not (zerop day))) @@ -541,7 +545,7 @@ (calendar-absolute-from-hebrew (list month day year))))) (if (calendar-date-is-visible-p date) - (mark-visible-calendar-date date))) + (mark-visible-calendar-date date color))) ;; Month and day in any year--this taken from the holiday stuff. ;; This test is only to speed things up a bit, it works ;; fine without it. @@ -556,7 +560,7 @@ (y1 displayed-year) (m2 displayed-month) (y2 displayed-year) - (year)) + year) (increment-calendar-month m1 y1 -1) (increment-calendar-month m2 y2 1) (let* ((start-date (calendar-absolute-from-gregorian @@ -565,8 +569,7 @@ (list m2 (calendar-last-day-of-month m2 y2) y2))) - (hebrew-start - (calendar-hebrew-from-absolute start-date)) + (hebrew-start (calendar-hebrew-from-absolute start-date)) (hebrew-end (calendar-hebrew-from-absolute end-date)) (hebrew-y1 (extract-calendar-year hebrew-start)) (hebrew-y2 (extract-calendar-year hebrew-end))) @@ -575,36 +578,9 @@ (calendar-absolute-from-hebrew (list month day year))))) (if (calendar-date-is-visible-p date) - (mark-visible-calendar-date date))))))) - ;; Not one of the simple cases--check all visible dates for match. - ;; Actually, the following code takes care of ALL of the cases, but - ;; it's much too slow to be used for the simple (common) cases. - (let ((m displayed-month) - (y displayed-year) - (first-date) - (last-date)) - (increment-calendar-month m y -1) - (setq first-date - (calendar-absolute-from-gregorian - (list m 1 y))) - (increment-calendar-month m y 2) - (setq last-date - (calendar-absolute-from-gregorian - (list m (calendar-last-day-of-month m y) y))) - (calendar-for-loop date from first-date to last-date do - (let* ((h-date (calendar-hebrew-from-absolute date)) - (h-month (extract-calendar-month h-date)) - (h-day (extract-calendar-day h-date)) - (h-year (extract-calendar-year h-date))) - (and (or (zerop month) - (= month h-month)) - (or (zerop day) - (= day h-day)) - (or (zerop year) - (= year h-year)) - (mark-visible-calendar-date - (calendar-gregorian-from-absolute date))))) - )))) + (mark-visible-calendar-date date color))))))) + (calendar-mark-complex month day year + 'calendar-hebrew-from-absolute color)))) (autoload 'diary-mark-entries-1 "diary-lib") @@ -624,16 +600,13 @@ For the Hebrew date corresponding to the date indicated by point. Prefix argument ARG makes the entry nonmarking." (interactive "P") - (let* ((calendar-month-name-array - calendar-hebrew-month-name-array-leap-year)) + (let ((calendar-month-name-array calendar-hebrew-month-name-array-leap-year)) (make-diary-entry - (concat - hebrew-diary-entry-symbol - (calendar-date-string - (calendar-hebrew-from-absolute - (calendar-absolute-from-gregorian - (calendar-cursor-to-date t))) - nil t)) + (concat hebrew-diary-entry-symbol + (calendar-date-string + (calendar-hebrew-from-absolute + (calendar-absolute-from-gregorian (calendar-cursor-to-date t))) + nil t)) arg))) ;;;###cal-autoload @@ -642,17 +615,15 @@ For the day of the Hebrew month corresponding to the date indicated by point. Prefix argument ARG makes the entry nonmarking." (interactive "P") - (let* ((calendar-date-display-form - (if european-calendar-style '(day " * ") '("* " day ))) - (calendar-month-name-array - calendar-hebrew-month-name-array-leap-year)) + (let ((calendar-date-display-form (if european-calendar-style + '(day " * ") + '("* " day ))) + (calendar-month-name-array calendar-hebrew-month-name-array-leap-year)) (make-diary-entry - (concat - hebrew-diary-entry-symbol - (calendar-date-string - (calendar-hebrew-from-absolute - (calendar-absolute-from-gregorian - (calendar-cursor-to-date t))))) + (concat hebrew-diary-entry-symbol + (calendar-date-string + (calendar-hebrew-from-absolute + (calendar-absolute-from-gregorian (calendar-cursor-to-date t))))) arg))) ;;;###cal-autoload @@ -661,19 +632,15 @@ For the day of the Hebrew year corresponding to the date indicated by point. Prefix argument ARG makes the entry nonmarking." (interactive "P") - (let* ((calendar-date-display-form - (if european-calendar-style - '(day " " monthname) - '(monthname " " day))) - (calendar-month-name-array - calendar-hebrew-month-name-array-leap-year)) + (let ((calendar-date-display-form (if european-calendar-style + '(day " " monthname) + '(monthname " " day))) + (calendar-month-name-array calendar-hebrew-month-name-array-leap-year)) (make-diary-entry - (concat - hebrew-diary-entry-symbol - (calendar-date-string - (calendar-hebrew-from-absolute - (calendar-absolute-from-gregorian - (calendar-cursor-to-date t))))) + (concat hebrew-diary-entry-symbol + (calendar-date-string + (calendar-hebrew-from-absolute + (calendar-absolute-from-gregorian (calendar-cursor-to-date t))))) arg))) ;;;###autoload