"""Locale-specific calendar names (day-of-week and month-of-year)
These values are those returned by the calendar module. Available
productions:
locale_day_names
locale_day_names_uc
locale_day_names_lc
Names for the days of the week
locale_day_abbrs
locale_day_abbrs_uc
locale_day_abbrs_lc
Short-forms (3 characters normally) for
the days of the week.
locale_month_names
locale_month_names_uc
locale_month_names_lc
Names for the months of the year
locale_month_abbrs
locale_month_abbrs_uc
locale_month_abbrs_lc
Short-forms (3 characters normally) for
the months of the year
Interpreters:
MonthNameInterpreter
DayNameInterpreter
Both offer the ability to set an index other
than the default (of 1) for the first item in
the list.
"""
import calendar, string
from simpleparse import objectgenerator, common
c = {}
da = calendar.day_abbr[:]
dn = calendar.day_name[:]
ma = calendar.month_abbr[:]
mn = calendar.month_name[:]
def _build( name, set ):
# make sure longest equal-prefix items are first
set = set[:]
set.sort()
set.reverse()
l,u,r = [],[],[]
for item in set:
l.append( objectgenerator.Literal( value = string.lower(item) ))
u.append( objectgenerator.Literal( value = string.upper(item) ))
r.append( objectgenerator.Literal( value = item ))
c[ name + '_lc' ] = objectgenerator.FirstOfGroup( children = l )
c[ name + '_uc' ] = objectgenerator.FirstOfGroup( children = u )
c[ name ] = objectgenerator.FirstOfGroup( children = r )
_build( 'locale_day_names', dn )
_build( 'locale_day_abbrs', da )
_build( 'locale_month_names', mn )
_build( 'locale_month_abbrs', ma )
da = map(string.lower, da )
dn = map(string.lower, dn )
ma = map(string.lower, ma )
mn = map(string.lower, mn )
common.share( c )
class NameInterpreter:
offset = 1
def __init__( self, offset = 1 ):
self.offset = offset
def __call__( self, (tag, left, right, children), buffer ):
value = string.lower( buffer[left:right] )
for table in self.tables:
try:
return table.index( value )+ self.offset
except ValueError:
pass
raise ValueError( """Unrecognised (but parsed) %s name %s at character %s"""%( self.nameType, value, left))
class MonthNameInterpreter( NameInterpreter):
"""Interpret a month-of-year name as an integer index
Pass an "offset" value to __init__ to use an offset other
than 1 (Monday = 1), normally 0 (Monday = 0)
"""
nameType = "Month"
tables = (mn,ma)
class DayNameInterpreter( NameInterpreter ):
"""Interpret a day-of-week name as an integer index
Pass an "offset" value to __init__ to use an offset other
than 1 (January = 1), normally 0 (January = 0)
"""
nameType = "Day"
tables = (dn,da)
syntax highlighted by Code2HTML, v. 0.9.1