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

version» Context lines:

pike.git/lib/modules/Calendar.pmod/module.pmod:1:      //! module Calendar   //!   //! This module implements calendar calculations, and base classes   //! for time units.   //! - //! example program: - //! <pre> - //! void write_month(object m) - //! { - //! object w; - //! object today; - //! - //! today=function_object(object_program(m))->Day(); - //! - //! write(sprintf(" %|28s\n", - //! Simulate.capitalize(m->name()+" ") - //! +m->year()->name())); - //! - //! w=m->day(1)->week(); - //! - //! write(" "); - //! foreach (Array.map(w->days(),w->day)->week_day_name(),string n) - //! write(sprintf("%3s ",n[0..2])); - //! write("\n"); - //! - //! do - //! { - //! array a; - //! object d; - //! a=Array.map(Array.map(w->days(),w->day), - //! lambda(object d,object m) - //! { if (d->month()!=m) return 0; else return d; },m); - //! - //! write(sprintf("%3s ",w->name())); - //! foreach (a,d) - //! if (d) - //! if (d!=today) write(sprintf(" %2d ",d->month_day())); - //! else write(sprintf(">%2d<",d->month_day())); - //! else write(" "); - //! - //! write("\n"); - //! w++; - //! } - //! while (w->day(0)->month()==m); - //! } - //! </pre> - //! call with, for example, - //! <tt>write_month(Calendar.Swedish.Month());</tt>. - //! +    //! class time_unit   //!   //! method array(string) lesser()   //! Gives a list of methods to get lesser (shorter) time units.   //! ie, for a month, this gives back <tt>({"day"})</tt>   //! and the method <tt>day(mixed n)</tt> gives back that   //! day object. The method <tt>days()</tt> gives back a   //! list of possible argument values to the method <tt>day</tt>.   //! Concurrently, <tt>Array.map(o->days(),o->day)</tt> gives   //! a list of day objects in the object <tt>o</tt>.
pike.git/lib/modules/Calendar.pmod/module.pmod:225:   }      // Sane replacement for ctime().   string datetime_short_name(int|void unix_time)   {    mapping t = datetime(unix_time);    return sprintf("%04d-%02d-%02d %02d:%02d:%02d",    t->year, t->month, t->day,    t->hour, t->minute, t->second);   } +  + string print_month(void|object month,void|mapping options) + { +  object w; +  object today; +  string res=""; +  +  if (!month) // resolv thing here is to avoid compile-time resolve +  month=master()->resolv("Calendar")["Gregorian"]["Month"](); +  +  today=function_object(object_program(month))->Day(); +  +  res=sprintf(" %|28s\n", +  String.capitalize(month->name()+" ") +  +month->year()->name()); +  +  w=month->day(1)->week(); +  +  res+=" "; +  foreach (Array.map(w->days(),w->day)->week_day_name(),string n) +  res+=sprintf("%3s ",n[0..2]); +  res+="\n"; +  +  do +  { +  array a; +  object d; +  a=Array.map(Array.map(w->days(),w->day), +  lambda(object d) +  { if (d->month()!=month) return 0; else return d; }); +  +  res+=sprintf("%3s ",w->name()); +  foreach (a,d) +  if (d) +  if (d!=today) res+=sprintf(" %2d ",d->month_day()); +  else res+=sprintf(">%2d<",d->month_day()); +  else res+=" "; +  +  res+="\n"; +  w++; +  } +  while (w->day(0)->month()==month); +  +  return res; + }