5505: Need a date handler for Hungarian locale
This commit is contained in:
parent
ae89bc4d83
commit
4cfa03ab16
@ -48,6 +48,7 @@ from . import _date_es
|
||||
from . import _date_fi
|
||||
from . import _date_fr
|
||||
from . import _date_hr
|
||||
from . import _date_hu
|
||||
from . import _date_it
|
||||
from . import _date_ja
|
||||
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