diff --git a/lib/modules/Calendar.pmod/module.pmod b/lib/modules/Calendar.pmod/module.pmod index b87f1b3041a487a09c6b87e57e108a8d5aace6a2..3dcbc4602254e1f69057a0482b26f197e031b7c5 100644 --- a/lib/modules/Calendar.pmod/module.pmod +++ b/lib/modules/Calendar.pmod/module.pmod @@ -4,50 +4,6 @@ //! 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() @@ -232,3 +188,48 @@ string datetime_short_name(int|void unix_time) 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; +}