diff options
author | Guido van Rossum <guido@python.org> | 2000-02-02 15:10:15 +0000 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-02-02 15:10:15 +0000 |
commit | 4acc25bd392216c4f867a10ca8081e7c8a739676 (patch) | |
tree | db4976fa172404339b31aa7485a5316634e4c699 /Lib/calendar.py | |
parent | Patch from Joe Van Andel: fix arg to % operator in warning. (diff) | |
download | cpython-4acc25bd392216c4f867a10ca8081e7c8a739676.tar.gz cpython-4acc25bd392216c4f867a10ca8081e7c8a739676.tar.bz2 cpython-4acc25bd392216c4f867a10ca8081e7c8a739676.zip |
Mass patch by Ka-Ping Yee:
1. Comments at the beginning of the module, before
functions, and before classes have been turned
into docstrings.
2. Tabs are normalized to four spaces.
Also, removed the "remove" function from dircmp.py, which reimplements
list.remove() (it must have been very old).
Diffstat (limited to 'Lib/calendar.py')
-rw-r--r-- | Lib/calendar.py | 234 |
1 files changed, 116 insertions, 118 deletions
diff --git a/Lib/calendar.py b/Lib/calendar.py index c9bc497fef3..fa96278cb44 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -1,6 +1,4 @@ -############################### -# Calendar printing functions # -############################### +"""Calendar printing functions""" # Revision 2: uses funtions from built-in time module @@ -22,149 +20,149 @@ February = 2 mdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # Full and abbreviated names of weekdays -day_name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', \ - 'Friday', 'Saturday', 'Sunday'] +day_name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', + 'Friday', 'Saturday', 'Sunday'] day_abbr = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] # Full and abbreviated names of months (1-based arrays!!!) -month_name = ['', 'January', 'February', 'March', 'April', \ - 'May', 'June', 'July', 'August', \ - 'September', 'October', 'November', 'December'] -month_abbr = [' ', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', \ - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] +month_name = ['', 'January', 'February', 'March', 'April', + 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December'] +month_abbr = [' ', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] -# Return 1 for leap years, 0 for non-leap years def isleap(year): - return year % 4 == 0 and (year % 100 <> 0 or year % 400 == 0) + """Return 1 for leap years, 0 for non-leap years.""" + return year % 4 == 0 and (year % 100 <> 0 or year % 400 == 0) -# Return number of leap years in range [y1, y2) -# Assume y1 <= y2 and no funny (non-leap century) years def leapdays(y1, y2): - return (y2+3)/4 - (y1+3)/4 + """Return number of leap years in range [y1, y2). + Assume y1 <= y2 and no funny (non-leap century) years.""" + return (y2+3)/4 - (y1+3)/4 -# Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31) def weekday(year, month, day): - secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0)) - tuple = localtime(secs) - return tuple[6] + """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31).""" + secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0)) + tuple = localtime(secs) + return tuple[6] -# Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month def monthrange(year, month): - if not 1 <= month <= 12: raise ValueError, 'bad month number' - day1 = weekday(year, month, 1) - ndays = mdays[month] + (month == February and isleap(year)) - return day1, ndays + """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.""" + if not 1 <= month <= 12: raise ValueError, 'bad month number' + day1 = weekday(year, month, 1) + ndays = mdays[month] + (month == February and isleap(year)) + return day1, ndays -# Return a matrix representing a month's calendar -# Each row represents a week; days outside this month are zero def _monthcalendar(year, month): - day1, ndays = monthrange(year, month) - rows = [] - r7 = range(7) - day = 1 - day1 - while day <= ndays: - row = [0, 0, 0, 0, 0, 0, 0] - for i in r7: - if 1 <= day <= ndays: row[i] = day - day = day + 1 - rows.append(row) - return rows - -# Caching interface to _monthcalendar + """Return a matrix representing a month's calendar. + Each row represents a week; days outside this month are zero.""" + day1, ndays = monthrange(year, month) + rows = [] + r7 = range(7) + day = 1 - day1 + while day <= ndays: + row = [0, 0, 0, 0, 0, 0, 0] + for i in r7: + if 1 <= day <= ndays: row[i] = day + day = day + 1 + rows.append(row) + return rows + _mc_cache = {} def monthcalendar(year, month): - key = (year, month) - if _mc_cache.has_key(key): - return _mc_cache[key] - else: - _mc_cache[key] = ret = _monthcalendar(year, month) - return ret - -# Center a string in a field + """Caching interface to _monthcalendar.""" + key = (year, month) + if _mc_cache.has_key(key): + return _mc_cache[key] + else: + _mc_cache[key] = ret = _monthcalendar(year, month) + return ret + def _center(str, width): - n = width - len(str) - if n <= 0: return str - return ' '*((n+1)/2) + str + ' '*((n)/2) + """Center a string in a field.""" + n = width - len(str) + if n <= 0: return str + return ' '*((n+1)/2) + str + ' '*((n)/2) # XXX The following code knows that print separates items with space! -# Print a single week (no newline) def prweek(week, width): - for day in week: - if day == 0: s = '' - else: s = `day` - print _center(s, width), + """Print a single week (no newline).""" + for day in week: + if day == 0: s = '' + else: s = `day` + print _center(s, width), -# Return a header for a week def weekheader(width): - str = '' - if width >= 9: names = day_name - else: names = day_abbr - for i in range(7): - if str: str = str + ' ' - str = str + _center(names[i%7][:width], width) - return str - -# Print a month's calendar + """Return a header for a week.""" + str = '' + if width >= 9: names = day_name + else: names = day_abbr + for i in range(7): + if str: str = str + ' ' + str = str + _center(names[i%7][:width], width) + return str + def prmonth(year, month, w = 0, l = 0): - w = max(2, w) - l = max(1, l) - print _center(month_name[month] + ' ' + `year`, 7*(w+1) - 1), - print '\n'*l, - print weekheader(w), - print '\n'*l, - for week in monthcalendar(year, month): - prweek(week, w) - print '\n'*l, + """Print a month's calendar.""" + w = max(2, w) + l = max(1, l) + print _center(month_name[month] + ' ' + `year`, 7*(w+1) - 1), + print '\n'*l, + print weekheader(w), + print '\n'*l, + for week in monthcalendar(year, month): + prweek(week, w) + print '\n'*l, # Spacing of month columns -_colwidth = 7*3 - 1 # Amount printed by prweek() -_spacing = ' '*4 # Spaces between columns +_colwidth = 7*3 - 1 # Amount printed by prweek() +_spacing = ' '*4 # Spaces between columns -# 3-column formatting for year calendars def format3c(a, b, c): - print _center(a, _colwidth), - print _spacing, - print _center(b, _colwidth), - print _spacing, - print _center(c, _colwidth) + """3-column formatting for year calendars""" + print _center(a, _colwidth), + print _spacing, + print _center(b, _colwidth), + print _spacing, + print _center(c, _colwidth) -# Print a year's calendar def prcal(year): - header = weekheader(2) - format3c('', `year`, '') - for q in range(January, January+12, 3): - print - format3c(month_name[q], month_name[q+1], month_name[q+2]) - format3c(header, header, header) - data = [] - height = 0 - for month in range(q, q+3): - cal = monthcalendar(year, month) - if len(cal) > height: height = len(cal) - data.append(cal) - for i in range(height): - for cal in data: - if i >= len(cal): - print ' '*_colwidth, - else: - prweek(cal[i], 2) - print _spacing, - print - -# Unrelated but handy function to calculate Unix timestamp from GMT + """Print a year's calendar.""" + header = weekheader(2) + format3c('', `year`, '') + for q in range(January, January+12, 3): + print + format3c(month_name[q], month_name[q+1], month_name[q+2]) + format3c(header, header, header) + data = [] + height = 0 + for month in range(q, q+3): + cal = monthcalendar(year, month) + if len(cal) > height: height = len(cal) + data.append(cal) + for i in range(height): + for cal in data: + if i >= len(cal): + print ' '*_colwidth, + else: + prweek(cal[i], 2) + print _spacing, + print + EPOCH = 1970 def timegm(tuple): - year, month, day, hour, minute, second = tuple[:6] - assert year >= EPOCH - assert 1 <= month <= 12 - days = 365*(year-EPOCH) + leapdays(EPOCH, year) - for i in range(1, month): - days = days + mdays[i] - if month > 2 and isleap(year): - days = days + 1 - days = days + day - 1 - hours = days*24 + hour - minutes = hours*60 + minute - seconds = minutes*60 + second - return seconds + """Unrelated but handy function to calculate Unix timestamp from GMT.""" + year, month, day, hour, minute, second = tuple[:6] + assert year >= EPOCH + assert 1 <= month <= 12 + days = 365*(year-EPOCH) + leapdays(EPOCH, year) + for i in range(1, month): + days = days + mdays[i] + if month > 2 and isleap(year): + days = days + 1 + days = days + day - 1 + hours = days*24 + hour + minutes = hours*60 + minute + seconds = minutes*60 + second + return seconds |