annotate lisp/calendar/cal-china.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents cbd4013c57ab
children 7a94f1c588c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14685
496342156d13 Renamed from cal-chinese.el to avoid 14-character limitation.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
1 ;;; cal-china.el --- calendar functions for the Chinese calendar.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
2
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 20215
diff changeset
3 ;; Copyright (C) 1995, 1997 Free Software Foundation, Inc.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
4
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
5 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
6 ;; Keywords: calendar
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
7 ;; Human-Keywords: Chinese calendar, calendar, holidays, diary
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
8
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
10
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
14 ;; any later version.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
15
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
19 ;; GNU General Public License for more details.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
20
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13675
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13675
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13675
diff changeset
24 ;; Boston, MA 02111-1307, USA.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
25
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
26 ;;; Commentary:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
27
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
28 ;; This collection of functions implements the features of calendar.el,
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
29 ;; diary.el, and holidays.el that deal with the Chinese calendar. The rules
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
30 ;; used for the Chinese calendar are those of Baolin Liu (see L. E. Doggett's
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
31 ;; article "Calendars" in the Explanatory Supplement to the Astronomical
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
32 ;; Almanac, second edition, 1992) for the calendar as revised at the beginning
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
33 ;; of the Qing dynasty in 1644. The nature of the astronomical calculations
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
34 ;; is such that precise calculations cannot be made without great expense in
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
35 ;; time, so that the calendars produced may not agree perfectly with published
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
36 ;; tables--but no two pairs of published tables agree perfectly either! Liu's
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
37 ;; rules produce a calendar for 2033 which is not accepted by all authorities.
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
38 ;; The date of Chinese New Year is correct from 1644-2051.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
39
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 20215
diff changeset
40 ;; Technical details of all the calendrical calculations can be found in
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 20215
diff changeset
41 ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 20215
diff changeset
42 ;; Cambridge University Press (1997).
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 20215
diff changeset
43
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
44 ;; Comments, corrections, and improvements should be sent to
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
45 ;; Edward M. Reingold Department of Computer Science
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
46 ;; (217) 333-6733 University of Illinois at Urbana-Champaign
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
47 ;; reingold@cs.uiuc.edu 1304 West Springfield Avenue
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
48 ;; Urbana, Illinois 61801
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
49
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
50 ;;; Code:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
51
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
52 (require 'lunar)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
53
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
54 (defvar chinese-calendar-celestial-stem
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
55 ["Jia" "Yi" "Bing" "Ding" "Wu" "Ji" "Geng" "Xin" "Ren" "Gui"])
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
56
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
57 (defvar chinese-calendar-terrestrial-branch
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
58 ["Zi" "Chou" "Yin" "Mao" "Chen" "Si" "Wu" "Wei" "Shen" "You" "Xu" "Hai"])
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
59
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
60 (defcustom chinese-calendar-time-zone
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
61 '(if (< year 1928)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
62 (+ 465 (/ 40.0 60.0))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
63 480)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
64 "*Number of minutes difference between local standard time for Chinese
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
65 calendar and Coordinated Universal (Greenwich) Time. Default is for Beijing.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
66 This is an expression in `year' since it changed at 1928-01-01 00:00:00 from
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
67 UT+7:45:40 to UT+8."
19903
bfd7fbd77e8a (chinese-calendar-time-zone): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 17624
diff changeset
68 :type 'sexp
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
69 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
70
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
71 (defcustom chinese-calendar-location-name "Beijing"
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
72 "*Name of location used for calculation of Chinese calendar."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
73 :type 'string
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
74 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
75
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
76 (defcustom chinese-calendar-daylight-time-offset 0
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
77 ; The correct value is as follows, but the Chinese calendrical
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
78 ; authorities do NOT use DST in determining astronomical events:
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
79 ; 60
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
80 "*Number of minutes difference between daylight savings and standard time
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
81 for Chinese calendar. Default is for no daylight savings time."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
82 :type 'integer
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
83 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
84
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
85 (defcustom chinese-calendar-standard-time-zone-name
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
86 '(if (< year 1928)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
87 "PMT"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
88 "CST")
19903
bfd7fbd77e8a (chinese-calendar-time-zone): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 17624
diff changeset
89 "*Abbreviated name of standard time zone used for Chinese calendar.
bfd7fbd77e8a (chinese-calendar-time-zone): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 17624
diff changeset
90 This is an expression depending on `year' because it changed
bfd7fbd77e8a (chinese-calendar-time-zone): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 17624
diff changeset
91 at 1928-01-01 00:00:00 from `PMT' to `CST'."
bfd7fbd77e8a (chinese-calendar-time-zone): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 17624
diff changeset
92 :type 'sexp
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
93 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
94
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
95 (defcustom chinese-calendar-daylight-time-zone-name "CDT"
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
96 "*Abbreviated name of daylight-savings time zone used for Chinese calendar."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
97 :type 'string
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
98 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
99
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
100 (defcustom chinese-calendar-daylight-savings-starts nil
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
101 ; The correct value is as follows, but the Chinese calendrical
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
102 ; authorities do NOT use DST in determining astronomical events:
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
103 ; '(cond ((< 1986 year) (calendar-nth-named-day 1 0 4 year 10))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
104 ; ((= 1986 year) '(5 4 1986))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
105 ; (t nil))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
106 "*Sexp giving the date on which daylight savings time starts for Chinese
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
107 calendar. Default is for no daylight savings time. See documentation of
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
108 `calendar-daylight-savings-starts'."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
109 :type 'sexp
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
110 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
111
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
112 (defcustom chinese-calendar-daylight-savings-ends nil
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
113 ; The correct value is as follows, but the Chinese calendrical
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
114 ; authorities do NOT use DST in determining astronomical events:
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
115 ; '(if (<= 1986 year) (calendar-nth-named-day 1 0 9 year 11))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
116 "*Sexp giving the date on which daylight savings time ends for Chinese
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
117 calendar. Default is for no daylight savings time. See documentation of
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
118 `calendar-daylight-savings-ends'."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
119 :type 'sexp
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
120 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
121
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
122 (defcustom chinese-calendar-daylight-savings-starts-time 0
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
123 "*Number of minutes after midnight that daylight savings time starts for
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
124 Chinese calendar. Default is for no daylight savings time."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
125 :type 'integer
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
126 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
127
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
128 (defcustom chinese-calendar-daylight-savings-ends-time 0
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
129 "*Number of minutes after midnight that daylight savings time ends for
17624
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
130 Chinese calendar. Default is for no daylight savings time."
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
131 :type 'integer
7634c31da26e Add defgroup and use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14685
diff changeset
132 :group 'chinese-calendar)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
133
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
134 (defun chinese-zodiac-sign-on-or-after (d)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
135 "Absolute date of first new Zodiac sign on or after absolute date d.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
136 The Zodiac signs begin when the sun's longitude is a multiple of 30 degrees."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
137 (let* ((year (extract-calendar-year
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
138 (calendar-gregorian-from-absolute d)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
139 (calendar-time-zone (eval chinese-calendar-time-zone))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
140 (calendar-daylight-time-offset
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
141 chinese-calendar-daylight-time-offset)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
142 (calendar-standard-time-zone-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
143 chinese-calendar-standard-time-zone-name)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
144 (calendar-daylight-time-zone-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
145 chinese-calendar-daylight-time-zone-name)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
146 (calendar-calendar-daylight-savings-starts
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
147 chinese-calendar-daylight-savings-starts)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
148 (calendar-daylight-savings-ends
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
149 chinese-calendar-daylight-savings-ends)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
150 (calendar-daylight-savings-starts-time
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
151 chinese-calendar-daylight-savings-starts-time)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
152 (calendar-daylight-savings-ends-time
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
153 chinese-calendar-daylight-savings-ends-time))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
154 (floor
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
155 (calendar-absolute-from-astro
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
156 (solar-date-next-longitude
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
157 (calendar-astro-from-absolute d)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
158 30)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
159
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
160 (defun chinese-new-moon-on-or-after (d)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
161 "Absolute date of first new moon on or after absolute date d."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
162 (let* ((year (extract-calendar-year
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
163 (calendar-gregorian-from-absolute d)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
164 (calendar-time-zone (eval chinese-calendar-time-zone))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
165 (calendar-daylight-time-offset
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
166 chinese-calendar-daylight-time-offset)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
167 (calendar-standard-time-zone-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
168 chinese-calendar-standard-time-zone-name)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
169 (calendar-daylight-time-zone-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
170 chinese-calendar-daylight-time-zone-name)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
171 (calendar-calendar-daylight-savings-starts
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
172 chinese-calendar-daylight-savings-starts)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
173 (calendar-daylight-savings-ends
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
174 chinese-calendar-daylight-savings-ends)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
175 (calendar-daylight-savings-starts-time
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
176 chinese-calendar-daylight-savings-starts-time)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
177 (calendar-daylight-savings-ends-time
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
178 chinese-calendar-daylight-savings-ends-time))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
179 (floor
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
180 (calendar-absolute-from-astro
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
181 (lunar-new-moon-on-or-after
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
182 (calendar-astro-from-absolute d))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
183
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
184 (defvar chinese-year-cache
23143
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
185 '((1990 (12 726464) (1 726494) (2 726523) (3 726553) (4 726582) (5 726611)
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
186 (5.5 726641) (6 726670) (7 726699) (8 726729) (9 726758) (10 726788)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
187 (11 726818))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
188 (1991 (12 726848) (1 726878) (2 726907) (3 726937) (4 726966) (5 726995)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
189 (6 727025) (7 727054) (8 727083) (9 727113) (10 727142) (11 727172))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
190 (1992 (12 727202) (1 727232) (2 727261) (3 727291) (4 727321) (5 727350)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
191 (6 727379) (7 727409) (8 727438) (9 727467) (10 727497) (11 727526))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
192 (1993 (12 727556) (1 727586) (2 727615) (3 727645) (3.5 727675) (4 727704)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
193 (5 727734) (6 727763) (7 727793) (8 727822) (9 727851) (10 727881)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
194 (11 727910))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
195 (1994 (12 727940) (1 727969) (2 727999) (3 728029) (4 728059) (5 728088)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
196 (6 728118) (7 728147) (8 728177) (9 728206) (10 728235) (11 728265))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
197 (1995 (12 728294) (1 728324) (2 728353) (3 728383) (4 728413) (5 728442)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
198 (6 728472) (7 728501) (8 728531) (8.5 728561) (9 728590) (10 728619)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
199 (11 728649))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
200 (1996 (12 728678) (1 728708) (2 728737) (3 728767) (4 728796) (5 728826)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
201 (6 728856) (7 728885) (8 728915) (9 728944) (10 728974) (11 729004))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
202 (1997 (12 729033) (1 729062) (2 729092) (3 729121) (4 729151) (5 729180)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
203 (6 729210) (7 729239) (8 729269) (9 729299) (10 729328) (11 729358))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
204 (1998 (12 729388) (1 729417) (2 729447) (3 729476) (4 729505) (5 729535)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
205 (5.5 729564) (6 729593) (7 729623) (8 729653) (9 729682) (10 729712)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
206 (11 729742))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
207 (1999 (12 729771) (1 729801) (2 729831) (3 729860) (4 729889) (5 729919)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
208 (6 729948) (7 729977) (8 730007) (9 730036) (10 730066) (11 730096))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
209 (2000 (12 730126) (1 730155) (2 730185) (3 730215) (4 730244) (5 730273)
23143
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
210 (6 730303) (7 730332) (8 730361) (9 730391) (10 730420) (11 730450))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
211 (2001 (12 730480) (1 730509) (2 730539) (3 730569) (4 730598) (4.5 730628)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
212 (5 730657) (6 730687) (7 730716) (8 730745) (9 730775) (10 730804)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
213 (11 730834))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
214 (2002 (12 730863) (1 730893) (2 730923) (3 730953) (4 730982) (5 731012)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
215 (6 731041) (7 731071) (8 731100) (9 731129) (10 731159) (11 731188))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
216 (2003 (12 731218) (1 731247) (2 731277) (3 731307) (4 731336) (5 731366)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
217 (6 731396) (7 731425) (8 731455) (9 731484) (10 731513) (11 731543))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
218 (2004 (12 731572) (1 731602) (2 731631) (2.5 731661) (3 731690) (4 731720)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
219 (5 731750) (6 731779) (7 731809) (8 731838) (9 731868) (10 731897)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
220 (11 731927))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
221 (2005 (12 731956) (1 731986) (2 732015) (3 732045) (4 732074) (5 732104)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
222 (6 732133) (7 732163) (8 732193) (9 732222) (10 732252) (11 732281))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
223 (2006 (12 732311) (1 732340) (2 732370) (3 732399) (4 732429) (5 732458)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
224 (6 732488) (7 732517) (7.5 732547) (8 732576) (9 732606) (10 732636)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
225 (11 732665))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
226 (2007 (12 732695) (1 732725) (2 732754) (3 732783) (4 732813) (5 732842)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
227 (6 732871) (7 732901) (8 732930) (9 732960) (10 732990) (11 733020))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
228 (2008 (12 733049) (1 733079) (2 733109) (3 733138) (4 733167) (5 733197)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
229 (6 733226) (7 733255) (8 733285) (9 733314) (10 733344) (11 733374))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
230 (2009 (12 733403) (1 733433) (2 733463) (3 733493) (4 733522) (5 733551)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
231 (5.5 733581) (6 733610) (7 733639) (8 733669) (9 733698) (10 733728)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
232 (11 733757))
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
233 (2010 (12 733787) (1 733817) (2 733847) (3 733876) (4 733906) (5 733935)
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
234 (6 733965) (7 733994) (8 734023) (9 734053) (10 734082) (11 734112)))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
235 "An assoc list of Chinese year structures as determined by `chinese-year'.
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
236
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
237 Values are computed as needed, but to save time, the initial value consists
23143
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
238 of the precomputed years 1990-2010. The code works just as well with this
cbd4013c57ab (chinese-year-cache): Change range of years from
Karl Heuer <kwzh@gnu.org>
parents: 20462
diff changeset
239 set to nil initially (which is how the value for 1990-2010 was computed).")
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
240
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
241 (defun chinese-year (y)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
242 "The structure of the Chinese year for Gregorian year Y.
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
243 The result is a list of pairs (i d), where month i begins on absolute date d,
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
244 of the Chinese months from the Chinese month following the solstice in
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
245 Gregorian year Y-1 to the Chinese month of the solstice of Gregorian year Y.
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
246
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
247 The list is cached for further use."
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
248 (let ((list (cdr (assoc y chinese-year-cache))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
249 (if (not list)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
250 (progn
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
251 (setq list (compute-chinese-year y))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
252 (setq chinese-year-cache
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
253 (append chinese-year-cache (list (cons y list))))))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
254 list))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
255
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
256 (defun number-chinese-months (list start)
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
257 "Assign month numbers to the lunar months in LIST, starting with START.
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
258 Numbers are assigned sequentially, START, START+1, ..., 11, with half
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
259 numbers used for leap months.
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
260
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
261 First month of list will never be a leap month, nor will the last."
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
262 (if list
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
263 (if (zerop (- 12 start (length list)))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
264 ;; List is too short for a leap month
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
265 (cons (list start (car list))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
266 (number-chinese-months (cdr list) (1+ start)))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
267 (cons
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
268 ;; First month
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
269 (list start (car list))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
270 ;; Remaining months
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
271 (if (and (cdr (cdr list));; at least two more months...
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
272 (<= (car (cdr (cdr list)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
273 (chinese-zodiac-sign-on-or-after (car (cdr list)))))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
274 ;; Next month is a leap month
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
275 (cons (list (+ start 0.5) (car (cdr list)))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
276 (number-chinese-months (cdr (cdr list)) (1+ start)))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
277 ;; Next month is not a leap month
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
278 (number-chinese-months (cdr list) (1+ start)))))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
279
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
280 (defun chinese-month-list (start end)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
281 "List of starting dates of Chinese months from START to END."
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
282 (if (<= start end)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
283 (let ((new-moon (chinese-new-moon-on-or-after start)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
284 (if (<= new-moon end)
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
285 (cons new-moon
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
286 (chinese-month-list (1+ new-moon) end))))))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
287
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
288 (defun compute-chinese-year (y)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
289 "Compute the structure of the Chinese year for Gregorian year Y.
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
290 The result is a list of pairs (i d), where month i begins on absolute date d,
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
291 of the Chinese months from the Chinese month following the solstice in
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
292 Gregorian year Y-1 to the Chinese month of the solstice of Gregorian year Y."
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
293 (let* ((next-solstice (chinese-zodiac-sign-on-or-after
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
294 (calendar-absolute-from-gregorian
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
295 (list 12 15 y))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
296 (list (chinese-month-list (1+ (chinese-zodiac-sign-on-or-after
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
297 (calendar-absolute-from-gregorian
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
298 (list 12 15 (1- y)))))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
299 next-solstice))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
300 (next-sign (chinese-zodiac-sign-on-or-after (car list))))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
301 (if (= (length list) 12)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
302 ;; No room for a leap month, just number them 12, 1, 2, ..., 11
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
303 (cons (list 12 (car list))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
304 (number-chinese-months (cdr list) 1))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
305 ;; Now we can assign numbers to the list for y
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
306 ;; The first month or two are special
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
307 (if (or (> (car list) next-sign) (>= next-sign (car (cdr list))))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
308 ;; First month on list is a leap month, second is not
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
309 (append (list (list 11.5 (car list))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
310 (list 12 (car (cdr list))))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
311 (number-chinese-months (cdr (cdr list)) 1))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
312 ;; First month on list is not a leap month
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
313 (append (list (list 12 (car list)))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
314 (if (>= (chinese-zodiac-sign-on-or-after (car (cdr list)))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
315 (car (cdr (cdr list))))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
316 ;; Second month on list is a leap month
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
317 (cons (list 12.5 (car (cdr list)))
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
318 (number-chinese-months (cdr (cdr list)) 1))
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
319 ;; Second month on list is not a leap month
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
320 (number-chinese-months (cdr list) 1)))))))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
321
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
322 (defun calendar-absolute-from-chinese (date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
323 "The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
324 The Gregorian date Sunday, December 31, 1 BC is imaginary."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
325 (let* ((cycle (car date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
326 (year (car (cdr date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
327 (month (car (cdr (cdr date))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
328 (day (car (cdr (cdr (cdr date)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
329 (g-year (+ (* (1- cycle) 60);; years in prior cycles
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
330 (1- year) ;; prior years this cycle
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
331 -2636))) ;; years before absolute date 0
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
332 (+ (1- day);; prior days this month
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
333 (car
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
334 (cdr ;; absolute date of start of this month
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
335 (assoc month (append (memq (assoc 1 (chinese-year g-year))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
336 (chinese-year g-year))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
337 (chinese-year (1+ g-year)))))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
338
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
339 (defun calendar-chinese-from-absolute (date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
340 "Compute Chinese date (cycle year month day) corresponding to absolute DATE.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
341 The absolute date is the number of days elapsed since the (imaginary)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
342 Gregorian date Sunday, December 31, 1 BC."
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
343 (let* ((g-year (extract-calendar-year
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
344 (calendar-gregorian-from-absolute date)))
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
345 (c-year (+ g-year 2695))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
346 (list (append (chinese-year (1- g-year))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
347 (chinese-year g-year)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
348 (chinese-year (1+ g-year)))))
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
349 (while (<= (car (cdr (car (cdr list)))) date)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
350 ;; the first month on the list is in Chinese year c-year
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
351 ;; date is on or after start of second month on list...
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
352 (if (= 1 (car (car (cdr list))))
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
353 ;; second month on list is a new Chinese year
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
354 (setq c-year (1+ c-year)))
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
355 ;; ...so first month on list is of no interest
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
356 (setq list (cdr list)))
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
357 (list (/ (1- c-year) 60)
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
358 (calendar-mod c-year 60)
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
359 (car (car list))
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
360 (1+ (- date (car (cdr (car list))))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
361
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
362 (defun holiday-chinese-new-year ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
363 "Date of Chinese New Year."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
364 (let ((m displayed-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
365 (y displayed-year))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
366 (increment-calendar-month m y 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
367 (if (< m 5)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
368 (let ((chinese-new-year
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
369 (calendar-gregorian-from-absolute
13574
c5d4269e17d9 Minor fixes.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13306
diff changeset
370 (car (cdr (assoc 1 (chinese-year y)))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
371 (if (calendar-date-is-visible-p chinese-new-year)
13306
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
372 (list
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
373 (list chinese-new-year
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
374 (format "Chinese New Year (%s)"
13675
280cee006df8 (calendar-chinese-sexagesimal-name): Renamed from
Paul Eggert <eggert@twinsun.com>
parents: 13574
diff changeset
375 (calendar-chinese-sexagesimal-name (+ y 57))))))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
376
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
377 (defun calendar-chinese-date-string (&optional date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
378 "String of Chinese date of Gregorian DATE.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
379 Defaults to today's date if DATE is not given."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
380 (let* ((a-date (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
381 (or date (calendar-current-date))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
382 (c-date (calendar-chinese-from-absolute a-date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
383 (cycle (car c-date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
384 (year (car (cdr c-date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
385 (month (car (cdr (cdr c-date))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
386 (day (car (cdr (cdr (cdr c-date)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
387 (this-month (calendar-absolute-from-chinese
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
388 (list cycle year month 1)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
389 (next-month (calendar-absolute-from-chinese
13283
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
390 (list (if (= year 60) (1+ cycle) cycle)
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
391 (if (= (floor month) 12) (1+ year) year)
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
392 (calendar-mod (1+ (floor month)) 12)
f8658d1ca0f2 Various fixes and simplifications.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13281
diff changeset
393 1)))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
394 (m-cycle (% (+ (* year 5) (floor month)) 60)))
13306
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
395 (format "Cycle %s, year %s (%s), %smonth %s%s, day %s (%s)"
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
396 cycle
13675
280cee006df8 (calendar-chinese-sexagesimal-name): Renamed from
Paul Eggert <eggert@twinsun.com>
parents: 13574
diff changeset
397 year (calendar-chinese-sexagesimal-name year)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
398 (if (not (integerp month))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
399 "second "
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
400 (if (< 30 (- next-month this-month))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
401 "first "
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
402 ""))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
403 (floor month)
13306
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
404 (if (integerp month)
13675
280cee006df8 (calendar-chinese-sexagesimal-name): Renamed from
Paul Eggert <eggert@twinsun.com>
parents: 13574
diff changeset
405 (format " (%s)" (calendar-chinese-sexagesimal-name
20215
13b173216a3d (calendar-chinese-date-string): Fix month name.
Karl Heuer <kwzh@gnu.org>
parents: 19903
diff changeset
406 (+ (* 12 year) month 50)))
13306
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
407 "")
13675
280cee006df8 (calendar-chinese-sexagesimal-name): Renamed from
Paul Eggert <eggert@twinsun.com>
parents: 13574
diff changeset
408 day (calendar-chinese-sexagesimal-name (+ a-date 15)))))
13306
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
409
13675
280cee006df8 (calendar-chinese-sexagesimal-name): Renamed from
Paul Eggert <eggert@twinsun.com>
parents: 13574
diff changeset
410 (defun calendar-chinese-sexagesimal-name (n)
280cee006df8 (calendar-chinese-sexagesimal-name): Renamed from
Paul Eggert <eggert@twinsun.com>
parents: 13574
diff changeset
411 "The N-th name of the Chinese sexagesimal cycle.
13306
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
412 N congruent to 1 gives the first name, N congruent to 2 gives the second name,
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
413 ..., N congruent to 60 gives the sixtieth name."
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
414 (format "%s-%s"
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
415 (aref chinese-calendar-celestial-stem (% (1- n) 10))
77d8e407592e Fix the way the sexagisimal names are calculated.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13284
diff changeset
416 (aref chinese-calendar-terrestrial-branch (% (1- n) 12))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
417
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
418 (defun calendar-print-chinese-date ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
419 "Show the Chinese date equivalents of date."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
420 (interactive)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
421 (message "Computing Chinese date...")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
422 (message "Chinese date: %s"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
423 (calendar-chinese-date-string (calendar-cursor-to-date t))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
424
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
425 (defun calendar-goto-chinese-date (date &optional noecho)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
426 "Move cursor to Chinese date DATE.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
427 Echo Chinese date unless NOECHO is t."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
428 (interactive
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
429 (let* ((c (calendar-chinese-from-absolute
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
430 (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
431 (calendar-current-date))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
432 (cycle (calendar-read
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
433 "Chinese calendar cycle number (>44): "
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
434 '(lambda (x) (> x 44))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
435 (int-to-string (car c))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
436 (year (calendar-read
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
437 "Year in Chinese cycle (1..60): "
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
438 '(lambda (x) (and (<= 1 x) (<= x 60)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
439 (int-to-string (car (cdr c)))))
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
440 (month-list (make-chinese-month-assoc-list
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
441 (chinese-months cycle year)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
442 (month (cdr (assoc
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
443 (completing-read "Chinese calendar month: "
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
444 month-list nil t)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
445 month-list)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
446 (last (if (= month
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
447 (car (cdr (cdr
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
448 (calendar-chinese-from-absolute
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
449 (+ 29
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
450 (calendar-absolute-from-chinese
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
451 (list cycle year month 1))))))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
452 30
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
453 29))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
454 (day (calendar-read
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
455 (format "Chinese calendar day (1-%d): " last)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
456 '(lambda (x) (and (<= 1 x) (<= x last))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
457 (list (list cycle year month day))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
458 (calendar-goto-date (calendar-gregorian-from-absolute
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
459 (calendar-absolute-from-chinese date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
460 (or noecho (calendar-print-chinese-date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
461
13281
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
462 (defun chinese-months (c y)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
463 "A list of the months in cycle C, year Y of the Chinese calendar."
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
464 (let* ((l (memq 1 (append
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
465 (mapcar '(lambda (x)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
466 (car x))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
467 (chinese-year (extract-calendar-year
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
468 (calendar-gregorian-from-absolute
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
469 (calendar-absolute-from-chinese
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
470 (list c y 1 1))))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
471 (mapcar '(lambda (x)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
472 (if (> (car x) 11) (car x)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
473 (chinese-year (extract-calendar-year
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
474 (calendar-gregorian-from-absolute
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
475 (calendar-absolute-from-chinese
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
476 (list (if (= y 60) (1+ c) c)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
477 (if (= y 60) 1 y)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
478 1 1))))))))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
479 l))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
480
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
481 (defun make-chinese-month-assoc-list (l)
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
482 "Make list of months L into an assoc list."
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
483 (if (and l (car l))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
484 (if (and (cdr l) (car (cdr l)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
485 (if (= (car l) (floor (car (cdr l))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
486 (append
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
487 (list (cons (format "%s (first)" (car l)) (car l))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
488 (cons (format "%s (second)" (car l)) (car (cdr l))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
489 (make-chinese-month-assoc-list (cdr (cdr l))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
490 (append
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
491 (list (cons (int-to-string (car l)) (car l)))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
492 (make-chinese-month-assoc-list (cdr l))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
493 (list (cons (int-to-string (car l)) (car l))))))
510f946d1e22 Completely rewritten!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13053
diff changeset
494
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
495 (defun diary-chinese-date ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
496 "Chinese calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
497 (format "Chinese date: %s" (calendar-chinese-date-string date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
498
14685
496342156d13 Renamed from cal-chinese.el to avoid 14-character limitation.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
499 (provide 'cal-china)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
500
14685
496342156d13 Renamed from cal-chinese.el to avoid 14-character limitation.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
501 ;;; cal-china.el ends here