diff --git a/lib/modules/Calendar.pmod/ISO.pmod b/lib/modules/Calendar.pmod/ISO.pmod index 3be7fc03618363ad4e4d3820d9445de75dc49abb..0fd1e8b6f31523e6f882c1625997312017bfc222 100644 --- a/lib/modules/Calendar.pmod/ISO.pmod +++ b/lib/modules/Calendar.pmod/ISO.pmod @@ -18,6 +18,23 @@ class Year } } +class Month +{ + inherit Gregorian::Month; + + string name() + { + return sprintf("%04d-%02d", + (int)this->year(), + (int)this); + } + + string short_name() + { + return name()-"-"; + } +} + class Week { inherit Gregorian::Week; @@ -33,7 +50,19 @@ class Week { return ({1,2,3,4,5,6,7}); } - + + string name() + { + return sprintf("%04d-W%02d", + (int)this->year(), + (int)this); + } + + string short_name() + { + return name()-"-"; + } + object day(int|string|object n) { if (stringp(n)) @@ -73,6 +102,39 @@ class Day return week_day_names[(this->week_day()+6)%7]; } + string name() + { + return sprintf("%04d-%02d-%02d", + (int)this->year(), + (int)this->month(), + (int)this->month_day()); + } + + string short_name() + { + return name()-"-"; + } + + string name_by_week() + { + return sprintf("%04d-W%02d-%d", + (int)this->year(), + (int)this->week(), + (int)this->week_day()); + } + + string name_by_yearday() + { + return sprintf("%04d-%03d", + (int)this->year(), + (int)this->year_day()); + } + + string short_name_by_yearday() + { + return name_by_yearday()-"-"; + } + object week() { int n; @@ -85,3 +147,99 @@ class Day return vWeek(y,n); } } + +static private class _Day +{ + // FIXME: Kludge because the day object does not exist in + // Minute and Second. This function will be shadowed in Hour. + object day() + { + return this_object()->hour()->day(); + } +} + +static private class Name +{ + object this = this_object(); + + string name() + { + return this->day()->name()+this->_name(); + } + + string short_name() + { + return this->day()->short_name()+this->_short_name(); + } + + string name_by_week() + { + return this->day()->name_by_week()+this->_name(); + } + + string name_by_yearday() + { + return this->day()->name_by_yearday()+this->_name(); + } + + string short_name_by_yearday() + { + return this->day()->short_name_by_yearday()+this->_short_name(); + } +} + +class Hour +{ + inherit Gregorian::Hour; + inherit Name; + + string _name() + { + return sprintf("T%02d", + (int)this); + } + + string _short_name() + { + return _name(); + } +} + +class Minute +{ + inherit _Day; + inherit Gregorian::Minute; + inherit Name; + + string _name() + { + return sprintf("T%02d:%02d", + (int)this->hour(), + (int)this); + } + + string _short_name() + { + return _name()-":"; + } +} + +class Second +{ + inherit _Day; + inherit Gregorian::Second; + inherit Name; + + string _name() + { + return sprintf("T%02d:%02d:%02d", + (int)this->hour(), + (int)this->minute(), + (int)this); + } + + string _short_name() + { + return _name()-":"; + } +}