5505: Need a date handler for Hungarian locale
This commit is contained in:
parent
5a5e7a21c4
commit
96efa177ba
@ -48,6 +48,7 @@ from . import _date_es
|
|||||||
from . import _date_fi
|
from . import _date_fi
|
||||||
from . import _date_fr
|
from . import _date_fr
|
||||||
from . import _date_hr
|
from . import _date_hr
|
||||||
|
from . import _date_hu
|
||||||
from . import _date_it
|
from . import _date_it
|
||||||
from . import _date_ja
|
from . import _date_ja
|
||||||
from . import _date_lt
|
from . import _date_lt
|
||||||
|
368
gramps/gen/datehandler/_date_hu.py
Normal file
368
gramps/gen/datehandler/_date_hu.py
Normal file
@ -0,0 +1,368 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
|
#
|
||||||
|
# Copyright (C) 2004-2006 Donald N. Allingham
|
||||||
|
# Copyright (C) 2015 Lajos Nemeséri <nemeseril@gmail.com>
|
||||||
|
#
|
||||||
|
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
"""
|
||||||
|
Hungarian-specific classes for parsing and displaying dates.
|
||||||
|
"""
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Python modules
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
import re
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# GRAMPS modules
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
from ..lib.date import Date
|
||||||
|
from ._dateparser import DateParser
|
||||||
|
from ._datedisplay import DateDisplay
|
||||||
|
from ._datehandler import register_datehandler
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Hungarian parser
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class DateParserHU(DateParser):
|
||||||
|
|
||||||
|
|
||||||
|
month_to_int = DateParser.month_to_int
|
||||||
|
|
||||||
|
month_to_int["-"]=0 #to make the Zero month to work
|
||||||
|
|
||||||
|
month_to_int["január"] = 1
|
||||||
|
month_to_int["jan"] = 1
|
||||||
|
month_to_int["jan."] = 1
|
||||||
|
month_to_int["I"] = 1
|
||||||
|
# month_to_int["i"] = 1
|
||||||
|
|
||||||
|
month_to_int["február"] = 2
|
||||||
|
month_to_int["feb"] = 2
|
||||||
|
month_to_int["feb."] = 2
|
||||||
|
month_to_int["II"] = 2
|
||||||
|
# month_to_int["ii"] = 2
|
||||||
|
|
||||||
|
month_to_int["március"] = 3
|
||||||
|
month_to_int["márc"] = 3
|
||||||
|
month_to_int["márc."] = 3
|
||||||
|
month_to_int["III"] = 3
|
||||||
|
# month_to_int["iii"] = 3
|
||||||
|
|
||||||
|
month_to_int["április"] = 4
|
||||||
|
month_to_int["ápr"] = 4
|
||||||
|
month_to_int["ápr."] = 4
|
||||||
|
month_to_int["IV"] = 4
|
||||||
|
# month_to_int["iv"] = 4
|
||||||
|
|
||||||
|
month_to_int["május"] = 5
|
||||||
|
month_to_int["máj"] = 5
|
||||||
|
month_to_int["máj."] = 5
|
||||||
|
month_to_int["V"] = 5
|
||||||
|
# month_to_int["v"] = 5
|
||||||
|
|
||||||
|
month_to_int["június"] = 6
|
||||||
|
month_to_int["jún"] = 6
|
||||||
|
month_to_int["jún."] = 6
|
||||||
|
month_to_int["VI"] = 6
|
||||||
|
# month_to_int["vi"] = 6
|
||||||
|
|
||||||
|
month_to_int["július"] = 7
|
||||||
|
month_to_int["júl"] = 7
|
||||||
|
month_to_int["júl."] = 7
|
||||||
|
month_to_int["VII"] = 7
|
||||||
|
# month_to_int["vii"] = 7
|
||||||
|
|
||||||
|
month_to_int["augusztus"] = 8
|
||||||
|
month_to_int["aug"] = 8
|
||||||
|
month_to_int["aug."] = 8
|
||||||
|
month_to_int["VIII"] = 8
|
||||||
|
# month_to_int["viii"] = 8
|
||||||
|
|
||||||
|
month_to_int["szeptember"] = 9
|
||||||
|
month_to_int["szept"] = 9
|
||||||
|
month_to_int["szept."] = 9
|
||||||
|
month_to_int["IX"] = 9
|
||||||
|
# month_to_int["ix"] = 9
|
||||||
|
|
||||||
|
month_to_int["október"] = 10
|
||||||
|
month_to_int["okt"] = 10
|
||||||
|
month_to_int["okt."] = 10
|
||||||
|
month_to_int["X"] = 10
|
||||||
|
# month_to_int["x"] = 10
|
||||||
|
|
||||||
|
month_to_int["november"] = 11
|
||||||
|
month_to_int["nov"] = 11
|
||||||
|
month_to_int["nov."] = 11
|
||||||
|
month_to_int["XI"] = 11
|
||||||
|
# month_to_int["xi"] = 11
|
||||||
|
|
||||||
|
month_to_int["december"] = 12
|
||||||
|
month_to_int["dec"] = 12
|
||||||
|
month_to_int["dec."] = 12
|
||||||
|
month_to_int["XII"] = 12
|
||||||
|
# month_to_int["xii"] = 12
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Alternative and latin names - not verified
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# Other common latin names
|
||||||
|
|
||||||
|
# month_to_int["januaris"] = 01
|
||||||
|
# month_to_int["januarii"] = 01
|
||||||
|
# month_to_int["januarius"] = 01
|
||||||
|
# month_to_int["februaris"] = 02
|
||||||
|
# month_to_int["februarii"] = 02
|
||||||
|
# month_to_int["februarius"] = 02
|
||||||
|
# month_to_int["martii"] = 03
|
||||||
|
# month_to_int["martius"] = 03
|
||||||
|
# month_to_int["aprilis"] = 04
|
||||||
|
# month_to_int["maius"] = 05
|
||||||
|
# month_to_int["maii"] = 05
|
||||||
|
# month_to_int["junius"] = 06
|
||||||
|
# month_to_int["junii"] = 06
|
||||||
|
# month_to_int["julius"] = 07
|
||||||
|
# month_to_int["julii"] = 07
|
||||||
|
# month_to_int["augustus"] = 08
|
||||||
|
# month_to_int["augusti"] = 08
|
||||||
|
# month_to_int["septembris"] = 09
|
||||||
|
# month_to_int["7bris"] = 09
|
||||||
|
# month_to_int["september"] = 09
|
||||||
|
# month_to_int["october"] = 10
|
||||||
|
# month_to_int["octobris"] = 10
|
||||||
|
# month_to_int["8bris"] = 10
|
||||||
|
# month_to_int["novembris"] = 11
|
||||||
|
# month_to_int["9bris"] = 11
|
||||||
|
# month_to_int["november"] = 11
|
||||||
|
# month_to_int["decembris"] = 12
|
||||||
|
# month_to_int["10bris"] = 12
|
||||||
|
# month_to_int["xbris"] = 12
|
||||||
|
# month_to_int["december"] = 12
|
||||||
|
|
||||||
|
# old Hungarian names
|
||||||
|
|
||||||
|
# month_to_int["Boldogasszony hava"] = 01
|
||||||
|
# month_to_int["Fergeteg hava"] = 01
|
||||||
|
# month_to_int["Böjtelő hava"] = 02
|
||||||
|
# month_to_int["Jégbontó hava"] = 02
|
||||||
|
# month_to_int["Böjtmás hava"] = 03
|
||||||
|
# month_to_int["Kikelet hava"] = 03
|
||||||
|
# month_to_int["Szent György hava"] = 04
|
||||||
|
# month_to_int["Szelek hava"] = 04
|
||||||
|
# month_to_int["Pünkösd hava"] = 05
|
||||||
|
# month_to_int["Ígéret hava"] = 05
|
||||||
|
# month_to_int["Szent Iván hava"] = 06
|
||||||
|
# month_to_int["Napisten hava"] = 06
|
||||||
|
# month_to_int["Szent Jakab hava"] = 07
|
||||||
|
# month_to_int["Áldás hava"] = 07
|
||||||
|
# month_to_int["Kisasszony hava"] = 08
|
||||||
|
# month_to_int["Újkenyér hava"] = 08
|
||||||
|
# month_to_int["Szent Mihály hava"] = 09
|
||||||
|
# month_to_int["Földanya hava"] = 09
|
||||||
|
# month_to_int["Mindszent hava"] = 10
|
||||||
|
# month_to_int["Magvető hava"] = 10
|
||||||
|
# month_to_int["Szent András hava"] = 11
|
||||||
|
# month_to_int["Enyészet hava"] = 11
|
||||||
|
# month_to_int["Karácsony hava"] = 12
|
||||||
|
# month_to_int["Álom hava"] = 12
|
||||||
|
|
||||||
|
modifier_after_to_int={
|
||||||
|
'előtt' : Date.MOD_BEFORE,
|
||||||
|
'körül' : Date.MOD_ABOUT,
|
||||||
|
'után' : Date.MOD_AFTER,
|
||||||
|
}
|
||||||
|
|
||||||
|
quality_to_int = {
|
||||||
|
'becsült' : Date.QUAL_ESTIMATED,
|
||||||
|
'hozzávetőleg' : Date.QUAL_ESTIMATED,
|
||||||
|
'becs.' : Date.QUAL_ESTIMATED,
|
||||||
|
'számított' : Date.QUAL_CALCULATED,
|
||||||
|
'körülbelül' : Date.QUAL_ESTIMATED,
|
||||||
|
'számolt' : Date.QUAL_CALCULATED,
|
||||||
|
'szám.' : Date.QUAL_CALCULATED,
|
||||||
|
}
|
||||||
|
|
||||||
|
bce = ["időszámításunk előtt", "időszámítás előtt", "i. e.",
|
||||||
|
"Krisztus előtt", "Krisztus előtti", "Kr. e."] + DateParser.bce
|
||||||
|
|
||||||
|
|
||||||
|
calendar_to_int = {
|
||||||
|
'Gergely' : Date.CAL_GREGORIAN,
|
||||||
|
'Julián' : Date.CAL_JULIAN,
|
||||||
|
'héber' : Date.CAL_HEBREW,
|
||||||
|
'iszlám' : Date.CAL_ISLAMIC,
|
||||||
|
'francia köztársasági' : Date.CAL_FRENCH,
|
||||||
|
'perzsa' : Date.CAL_PERSIAN,
|
||||||
|
'svéd' : Date.CAL_SWEDISH,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def init_strings(self):
|
||||||
|
# Compiles regular expression strings for matching dates
|
||||||
|
DateParser.init_strings(self)
|
||||||
|
|
||||||
|
self._numeric = re.compile(
|
||||||
|
"((\d+)[/\.])?\s*((\d+)[/\.])?\s*(\d+)[/\. ]?$")
|
||||||
|
self._text2 = re.compile('((\d+)(/\d+)?\.)?\s+?%s\.?\s*(\d+\.)?\s*$'
|
||||||
|
% self._mon_str, re.IGNORECASE)
|
||||||
|
_span_1 = ['-tó\(ő\)l', '-tól', '-től']
|
||||||
|
_span_2 = ['-ig']
|
||||||
|
_range_1 = ['és']
|
||||||
|
_range_2 = ['között']
|
||||||
|
self._span = re.compile("(?P<start>.+)(%s)\s+(?P<stop>.+)(%s)" %
|
||||||
|
('|'.join(_span_1), '|'.join(_span_2)),
|
||||||
|
re.IGNORECASE)
|
||||||
|
self._range = re.compile("(?P<start>.+)\s+(%s)\s+(?P<stop>.+)\s+(%s)" %
|
||||||
|
('|'.join(_range_1), '|'.join(_range_2)),
|
||||||
|
re.IGNORECASE)
|
||||||
|
|
||||||
|
|
||||||
|
def _get_int(self, val):
|
||||||
|
"""
|
||||||
|
Convert the string to an integer if the value is not None. If the
|
||||||
|
value is None, a zero is returned
|
||||||
|
"""
|
||||||
|
if val is None:
|
||||||
|
return 0
|
||||||
|
else:
|
||||||
|
return int(val.replace('.', ''))
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Hungarian display
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class DateDisplayHU(DateDisplay):
|
||||||
|
"""
|
||||||
|
Hungarian language date display class.
|
||||||
|
"""
|
||||||
|
|
||||||
|
_bce_str = "i. e. %s"
|
||||||
|
|
||||||
|
roman_months=(
|
||||||
|
"-.", "I.", "II.", "III.", "IV.", "V.", "VI.",
|
||||||
|
"VII.", "VIII.", "IX.", "X.", "XI.", "XII."
|
||||||
|
)
|
||||||
|
|
||||||
|
formats = (
|
||||||
|
"ÉÉÉÉ-HH-NN (ISO)", # 0
|
||||||
|
"Alapértelmezett éééé. hh. nn.", # 1
|
||||||
|
"Év hónap nap", # year, full month name, day # 2
|
||||||
|
"Év hó nap", #year, short month name, day # 3
|
||||||
|
"Év római h.sz. nap" #year, Roman number, day # 4
|
||||||
|
)
|
||||||
|
# this definition must agree with its "_display_calendar" method
|
||||||
|
|
||||||
|
display = DateDisplay.display_formatted
|
||||||
|
|
||||||
|
def _display_calendar(self, date_val, long_months, short_months = None,
|
||||||
|
inflect=""):
|
||||||
|
# this must agree with its locale-specific "formats" definition
|
||||||
|
|
||||||
|
year = self._slash_year(date_val[2], date_val[3])
|
||||||
|
|
||||||
|
if short_months is None:
|
||||||
|
# Let the short formats work the same as long formats
|
||||||
|
short_months = long_months
|
||||||
|
|
||||||
|
if self.format == 0:
|
||||||
|
return self.display_iso(date_val)
|
||||||
|
|
||||||
|
elif self.format == 1:
|
||||||
|
# Base defined Hungarian form
|
||||||
|
if date_val[3]:
|
||||||
|
return self.display_iso(date_val)
|
||||||
|
else:
|
||||||
|
if date_val[0]==0: #No day
|
||||||
|
if date_val[1]==0: #No month -> year
|
||||||
|
value="%s" % year
|
||||||
|
else:
|
||||||
|
value="%s. %02d." % (year, date_val[1]) #If no day -> year, month
|
||||||
|
else:
|
||||||
|
value="%s. %02d. %02d." % (year, date_val[1], date_val[0])
|
||||||
|
|
||||||
|
elif self.format == 2:
|
||||||
|
# year, full month name, day
|
||||||
|
|
||||||
|
if date_val[0]==0:
|
||||||
|
if date_val[1]==0:
|
||||||
|
value="%s" % year
|
||||||
|
else:
|
||||||
|
value="%s. %s" % (year, self.long_months[date_val[1]]) #If no day -> year, month
|
||||||
|
else:
|
||||||
|
if date_val[1]==0:
|
||||||
|
value="%s. %s %02d." % (year, '-', date_val[0]) #To indicate somehow if the month is missing
|
||||||
|
else:
|
||||||
|
value="%s. %s %02d." % (year, self.long_months[date_val[1]], date_val[0])
|
||||||
|
|
||||||
|
|
||||||
|
elif self.format == 3:
|
||||||
|
#year, short month name, day
|
||||||
|
|
||||||
|
if date_val[0]==0:
|
||||||
|
if date_val[1]==0:
|
||||||
|
value="%s" % year
|
||||||
|
else:
|
||||||
|
value="%s. %s" % (year, self.short_months[date_val[1]]) #If no day -> year, month
|
||||||
|
else:
|
||||||
|
if date_val[1]==0:
|
||||||
|
value="%s. %s %02d." % (year, '-.', date_val[0]) #To indicate somehow if the month is missing
|
||||||
|
else:
|
||||||
|
value="%s. %s %02d." % (year, self.short_months[date_val[1]], date_val[0])
|
||||||
|
|
||||||
|
|
||||||
|
elif self.format == 4:
|
||||||
|
#year, Roman number, day
|
||||||
|
|
||||||
|
if date_val[0]==0:
|
||||||
|
if date_val[1]==0:
|
||||||
|
value="%s" % year
|
||||||
|
else:
|
||||||
|
value="%s. %s" % (year, self.roman_months[date_val[1]]) #If no day -> year, month
|
||||||
|
else:
|
||||||
|
value="%s. %s %02d." % (year, self.roman_months[date_val[1]], date_val[0])
|
||||||
|
|
||||||
|
|
||||||
|
else:
|
||||||
|
# day month_name year
|
||||||
|
value = self.dd_dformat04(date_val, inflect, long_months)
|
||||||
|
|
||||||
|
if date_val[2] < 0:
|
||||||
|
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||||
|
return self._bce_str % value
|
||||||
|
else:
|
||||||
|
return value
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Register classes
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
register_datehandler(('hu_HU', 'hu', 'hungarian', 'Hungarian', 'magyar'),
|
||||||
|
DateParserHU, DateDisplayHU)
|
Loading…
Reference in New Issue
Block a user