]> code.delx.au - gnu-emacs/blobdiff - lisp/calendar/cal-china.el
(top-level): No longer activate on load.
[gnu-emacs] / lisp / calendar / cal-china.el
index 242100bccf79b452b1dc845103cabbd837487f2d..303193e3d7315951f9a49cba1c86f44b1107bb94 100644 (file)
@@ -1,6 +1,6 @@
-;;; cal-chinese.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 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Keywords: calendar
@@ -19,8 +19,9 @@
 ;; GNU General Public License for more details.
 
 ;; 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, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; 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.
 
 ;;; 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
@@ -44,6 +49,9 @@
 
 ;;; Code:
 
+(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))
@@ -88,23 +108,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.
@@ -157,9 +185,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)
@@ -184,12 +210,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.
@@ -325,7 +375,7 @@ Gregorian date Sunday, December 31, 1 BC."
           (list
            (list chinese-new-year
                  (format "Chinese New Year (%s)"
-                         (calendar-chinese-sexagisimal-name (+ y 57))))))))))
+                         (calendar-chinese-sexagesimal-name (+ y 57))))))))))
 
 (defun calendar-chinese-date-string (&optional date)
   "String of Chinese date of Gregorian DATE.
@@ -347,7 +397,7 @@ Defaults to today's date if DATE is not given."
          (m-cycle (% (+ (* year 5) (floor month)) 60)))
     (format "Cycle %s, year %s (%s), %smonth %s%s, day %s (%s)"
             cycle
-            year (calendar-chinese-sexagisimal-name year)
+            year (calendar-chinese-sexagesimal-name year)
             (if (not (integerp month))
                 "second "
               (if (< 30 (- next-month this-month))
@@ -355,13 +405,13 @@ Defaults to today's date if DATE is not given."
                 ""))
             (floor month)
             (if (integerp month)
-                (format " (%s)" (calendar-chinese-sexagisimal-name
-                                 (+ (* 5 year) month 44)))
+                (format " (%s)" (calendar-chinese-sexagesimal-name
+                                 (+ (* 12 year) month 50)))
               "")
-            day (calendar-chinese-sexagisimal-name (+ a-date 15)))))
+            day (calendar-chinese-sexagesimal-name (+ a-date 15)))))
 
-(defun calendar-chinese-sexagisimal-name (n)
-  "The N-th name of the Chinese sexagisimal cycle.
+(defun calendar-chinese-sexagesimal-name (n)
+  "The N-th name of the Chinese sexagesimal cycle.
 N congruent to 1 gives the first name, N congruent to 2 gives the second name,
 ..., N congruent to 60 gives the sixtieth name."
   (format "%s-%s"
@@ -449,6 +499,7 @@ Echo Chinese date unless NOECHO is t."
   "Chinese calendar equivalent of date diary entry."
   (format "Chinese date: %s" (calendar-chinese-date-string date)))
 
-(provide 'cal-chinese)
+(provide 'cal-china)
 
-;;; cal-chinese ends here
+;;; arch-tag: 7e5b7e0d-676c-47e3-8696-93e7ea0ab644
+;;; cal-china.el ends here