2008-02-25 Douglas S. Blank <dblank@cs.brynmawr.edu>

* src/gen/lib/test/date_test.py: new slash date tests
	* src/gen/lib/date.py: new get_slash(), fix slash conversions
	* src/DateHandler/_DateParser.py: parser sets slash date to Julian



svn: r10114
This commit is contained in:
Doug Blank 2008-02-25 05:46:45 +00:00
parent e801786edb
commit 6103ed9539
4 changed files with 42 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2008-02-25 Douglas S. Blank <dblank@cs.brynmawr.edu>
* src/gen/lib/test/date_test.py: new slash date tests
* src/gen/lib/date.py: new get_slash(), fix slash conversions
* src/DateHandler/_DateParser.py: parser sets slash date to Julian
2008-02-24 Brian Matherly <brian@gramps-project.org>
* src/GrampsDbUtils/_ReadXML.py:
* src/GrampsDbUtils/_GrmapsDbWriteXML.py:

View File

@ -593,6 +593,10 @@ class DateParser:
else:
date.set(qual, Date.MOD_NONE, cal, subdate)
if date.get_slash():
date.set_calendar(Date.CAL_JULIAN)
date.set_year(date.get_year()) # forces recalc
def invert_year(self, subdate):
return (subdate[0], subdate[1], -subdate[2], subdate[3])

View File

@ -384,11 +384,9 @@ class Date:
Slash date is given as year1/year2, where year1 is Julian year,
and year2=year1+1 the Gregorian year.
Slash date is already taken care of.
"""
if dateval[Date._POS_SL] :
return (dateval[Date._POS_YR]+1, dateval[Date._POS_MON],
dateval[Date._POS_DAY])
else :
return (dateval[Date._POS_YR], dateval[Date._POS_MON],
dateval[Date._POS_DAY])
def date_offset(dateval, offset):
@ -733,8 +731,17 @@ class Date:
"""
Return a Date copy based on year, month, and day offset.
"""
retval = Date(self)
orig_cal = self.calendar
if self.calendar != 0:
new_date = self.to_calendar("gregorian")
else:
new_date = self
retval = Date(new_date)
retval.set_yr_mon_day_offset(year, month, day)
if orig_cal == 0:
return retval
else:
retval.convert_calendar(orig_cal)
return retval
def copy_ymd(self, year=0, month=0, day=0):
@ -915,6 +922,13 @@ class Date:
"""
if calendar == self.calendar:
return
if self.get_slash():
if (self.calendar == Date.CAL_JULIAN and
calendar == Date.CAL_GREGORIAN):
self.set_year(self.get_year() + 1)
elif (self.calendar == Date.CAL_GREGORIAN and
calendar == Date.CAL_JULIAN):
self.set_year(self.get_year() - 1)
(year, month, day) = Date._calendar_change[calendar](self.sortval)
if self.is_compound():
ryear = max(self.dateval[Date._POS_RYR], 1)
@ -1040,3 +1054,11 @@ class Date:
retval = Date(self)
retval.convert_calendar(cal)
return retval
def get_slash(self):
"""
Return true if the date is a slash-date.
"""
return self._get_low_item_valid(Date._POS_SL)

View File

@ -298,7 +298,9 @@ def suite():
("aft jan 1, 2000", "before dec 31, 1999", False),
("before jan 1, 2000", "after dec 31, 1999", False),
("jan 1, 2000/1", "jan 1, 2000", False),
("jan 1, 2000/1", "jan 1, 2001", True),
("jan 1, 2000/1", "jan 1, 2001", False),
("jan 1, 2000/1", "jan 1, 2000/1", True),
("jan 1, 2000/1", "jan 14, 2001", True),
("about 1984", "about 2005", False),
("about 1990", "about 2005", True),
("about 2007", "about 2006", True),