]> code.delx.au - gnu-emacs/blobdiff - lisp/calendar/cal-china.el
(cal-html-cursor-month, cal-html-cursor-year): Add autoloads for this
[gnu-emacs] / lisp / calendar / cal-china.el
index c15f4511c480384379b0ad73559fe1b8d5ecd2ac..5cdaa5092aa861372f41385630f9d3cc9a0460f7 100644 (file)
@@ -1,8 +1,10 @@
-;;; cal-china.el --- calendar functions for the Chinese calendar.
+;;; cal-china.el --- calendar functions for the Chinese calendar
 
-;; Copyright (C) 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001, 2002, 2003, 2004, 2005, 2006
+;;   Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <rgm@gnu.org>
 ;; Keywords: calendar
 ;; Human-Keywords: Chinese calendar, calendar, holidays, diary
 
@@ -20,8 +22,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 ;; rules produce a calendar for 2033 which is not accepted by all authorities.
 ;; The date of Chinese New Year is correct from 1644-2051.
 
+;; Technical details of all the calendrical calculations can be found in
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
+
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
 ;;  (217) 333-6733                   University of Illinois at Urbana-Champaign
 
 ;;; Code:
 
+(defvar date)
+(defvar displayed-month)
+(defvar displayed-year)
+
 (require 'lunar)
 
 (defvar chinese-calendar-celestial-stem
 (defvar chinese-calendar-terrestrial-branch
   ["Zi" "Chou" "Yin" "Mao" "Chen" "Si" "Wu" "Wei" "Shen" "You" "Xu" "Hai"])
 
-(defvar chinese-calendar-time-zone 
+(defcustom chinese-calendar-time-zone
   '(if (< year 1928)
        (+ 465 (/ 40.0 60.0))
      480)
   "*Number of minutes difference between local standard time for Chinese
 calendar and Coordinated Universal (Greenwich) Time.  Default is for Beijing.
 This is an expression in `year' since it changed at 1928-01-01 00:00:00 from
-UT+7:45:40 to UT+8.")
+UT+7:45:40 to UT+8."
+  :type 'sexp
+  :group 'chinese-calendar)
 
-(defvar chinese-calendar-location-name "Beijing"
-  "*Name of location used for calculation of Chinese calendar.")
+(defcustom chinese-calendar-location-name "Beijing"
+  "*Name of location used for calculation of Chinese calendar."
+  :type 'string
+  :group 'chinese-calendar)
 
-(defvar chinese-calendar-daylight-time-offset 0
+(defcustom chinese-calendar-daylight-time-offset 0
 ; The correct value is as follows, but the Chinese calendrical
 ; authorities do NOT use DST in determining astronomical events:
 ;  60
   "*Number of minutes difference between daylight savings and standard time
-for Chinese calendar.  Default is for no daylight savings time.")
+for Chinese calendar.  Default is for no daylight savings time."
+  :type 'integer
+  :group 'chinese-calendar)
 
-(defvar chinese-calendar-standard-time-zone-name
+(defcustom chinese-calendar-standard-time-zone-name
   '(if (< year 1928)
        "PMT"
      "CST")
-  "*Abbreviated name of standard time zone used for Chinese calendar.")
-
-(defvar chinese-calendar-daylight-time-zone-name "CDT"
-  "*Abbreviated name of daylight-savings time zone used for Chinese calendar.")
-
-(defvar chinese-calendar-daylight-savings-starts nil
+  "*Abbreviated name of standard time zone used for Chinese calendar.
+This is an expression depending on `year' because it changed
+at 1928-01-01 00:00:00 from `PMT' to `CST'."
+  :type 'sexp
+  :group 'chinese-calendar)
+
+(defcustom chinese-calendar-daylight-time-zone-name "CDT"
+  "*Abbreviated name of daylight-savings time zone used for Chinese calendar."
+  :type 'string
+  :group 'chinese-calendar)
+
+(defcustom chinese-calendar-daylight-savings-starts nil
 ; The correct value is as follows, but the Chinese calendrical
 ; authorities do NOT use DST in determining astronomical events:
 ;  '(cond ((< 1986 year) (calendar-nth-named-day 1 0 4 year 10))
@@ -89,23 +111,31 @@ for Chinese calendar.  Default is for no daylight savings time.")
 ;         (t nil))
   "*Sexp giving the date on which daylight savings time starts for Chinese
 calendar.  Default is for no daylight savings time.  See documentation of
-`calendar-daylight-savings-starts'.")
+`calendar-daylight-savings-starts'."
+  :type 'sexp
+  :group 'chinese-calendar)
 
-(defvar chinese-calendar-daylight-savings-ends nil
+(defcustom chinese-calendar-daylight-savings-ends nil
 ; The correct value is as follows, but the Chinese calendrical
 ; authorities do NOT use DST in determining astronomical events:
 ;  '(if (<= 1986 year) (calendar-nth-named-day 1 0 9 year 11))
   "*Sexp giving the date on which daylight savings time ends for Chinese
 calendar.  Default is for no daylight savings time.  See documentation of
-`calendar-daylight-savings-ends'.")
+`calendar-daylight-savings-ends'."
+  :type 'sexp
+  :group 'chinese-calendar)
 
-(defvar chinese-calendar-daylight-savings-starts-time 0
+(defcustom chinese-calendar-daylight-savings-starts-time 0
   "*Number of minutes after midnight that daylight savings time starts for
-Chinese calendar.  Default is for no daylight savings time.")
+Chinese calendar.  Default is for no daylight savings time."
+  :type 'integer
+  :group 'chinese-calendar)
 
-(defvar chinese-calendar-daylight-savings-ends-time 0
+(defcustom chinese-calendar-daylight-savings-ends-time 0
   "*Number of minutes after midnight that daylight savings time ends for
-Chinese calendar.  Default is for no daylight savings time.")
+Chinese calendar.  Default is for no daylight savings time."
+  :type 'integer
+  :group 'chinese-calendar)
 
 (defun chinese-zodiac-sign-on-or-after (d)
   "Absolute date of first new Zodiac sign on or after absolute date d.
@@ -158,9 +188,7 @@ The Zodiac signs begin when the sun's longitude is a multiple of 30 degrees."
        (calendar-astro-from-absolute d))))))
 
 (defvar chinese-year-cache
-  '((1989 (12 726110) (1 726139) (2 726169) (3 726198) (4 726227) (5 726257)
-          (6 726286) (7 726316) (8 726345) (9 726375) (10 726404) (11 726434))
-    (1990 (12 726464) (1 726494) (2 726523) (3 726553) (4 726582) (5 726611)
+  '((1990 (12 726464) (1 726494) (2 726523) (3 726553) (4 726582) (5 726611)
           (5.5 726641) (6 726670) (7 726699) (8 726729) (9 726758) (10 726788)
           (11 726818))
     (1991 (12 726848) (1 726878) (2 726907) (3 726937) (4 726966) (5 726995)
@@ -185,12 +213,36 @@ The Zodiac signs begin when the sun's longitude is a multiple of 30 degrees."
     (1999 (12 729771) (1 729801) (2 729831) (3 729860) (4 729889) (5 729919)
           (6 729948) (7 729977) (8 730007) (9 730036) (10 730066) (11 730096))
     (2000 (12 730126) (1 730155) (2 730185) (3 730215) (4 730244) (5 730273)
-          (6 730303) (7 730332) (8 730361) (9 730391) (10 730420) (11 730450)))
+          (6 730303) (7 730332) (8 730361) (9 730391) (10 730420) (11 730450))
+    (2001 (12 730480) (1 730509) (2 730539) (3 730569) (4 730598) (4.5 730628)
+          (5 730657) (6 730687) (7 730716) (8 730745) (9 730775) (10 730804)
+          (11 730834))
+    (2002 (12 730863) (1 730893) (2 730923) (3 730953) (4 730982) (5 731012)
+          (6 731041) (7 731071) (8 731100) (9 731129) (10 731159) (11 731188))
+    (2003 (12 731218) (1 731247) (2 731277) (3 731307) (4 731336) (5 731366)
+          (6 731396) (7 731425) (8 731455) (9 731484) (10 731513) (11 731543))
+    (2004 (12 731572) (1 731602) (2 731631) (2.5 731661) (3 731690) (4 731720)
+          (5 731750) (6 731779) (7 731809) (8 731838) (9 731868) (10 731897)
+          (11 731927))
+    (2005 (12 731956) (1 731986) (2 732015) (3 732045) (4 732074) (5 732104)
+          (6 732133) (7 732163) (8 732193) (9 732222) (10 732252) (11 732281))
+    (2006 (12 732311) (1 732340) (2 732370) (3 732399) (4 732429) (5 732458)
+          (6 732488) (7 732517) (7.5 732547) (8 732576) (9 732606) (10 732636)
+          (11 732665))
+    (2007 (12 732695) (1 732725) (2 732754) (3 732783) (4 732813) (5 732842)
+          (6 732871) (7 732901) (8 732930) (9 732960) (10 732990) (11 733020))
+    (2008 (12 733049) (1 733079) (2 733109) (3 733138) (4 733167) (5 733197)
+          (6 733226) (7 733255) (8 733285) (9 733314) (10 733344) (11 733374))
+    (2009 (12 733403) (1 733433) (2 733463) (3 733493) (4 733522) (5 733551)
+          (5.5 733581) (6 733610) (7 733639) (8 733669) (9 733698) (10 733728)
+          (11 733757))
+    (2010 (12 733787) (1 733817) (2 733847) (3 733876) (4 733906) (5 733935)
+          (6 733965) (7 733994) (8 734023) (9 734053) (10 734082) (11 734112)))
   "An assoc list of Chinese year structures as determined by `chinese-year'.
 
 Values are computed as needed, but to save time, the initial value consists
-of the precomputed years 1989-2000.  The code works just as well with this
-set to nil initially (which is how the value for 1989-2000 was computed).")
+of the precomputed years 1990-2010.  The code works just as well with this
+set to nil initially (which is how the value for 1990-2010 was computed).")
 
 (defun chinese-year (y)
   "The structure of the Chinese year for Gregorian year Y.
@@ -357,7 +409,7 @@ Defaults to today's date if DATE is not given."
             (floor month)
             (if (integerp month)
                 (format " (%s)" (calendar-chinese-sexagesimal-name
-                                 (+ (* 5 year) month 44)))
+                                 (+ (* 12 year) month 50)))
               "")
             day (calendar-chinese-sexagesimal-name (+ a-date 15)))))
 
@@ -452,4 +504,5 @@ Echo Chinese date unless NOECHO is t."
 
 (provide 'cal-china)
 
+;;; arch-tag: 7e5b7e0d-676c-47e3-8696-93e7ea0ab644
 ;;; cal-china.el ends here