git: calendar(1): Rewrite to support Chinese & Julian calendars
Aaron LI
aly at crater.dragonflybsd.org
Fri Sep 4 09:22:15 PDT 2020
commit d19ef5a274debcb71f2e8cd8dce8b954dc73944b
Author: Aaron LI <aly at aaronly.me>
Date: Sun Aug 2 22:17:59 2020 +0800
calendar(1): Rewrite to support Chinese & Julian calendars
I wanted to use Chinese calendar in the calendar(1) utility, so I started
working on it. The Chinese calendar is a lunisolar calendar and requires
calculations of Sun and Moon positions. Along the way of implementing the
Chinese calendar support, more and more parts of the old code has been
replaced. Now, the new calendar(1) code base has been mostly rewritten to
be more extensible to support multiple calendars. Although only the
Gregorian (the default), Chinese and Julian calendars are currently
supported, more calendars now becomes much easier to add.
Highlights:
* Support Chinese calendar
* Support Julian calendar
* More accurate Sun and Moon calculations
* More extensible
* More calendar files/entries and more accurate information
* Better code base
Major Changes:
* If no user's calendar file, default to '/etc/calendar/default'
* Search calendar files in '/etc/calendar', which allows to override the
calendar file in '/usr/share/calendar' in a system-wide way
* Add '-s' option to show information of Chinese/Julian calendar or
Sun/Moon
* Add '-H' option to specify the calendar home directory
* Add '-L' option to specify the location, which should be set to get
accurate Sun/Moon information
* Add '-T' option to specify the current time for Sun/Moon calculations
* Much Improved calendar file parser
* More clean man page
* More helpful error messages
* Some bug fixes and various cleanups
The new calendar algorithms are implemented by referring to this great
book:
Calendrical Calculations: The Ultimate Edition (4th Edition)
by Edward M. Reingold and Nachum Dershowitz.
Cambridge University Press, 2018.
ISBN: 9781107057623
More information about the development history of this calendar(1) utility
can be found in my GitHub repository:
https://github.com/liweitianux/ccalendar
Summary of changes:
etc/Makefile | 2 +
etc/calendar/Makefile | 8 +
etc/calendar/default | 18 +
etc/mtree/BSD.root.dist | 2 +
etc/mtree/BSD.usr.dist | 4 +
usr.bin/calendar/Makefile | 41 +-
usr.bin/calendar/basics.c | 421 ++++++
usr.bin/calendar/basics.h | 101 ++
usr.bin/calendar/calendar.1 | 354 -----
usr.bin/calendar/calendar.1.in | 565 ++++++++
usr.bin/calendar/calendar.c | 569 ++++++--
usr.bin/calendar/calendar.h | 208 +--
usr.bin/calendar/calendars/calendar.all | 1 +
usr.bin/calendar/calendars/calendar.birthday | 14 +-
usr.bin/calendar/calendars/calendar.canada | 3 +-
usr.bin/calendar/calendars/calendar.chinese | 11 +
usr.bin/calendar/calendars/calendar.christian | 45 +-
usr.bin/calendar/calendars/calendar.dragonfly | 88 +-
usr.bin/calendar/calendars/calendar.dutch | 80 +-
usr.bin/calendar/calendars/calendar.fictional | 2 +-
usr.bin/calendar/calendars/calendar.history | 289 +---
usr.bin/calendar/calendars/calendar.holiday | 21 +-
usr.bin/calendar/calendars/calendar.misc | 23 +
usr.bin/calendar/calendars/calendar.music | 16 +-
usr.bin/calendar/calendars/calendar.orthodox | 53 +
usr.bin/calendar/calendars/calendar.uk | 2 +-
usr.bin/calendar/calendars/calendar.ushistory | 67 +-
usr.bin/calendar/calendars/calendar.world | 2 +
.../calendars/de_AT.UTF-8/calendar.feiertag | 4 +-
.../calendars/de_DE.UTF-8/calendar.feiertag | 4 +-
.../calendars/de_DE.UTF-8/calendar.geschichte | 9 +-
.../calendar/calendars/fr_FR.UTF-8/calendar.fetes | 15 +-
.../calendars/hu_HU.UTF-8/calendar.nevnapok | 10 +-
.../calendars/hu_HU.UTF-8/calendar.unnepek | 4 +-
.../calendars/pt_BR.UTF-8/calendar.mcommemorative | 2 +-
.../calendars/ru_RU.UTF-8/calendar.orthodox | 24 +-
.../calendars/ru_RU.UTF-8/calendar.primety | 13 +-
.../calendars/uk_UA.UTF-8/calendar.holiday | 16 +-
.../calendar/calendars/uk_UA.UTF-8/calendar.misc | 4 +-
.../calendars/uk_UA.UTF-8/calendar.orthodox | 29 +-
.../calendars/zh_Hans_CN.UTF-8/calendar.all | 11 +
.../calendars/zh_Hans_CN.UTF-8/calendar.chinese | 34 +
.../calendars/zh_Hans_CN.UTF-8/calendar.gregorian | 38 +
.../calendars/zh_Hant_TW.UTF-8/calendar.all | 11 +
.../calendars/zh_Hant_TW.UTF-8/calendar.chinese | 39 +
.../calendars/zh_Hant_TW.UTF-8/calendar.gregorian | 41 +
usr.bin/calendar/chinese.c | 572 ++++++++
usr.bin/calendar/chinese.h | 75 +
usr.bin/calendar/dates.c | 537 +++----
usr.bin/calendar/{ostern.c => dates.h} | 62 +-
usr.bin/calendar/days.c | 448 ++++++
usr.bin/calendar/days.h | 79 +
usr.bin/calendar/ecclesiastical.c | 109 ++
usr.bin/calendar/ecclesiastical.h | 44 +
usr.bin/calendar/events.c | 120 --
usr.bin/calendar/gregorian.c | 165 +++
usr.bin/calendar/gregorian.h | 52 +
usr.bin/calendar/io.c | 858 ++++++-----
usr.bin/calendar/{paskha.c => io.h} | 68 +-
usr.bin/calendar/julian.c | 281 ++++
usr.bin/calendar/julian.h | 55 +
usr.bin/calendar/locale.c | 165 ---
usr.bin/calendar/moon.c | 922 ++++++++++++
usr.bin/calendar/moon.h | 62 +
usr.bin/calendar/nnames.c | 174 +++
usr.bin/calendar/{day.c => nnames.h} | 101 +-
usr.bin/calendar/parsedata.c | 1527 ++++++++------------
usr.bin/calendar/parsedata.h | 65 +
usr.bin/calendar/pom.c | 259 ----
usr.bin/calendar/sun.c | 415 ++++++
usr.bin/calendar/sun.h | 58 +
usr.bin/calendar/sunpos.c | 445 ------
usr.bin/calendar/utils.c | 214 +++
usr.bin/calendar/utils.h | 271 ++++
74 files changed, 7683 insertions(+), 3838 deletions(-)
create mode 100644 etc/calendar/Makefile
create mode 100644 etc/calendar/default
create mode 100644 usr.bin/calendar/basics.c
create mode 100644 usr.bin/calendar/basics.h
delete mode 100644 usr.bin/calendar/calendar.1
create mode 100644 usr.bin/calendar/calendar.1.in
create mode 100644 usr.bin/calendar/calendars/calendar.chinese
create mode 100644 usr.bin/calendar/calendars/calendar.misc
create mode 100644 usr.bin/calendar/calendars/calendar.orthodox
create mode 100644 usr.bin/calendar/calendars/zh_Hans_CN.UTF-8/calendar.all
create mode 100644 usr.bin/calendar/calendars/zh_Hans_CN.UTF-8/calendar.chinese
create mode 100644 usr.bin/calendar/calendars/zh_Hans_CN.UTF-8/calendar.gregorian
create mode 100644 usr.bin/calendar/calendars/zh_Hant_TW.UTF-8/calendar.all
create mode 100644 usr.bin/calendar/calendars/zh_Hant_TW.UTF-8/calendar.chinese
create mode 100644 usr.bin/calendar/calendars/zh_Hant_TW.UTF-8/calendar.gregorian
create mode 100644 usr.bin/calendar/chinese.c
create mode 100644 usr.bin/calendar/chinese.h
rename usr.bin/calendar/{ostern.c => dates.h} (56%)
create mode 100644 usr.bin/calendar/days.c
create mode 100644 usr.bin/calendar/days.h
create mode 100644 usr.bin/calendar/ecclesiastical.c
create mode 100644 usr.bin/calendar/ecclesiastical.h
delete mode 100644 usr.bin/calendar/events.c
create mode 100644 usr.bin/calendar/gregorian.c
create mode 100644 usr.bin/calendar/gregorian.h
rename usr.bin/calendar/{paskha.c => io.h} (55%)
create mode 100644 usr.bin/calendar/julian.c
create mode 100644 usr.bin/calendar/julian.h
delete mode 100644 usr.bin/calendar/locale.c
create mode 100644 usr.bin/calendar/moon.c
create mode 100644 usr.bin/calendar/moon.h
create mode 100644 usr.bin/calendar/nnames.c
rename usr.bin/calendar/{day.c => nnames.h} (51%)
create mode 100644 usr.bin/calendar/parsedata.h
delete mode 100644 usr.bin/calendar/pom.c
create mode 100644 usr.bin/calendar/sun.c
create mode 100644 usr.bin/calendar/sun.h
delete mode 100644 usr.bin/calendar/sunpos.c
create mode 100644 usr.bin/calendar/utils.c
create mode 100644 usr.bin/calendar/utils.h
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/d19ef5a274debcb71f2e8cd8dce8b954dc73944b
--
DragonFly BSD source repository
More information about the Commits
mailing list