From 11d24648f9bf2cd1484db1718ab54735a1859692 Mon Sep 17 00:00:00 2001 From: Alex Roitman Date: Thu, 1 Dec 2005 19:18:06 +0000 Subject: [PATCH] * src/dates/Date_nl.py: Add to CVS (bmcage). * src/dates/Makefile.am: Ship new file. svn: r5459 --- gramps2/ChangeLog | 2 + gramps2/src/dates/Date_nl.py | 232 ++++++++++++++++++++++++++++++++++ gramps2/src/dates/Makefile.am | 3 +- 3 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 gramps2/src/dates/Date_nl.py diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 2abeec700..615888c93 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,5 +1,7 @@ 2005-12-01 Alex Roitman * src/ReportUtils.py (child_str): Initialize text. + * src/dates/Date_nl.py: Add to CVS (bmcage). + * src/dates/Makefile.am: Ship new file. 2005-11-30 Don Allingham * src/ReadGedcom.py: fix mixing note assignment diff --git a/gramps2/src/dates/Date_nl.py b/gramps2/src/dates/Date_nl.py new file mode 100644 index 000000000..aee8d49e3 --- /dev/null +++ b/gramps2/src/dates/Date_nl.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2004-2005 Donald N. Allingham +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id$ + +""" +German-specific classes for parsing and displaying dates. +""" + +#------------------------------------------------------------------------- +# +# Python modules +# +#------------------------------------------------------------------------- +import re + +#------------------------------------------------------------------------- +# +# GRAMPS modules +# +#------------------------------------------------------------------------- +import Date +from DateParser import DateParser +from DateDisplay import DateDisplay + +#------------------------------------------------------------------------- +# +# Dutch parser +# +#------------------------------------------------------------------------- +class DateParserNL(DateParser): + + month_to_int = DateParser.month_to_int + # Always add dutch and flemish name variants no matter what the current locale is + month_to_int[u"januari"] = 1 + month_to_int[u"jan"] = 1 + # Add other common latin, local and historical variants + month_to_int[u"januaris"] = 1 + month_to_int[u"feber"] = 2 + month_to_int[u"februaris"] = 2 + month_to_int[u"merz"] = 2 + month_to_int[u"aprilis"] = 4 + month_to_int[u"maius"] = 5 + month_to_int[u"junius"] = 6 + month_to_int[u"julius"] = 7 + month_to_int[u"augst"] = 8 + month_to_int[u"7ber"] = 9 + month_to_int[u"7bris"] = 9 + month_to_int[u"8ber"] = 10 + month_to_int[u"8bris"] = 10 + month_to_int[u"9ber"] = 11 + month_to_int[u"9bris"] = 11 + month_to_int[u"10ber"] = 12 + month_to_int[u"10bris"] = 12 + month_to_int[u"xber"] = 12 + month_to_int[u"xbris"] = 12 + + modifier_to_int = { + u'voor' : Date.MOD_BEFORE, + u'na' : Date.MOD_AFTER, + u'tegen' : Date.MOD_ABOUT, + u'om' : Date.MOD_ABOUT, + u'rond' : Date.MOD_ABOUT, + u'circa' : Date.MOD_ABOUT, + u'ca.' : Date.MOD_ABOUT, + } + + calendar_to_int = { + u'Gregoriaans' : Date.CAL_GREGORIAN, + u'Greg.' : Date.CAL_GREGORIAN, + u'Juliaans' : Date.CAL_JULIAN, + u'Jul.' : Date.CAL_JULIAN, + u'Hebreeuws' : Date.CAL_HEBREW, + u'Hebr.' : Date.CAL_HEBREW, + u'Islamitisch' : Date.CAL_ISLAMIC, + u'Isl.' : Date.CAL_ISLAMIC, + u'Franse republiek': Date.CAL_FRENCH, + u'Fran.' : Date.CAL_FRENCH, + u'Persisch' : Date.CAL_PERSIAN, + } + + quality_to_int = { + u'geschat' : Date.QUAL_ESTIMATED, + u'gesch.' : Date.QUAL_ESTIMATED, + u'berekend' : Date.QUAL_CALCULATED, + u'ber.' : Date.QUAL_CALCULATED, + } + + bce = DateParser.bce + ["voor onze tijdrekening", "voor Christus", "v\. Chr\."] + + def init_strings(self): + DateParser.init_strings(self) + self._span = re.compile("(van)\s+(?P.+)\s+(tot)\s+(?P.+)",re.IGNORECASE) + self._range = re.compile("tussen\s+(?P.+)\s+en\s+(?P.+)", re.IGNORECASE) + self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str, + re.IGNORECASE) + self._jtext2= re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str, + re.IGNORECASE) + +#------------------------------------------------------------------------- +# +# Dutch display +# +#------------------------------------------------------------------------- +class DateDisplayNL(DateDisplay): + + calendar = ( + "", u" (Juliaans)", u" (Hebreeuws)", + u" (Franse Republiek)", u" (Persisch)", u" (Islamitisch)" + ) + + _mod_str = ("",u"voor ",u"na ",u"rond ","","","") + + _qual_str = ("",u"geschat ",u"berekend ") + + _bce_str = "%s v. Chr." + + formats = ( + "JJJJ-MM-DD (ISO)", "Numerisch", "Maand Dag Jaar", + "MAAND Dag Jaar", "Dag. Maand Jaar", "Dag. MAAND Jaar", "Dag Maand Jaar" + ) + + def _display_gregorian(self,date_val): + year = self._slash_year(date_val[2],date_val[3]) + if self.format == 0: + value = self.display_iso(date_val) + elif self.format == 1: + if date_val[0] == 0 and date_val[1] == 0: + value = str(date_val[2]) + else: + value = self._tformat.replace('%m',str(date_val[1])) + value = value.replace('%d',str(date_val[0])) + value = value.replace('%Y',str(date_val[2])) + elif self.format == 2: + # Month Day, Year + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = "%s %s" % (self._months[date_val[1]],year) + else: + value = "%s %d, %s" % (self._months[date_val[1]],date_val[0],year) + elif self.format == 3: + # MON Day, Year + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = "%s %s" % (self._MONS[date_val[1]],year) + else: + value = "%s %d, %s" % (self._MONS[date_val[1]],date_val[0],year) + elif self.format == 4: + # Day. Month Year + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = "%s %s" % (self._months[date_val[1]],year) + else: + value = "%d. %s %s" % (date_val[0],self._months[date_val[1]],year) + elif self.format == 5: + # Day. MON Year + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = "%s %s" % (self._MONS[date_val[1]],year) + else: + value = "%d. %s %s" % (date_val[0],self._MONS[date_val[1]],year) + else: + # Day Mon Year + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = "%s %s" % (self._MONS[date_val[1]],year) + else: + value = "%d %s %s" % (date_val[0],self._MONS[date_val[1]],year) + return value + + def display(self,date): + """ + Returns a text string representing the date. + """ + mod = date.get_modifier() + cal = date.get_calendar() + qual = date.get_quality() + start = date.get_start_date() + + qual_str = self._qual_str[qual] + + if mod == Date.MOD_TEXTONLY: + return date.get_text() + elif start == Date.EMPTY: + return "" + elif mod == Date.MOD_SPAN: + d1 = self.display_cal[cal](start) + d2 = self.display_cal[cal](date.get_stop_date()) + return "%s%s %s %s %s%s" % (qual_str,u'van',d1,u'tot',d2,self.calendar[cal]) + elif mod == Date.MOD_RANGE: + d1 = self.display_cal[cal](start) + d2 = self.display_cal[cal](date.get_stop_date()) + return "%stussen %s en %s%s" % (qual_str,d1,d2,self.calendar[cal]) + else: + text = self.display_cal[date.get_calendar()](start) + return "%s%s%s%s" % (qual_str,self._mod_str[mod],text,self.calendar[cal]) + +#------------------------------------------------------------------------- +# +# Register classes +# +#------------------------------------------------------------------------- +from DateHandler import register_datehandler +register_datehandler(('nl_NL','dutch','nl_BE','nl'),DateParserNL, DateDisplayNL) diff --git a/gramps2/src/dates/Makefile.am b/gramps2/src/dates/Makefile.am index a2b011a2e..cc6852783 100644 --- a/gramps2/src/dates/Makefile.am +++ b/gramps2/src/dates/Makefile.am @@ -11,7 +11,8 @@ pkgdata_PYTHON = \ Date_fr.py\ Date_es.py\ Date_fi.py\ - Date_sv.py + Date_sv.py\ + Date_nl.py pkgpyexecdir = @pkgpyexecdir@/dates pkgpythondir = @pkgpythondir@/dates