pike.git / lib / modules / Calendar.pmod / YMD.pmod

version» Context lines:

pike.git/lib/modules/Calendar.pmod/YMD.pmod:449:       string format_ymd_xshort()    {    if (m==CALUNKNOWN) make_month();    return sprintf("%02d%02d%02d",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.pmod:588:    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.pmod:1061:    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;    case "unix": case "unix_r": case "julian": case "julian_r":    // Handled by ::create.    break;    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.pmod:1356:    }    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;    case "unix": case "unix_r": case "julian": case "julian_r":    // Handled by ::create.
pike.git/lib/modules/Calendar.pmod/YMD.pmod:1412:    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.pmod:1458:    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.pmod:1482:    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.pmod:1583:    ->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.pmod:1687:    n=args[3];    return;    case "unix": case "unix_r": case "julian": case "julian_r":    // Handled by ::create.    break;    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.pmod:1795:    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.pmod:1972:    {    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":    // Handled by ::create.    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.pmod:2058:    }    }       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.pmod:2120:       string nice_print_period()    {   // return nice_print()+" n="+n+"";    if (!n) return nice_print()+" 0:00 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.pmod:2223:    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.pmod:2257:    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;      //------------------------------------------------------------------------