Skip to content
Snippets Groups Projects
Commit a2cf0416 authored by Mirar (Pontus Hagland)'s avatar Mirar (Pontus Hagland)
Browse files

print_month added

Rev: lib/modules/Calendar.pmod/module.pmod:1.3
parent c995eb7c
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment