diff --git a/src/gen/lib/date.py b/src/gen/lib/date.py index a2b2ba94e..bca83190a 100644 --- a/src/gen/lib/date.py +++ b/src/gen/lib/date.py @@ -1643,3 +1643,100 @@ def Today(): current_date.set_yr_mon_day(*time.localtime(time.time())[0:3]) return current_date +#------------------------------------------------------------------------- +# +# GEDCOM Date Constants +# +#------------------------------------------------------------------------- +HMONTH = [ + "", "ELUL", "TSH", "CSH", "KSL", "TVT", "SHV", "ADR", + "ADS", "NSN", "IYR", "SVN", "TMZ", "AAV", "ELL" ] + +FMONTH = [ + "", "VEND", "BRUM", "FRIM", "NIVO", "PLUV", "VENT", + "GERM", "FLOR", "PRAI", "MESS", "THER", "FRUC", "COMP"] + +MONTH = [ + "", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", + "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ] + +CALENDAR_MAP = { + Date.CAL_HEBREW : (HMONTH, '@#DHEBREW@'), + Date.CAL_FRENCH : (FMONTH, '@#DFRENCH R@'), + Date.CAL_JULIAN : (MONTH, '@#DJULIAN@'), + Date.CAL_SWEDISH : (MONTH, '@#DUNKNOWN@'), + } + +DATE_MODIFIER = { + Date.MOD_ABOUT : "ABT", + Date.MOD_BEFORE : "BEF", + Date.MOD_AFTER : "AFT", + #Date.MOD_INTERPRETED : "INT", + } + +DATE_QUALITY = { + Date.QUAL_CALCULATED : "CAL", + Date.QUAL_ESTIMATED : "EST", +} + +#------------------------------------------------------------------------- +# +# Date Functions +# +#------------------------------------------------------------------------- +def make_gedcom_date(subdate, calendar, mode, quality): + """ + Convert a GRAMPS date structure into a GEDCOM compatible date. + """ + retval = "" + (day, mon, year) = subdate[0:3] + (mmap, prefix) = CALENDAR_MAP.get(calendar, (MONTH, "")) + if year < 0: + year = -year + bce = " B.C." + else: + bce = "" + try: + retval = __build_date_string(day, mon, year, bce, mmap) + except IndexError: + print "Month index error - %d" % mon + retval = "%d%s" % (year, bce) + if calendar == Date.CAL_SWEDISH: + # If Swedish calendar use ISO for for date and append (swedish) + # to indicate calandar + if year and not mon and not day: + retval = "%i" % (year) + else: + retval = "%i-%02i-%02i" % (year, mon, day) + retval = retval + " (swedish)" + # Skip prefix @#DUNKNOWN@ as it seems + # not used in all other genealogy applications. + # GRAMPS can handle it on import, but not with (swedish) appended + # to explain what calendar, the unknown refer to + prefix = "" + if prefix: + retval = "%s %s" % (prefix, retval) + if mode in DATE_MODIFIER: + retval = "%s %s" % (DATE_MODIFIER[mode], retval) + if quality in DATE_QUALITY: + retval = "%s %s" % (DATE_QUALITY[quality], retval) + return retval + +def __build_date_string(day, mon, year, bce, mmap): + """ + Build a date string from the supplied information. + """ + if day == 0: + if mon == 0: + retval = '%d%s' % (year, bce) + elif year == 0: + retval = '(%s)' % mmap[mon] + else: + retval = "%s %d%s" % (mmap[mon], year, bce) + elif mon == 0: + retval = '%d%s' % (year, bce) + elif year == 0: + retval = "(%d %s)" % (day, mmap[mon]) + else: + retval = "%d %s %d%s" % (day, mmap[mon], year, bce) + return retval diff --git a/src/plugins/export/ExportGedcom.py b/src/plugins/export/ExportGedcom.py index 85594d861..cc6fa96d9 100644 --- a/src/plugins/export/ExportGedcom.py +++ b/src/plugins/export/ExportGedcom.py @@ -39,6 +39,7 @@ import time # #------------------------------------------------------------------------- import gen.lib +from gen.lib.date import make_gedcom_date, MONTH import const import GrampsDbUtils._GedcomInfo as GedcomInfo import Errors @@ -59,43 +60,6 @@ NEEDS_PARAMETER = set( ["CAST", "DSCR", "EDUC", "IDNO", "NATI", "NCHI", "NMR", "OCCU", "PROP", "RELI", "SSN", "TITL"]) -#------------------------------------------------------------------------- -# -# Calendar month names -# -#------------------------------------------------------------------------- - -HMONTH = [ - "", "ELUL", "TSH", "CSH", "KSL", "TVT", "SHV", "ADR", - "ADS", "NSN", "IYR", "SVN", "TMZ", "AAV", "ELL" ] - -FMONTH = [ - "", "VEND", "BRUM", "FRIM", "NIVO", "PLUV", "VENT", - "GERM", "FLOR", "PRAI", "MESS", "THER", "FRUC", "COMP"] - -MONTH = [ - "", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", - "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ] - -CALENDAR_MAP = { - gen.lib.Date.CAL_HEBREW : (HMONTH, '@#DHEBREW@'), - gen.lib.Date.CAL_FRENCH : (FMONTH, '@#DFRENCH R@'), - gen.lib.Date.CAL_JULIAN : (MONTH, '@#DJULIAN@'), - gen.lib.Date.CAL_SWEDISH : (MONTH, '@#DUNKNOWN@'), - } - -DATE_MODIFIER = { - gen.lib.Date.MOD_ABOUT : "ABT", - gen.lib.Date.MOD_BEFORE : "BEF", - gen.lib.Date.MOD_AFTER : "AFT", - #RelLib.Date.MOD_INTERPRETED : "INT", - } - -DATE_QUALITY = { - gen.lib.Date.QUAL_CALCULATED : "CAL", - gen.lib.Date.QUAL_ESTIMATED : "EST", -} - LDS_ORD_NAME = { gen.lib.LdsOrd.BAPTISM : 'BAPL', gen.lib.LdsOrd.ENDOWMENT : 'ENDL', @@ -184,82 +148,6 @@ def sort_handles_by_id(handle_list, handle_to_object): sorted_list.sort() return sorted_list -#------------------------------------------------------------------------- -# -# make_date -# -#------------------------------------------------------------------------- -def make_date(subdate, calendar, mode, quality): - """ - Convert a GRAMPS date structure into a GEDCOM compatible date. - """ - retval = "" - (day, mon, year) = subdate[0:3] - - (mmap, prefix) = CALENDAR_MAP.get(calendar, (MONTH, "")) - - if year < 0: - year = -year - bce = " B.C." - else: - bce = "" - - try: - retval = __build_date_string(day, mon, year, bce, mmap) - except IndexError: - print "Month index error - %d" % mon - retval = "%d%s" % (year, bce) - - if calendar == gen.lib.Date.CAL_SWEDISH: - # If Swedish calendar use ISO for for date and append (swedish) - # to indicate calandar - if year and not mon and not day: - retval = "%i" % (year) - else: - retval = "%i-%02i-%02i" % (year, mon, day) - retval = retval + " (swedish)" - # Skip prefix @#DUNKNOWN@ as it seems - # not used in all other genealogy applications. - # GRAMPS can handle it on import, but not with (swedish) appended - # to explain what calendar, the unknown refer to - prefix = "" - - if prefix: - retval = "%s %s" % (prefix, retval) - - if mode in DATE_MODIFIER: - retval = "%s %s" % (DATE_MODIFIER[mode], retval) - - if quality in DATE_QUALITY: - retval = "%s %s" % (DATE_QUALITY[quality], retval) - - return retval - -#------------------------------------------------------------------------- -# -# __build_date_string -# -#------------------------------------------------------------------------- -def __build_date_string(day, mon, year, bce, mmap): - """ - Build a date string from the supplied information. - """ - if day == 0: - if mon == 0: - retval = '%d%s' % (year, bce) - elif year == 0: - retval = '(%s)' % mmap[mon] - else: - retval = "%s %d%s" % (mmap[mon], year, bce) - elif mon == 0: - retval = '%d%s' % (year, bce) - elif year == 0: - retval = "(%d %s)" % (day, mmap[mon]) - else: - retval = "%d %s %d%s" % (day, mmap[mon], year, bce) - return retval - - #------------------------------------------------------------------------- # # breakup @@ -1318,7 +1206,7 @@ class GedcomWriter(BasicUtils.UpdateCallback): def __date(self, level, date): """ Write the 'DATE' GEDCOM token, along with the date in GEDCOM's - expected formta. + expected format. """ start = date.get_start_date() if start != gen.lib.Date.EMPTY: @@ -1327,14 +1215,14 @@ class GedcomWriter(BasicUtils.UpdateCallback): quality = date.get_quality() if mod == gen.lib.Date.MOD_SPAN: val = "FROM %s TO %s" % ( - make_date(start, cal, mod, quality), - make_date(date.get_stop_date(), cal, mod, quality)) + make_gedcom_date(start, cal, mod, quality), + make_gedcom_date(date.get_stop_date(), cal, mod, quality)) elif mod == gen.lib.Date.MOD_RANGE: val = "BET %s AND %s" % ( - make_date(start, cal, mod, quality), - make_date(date.get_stop_date(), cal, mod, quality)) + make_gedcom_date(start, cal, mod, quality), + make_gedcom_date(date.get_stop_date(), cal, mod, quality)) else: - val = make_date(start, cal, mod, quality) + val = make_gedcom_date(start, cal, mod, quality) self.__writeln(level, 'DATE', val) elif date.get_text(): self.__writeln(level, 'DATE', date.get_text())