Thanks @Nick-Hall, basically I did exactly that, copied _date_ca.py
and worked from there, but even if i strip it to the minimal necessity, it dos what Iโve describe on the previous post.
let me through in the code here( i will dump in later) so you can have a look:
# -------------------------------------------------------------------------
#
# Python modules
#
# -------------------------------------------------------------------------
import re
# -------------------------------------------------------------------------
#
# Gramps modules
#
# -------------------------------------------------------------------------
from ..lib.date import Date
from ._dateparser import DateParser
from ._datedisplay import DateDisplay
from ._datehandler import register_datehandler
# -------------------------------------------------------------------------
#
# Hebrew parser
#
#
# -------------------------------------------------------------------------
class DateParserHE(DateParser):
calendar_to_int = {
"ืืจืืืจืืื ื": Date.CAL_GREGORIAN,
"ืืืจืื": Date.CAL_GREGORIAN,
"ืืืืืื ื": Date.CAL_JULIAN,
"ื": Date.CAL_JULIAN,
"ืขืืจื": Date.CAL_HEBREW,
"ืข": Date.CAL_HEBREW,
"ืืืกืืื": Date.CAL_ISLAMIC,
"ื": Date.CAL_ISLAMIC,
"ืืืืคืื ืืฆืจืคืชืืช": Date.CAL_FRENCH,
"ืฆ": Date.CAL_FRENCH,
"ืคืจืกื": Date.CAL_PERSIAN,
"ืค": Date.CAL_PERSIAN,
"ืฉืืืื": Date.CAL_SWEDISH,
"ืฉ": Date.CAL_SWEDISH,
}
modifier_to_int = {
"ืืคื ื": Date.MOD_BEFORE,
"ืืคื ื ืึพ": Date.MOD_BEFORE,
"ืืค.": Date.MOD_BEFORE,
"ืืืจื": Date.MOD_AFTER,
"ืืืจื ืึพ": Date.MOD_AFTER,
"ืื.": Date.MOD_AFTER,
"ืืกืืืืืช": Date.MOD_ABOUT,
"ืกืืื": Date.MOD_ABOUT,
"ืืขืจื ืึพ": Date.MOD_ABOUT,
"ืืขืจื ืืฉื ืช": Date.MOD_ABOUT,
"ืืงืืจืื": Date.MOD_ABOUT,
"ืืืื": Date.MOD_FROM,
"ืืึพ": Date.MOD_FROM,
"ืึพ": Date.MOD_FROM,
"ื": Date.MOD_FROM,
"ื ": Date.MOD_FROM,
"ืขื": Date.MOD_TO,
"ืขื ืืื": Date.MOD_TO,
"ืขื ืึพ": Date.MOD_TO,
"ืืขื ืืื": Date.MOD_TO,
}
quality_to_int = {
"ืืืขืจื": Date.QUAL_ESTIMATED,
"ืืืืฉื": Date.QUAL_CALCULATED,
}
bce = [
"ืืคื ื ืืกืคืืจื",
"ืืคื ื ืขืืื ืื",
"ืืคื ื\"\ืก",
"ืืคื ื ืกืคืืจืช ืื ืืฆืจืื",
"ืืกืคืืจืชื",
] + DateParser.bce
def init_strings(self):
DateParser.init_strings(self)
_span_1 = ["ึพื"]
_span_2 = ["ืขื"]
_range_1 = ["ืืื"]
_range_2 = ["ืืืื"]
self._span = re.compile(
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
% ("|".join(_span_1), "|".join(_span_2)),
re.IGNORECASE,
)
self._range = re.compile(
r"(%s)\s+(?P<start>.+)\s+(%s)\s+(?P<stop>.+)"
% ("|".join(_range_1), "|".join(_range_2)),
re.IGNORECASE,
)
"""
compiles regular expression strings for matching dates
"""
DateParser.init_strings(self)
# match 'Day. MONTH year.' format with or without '-' '.' ' ' or '/') separator
self._text2 = re.compile(
r"(\d{1,2})[/.-](\d{1,2})[/.-](\d{4})",
r"(\d{4})[/.-](\d{1,2})[/.-](\d{1,2})",
r"(\d{1,2})(\d{2})(\d{2})" % self._mon_str,
re.IGNORECASE,
)
self._span = re.compile(
r"ืึพ\s+(?P<start>.+)\s+ืขื\s+(?P<stop>.+)", re.IGNORECASE
)
self._range = re.compile(
r"ืืื\s+(?P<start>.+)\s+ืืืื\s+(?P<stop>.+)", re.IGNORECASE
)
def init_strings(self):
DateParser.init_strings(self)
# match 'short-day day.month year' format
short_day_str = "(" + "|".join(self._ds.short_days[1:]) + ")"
self._numeric = re.compile(
r"%s\s*((\d+)[\.]\s*)?((\d+)\s*)?(\d+)\s*$" % short_day_str, re.IGNORECASE
)
# -------------------------------------------------------------------------
#
# Hebrew display
#
# -------------------------------------------------------------------------
class DateDisplayHE(DateDisplay):
"""
Hebrew language date display class.
"""
_bce_str = "%s ืืกืคืืจื"
long_months = (
"",
"ืื ืืืจ",
"ืคืืจืืืจ",
"ืืจืฅ",
"ืืคืจืื",
"ืืื",
"ืืื ื",
"ืืืื",
"ืืืืืกื",
"ืกืคืืืืจ",
"ืืืงืืืืจ",
"ื ืืืืืจ",
"ืืฆืืืจ",
)
short_months = (
"",
"ืื ื",
"ืคืืจ",
"ืืจืฅ",
"ืืคืจ",
"ืืื",
"ืืื ",
"ืืื",
"ืืื",
"ืกืคื",
"ืืืง",
"ื ืื",
"ืืฆื",
)
hebrew = (
"",
"ืชืฉืจื",
"ืืฉืืื",
"ืืกืื",
"ืชืื",
"ืฉืื",
"ืืืจ",
"ืืืจ ื'",
"ื ืืกื",
"ืืืืจ",
"ืกืืืื",
"ืชืืื",
"ืื",
"ืืืื",
)
formats = (
"DD-MM-AAAA (ISO)",
"ืกืืคืจืชื",
"ืืืืฉ ืืื, ืฉื ื",
"ืืืืฉ ืืื, ืฉื ื",
"ืืื ืืืืฉ, ืฉื ื",
"ืืื ืืืืฉ, ืฉื ื",
)
# this must agree with DateDisplayEn's "formats" definition
# (since no locale-specific _display_gregorian exists, here)
def display(self, date):
"""
Return a text string representing the date.
"""
mod = date.get_modifier()
cal = date.get_calendar()
qual = date.get_quality()
start = date.get_start_date()
newyear = date.get_new_year()
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())
scal = self.format_extras(cal, newyear)
return "%s%s %s %s %s%s" % (qual_str, "ื", d1, "ืขื", d2, scal)
elif mod == Date.MOD_RANGE:
d1 = self.display_cal[cal](start)
d2 = self.display_cal[cal](date.get_stop_date())
scal = self.format_extras(cal, newyear)
return "%s%s %s %s %s%s" % (qual_str, "ืืื", d1, "ืืืื", d2, scal)
else:
text = self.display_cal[date.get_calendar()](start)
scal = self.format_extras(cal, newyear)
return "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal)
# -------------------------------------------------------------------------
#
# Register classes
#
# -------------------------------------------------------------------------
register_datehandler(
("he_IL", "he", "Hebrew", "Ivrit", "ืขืืจืืช", ("%d-%m-%Y",)),
DateParserHE,
DateDisplayHE,
)
There might be stuff in there which no longer required since it is now taken care off in โthe Gramps .poโ .