/*
calendarmodule.c: Copyright (C) 1997-2002 Tadayoshi Funaba All rights reserved
$Id: calendarmodule.c,v 1.12 2002-06-08 01:13:55+09 tadf Exp $
*/
#include "ruby.h"
#include "calendar.h"
#include "calendar2.h"
#include "qref.h"
#define INT2BOOL(x) ((x) ? Qtrue : Qfalse)
#define BOOL2INT(x) (RTEST(x) ? 1 : 0)
#define CHECK_RANGE(v, m) \
{ \
if ((v) < (m)) \
rb_raise(rb_eArgError, "out of range"); \
}
#define CHECK_DOMAIN(v, m) \
{ \
if ((v) < (m)) \
rb_raise(rb_eArgError, "out of domain");\
}
#define CHECK_DOMAIN2(v, m, n) \
{ \
if ((v) < (m) || (v) > (n)) \
rb_raise(rb_eArgError, "out of domain");\
}
static VALUE
calendar_gregorian_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = gregorian_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_gregorian_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = gregorian_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_gregorian(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_gregorian(im, imd, iy);
CHECK_RANGE(a, 1);
gregorian_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_gregorian_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
gregorian_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_Kday_on_or_before(VALUE obj, VALUE a, VALUE k)
{
int ia, ik, b;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
ik = NUM2INT(k); CHECK_DOMAIN2(ik, 0, 6);
b = Kday_on_or_before(ia, NUM2INT(k));
CHECK_RANGE(b, 1);
return INT2NUM(b);
}
static VALUE
calendar_absolute_from_iso(VALUE obj, VALUE w, VALUE wd, VALUE y)
{
int iw, iwd, iy, a, iw2, iwd2, iy2;
iw = NUM2INT(w); CHECK_DOMAIN2(iw, 1, 53);
iwd = NUM2INT(wd); CHECK_DOMAIN2(iwd, 1, 7);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_iso(iw, iwd, iy);
CHECK_RANGE(a, 1);
iso_from_absolute(a, &iw2, &iwd2, &iy2);
if (iw != iw2 || iwd != iwd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_iso_from_absolute(VALUE obj, VALUE a)
{
int ia, w, wd, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
iso_from_absolute(ia, &w, &wd, &y);
return rb_ary_new3(3, INT2NUM(w), INT2NUM(wd), INT2NUM(y));
}
static VALUE
calendar_julian_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = julian_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_julian_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = julian_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_julian(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_julian(im, imd, iy);
CHECK_RANGE(a, 1);
julian_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_julian_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
julian_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_islamic_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = islamic_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_islamic_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = islamic_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_islamic(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_islamic(im, imd, iy);
CHECK_RANGE(a, 1); /* 227015 */
islamic_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_islamic_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 227015);
islamic_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_hebrew_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 3761);
l = hebrew_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_last_month_of_hebrew_year(VALUE obj, VALUE y)
{
int iy, m;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
m = last_month_of_hebrew_year(iy);
return INT2NUM(m);
}
static VALUE
calendar_hebrew_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = hebrew_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_hebrew_calendar_elapsed_days(VALUE obj, VALUE y)
{
int iy, d;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
d = hebrew_calendar_elapsed_days(iy);
return INT2NUM(d);
}
static VALUE
calendar_days_in_hebrew_year(VALUE obj, VALUE y)
{
int iy, d;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
d = days_in_hebrew_year(iy);
return INT2NUM(d);
}
static VALUE
calendar_long_heshvan(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = long_heshvan(iy);
return INT2BOOL(l);
}
static VALUE
calendar_short_kislev(VALUE obj, VALUE y)
{
int iy, s;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
s = short_kislev(iy);
return INT2BOOL(s);
}
static VALUE
calendar_absolute_from_hebrew(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_hebrew(im, imd, iy);
CHECK_RANGE(a, 1);
hebrew_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_hebrew_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
hebrew_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_Nth_Kday(VALUE obj, VALUE n, VALUE k, VALUE m, VALUE y)
{
int in, ik, im, iy, b;
in = NUM2INT(n);
if (in < -5 || in == 0 || in > 5)
rb_raise(rb_eArgError, "out of range");
ik = NUM2INT(k); CHECK_DOMAIN2(ik, 0, 6);
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
b = Nth_Kday(in, ik, im, iy);
CHECK_RANGE(b, 1);
return INT2NUM(b);
}
static VALUE
calendar_nicaean_rule_easter(VALUE obj, VALUE y)
{
int iy, a;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = nicaean_rule_easter(iy);
CHECK_RANGE(a, 1);
return INT2NUM(a);
}
static VALUE
calendar_easter(VALUE obj, VALUE y)
{
int iy, a;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = easter(iy);
CHECK_RANGE(a, 1);
return INT2NUM(a);
}
static VALUE
calendar_absolute_from_mayan_long_count
(VALUE obj, VALUE bt, VALUE kt, VALUE t, VALUE u, VALUE k)
{
int ibt, ikt, it, iu, ik, a, ibt2, ikt2, it2, iu2, ik2;
ibt = NUM2INT(bt); CHECK_DOMAIN2(ibt, 0, 19);
ikt = NUM2INT(kt); CHECK_DOMAIN2(ikt, 0, 19);
it = NUM2INT(t); CHECK_DOMAIN2(it, 0, 19);
iu = NUM2INT(u); CHECK_DOMAIN2(iu, 0, 17);
ik = NUM2INT(k); CHECK_DOMAIN2(ik, 0, 19);
a = absolute_from_mayan_long_count(ibt, ikt, it, iu, ik);
CHECK_RANGE(a, 1);
mayan_long_count_from_absolute(a, &ibt2, &ikt2, &it2, &iu2, &ik2);
if (ibt != ibt2 || ikt != ikt2 || it != it2 || iu != iu2 || ik != ik2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_mayan_long_count_from_absolute(VALUE obj, VALUE a)
{
int ia, bt, kt, t, u, k;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
mayan_long_count_from_absolute(ia, &bt, &kt, &t, &u, &k);
return rb_ary_new3
(5, INT2NUM(bt), INT2NUM(kt), INT2NUM(t), INT2NUM(u), INT2NUM(k));
}
static VALUE
calendar_mayan_haab_from_absolute(VALUE obj, VALUE a)
{
int ia, md, m;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
mayan_haab_from_absolute(ia, &md, &m);
return rb_ary_new3(2, INT2NUM(md), INT2NUM(m));
}
static VALUE
calendar_mayan_haab_difference
(VALUE obj, VALUE md1, VALUE m1, VALUE md2, VALUE m2)
{
int imd1, im1, imd2, im2, d;
imd1 = NUM2INT(md1); CHECK_DOMAIN2(imd1, 0, 19);
im1 = NUM2INT(m1); CHECK_DOMAIN2(im1, 1, 19);
imd2 = NUM2INT(md2); CHECK_DOMAIN2(imd2, 0, 19);
im2 = NUM2INT(m2); CHECK_DOMAIN2(im2, 1, 19);
d = mayan_haab_difference(imd1, im1, imd2, im2);
return INT2NUM(d);
}
static VALUE
calendar_mayan_haab_on_or_before(VALUE obj, VALUE md, VALUE m, VALUE a)
{
int imd, im, ia, d;
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 0, 19);
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 19);
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
d = mayan_haab_on_or_before(imd, im, ia);
CHECK_RANGE(d, 1);
return INT2NUM(d);
}
static VALUE
calendar_mayan_tzolkin_from_absolute(VALUE obj, VALUE a)
{
int ia, nu, na;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
mayan_tzolkin_from_absolute(ia, &nu, &na);
return rb_ary_new3(2, INT2NUM(nu), INT2NUM(na));
}
static VALUE
calendar_mayan_tzolkin_difference
(VALUE obj, VALUE nu1, VALUE na1, VALUE nu2, VALUE na2)
{
int inu1, ina1, inu2, ina2, d;
inu1 = NUM2INT(nu1); CHECK_DOMAIN2(inu1, 1, 13);
ina1 = NUM2INT(na1); CHECK_DOMAIN2(ina1, 1, 20);
inu2 = NUM2INT(nu1); CHECK_DOMAIN2(inu2, 1, 13);
ina2 = NUM2INT(na2); CHECK_DOMAIN2(ina2, 1, 20);
d = mayan_tzolkin_difference(inu1, ina1, inu2, ina2);
return INT2NUM(d);
}
static VALUE
calendar_mayan_tzolkin_on_or_before(VALUE obj, VALUE nu, VALUE na, VALUE a)
{
int inu, ina, ia, d;
inu = NUM2INT(nu); CHECK_DOMAIN2(inu, 1, 13);
ina = NUM2INT(na); CHECK_DOMAIN2(ina, 1, 20);
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
d = mayan_tzolkin_on_or_before(inu, ina, ia);
CHECK_RANGE(d, 1);
return INT2NUM(d);
}
static VALUE
calendar_mayan_haab_tzolkin_on_or_before
(VALUE obj, VALUE md, VALUE m, VALUE nu, VALUE na, VALUE a)
{
int imd, im, inu, ina, ia, d;
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 0, 19);
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 19);
inu = NUM2INT(nu); CHECK_DOMAIN2(inu, 1, 13);
ina = NUM2INT(na); CHECK_DOMAIN2(ina, 1, 20);
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
d = mayan_haab_tzolkin_on_or_before(imd, im, inu, ina, ia);
CHECK_RANGE(d, 1);
return INT2NUM(d);
}
static VALUE
calendar_french_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = french_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_french_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = french_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_absolute_from_french(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_french(im, imd, iy);
CHECK_RANGE(a, 1); /* 654415 */
french_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_french_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 654415);
french_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static double
getfloat(VALUE x)
{
if (TYPE(x) == T_FLOAT)
return RFLOAT(x)->value;
return (double)NUM2INT(x);
}
static VALUE
calendar_solar_longitude(VALUE obj, VALUE d)
{
double l;
l = solar_longitude(getfloat(d));
return rb_float_new(l);
}
static VALUE
calendar_zodiac(VALUE obj, VALUE d)
{
double l;
l = zodiac(getfloat(d));
return rb_float_new(l);
}
static VALUE
calendar_old_hindu_solar_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
old_hindu_solar_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_absolute_from_old_hindu_solar(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_old_hindu_solar(im, imd, iy);
CHECK_RANGE(a, 1);
old_hindu_solar_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_lunar_longitude(VALUE obj, VALUE d)
{
double l;
l = lunar_longitude(getfloat(d));
return rb_float_new(l);
}
static VALUE
calendar_lunar_phase(VALUE obj, VALUE d)
{
double p;
p = lunar_phase(getfloat(d));
return rb_float_new(p);
}
static VALUE
calendar_new_moon(VALUE obj, VALUE d)
{
double n;
n = new_moon(getfloat(d));
return rb_float_new(n);
}
static VALUE
calendar_old_hindu_lunar_from_absolute(VALUE obj, VALUE a)
{
int ia, m, l, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
old_hindu_lunar_from_absolute(ia, &m, &l, &md, &y);
return rb_ary_new3(4, INT2NUM(m), INT2BOOL(l), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_old_hindu_lunar_precedes
(VALUE obj, VALUE m1, VALUE l1, VALUE md1, VALUE y1,
VALUE m2, VALUE l2, VALUE md2, VALUE y2)
{
int im1, il1, imd1, iy1, im2, il2, imd2, iy2, d;
im1 = NUM2INT(m1); CHECK_DOMAIN2(im1, 1, 12);
il1 = BOOL2INT(l1);
imd1 = NUM2INT(md1); CHECK_DOMAIN2(imd1, 1, 30);
iy1 = NUM2INT(y1); CHECK_DOMAIN(iy1, 1);
im2 = NUM2INT(m2); CHECK_DOMAIN2(im2, 1, 12);
il2 = BOOL2INT(l2);
imd2 = NUM2INT(md2); CHECK_DOMAIN2(imd2, 1, 30);
iy2 = NUM2INT(y2); CHECK_DOMAIN(iy2, 1);
d = old_hindu_lunar_precedes(im1, il1, imd1, iy1, im2, il2, imd2, iy2);
return INT2NUM(d);
}
static VALUE
calendar_absolute_from_old_hindu_lunar
(VALUE obj, VALUE m, VALUE l, VALUE md, VALUE y)
{
int im, il, imd, iy, a, im2, il2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
il = BOOL2INT(l);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_old_hindu_lunar(im, il, imd, iy);
CHECK_RANGE(a, 1);
old_hindu_lunar_from_absolute(a, &im2, &il2, &imd2, &iy2);
if (im != im2 || il != il2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_world_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = world_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_world_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = world_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_world(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_world(im, imd, iy);
CHECK_RANGE(a, 1);
world_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_world_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
world_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_world_day_of_week_from_absolute(VALUE obj, VALUE a)
{
int ia, w;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
w = world_day_of_week_from_absolute(ia);
return INT2NUM(w);
}
static VALUE
calendar_coptic_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = coptic_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_coptic_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = coptic_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_coptic(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_coptic(im, imd, iy);
CHECK_RANGE(a, 1); /* 103605 */
coptic_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_coptic_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 103605);
coptic_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_ethiopian_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = ethiopian_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_ethiopian_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = ethiopian_last_day_of_month(im, iy);
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_ethiopian(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 13);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 30);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_ethiopian(im, imd, iy);
CHECK_RANGE(a, 1); /* 2796 */
ethiopian_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_ethiopian_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 2796);
ethiopian_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_jalaali_leap_year(VALUE obj, VALUE y)
{
int iy, l;
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
l = jalaali_leap_year(iy);
return INT2BOOL(l);
}
static VALUE
calendar_jalaali_last_day_of_month(VALUE obj, VALUE m, VALUE y)
{
int im, iy, md;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
md = jalaali_last_day_of_month(NUM2INT(m), NUM2INT(y));
return INT2NUM(md);
}
static VALUE
calendar_absolute_from_jalaali(VALUE obj, VALUE m, VALUE md, VALUE y)
{
int im, imd, iy, a, im2, imd2, iy2;
im = NUM2INT(m); CHECK_DOMAIN2(im, 1, 12);
imd = NUM2INT(md); CHECK_DOMAIN2(imd, 1, 31);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_jalaali(im, imd, iy);
CHECK_RANGE(a, 1); /* 632680 - 823335 */
jalaali_from_absolute(a, &im2, &imd2, &iy2);
if (im != im2 || imd != imd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_jalaali_from_absolute(VALUE obj, VALUE a)
{
int ia, m, md, y;
ia = NUM2INT(a); CHECK_DOMAIN2(ia, 632680, 823335);
jalaali_from_absolute(ia, &m, &md, &y);
return rb_ary_new3(3, INT2NUM(m), INT2NUM(md), INT2NUM(y));
}
static VALUE
calendar_absolute_from_ordinal_calendar(VALUE obj, VALUE yd, VALUE y)
{
int iyd, iy, a, iyd2, iy2;
iyd = NUM2INT(yd); CHECK_DOMAIN2(iyd, 1, 366);
iy = NUM2INT(y); CHECK_DOMAIN(iy, 1);
a = absolute_from_ordinal_calendar(iyd, iy);
CHECK_RANGE(a, 1);
ordinal_calendar_from_absolute(a, &iyd2, &iy2);
if (iyd != iyd2 || iy != iy2)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_ordinal_calendar_from_absolute(VALUE obj, VALUE a)
{
int ia, yd, y;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
ordinal_calendar_from_absolute(ia, &yd, &y);
return rb_ary_new3(2, INT2NUM(yd), INT2NUM(y));
}
static VALUE
calendar_absolute_from_julian_day_number(VALUE obj, VALUE j)
{
int ij, a;
ij = NUM2INT(j); CHECK_DOMAIN(ij, 1721426);
a = absolute_from_julian_day_number(ij);
CHECK_RANGE(a, 1);
return INT2NUM(a);
}
static VALUE
calendar_julian_day_number_from_absolute(VALUE obj, VALUE a)
{
int ia, j;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
j = julian_day_number_from_absolute(ia);
CHECK_RANGE(j, 1721426);
return INT2NUM(j);
}
static VALUE
calendar_julian_day_number_from_mjd(VALUE obj, VALUE m)
{
int im, j;
im = NUM2INT(m); CHECK_DOMAIN(im, -678576);
j = julian_day_number_from_mjd(im);
CHECK_RANGE(j, 1721426);
return INT2NUM(j);
}
static VALUE
calendar_mjd_from_julian_day_number(VALUE obj, VALUE j)
{
int ij, m;
ij = NUM2INT(j); CHECK_DOMAIN(ij, 1721426);
m = mjd_from_julian_day_number(ij);
CHECK_RANGE(m, -678576);
return INT2NUM(m);
}
static VALUE
calendar_absolute_from_lilian_day_number(VALUE obj, VALUE l)
{
int il, a;
il = NUM2INT(l); CHECK_DOMAIN(il, -577734);
a = absolute_from_lilian_day_number(il);
CHECK_RANGE(a, 1);
return INT2NUM(a);
}
static VALUE
calendar_lilian_day_number_from_absolute(VALUE obj, VALUE a)
{
int ia, l;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
l = lilian_day_number_from_absolute(ia);
CHECK_RANGE(l, -577734);
return INT2NUM(l);
}
static VALUE
calendar_day_of_week_from_absolute(VALUE obj, VALUE a)
{
int ia, w;
ia = NUM2INT(a); CHECK_DOMAIN(ia, 1);
w = day_of_week_from_absolute(ia);
return INT2NUM(w);
}
static VALUE
calendar_absolute_from_kyureki(VALUE obj, VALUE m, VALUE l, VALUE md, VALUE y)
{
int j, a;
QDATE q, q2;
q.j = 0;
q.y = NUM2INT(y); CHECK_DOMAIN(q.y, 1);
q.yd = 0;
q.m = NUM2INT(m); CHECK_DOMAIN2(q.m, 1, 12);
q.md = NUM2INT(md); CHECK_DOMAIN2(q.md, 1, 30);
q.wd = 0;
q.leap = BOOL2INT(l);
j = rqref(&q);
a = absolute_from_julian_day_number(j);
CHECK_RANGE(a, 1); /* 162193 - 767009 */
qref(j, &q2);
if (q.y != q2.y || q.m != q2.m || q.md != q2.md || q.leap != q2.leap)
rb_raise(rb_eArgError, "invalid date");
return INT2NUM(a);
}
static VALUE
calendar_kyureki_from_absolute(VALUE obj, VALUE a)
{
int ia, j;
QDATE q;
ia = NUM2INT(a); CHECK_DOMAIN2(ia, 162193, 767009);
j = julian_day_number_from_absolute(ia);
qref(j, &q);
return rb_ary_new3
(4, INT2NUM(q.m), INT2BOOL(q.leap), INT2NUM(q.md), INT2NUM(q.y));
}
static VALUE
calendar_kyureki_day_of_week_from_absolute(VALUE obj, VALUE a)
{
int ia, j;
QDATE q;
ia = NUM2INT(a); CHECK_DOMAIN2(ia, 162193, 767009);
j = julian_day_number_from_absolute(ia);
qref(j, &q);
return INT2NUM(q.wd);
}
void
Init_calendar(void)
{
VALUE mod, current_civil_month_names;
mod = rb_define_module("Calendar");
rb_define_module_function
(mod, "gregorian_leap_year", calendar_gregorian_leap_year, 1);
rb_define_alias(mod, "gregorian_leap_year?", "gregorian_leap_year");
rb_define_module_function
(mod, "gregorian_last_day_of_month",
calendar_gregorian_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_gregorian", calendar_absolute_from_gregorian, 3);
rb_define_module_function
(mod, "gregorian_from_absolute", calendar_gregorian_from_absolute, 1);
rb_define_module_function
(mod, "Kday_on_or_before", calendar_Kday_on_or_before, 2);
rb_define_module_function
(mod, "absolute_from_iso", calendar_absolute_from_iso, 3);
rb_define_module_function
(mod, "iso_from_absolute", calendar_iso_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_calendar_week", calendar_absolute_from_iso, 3);
rb_define_module_function
(mod, "calendar_week_from_absolute", calendar_iso_from_absolute, 1);
rb_define_module_function
(mod, "julian_leap_year", calendar_julian_leap_year, 1);
rb_define_alias(mod, "julian_leap_year?", "julian_leap_year");
rb_define_module_function
(mod, "julian_last_day_of_month",
calendar_julian_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_julian", calendar_absolute_from_julian, 3);
rb_define_module_function
(mod, "julian_from_absolute", calendar_julian_from_absolute, 1);
rb_define_module_function
(mod, "islamic_leap_year", calendar_islamic_leap_year, 1);
rb_define_alias(mod, "islamic_leap_year?", "islamic_leap_year");
rb_define_module_function
(mod, "islamic_last_day_of_month",
calendar_islamic_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_islamic", calendar_absolute_from_islamic, 3);
rb_define_module_function
(mod, "islamic_from_absolute", calendar_islamic_from_absolute, 1);
rb_define_module_function
(mod, "hebrew_leap_year", calendar_hebrew_leap_year, 1);
rb_define_alias(mod, "hebrew_leap_year?", "hebrew_leap_year");
rb_define_module_function
(mod, "last_month_of_hebrew_year",
calendar_last_month_of_hebrew_year, 1);
rb_define_module_function
(mod, "hebrew_last_day_of_month",
calendar_hebrew_last_day_of_month, 2);
rb_define_module_function
(mod, "hebrew_calendar_elapsed_days",
calendar_hebrew_calendar_elapsed_days, 1);
rb_define_module_function
(mod, "days_in_hebrew_year", calendar_days_in_hebrew_year, 1);
rb_define_module_function
(mod, "long_heshvan", calendar_long_heshvan, 1);
rb_define_alias(mod, "long_heshvan?", "long_heshvan");
rb_define_module_function
(mod, "short_kislev", calendar_short_kislev, 1);
rb_define_alias(mod, "short_kislev?", "short_kislev");
rb_define_module_function
(mod, "absolute_from_hebrew", calendar_absolute_from_hebrew, 3);
rb_define_module_function
(mod, "hebrew_from_absolute", calendar_hebrew_from_absolute, 1);
rb_define_module_function
(mod, "Nth_Kday", calendar_Nth_Kday, 4);
rb_define_module_function
(mod, "nicaean_rule_easter", calendar_nicaean_rule_easter, 1);
rb_define_module_function
(mod, "easter", calendar_easter, 1);
rb_define_module_function
(mod, "absolute_from_mayan_long_count",
calendar_absolute_from_mayan_long_count, 5);
rb_define_module_function
(mod, "mayan_long_count_from_absolute",
calendar_mayan_long_count_from_absolute, 1);
rb_define_module_function
(mod, "mayan_haab_from_absolute",
calendar_mayan_haab_from_absolute, 1);
rb_define_module_function
(mod, "mayan_haab_difference", calendar_mayan_haab_difference, 4);
rb_define_module_function
(mod, "mayan_haab_on_or_before", calendar_mayan_haab_on_or_before, 3);
rb_define_module_function
(mod, "mayan_tzolkin_from_absolute",
calendar_mayan_tzolkin_from_absolute, 1);
rb_define_module_function
(mod, "mayan_tzolkin_difference",
calendar_mayan_tzolkin_difference, 4);
rb_define_module_function
(mod, "mayan_tzolkin_on_or_before",
calendar_mayan_tzolkin_on_or_before, 3);
rb_define_module_function
(mod, "mayan_haab_tzolkin_on_or_before",
calendar_mayan_haab_tzolkin_on_or_before, 5);
rb_define_module_function
(mod, "french_last_day_of_month",
calendar_french_last_day_of_month, 2);
rb_define_module_function
(mod, "french_leap_year", calendar_french_leap_year, 1);
rb_define_alias(mod, "french_leap_year?", "french_leap_year");
rb_define_module_function
(mod, "absolute_from_french", calendar_absolute_from_french, 3);
rb_define_module_function
(mod, "french_from_absolute", calendar_french_from_absolute, 1);
rb_define_module_function
(mod, "solar_longitude", calendar_solar_longitude, 1);
rb_define_module_function
(mod, "zodiac", calendar_zodiac, 1);
rb_define_module_function
(mod, "old_hindu_solar_from_absolute",
calendar_old_hindu_solar_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_old_hindu_solar",
calendar_absolute_from_old_hindu_solar, 3);
rb_define_module_function
(mod, "lunar_longitude", calendar_lunar_longitude, 1);
rb_define_module_function
(mod, "lunar_phase", calendar_lunar_phase, 1);
rb_define_module_function
(mod, "new_moon", calendar_new_moon, 1);
rb_define_module_function
(mod, "old_hindu_lunar_from_absolute",
calendar_old_hindu_lunar_from_absolute, 1);
rb_define_module_function
(mod, "old_hindu_lunar_precedes",
calendar_old_hindu_lunar_precedes, 8);
rb_define_module_function
(mod, "absolute_from_old_hindu_lunar",
calendar_absolute_from_old_hindu_lunar, 4);
rb_define_module_function
(mod, "world_leap_year", calendar_world_leap_year, 1);
rb_define_alias(mod, "world_leap_year?", "world_leap_year");
rb_define_module_function
(mod, "world_last_day_of_month", calendar_world_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_world", calendar_absolute_from_world, 3);
rb_define_module_function
(mod, "world_from_absolute", calendar_world_from_absolute, 1);
rb_define_module_function
(mod, "world_day_of_week_from_absolute",
calendar_world_day_of_week_from_absolute, 1);
rb_define_module_function
(mod, "coptic_leap_year", calendar_coptic_leap_year, 1);
rb_define_alias(mod, "coptic_leap_year?", "coptic_leap_year");
rb_define_module_function
(mod, "coptic_last_day_of_month",
calendar_coptic_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_coptic", calendar_absolute_from_coptic, 3);
rb_define_module_function
(mod, "coptic_from_absolute", calendar_coptic_from_absolute, 1);
rb_define_module_function
(mod, "ethiopian_leap_year", calendar_ethiopian_leap_year, 1);
rb_define_alias(mod, "ethiopian_leap_year?", "ethiopian_leap_year");
rb_define_module_function
(mod, "ethiopian_last_day_of_month",
calendar_ethiopian_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_ethiopian", calendar_absolute_from_ethiopian, 3);
rb_define_module_function
(mod, "ethiopian_from_absolute", calendar_ethiopian_from_absolute, 1);
rb_define_module_function
(mod, "jalaali_leap_year", calendar_jalaali_leap_year, 1);
rb_define_alias(mod, "jalaali_leap_year?", "jalaali_leap_year");
rb_define_module_function
(mod, "jalaali_last_day_of_month",
calendar_jalaali_last_day_of_month, 2);
rb_define_module_function
(mod, "absolute_from_jalaali", calendar_absolute_from_jalaali, 3);
rb_define_module_function
(mod, "jalaali_from_absolute", calendar_jalaali_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_ordinal_calendar",
calendar_absolute_from_ordinal_calendar, 2);
rb_define_module_function
(mod, "ordinal_calendar_from_absolute",
calendar_ordinal_calendar_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_julian_day_number",
calendar_absolute_from_julian_day_number, 1);
rb_define_module_function
(mod, "julian_day_number_from_absolute",
calendar_julian_day_number_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_jdn",
calendar_absolute_from_julian_day_number, 1);
rb_define_module_function
(mod, "jdn_from_absolute",
calendar_julian_day_number_from_absolute, 1);
rb_define_module_function
(mod, "julian_day_number_from_mjd",
calendar_julian_day_number_from_mjd, 1);
rb_define_module_function
(mod, "mjd_from_julian_day_number",
calendar_mjd_from_julian_day_number, 1);
rb_define_module_function
(mod, "jdn_from_mjd",
calendar_julian_day_number_from_mjd, 1);
rb_define_module_function
(mod, "mjd_from_jdn",
calendar_mjd_from_julian_day_number, 1);
rb_define_module_function
(mod, "absolute_from_lilian_day_number",
calendar_absolute_from_lilian_day_number, 1);
rb_define_module_function
(mod, "lilian_day_number_from_absolute",
calendar_lilian_day_number_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_ldn",
calendar_absolute_from_lilian_day_number, 1);
rb_define_module_function
(mod, "ldn_from_absolute",
calendar_lilian_day_number_from_absolute, 1);
rb_define_module_function
(mod, "day_of_week_from_absolute",
calendar_day_of_week_from_absolute, 1);
rb_define_module_function
(mod, "absolute_from_kyureki", calendar_absolute_from_kyureki, 4);
rb_define_module_function
(mod, "kyureki_from_absolute", calendar_kyureki_from_absolute, 1);
rb_define_module_function
(mod, "kyureki_day_of_week_from_absolute",
calendar_kyureki_day_of_week_from_absolute, 1);
rb_define_const
(mod, "VERSION",
rb_str_new2("$Revision: 1.12 $"));
rb_define_const
(mod, "DAY_NAMES",
rb_ary_new3
(7,
rb_str_new2("Sunday"), rb_str_new2("Monday"), rb_str_new2("Tuesday"),
rb_str_new2("Wednesday"), rb_str_new2("Thursday"),
rb_str_new2("Friday"), rb_str_new2("Saturday")));
rb_define_const
(mod, "MONTH_NAMES",
current_civil_month_names = rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("January"), rb_str_new2("February"),
rb_str_new2("March"), rb_str_new2("April"), rb_str_new2("May"),
rb_str_new2("June"), rb_str_new2("July"), rb_str_new2("August"),
rb_str_new2("September"), rb_str_new2("October"),
rb_str_new2("November"), rb_str_new2("December")));
rb_define_const(mod, "GREGORIAN_MONTH_NAMES", current_civil_month_names);
rb_define_const(mod, "JULIAN_MONTH_NAMES", current_civil_month_names);
#ifndef PAPER
rb_define_const
(mod, "ISLAMIC_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Muharram"), rb_str_new2("Safar"),
rb_str_new2("Rabi` I"), rb_str_new2("Rabi` II"),
rb_str_new2("Jumada I"), rb_str_new2("Jumada II"),
rb_str_new2("Rajab"), rb_str_new2("Sha`ban"),
rb_str_new2("Ramadan"), rb_str_new2("Shawwal"),
rb_str_new2("Du al-Qa`da"), rb_str_new2("Du al-Hijja")));
#else
rb_define_const
(mod, "ISLAMIC_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Muharram"), rb_str_new2("Safar"),
rb_str_new2("Rabi I"), rb_str_new2("Rabi II"),
rb_str_new2("Jumada I"), rb_str_new2("Jumada II"),
rb_str_new2("Rajab"), rb_str_new2("Sha'ban"),
rb_str_new2("Ramadan"), rb_str_new2("Shawwal"),
rb_str_new2("Dhu al-Qada"), rb_str_new2("Dhu al-Hijjah")));
#endif
rb_define_const
(mod, "HEBREW_MONTH_NAMES",
rb_ary_new3
(2,
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Nisan"), rb_str_new2("Iyyar"),
rb_str_new2("Sivan"), rb_str_new2("Tammuz"), rb_str_new2("Av"),
rb_str_new2("Elul"), rb_str_new2("Tishri"), rb_str_new2("Heshvan"),
rb_str_new2("Kislev"), rb_str_new2("Teveth"), rb_str_new2("Shevat"),
rb_str_new2("Adar")),
rb_ary_new3
(14,
rb_str_new2("*"), rb_str_new2("Nisan"), rb_str_new2("Iyyar"),
rb_str_new2("Sivan"), rb_str_new2("Tammuz"), rb_str_new2("Av"),
rb_str_new2("Elul"), rb_str_new2("Tishri"), rb_str_new2("Heshvan"),
rb_str_new2("Kislev"), rb_str_new2("Teveth"), rb_str_new2("Shevat"),
rb_str_new2("Adar I"), rb_str_new2("Adar II"))));
rb_define_const
(mod, "MAYAN_HAAB_MONTH_NAMES",
rb_ary_new3
(20,
rb_str_new2("*"), rb_str_new2("Pop"), rb_str_new2("Uo"),
rb_str_new2("Zip"), rb_str_new2("Zotz"), rb_str_new2("Tzec"),
rb_str_new2("Xul"), rb_str_new2("Yaxkin"), rb_str_new2("Mol"),
rb_str_new2("Chen"), rb_str_new2("Yax"), rb_str_new2("Zac"),
rb_str_new2("Ceh"), rb_str_new2("Mac"), rb_str_new2("Kankin"),
rb_str_new2("Muan"), rb_str_new2("Pax"), rb_str_new2("Kayab"),
rb_str_new2("Cumku"), rb_str_new2("Uayeb")));
rb_define_const
(mod, "MAYAN_TZOLKIN_MONTH_NAMES",
rb_ary_new3
(21,
rb_str_new2("*"), rb_str_new2("Imix"), rb_str_new2("Ik"),
rb_str_new2("Akbal"), rb_str_new2("Kan"), rb_str_new2("Chicchan"),
rb_str_new2("Cimi"), rb_str_new2("Manik"), rb_str_new2("Lamat"),
rb_str_new2("Muluc"), rb_str_new2("Oc"), rb_str_new2("Chuen"),
rb_str_new2("Eb"), rb_str_new2("Ben"), rb_str_new2("Ix"),
rb_str_new2("Men"), rb_str_new2("Cib"), rb_str_new2("Caban"),
rb_str_new2("Etznab"), rb_str_new2("Cauac"), rb_str_new2("Ahau")));
#ifndef CS_LATIN1
rb_define_const
(mod, "FRENCH_MONTH_NAMES",
rb_ary_new3
(14,
rb_str_new2("*"), rb_str_new2("Vende'miaire"),
rb_str_new2("Brumaire"), rb_str_new2("Frimaire"),
rb_str_new2("Nivo^se"), rb_str_new2("Pluvio^se"),
rb_str_new2("Vento^se"), rb_str_new2("Germinal"),
rb_str_new2("Flore'al"), rb_str_new2("Prairial"),
rb_str_new2("Messidor"), rb_str_new2("Thermidor"),
rb_str_new2("Fructidor"), rb_str_new2("*")));
#else
rb_define_const
(mod, "FRENCH_MONTH_NAMES",
rb_ary_new3
(14,
rb_str_new2("*"), rb_str_new2("Vend\351miaire"),
rb_str_new2("Brumaire"), rb_str_new2("Frimaire"),
rb_str_new2("Niv\364se"), rb_str_new2("Pluvi\364se"),
rb_str_new2("Vent\364se"), rb_str_new2("Germinal"),
rb_str_new2("Flor\351al"), rb_str_new2("Prairial"),
rb_str_new2("Messidor"), rb_str_new2("Thermidor"),
rb_str_new2("Fructidor"), rb_str_new2("*")));
#endif
#ifndef PAPER
rb_define_const
(mod, "FRENCH_DAY_NAMES",
rb_ary_new3
(11,
rb_str_new2("*"), rb_str_new2("Primidi"), rb_str_new2("Doudi"),
rb_str_new2("Tridi"), rb_str_new2("Quartidi"),
rb_str_new2("Quintidi"), rb_str_new2("Sextidi"),
rb_str_new2("Septidi"), rb_str_new2("Octidi"),
rb_str_new2("Nonidi"), rb_str_new2("Decadi")));
#else
rb_define_const
(mod, "FRENCH_DAY_NAMES",
rb_ary_new3
(11,
rb_str_new2("*"), rb_str_new2("Primidi"), rb_str_new2("Doudi"),
rb_str_new2("Tridi"), rb_str_new2("Quartidi"),
rb_str_new2("Quintidi"), rb_str_new2("Sextidi"),
rb_str_new2("Septidi"), rb_str_new2("Oxtidi"),
rb_str_new2("Nonidi"), rb_str_new2("Decadi")));
#endif
#ifndef CS_LATIN1
rb_define_const
(mod, "FRENCH_SANSCULOTTIDES_NAMES",
rb_ary_new3
(11,
rb_str_new2("*"), rb_str_new2("Vertu"), rb_str_new2("Genie"),
rb_str_new2("Labour"), rb_str_new2("Raison"),
rb_str_new2("Recompense"), rb_str_new2("Revolution"),
rb_str_new2("*"), rb_str_new2("*"), rb_str_new2("*"),
rb_str_new2("*")));
#else
rb_define_const
(mod, "FRENCH_SANSCULOTTIDES_NAMES",
rb_ary_new3
(11,
rb_str_new2("*"), rb_str_new2("Vertu"), rb_str_new2("G\351nie"),
rb_str_new2("Labour"), rb_str_new2("Raison"),
rb_str_new2("R\351compense"), rb_str_new2("R\351volution"),
rb_str_new2("*"), rb_str_new2("*"), rb_str_new2("*"),
rb_str_new2("*")));
#endif
#ifndef PAPER
rb_define_const
(mod, "OLD_HINDU_SOLAR_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Mesha"), rb_str_new2("Vrishabha"),
rb_str_new2("Mithuna"), rb_str_new2("Karka"), rb_str_new2("Simha"),
rb_str_new2("Kanya"), rb_str_new2("Tula"), rb_str_new2("Vris'chika"),
rb_str_new2("Dhanu"), rb_str_new2("Makara"), rb_str_new2("Kumbha"),
rb_str_new2("Mina")));
#else
rb_define_const
(mod, "OLD_HINDU_SOLAR_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Mesha"), rb_str_new2("Vrshabha"),
rb_str_new2("Mithuna"), rb_str_new2("Karka"), rb_str_new2("Simha"),
rb_str_new2("Kanya"), rb_str_new2("Tula"), rb_str_new2("Vris'chika"),
rb_str_new2("Dhanus"), rb_str_new2("Makara"), rb_str_new2("Kumbha"),
rb_str_new2("Mina")));
#endif
rb_define_const
(mod, "OLD_HINDU_LUNAR_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Chaitra"), rb_str_new2("Vaisa'akha"),
rb_str_new2("Jyaishtha"), rb_str_new2("Ashadha"),
rb_str_new2("S'ravana"), rb_str_new2("Bhadrapada"),
rb_str_new2("As'vina"), rb_str_new2("Karttika"),
rb_str_new2("Margas'ira"), rb_str_new2("Pausha"),
rb_str_new2("Magha"), rb_str_new2("Phalguna")));
rb_define_const
(mod, "WORLD_DAY_NAMES",
rb_ary_new3
(9,
rb_str_new2("Sunday"), rb_str_new2("Monday"), rb_str_new2("Tuesday"),
rb_str_new2("Wednesday"), rb_str_new2("Thursday"),
rb_str_new2("Friday"), rb_str_new2("Saturday"),
rb_str_new2("World"), rb_str_new2("Leap")));
rb_define_const(mod, "WORLD_MONTH_NAMES", current_civil_month_names);
rb_define_const
(mod, "COPTIC_MONTH_NAMES",
rb_ary_new3
(14,
rb_str_new2("*"), rb_str_new2("Tut"), rb_str_new2("Babah"),
rb_str_new2("Hatur"), rb_str_new2("Kiyahk"), rb_str_new2("Tubah"),
rb_str_new2("Amshir"), rb_str_new2("Baramhat"),
rb_str_new2("Baramundah"), rb_str_new2("Bashans"),
rb_str_new2("Ba'unah"), rb_str_new2("Abib"), rb_str_new2("Misra"),
rb_str_new2("al-Nasi")));
rb_define_const
(mod, "ETHIOPIAN_MONTH_NAMES",
rb_ary_new3
(14,
rb_str_new2("*"), rb_str_new2("Maskaram"), rb_str_new2("Teqemt"),
rb_str_new2("Khedar"), rb_str_new2("Takhs'as'"), rb_str_new2("Ter"),
rb_str_new2("Yakatit"), rb_str_new2("Magabit"),
rb_str_new2("Miyazya"), rb_str_new2("Genbot"), rb_str_new2("Sane"),
rb_str_new2("Hamle"), rb_str_new2("Nahase"),
rb_str_new2("Paguemen")));
rb_define_const
(mod, "JALAALI_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Farvardin"),
rb_str_new2("Ordibehest"), rb_str_new2("Xordad"),
rb_str_new2("Tir"), rb_str_new2("Mordad"), rb_str_new2("Sahrivar"),
rb_str_new2("Mehr"), rb_str_new2("Aban"), rb_str_new2("Azar"),
rb_str_new2("Dey"), rb_str_new2("Bahman"), rb_str_new2("Esfand")));
rb_define_const
(mod, "KYUREKI_DAY_NAMES",
rb_ary_new3
(6,
rb_str_new2("Senkachi"), rb_str_new2("Tomobiki"),
rb_str_new2("Semmake"), rb_str_new2("Butsumetsu"),
rb_str_new2("Taian"), rb_str_new2("Shakku")));
rb_define_const
(mod, "KYUREKI_MONTH_NAMES",
rb_ary_new3
(13,
rb_str_new2("*"), rb_str_new2("Mutsuki"), rb_str_new2("Kisaragi"),
rb_str_new2("Yayoi"), rb_str_new2("Uzuki"), rb_str_new2("Satsuki"),
rb_str_new2("Minazuki"), rb_str_new2("Fuzuki"),
rb_str_new2("Hazuki"), rb_str_new2("Nagatsuki"),
rb_str_new2("Kannazuki"), rb_str_new2("Shimotsuki"),
rb_str_new2("Shiwasu")));
}
syntax highlighted by Code2HTML, v. 0.9.1