1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """
24 U.S English date display class. Should serve as the base class for all
25 localized tasks.
26 """
27
28 __author__ = "Donald N. Allingham"
29 __version__ = "$Revision: 6992 $"
30
31
32
33
34
35
36 import logging
37 log = logging.getLogger(".DateDisplay")
38
39
40
41
42
43
44 from RelLib import Date
45 import GrampsLocale
46
47
48
49
50
51
53
54 _months = GrampsLocale.long_months
55 _MONS = GrampsLocale.short_months
56
57 _tformat = GrampsLocale.tformat
58
59 _hebrew = (
60 "", "Tishri", "Heshvan", "Kislev", "Tevet", "Shevat",
61 "AdarI", "AdarII", "Nisan", "Iyyar", "Sivan", "Tammuz",
62 "Av", "Elul"
63 )
64
65 _french = (
66 u'',
67 u"Vendémiaire",
68 u'Brumaire',
69 u'Frimaire',
70 u"Nivôse",
71 u"Pluviôse",
72 u"Ventôse",
73 u'Germinal',
74 u"Floréal",
75 u'Prairial',
76 u'Messidor',
77 u'Thermidor',
78 u'Fructidor',
79 u'Extra',
80 )
81
82 _persian = (
83 "", "Farvardin", "Ordibehesht", "Khordad", "Tir",
84 "Mordad", "Shahrivar", "Mehr", "Aban", "Azar",
85 "Dey", "Bahman", "Esfand"
86 )
87
88 _islamic = (
89 "", "Muharram", "Safar", "Rabi`al-Awwal", "Rabi`ath-Thani",
90 "Jumada l-Ula", "Jumada t-Tania", "Rajab", "Sha`ban",
91 "Ramadan", "Shawwal", "Dhu l-Qa`da", "Dhu l-Hijja"
92 )
93
94 formats = ("YYYY-MM-DD (ISO)",)
95
96 calendar = (
97 ""," (Julian)"," (Hebrew)"," (French Republican)",
98 " (Persian)"," (Islamic)"
99 )
100
101 _mod_str = ("","before ","after ","about ","","","")
102
103 _qual_str = ("","estimated ","calculated ")
104
105 _bce_str = "%s B.C.E."
106
108 self.display_cal = [
109 self._display_gregorian,
110 self._display_julian,
111 self._display_hebrew,
112 self._display_french,
113 self._display_persian,
114 self._display_islamic,
115 ]
116
117 self.verify_format(format)
118 if format == None:
119 self.format = 0
120 else:
121 self.format = format
122
125
128
130 """
131 Similar to the display task, except that if the value is a text only
132 value, it is enclosed in quotes.
133 """
134 if date.get_modifier() == Date.MOD_TEXTONLY:
135 return '"%s"' % self.display(date)
136 else:
137 return self.display(date)
138
161
163 if val < 0:
164 val = - val
165
166 if slash:
167 if val % 100 == 99:
168 year = "%d/%d" % (val,(val%1000)+1)
169 elif val % 10 == 9:
170 year = "%d/%d" % (val,(val%100)+1)
171 else:
172 year = "%d/%d" % (val,(val%10)+1)
173 else:
174 year = "%d" % (val)
175
176 return year
177
179
180 year = self._slash_year(date_val[2],date_val[3])
181
182 if False:
183 if date_val[1] == 0:
184 value = year
185 else:
186 value = "%s-%02d" % (year,date_val[1])
187 else:
188 value = "%s-%02d-%02d" % (year,date_val[1],date_val[0])
189 if date_val[2] < 0:
190 return self._bce_str % value
191 else:
192 return value
193
194 - def text_display(self,date):
195 """
196 Similar to the display task, except that if the value is a text only
197 value, it is enclosed in quotes.
198 """
199 return date.get_text()
200
201
203 year = self._slash_year(date_val[2],date_val[3])
204 if self.format == 0:
205 return self.display_iso(date_val)
206 elif self.format == 1:
207 if date_val[3]:
208 return self.display_iso(date_val)
209 else:
210 if date_val[0] == 0 and date_val[1] == 0:
211 value = str(date_val[2])
212 else:
213 value = self._tformat.replace('%m',str(date_val[1]))
214 value = value.replace('%d',str(date_val[0]))
215 value = value.replace('%Y',str(abs(date_val[2])))
216 value = value.replace('-','/')
217 elif self.format == 2:
218
219 if date_val[0] == 0:
220 if date_val[1] == 0:
221 value = year
222 else:
223 value = "%s %s" % (self._months[date_val[1]],year)
224 else:
225 value = "%s %d, %s" % (self._months[date_val[1]],date_val[0],year)
226 elif self.format == 3:
227
228 if date_val[0] == 0:
229 if date_val[1] == 0:
230 value = year
231 else:
232 value = "%s %s" % (self._MONS[date_val[1]],year)
233 else:
234 value = "%s %d, %s" % (self._MONS[date_val[1]],date_val[0],year)
235 elif self.format == 4:
236
237 if date_val[0] == 0:
238 if date_val[1] == 0:
239 value = year
240 else:
241 value = "%s %s" % (self._months[date_val[1]],year)
242 else:
243 value = "%d %s %s" % (date_val[0],self._months[date_val[1]],year)
244 else:
245
246 if date_val[0] == 0:
247 if date_val[1] == 0:
248 value = year
249 else:
250 value = "%s %s" % (self._MONS[date_val[1]],year)
251 else:
252 value = "%d %s %s" % (date_val[0],self._MONS[date_val[1]],year)
253 if date_val[2] < 0:
254 return self._bce_str % value
255 else:
256 return value
257
259
260 return self._display_gregorian(date_val)
261
263 year = abs(date_val[2])
264 if self.format == 0 or self.format == 1:
265 return self.display_iso(date_val)
266 else:
267 if date_val[0] == 0:
268 if date_val[1] == 0:
269 value = year
270 else:
271 value = u"%s %d" % (month_list[date_val[1]],year)
272 else:
273 value = u"%s %d, %s" % (month_list[date_val[1]],date_val[0],year)
274 if date_val[2] < 0:
275 return self._bce_str % value
276 else:
277 return value
278
280 year = abs(date_val[2])
281 if self.format == 0 or self.format == 1:
282 return self.display_iso(date_val)
283 else:
284 if date_val[0] == 0:
285 if date_val[1] == 0:
286 value = year
287 else:
288 value = u"%s %d" % (self._french[date_val[1]],year)
289 else:
290 value = u"%d %s %s" % (date_val[0],self._french[date_val[1]],year)
291 if date_val[2] < 0:
292 return self._bce_str % value
293 else:
294 return value
295
297 return self._display_calendar(date_val,self._hebrew)
298
300 return self._display_calendar(date_val,self._persian)
301
303 return self._display_calendar(date_val,self._islamic)
304
306 """
307 English language date display class.
308 """
309
310 formats = (
311 "YYYY-MM-DD (ISO)", "Numerical", "Month Day, Year",
312 "MON DAY, YEAR", "Day Month Year", "DAY MON YEAR"
313 )
314
316 """
317 Creates a DateDisplay class that converts a Date object to a string
318 of the desired format. The format value must correspond to the format
319 list value (DateDisplay.format[]).
320 """
321
322 DateDisplay.__init__(self,format)
323