pike.git
/
lib
/
modules
/
Calendar.pmod
/
YMD.pike
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/lib/modules/Calendar.pmod/YMD.pike:62:
int n; // number of this in the period int jd; // julian day of first day int yd; // day of year (1..) int m; // [*] month of year (1..12?), like int md; // [*] day of month (1..) int wy; // [*] week year int w; // [*] week of week year (1..) int wd; // [*] day of week (1..7?)
-
int mnd=CALUNKNOWN; // days in current month
+
int mnd=CALUNKNOWN; //
[*]
days in current month
int utco=CALUNKNOWN; // [*] distance to UTC string tzn=0; // timezone name
-
//
//
^^^
might be uninitialized (CALUNKNOWN)
+
//
[*]:
might be uninitialized (CALUNKNOWN)
.Ruleset rules; constant is_ymd=1; // ---------------------------------------- // basic Y-M-D stuff // ---------------------------------------- void create_now() {
pike.git/lib/modules/Calendar.pmod/YMD.pike:102:
else if (uxo==0) utco=mutco,tzn=mtzn; // reuse, it *is* start of day } void make_month() // set m and md from y and yd { int myd; [m,md,mnd,myd]=month_from_yday(y,yd); }
-
void make_week() // set w
from
y
and
yd
+
void make_week() // set
wy,
w
and
wd
from
jd
{ int wnd,wjd; [wy,w,wd,wnd,wjd]=week_from_julian_day(jd); } int __hash() { return jd; } // --- query //! method float fraction_no()
pike.git/lib/modules/Calendar.pmod/YMD.pike:457:
string format_ymd_xshort() { if (m==CALUNKNOWN) make_month(); return sprintf("%02d%02d%02d",((yd < 1)?y-1:y)%100,m,md); } string format_iso_week() { if (w==CALUNKNOWN) make_week();
-
return sprintf("%04d-W%02d",
y
,w);
+
return sprintf("%04d-W%02d",
wy
,w);
} string format_iso_week_short() { if (w==CALUNKNOWN) make_week();
-
return sprintf("%04d%02d",
y
,w);
+
return sprintf("%04d%02d",
wy
,w);
} string format_week() { return sprintf("%04d-%s",y,week_name()); } string format_week_short() { return sprintf("%04d%s",y,week_name());
pike.git/lib/modules/Calendar.pmod/YMD.pike:609:
if (yd==1 && t->is_year) return Year("ymd_y",rules,y,yjd,t->n*n) ->autopromote(); // months are even on years if (t->is_year || t->is_month) { if (md==CALUNKNOWN) make_month(); if (md==1) return Month("ymd_yjmw",rules,y,yjd,jd,m,
-
t->number_of_months()*n,wd,w)
+
t->number_of_months()*n,wd,w
,wy
)
->autopromote(); } // weeks are not if (t->is_week) { if (wd==CALUNKNOWN) make_week(); if (wd==1) return Week("ymd_yjwm",rules,y,yjd,jd,w,t->n*n,md,m,mnd); } // fallback on days if (t->is_ymd) return Day("ymd_ydmw",rules,y,yjd,jd,yd,
-
n*t->number_of_days(),m,md,w,wd,mnd);
+
n*t->number_of_days(),m,md,
wy,
w,wd,mnd);
error("set_size: incompatible class %O\n", object_program(t)); } static TimeRange _add(int _n,TimeRange step) { if (step->is_ymd) return _move(_n,step); if (step->is_timeofday)
pike.git/lib/modules/Calendar.pmod/YMD.pike:1123:
create_now(); return; } else switch (args[0]) { case "ymd_y": rules=args[1]; y=args[2]; jd=yjd=args[3]; n=args[4];
-
m=md=w=wd=CALUNKNOWN;
+
m=md=
wy=
w=wd=CALUNKNOWN;
yd=1; return; case "ymd_yn": rules=args[1]; y=args[2]; jd=yjd=julian_day_from_year(y); n=args[3];
-
m=md=w=wd=CALUNKNOWN;
+
m=md=
wy=
w=wd=CALUNKNOWN;
yd=1; return; default: if (intp(args[0]) && sizeof(args)==1) { rules=default_rules; y=args[0]; jd=yjd=julian_day_from_year(y); n=1;
-
m=md=w=wd=CALUNKNOWN;
+
m=md=
wy=
w=wd=CALUNKNOWN;
yd=1; return; } else if (stringp(args[0])) { y=default_rules->language[f_year_number_from_name](args[0]); rules=default_rules; jd=yjd=julian_day_from_year(y); n=1;
-
m=md=w=wd=CALUNKNOWN;
+
m=md=
wy=
w=wd=CALUNKNOWN;
yd=1; return; } break; } rules=default_rules; ::create(@args); } void create_julian_day(int|float _jd) { if (floatp(_jd)) create_unixtime_default((int)((jd-2440588)*86400)); else { [y,yjd]=year_from_julian_day(_jd); jd=yjd; n=1; md=yd=m=1;
-
wd
=w=CALUNKNOWN; // unknown
+
wy
=w=
wd=
CALUNKNOWN; // unknown
} } TimeRange beginning() { return Year("ymd_y",rules,y,yjd,0); } TimeRange end() {
pike.git/lib/modules/Calendar.pmod/YMD.pike:1415:
} else switch (args[0]) { case "ymd_ym": rules=args[1]; y=args[2]; m=args[3]; n=args[4]; md=1;
-
w=wd=CALUNKNOWN;
+
wy=
w=wd=CALUNKNOWN;
[y,m,nd,yd]=year_month_from_month(y,m); yjd=julian_day_from_year(y); jd=yjd+yd-1; if (n!=1) nd=CALUNKNOWN; nw=CALUNKNOWN; return; case "ymd_yjmw": rules=args[1]; y=args[2]; yjd=args[3]; jd=args[4]; yd=1+jd-yjd; m=args[5]; n=args[6]; wd=args[7]; w=args[8];
-
+
wy=args[9];
md=1; nw=nd=CALUNKNOWN; return; case "ymd_jd": rules=args[1]; create_julian_day(args[2]); n=args[3]; return; default: if (intp(args[0]) && sizeof(args)==2)
pike.git/lib/modules/Calendar.pmod/YMD.pike:1468:
create_unixtime_default((int)((jd-2440588)*86400)); else { int zmd; [y,yjd]=year_from_julian_day(jd=_jd); [m,zmd,nd,yd]=month_from_yday(y,1+jd-yjd); jd=yd+yjd-1; n=1; md=1;
-
nw=wd=w=CALUNKNOWN; // unknown
+
nw=wd=w=
wy=
CALUNKNOWN; // unknown
} } string _sprintf(int t,mapping m) { // return sprintf("month y=%d yjd=%d m=%d jd=%d yd=%d n=%d nd=%d", // y,yjd,m,jd,yd,n,number_of_days()); switch (t) { case 'O':
pike.git/lib/modules/Calendar.pmod/YMD.pike:1514:
if (mo->y==y) return sprintf("%s..%s %s", month_shortname(), mo->month_shortname(), year_name()); return nice_print()+" .. "+month(-1)->nice_print(); } cDay beginning() {
-
return Month("ymd_yjmw",rules,y,yjd,jd,m,0,wd,w)
+
return Month("ymd_yjmw",rules,y,yjd,jd,m,0,wd,w
,wy
)
->autopromote(); } cDay end() { return Month("ymd_ym",rules,y,m+n,0) ->autopromote(); } // --- month position and distance
pike.git/lib/modules/Calendar.pmod/YMD.pike:1538:
if (to->is_timeofday) return hour()->distance(to); if (to->is_ymd) { if (to->is_month || to->is_year) { int n1=months_to_month(to->y,to->is_year?1:to->m); if (n1<0) error("distance: negative distance (%d months)\n",n1);
-
return Month("ymd_yjmw",rules,y,yjd,jd,m,n1,wd,w)
+
return Month("ymd_yjmw",rules,y,yjd,jd,m,n1,wd,w
,wy
)
->autopromote(); } int d1=jd; int d2=to->jd; if (d2<d1) error("distance: negative distance (%d days)\n",d2-d1);
-
return Day("ymd_ydmw",rules,y,yjd,jd,yd,d2-d1,m,1,w,wd,mnd)
+
return Day("ymd_ydmw",rules,y,yjd,jd,yd,d2-d1,m,1,
wy,
w,wd,mnd)
->autopromote(); } error("distance: Incompatible type %O\n",to); } static void convert_from(TimeRange other) { ::convert_from(other); if (other->number_of_months)
pike.git/lib/modules/Calendar.pmod/YMD.pike:1639:
->number_of_weeks(); } int number_of_months() { return n; } cMonth set_ruleset(.Ruleset r) {
-
return Month("ymd_yjmw",r,y,yjd,jd,m,n,wd,w);
+
return Month("ymd_yjmw",r,y,yjd,jd,m,n,wd,w
,wy
);
} // --- needs to be defined static int months_to_month(int y,int m); } // ---------------------------------------------------------------- //! class Week //! The Calendar week represents a standard time period of
pike.git/lib/modules/Calendar.pmod/YMD.pike:1740:
case "ymd_jd": rules=args[1]; create_julian_day(args[2]); n=args[3]; return; default: if (intp(args[0]) && sizeof(args)==2) { create("ymd_yw",default_rules,args[0],args[1],1); if (y!=args[0])
-
error("
month
%d doesn't exist in %d\n",args[1],args[0]);
+
error("
Week
%d doesn't exist in %d\n",args[1],args[0]);
return; } break; } rules=default_rules; ::create(@args); } void create_julian_day(int|float _jd)
pike.git/lib/modules/Calendar.pmod/YMD.pike:1848:
return Week("ymd_yjwm",rules,y,yjd,jd,w,n1,md,m,mnd) ->autopromote(); } if (to->julian_day) { int d1=jd; int d2=to->julian_day(); if (d2<d1) error("distance: negative distance (%d days)\n",d2-d1);
-
return Day("ymd_ydmw",rules,y,yjd,jd,yd,d2-d1,m,md,w,1,mnd)
+
return Day("ymd_ydmw",rules,y,yjd,jd,yd,d2-d1,m,md,
wy,
w,1,mnd)
->autopromote(); } error("distance: Incompatible type %O\n",to); } static void convert_from(TimeRange other) { ::convert_from(other); if (other->number_of_weeks)
pike.git/lib/modules/Calendar.pmod/YMD.pike:2025:
{ case "ymd_ydmw": rules=args[1]; y=args[2]; yjd=args[3]; jd=args[4]; yd=args[5]; n=args[6]; m=args[7]; md=args[8];
-
w
=args[9];
-
wd
=args[10];
-
mnd
=args[11];
+
wy
=args[9];
+
w
=args[10];
+
wd
=args[11];
+
mnd=args[12];
nw=CALUNKNOWN; return; case "ymd_yd": rules=args[1]; y=args[2]; yjd=args[3]; jd=args[4]; yd=args[5]; n=args[6];
-
wd=nw=md=m=w=CALUNKNOWN;
+
wy=
wd=nw=md=m=w=CALUNKNOWN;
return; case "ymd_jd": rules=args[1]; create_julian_day(args[2]); n=args[3];
-
wd=nw=md=m=w=CALUNKNOWN;
+
wy=
wd=nw=md=m=w=CALUNKNOWN;
return; case "unix_r": case "julian_r": case "unix": case "julian": break; default: rules=default_rules;
-
wd=nw=md=m=w=CALUNKNOWN;
+
wy=
wd=nw=md=m=w=CALUNKNOWN;
n=1; switch (sizeof(args)) { case 1: if (intp(args[0])) { create_julian_day(args[0]); return; } break;
pike.git/lib/modules/Calendar.pmod/YMD.pike:2110:
} } rules=default_rules; ::create(@args); } void create_julian_day(int|float _jd) { n=1;
-
nw=md=m=wd=w=CALUNKNOWN; // unknown
+
nw=md=m=wd=w=
wy=
CALUNKNOWN; // unknown
if (floatp(_jd)) { create_unixtime_default((int)((jd-2440588)*86400)); } else { [y,yjd]=year_from_julian_day(jd=_jd); yd=1+jd-yjd; }
pike.git/lib/modules/Calendar.pmod/YMD.pike:2175:
string nice_print_period() { // return nice_print()+" n="+n+""; if (!n) return nice_print()+" "+minute()->nice_print()+" sharp"; return nice_print()+" .. "+day(-1)->nice_print(); } cDay beginning() {
-
return Day("ymd_ydmw",rules,y,yjd,jd,yd,0,m,md,w,wd,mnd);
+
return Day("ymd_ydmw",rules,y,yjd,jd,yd,0,m,md,
wy,
w,wd,mnd);
} cDay end() { return Day("ymd_jd",rules,jd+n,0) ->autopromote(); } static void convert_from(TimeRange other) {
pike.git/lib/modules/Calendar.pmod/YMD.pike:2278:
TimeRange distance(TimeRange to) { if (to->is_timeofday) return hour()->distance(to); if (to->is_ymd) { int d1=jd; int d2=to->jd; if (d2<d1) error("distance: negative distance (%d days)\n",d2-d1);
-
return Day("ymd_ydmw",rules,y,yjd,jd,yd,d2-d1,m,md,w,wd,mnd)
+
return Day("ymd_ydmw",rules,y,yjd,jd,yd,d2-d1,m,md,
wy,
w,wd,mnd)
->autopromote(); } error("distance: Incompatible type %O\n",to); } // --- Day to other YMD int number_of_days() {
pike.git/lib/modules/Calendar.pmod/YMD.pike:2312:
if (n<=1) return nw=1; return nw= Week("julian_r",jd,rules) ->range(Week("julian_r",jd+n-1,rules)) ->number_of_weeks(); } cDay set_ruleset(.Ruleset r) {
-
return Day("ymd_ydmw",r,y,yjd,jd,yd,n,m,md,w,wd,mnd);
+
return Day("ymd_ydmw",r,y,yjd,jd,yd,n,m,md,
wy,
w,wd,mnd);
} // backwards compatible with calendar I string iso_name() { return format_ymd(); } string iso_short_name() { return format_ymd_short(); } } function(mixed...:cDay) Day=cDay; //------------------------------------------------------------------------