changeset 93996:d76c0fd8ef0c

(holidays): Move custom groups here from calendar.el. (holiday-general-holidays, holiday-oriental-holidays) (holiday-local-holidays, holiday-other-holidays, hebrew-holidays-1) (hebrew-holidays-2, hebrew-holidays-3, hebrew-holidays-4) (holiday-hebrew-holidays, holiday-christian-holidays) (holiday-islamic-holidays, holiday-bahai-holidays) (holiday-solar-holidays, calendar-holidays): Move here from calendar.el.
author Glenn Morris <rgm@gnu.org>
date Fri, 11 Apr 2008 03:48:37 +0000
parents 27365ac56ead
children 81fe93cd566e
files lisp/calendar/holidays.el
diffstat 1 files changed, 397 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calendar/holidays.el	Fri Apr 11 03:47:38 2008 +0000
+++ b/lisp/calendar/holidays.el	Fri Apr 11 03:48:37 2008 +0000
@@ -33,6 +33,403 @@
 (require 'calendar)
 (require 'hol-loaddefs)
 
+(defgroup holidays nil
+  "Holidays support in calendar."
+  :group 'calendar
+  :prefix "holidays-"
+  :group 'local)
+
+;; The various holiday variables are autoloaded because people
+;; are used to using them to set calendar-holidays without having to
+;; explicitly load this file.
+
+;;;###autoload
+(defcustom holiday-general-holidays
+  '((holiday-fixed 1 1 "New Year's Day")
+    (holiday-float 1 1 3 "Martin Luther King Day")
+    (holiday-fixed 2 2 "Groundhog Day")
+    (holiday-fixed 2 14 "Valentine's Day")
+    (holiday-float 2 1 3 "President's Day")
+    (holiday-fixed 3 17 "St. Patrick's Day")
+    (holiday-fixed 4 1 "April Fools' Day")
+    (holiday-float 5 0 2 "Mother's Day")
+    (holiday-float 5 1 -1 "Memorial Day")
+    (holiday-fixed 6 14 "Flag Day")
+    (holiday-float 6 0 3 "Father's Day")
+    (holiday-fixed 7 4 "Independence Day")
+    (holiday-float 9 1 1 "Labor Day")
+    (holiday-float 10 1 2 "Columbus Day")
+    (holiday-fixed 10 31 "Halloween")
+    (holiday-fixed 11 11 "Veteran's Day")
+    (holiday-float 11 4 4 "Thanksgiving"))
+  "General holidays.  Default value is for the United States.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-general-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'general-holidays
+  'holiday-general-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-oriental-holidays
+  '((holiday-chinese-new-year))
+  "Oriental holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-oriental-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'oriental-holidays
+  'holiday-oriental-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-local-holidays nil
+  "Local holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-local-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'local-holidays 'holiday-local-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-other-holidays nil
+  "User defined holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-other-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'other-holidays 'holiday-other-holidays "23.1")
+
+;;;###autoload
+(defvar hebrew-holidays-1
+  '((holiday-hebrew-rosh-hashanah)
+    (if calendar-hebrew-all-holidays-flag
+        (holiday-julian
+         11
+         (let ((m displayed-month)
+               (y displayed-year)
+               year)
+           (calendar-increment-month m y -1)
+           (setq year (calendar-extract-year
+                       (calendar-julian-from-absolute
+                        (calendar-absolute-from-gregorian (list m 1 y)))))
+           (if (zerop (% (1+ year) 4))
+               22
+             21)) "\"Tal Umatar\" (evening)")))
+  "Component of the old default value of `holiday-hebrew-holidays'.")
+;;;###autoload
+(put 'hebrew-holidays-1 'risky-local-variable t)
+(make-obsolete-variable 'hebrew-holidays-1 'hebrew-holidays "23.1")
+
+;;;###autoload
+(defvar hebrew-holidays-2
+  '((holiday-hebrew-hanukkah) ; respects calendar-hebrew-all-holidays-flag
+    (if calendar-hebrew-all-holidays-flag
+      (holiday-hebrew
+       10
+       (let ((h-year (calendar-extract-year
+                      (calendar-hebrew-from-absolute
+                       (calendar-absolute-from-gregorian
+                        (list displayed-month 28 displayed-year))))))
+         (if (= 6 (% (calendar-hebrew-to-absolute (list 10 10 h-year))
+                     7))
+             11 10))
+       "Tzom Teveth"))
+    (if calendar-hebrew-all-holidays-flag
+        (holiday-hebrew 11 15 "Tu B'Shevat")))
+  "Component of the old default value of `holiday-hebrew-holidays'.")
+;;;###autoload
+(put 'hebrew-holidays-2 'risky-local-variable t)
+(make-obsolete-variable 'hebrew-holidays-2 'hebrew-holidays "23.1")
+
+;;;###autoload
+(defvar hebrew-holidays-3
+  '((if calendar-hebrew-all-holidays-flag
+        (holiday-hebrew
+         11
+         (let* ((m displayed-month)
+                (y displayed-year)
+                (h-year (progn
+                          (calendar-increment-month m y 1)
+                          (calendar-extract-year
+                           (calendar-hebrew-from-absolute
+                            (calendar-absolute-from-gregorian
+                             (list m (calendar-last-day-of-month m y) y))))))
+                (s-s
+                 (calendar-hebrew-from-absolute
+                  (if (= 6
+                         (% (calendar-hebrew-to-absolute
+                             (list 7 1 h-year))
+                            7))
+                      (calendar-dayname-on-or-before
+                       6 (calendar-hebrew-to-absolute
+                          (list 11 17 h-year)))
+                    (calendar-dayname-on-or-before
+                     6 (calendar-hebrew-to-absolute
+                        (list 11 16 h-year))))))
+                (day (calendar-extract-day s-s)))
+           day)
+         "Shabbat Shirah")))
+  "Component of the old default value of `holiday-hebrew-holidays'.")
+;;;###autoload
+(put 'hebrew-holidays-3 'risky-local-variable t)
+(make-obsolete-variable 'hebrew-holidays-3 'hebrew-holidays "23.1")
+
+;;;###autoload
+(defvar hebrew-holidays-4
+  '((holiday-hebrew-passover)
+    (and calendar-hebrew-all-holidays-flag
+         (let* ((m displayed-month)
+                (y displayed-year)
+                (year (progn
+                        (calendar-increment-month m y -1)
+                        (calendar-extract-year
+                         (calendar-julian-from-absolute
+                          (calendar-absolute-from-gregorian (list m 1 y)))))))
+           (= 21 (% year 28)))
+         (holiday-julian 3 26 "Kiddush HaHamah"))
+    (if calendar-hebrew-all-holidays-flag
+        (holiday-hebrew-tisha-b-av)))
+    "Component of the old default value of `holiday-hebrew-holidays'.")
+;;;###autoload
+(put 'hebrew-holidays-4 'risky-local-variable t)
+(make-obsolete-variable 'hebrew-holidays-4 'hebrew-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-hebrew-holidays
+  '((holiday-hebrew-passover)
+    (holiday-hebrew-rosh-hashanah)
+    (holiday-hebrew-hanukkah)
+    (if calendar-hebrew-all-holidays-flag
+        (append
+         (holiday-hebrew-tisha-b-av)
+         (holiday-hebrew-misc))))
+  "Jewish holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :version "23.1"            ; removed dependency on hebrew-holidays-N
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-hebrew-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'hebrew-holidays
+  'holiday-hebrew-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-christian-holidays
+  '((holiday-easter-etc)    ; respects calendar-christian-all-holidays-flag
+    (holiday-fixed 12 25 "Christmas")
+    (if calendar-christian-all-holidays-flag
+        (append
+         (holiday-fixed 1 6 "Epiphany")
+         (holiday-julian 12 25 "Eastern Orthodox Christmas")
+         (holiday-greek-orthodox-easter)
+         (holiday-fixed 8 15 "Assumption")
+         (holiday-advent 0 "Advent"))))
+  "Christian holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-christian-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'christian-holidays
+  'holiday-christian-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-islamic-holidays
+  '((holiday-islamic-new-year)
+    (holiday-islamic 9 1 "Ramadan Begins")
+    (if calendar-islamic-all-holidays-flag
+        (append
+         (holiday-islamic 1 10 "Ashura")
+         (holiday-islamic 3 12 "Mulad-al-Nabi")
+         (holiday-islamic 7 26 "Shab-e-Mi'raj")
+         (holiday-islamic 8 15 "Shab-e-Bara't")
+         (holiday-islamic 9 27 "Shab-e Qadr")
+         (holiday-islamic 10 1 "Id-al-Fitr")
+         (holiday-islamic 12 10 "Id-al-Adha"))))
+  "Islamic holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-islamic-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'islamic-holidays
+  'holiday-islamic-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-bahai-holidays
+  '((holiday-bahai-new-year)
+    (holiday-bahai-ridvan)      ; respects calendar-bahai-all-holidays-flag
+    (holiday-fixed  5 23 "Declaration of the Bab")
+    (holiday-fixed  5 29 "Ascension of Baha'u'llah")
+    (holiday-fixed  7  9 "Martyrdom of the Bab")
+    (holiday-fixed 10 20 "Birth of the Bab")
+    (holiday-fixed 11 12 "Birth of Baha'u'llah")
+    (if calendar-bahai-all-holidays-flag
+        (append
+         (holiday-fixed 11 26 "Day of the Covenant")
+         (holiday-fixed 11 28 "Ascension of `Abdu'l-Baha"))))
+  "Baha'i holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-bahai-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'bahai-holidays 'holiday-bahai-holidays "23.1")
+
+;;;###autoload
+(defcustom holiday-solar-holidays
+  '((solar-equinoxes-solstices)
+    (holiday-sexp calendar-daylight-savings-starts
+                  (format "Daylight Saving Time Begins %s"
+                          (solar-time-string
+                           (/ calendar-daylight-savings-starts-time (float 60))
+                           calendar-standard-time-zone-name)))
+    (holiday-sexp calendar-daylight-savings-ends
+                  (format "Daylight Saving Time Ends %s"
+                          (solar-time-string
+                           (/ calendar-daylight-savings-ends-time (float 60))
+                           calendar-daylight-time-zone-name))))
+  "Sun-related holidays.
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'holiday-solar-holidays 'risky-local-variable t)
+;;;###autoload
+(define-obsolete-variable-alias 'solar-holidays 'holiday-solar-holidays "23.1")
+
+;;;###autoload
+(defcustom calendar-holidays
+  (append holiday-general-holidays holiday-local-holidays
+          holiday-other-holidays holiday-christian-holidays
+          holiday-hebrew-holidays holiday-islamic-holidays
+          holiday-bahai-holidays holiday-oriental-holidays
+          holiday-solar-holidays)
+  "List of notable days for the command \\[holidays].
+
+Additional holidays are easy to add to the list, just put them in the
+list `holiday-other-holidays' in your .emacs file.  Similarly, by setting
+any of `holiday-general-holidays', `holiday-local-holidays',
+`holiday-christian-holidays', `holiday-hebrew-holidays',
+`holiday-islamic-holidays', `holiday-bahai-holidays',
+`holiday-oriental-holidays', or `holiday-solar-holidays' to nil in your
+.emacs file, you can eliminate unwanted categories of holidays.
+
+The aforementioned variables control the holiday choices offered
+by the function `holiday-list' when it is called interactively.
+
+They also initialize the default value of `calendar-holidays',
+which is the default list of holidays used by the function
+`holiday-list' in the non-interactive case.  Note that these
+variables have no effect on `calendar-holidays' after it has been
+set (e.g. after the calendar is loaded).  In that case, customize
+`calendar-holidays' directly.
+
+The intention is that (in the US) `holiday-local-holidays' be set in
+site-init.el and `holiday-other-holidays' be set by the user.
+
+Entries on the list are expressions that return (possibly empty) lists of
+items of the form ((month day year) string) of a holiday in the
+three-month period centered around `displayed-month' of `displayed-year'.
+Several basic functions are provided for this purpose:
+
+    (holiday-fixed MONTH DAY STRING) is a fixed date on the Gregorian calendar
+    (holiday-float MONTH DAYNAME K STRING &optional day) is the Kth DAYNAME in
+                               MONTH on the Gregorian calendar (0 for Sunday,
+                               etc.); K<0 means count back from the end of the
+                               month.  An optional parameter DAY means the Kth
+                               DAYNAME after/before MONTH DAY.
+    (holiday-hebrew MONTH DAY STRING)  a fixed date on the Hebrew calendar
+    (holiday-islamic MONTH DAY STRING) a fixed date on the Islamic calendar
+    (holiday-bahai MONTH DAY STRING)   a fixed date on the Baha'i calendar
+    (holiday-julian MONTH DAY STRING)  a fixed date on the Julian calendar
+    (holiday-sexp SEXP STRING) SEXP is a Gregorian-date-valued expression
+                               in the variable `year'; if it evaluates to
+                               a visible date, that's the holiday; if it
+                               evaluates to nil, there's no holiday.  STRING
+                               is an expression in the variable `date'.
+
+For example, to add Bastille Day, celebrated in France on July 14, add
+
+     (holiday-fixed 7 14 \"Bastille Day\")
+
+to the list.  To add Hurricane Supplication Day, celebrated in the Virgin
+Islands on the fourth Monday in August, add
+
+     (holiday-float 8 1 4 \"Hurricane Supplication Day\")
+
+to the list (the last Monday would be specified with `-1' instead of `4').
+To add the last day of Hanukkah to the list, use
+
+     (holiday-hebrew 10 2 \"Last day of Hanukkah\")
+
+since the Hebrew months are numbered with 1 starting from Nisan.
+To add the Islamic feast celebrating Mohammed's birthday, use
+
+     (holiday-islamic 3 12 \"Mohammed's Birthday\")
+
+since the Islamic months are numbered from 1 starting with Muharram.
+To add an entry for the Baha'i festival of Ridvan, use
+
+     (holiday-bahai 2 13 \"Festival of Ridvan\")
+
+since the Baha'i months are numbered from 1 starting with Baha.
+To add Thomas Jefferson's birthday, April 2, 1743 (Julian), use
+
+     (holiday-julian 4 2 \"Jefferson's Birthday\")
+
+To include a holiday conditionally, use the sexp form or a conditional.  For
+example, to include American presidential elections, which occur on the first
+Tuesday after the first Monday in November of years divisible by 4, add
+
+     (holiday-sexp
+       '(if (zerop (% year 4))
+           (calendar-gregorian-from-absolute
+             (1+ (calendar-dayname-on-or-before
+                   1 (+ 6 (calendar-absolute-from-gregorian
+                            (list 11 1 year)))))))
+       \"US Presidential Election\")
+
+or
+
+     (if (zerop (% displayed-year 4))
+         (holiday-fixed 11
+                (calendar-extract-day
+                 (calendar-gregorian-from-absolute
+                  (1+ (calendar-dayname-on-or-before
+                       1 (+ 6 (calendar-absolute-from-gregorian
+                               (list 11 1 displayed-year)))))))
+                \"US Presidential Election\"))
+
+to the list.  To include the phases of the moon, add
+
+     (lunar-phases)
+
+to the holiday list, where `lunar-phases' is an Emacs-Lisp function that
+you've written to return a (possibly empty) list of the relevant VISIBLE dates
+with descriptive strings such as
+
+     (((2 6 1989) \"New Moon\") ((2 12 1989) \"First Quarter Moon\") ... )."
+  :type 'sexp
+  :group 'holidays)
+;;;###autoload
+(put 'calendar-holidays 'risky-local-variable t)
+
+;;; End of user options.
+
+
 ;; FIXME name that makes sense
 ;;;###diary-autoload
 (defun calendar-holiday-list ()