From 55c7e223d47143b9ec4485adf04de8dd2a53ddb7 Mon Sep 17 00:00:00 2001 From: Paul Franklin Date: Fri, 17 Oct 2014 18:11:37 -0700 Subject: [PATCH] enhance Serbian date handler to handle Cyrillic dates --- gramps/gen/datehandler/_date_sr.py | 134 +++++++++++++++++++++-------- 1 file changed, 97 insertions(+), 37 deletions(-) diff --git a/gramps/gen/datehandler/_date_sr.py b/gramps/gen/datehandler/_date_sr.py index 8adb76c9b..a3b6aa78f 100644 --- a/gramps/gen/datehandler/_date_sr.py +++ b/gramps/gen/datehandler/_date_sr.py @@ -230,46 +230,15 @@ class DateParserSR(DateParser): # Serbian display # #------------------------------------------------------------------------- -class DateDisplaySR_latin(DateDisplay): +class DateDisplaySR_Base(DateDisplay): """ - Serbian (latin) date display class + Serbian (base) date display class """ - long_months = ("", - "januara", "februara", "marta", "aprila", - "maja", "juna", "jula", "avgusta", - "septembra", "oktobra", "novembra", "decembra" - ) - - short_months = ("", - "jan", "feb", "mar", "apr", "maj", "jun", - "jul", "avg", "sep", "okt", "nov", "dec" - ) roman_months = ( "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII" ) - - calendar = ( - "", "julijanski", "hebrejski", - "francuski republikanski", "persijski", "islamski", - "švedski" - ) - - _mod_str = ("", "pre ", "posle ", "oko ", "", "", "") - - _qual_str = ("", "procenjeno ", "izračunato ") - - _bce_str = "%s p.n.e." - - formats = ( - "GGGG-MM-DD (ISO-8601)", - "Numerički (DD.MM.GGGG.)", - "D. MMM GGGG.", - "D. Mesec GGGG.", - "D. Rb GGGG." - ) - # this definition must agree with its "_display_gregorian" method def _display_gregorian(self, date_val): """ @@ -338,6 +307,10 @@ class DateDisplaySR_latin(DateDisplay): newyear = date.get_new_year() qual_str = self._qual_str[qual] + span1 = self._span1 + span2 = self._span2 + range1 = self._range1 + range2 = self._range2 if mod == Date.MOD_TEXTONLY: return date.get_text() @@ -347,13 +320,13 @@ class DateDisplaySR_latin(DateDisplay): d_1 = self.display_cal[cal](start) d_2 = self.display_cal[cal](date.get_stop_date()) scal = self.format_extras(cal, newyear) - return "%s%s %s %s %s%s" % (qual_str, 'od', d_1, 'do', d_2, + return "%s%s %s %s %s%s" % (qual_str, span1, d_1, span2, d_2, scal) elif mod == Date.MOD_RANGE: d_1 = self.display_cal[cal](start) d_2 = self.display_cal[cal](date.get_stop_date()) scal = self.format_extras(cal, newyear) - return "%s%s %s %s %s%s" % (qual_str, 'između', d_1, 'i', d_2, + return "%s%s %s %s %s%s" % (qual_str, range1, d_1, range2, d_2, scal) else: text = self.display_cal[date.get_calendar()](start) @@ -361,11 +334,98 @@ class DateDisplaySR_latin(DateDisplay): return "%s%s%s%s" % (qual_str, self._mod_str[mod], text, scal) +class DateDisplaySR_Latin(DateDisplaySR_Base): + """ + Serbian (Latin) date display class + """ + + long_months = ("", + "januara", "februara", "marta", "aprila", + "maja", "juna", "jula", "avgusta", + "septembra", "oktobra", "novembra", "decembra" + ) + + short_months = ("", + "jan", "feb", "mar", "apr", "maj", "jun", + "jul", "avg", "sep", "okt", "nov", "dec" + ) + + calendar = ( + "", "julijanski", "hebrejski", + "francuski republikanski", "persijski", "islamski", + "švedski" + ) + + _mod_str = ("", "pre ", "posle ", "oko ", "", "", "") + + _qual_str = ("", "procenjeno ", "izračunato ") + + _bce_str = "%s p.n.e." + + formats = ( + "GGGG-MM-DD (ISO-8601)", + "Numerički (DD.MM.GGGG.)", + "D. MMM GGGG.", + "D. Mesec GGGG.", + "D. Rb GGGG." + ) + # this definition must agree with its "_display_gregorian" method + + _span1 = 'od' + _span2 = 'do' + _range1 = 'između' + _range2 = 'i' + +class DateDisplaySR_Cyrillic(DateDisplaySR_Base): + """ + Serbian (Cyrillic) date display class + """ + + long_months = ("", + "Јануар", "Фебруар", "Март", "Април", + "Мај", "Јуне", "Јули", "Аугуст", + "Септембар", "Оцтобер", "Новембер", "Децембар" + ) + + short_months = ("", + "Јан", "Феб", "Мар", "Апр", "Мај", "Јун", + "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец" + ) + + calendar = ( + "", "Јулиан", "хебрејски", + "француски републиканац", "Персиан", "исламски", + "шведски" + ) + + _mod_str = ("", "пре ", "после ", "око ", "", "", "") + + _qual_str = ("", "процењено ", "израчунато ") + + _bce_str = "%s п.н.е." + + formats = ( + "ГГГГ-ММ-ДД (ISO-8601)", + "Нумеричка (ДД.ММ.ГГГГ.)", + "Д. МММ ГГГГ.", + "Д. Месец ГГГГ.", + "Д. Rb ГГГГ." + ) + # this definition must agree with its "_display_gregorian" method + + _span1 = 'из' + _span2 = 'до' + _range1 = 'између' + _range2 = 'и' #------------------------------------------------------------------------- # # Register classes # #------------------------------------------------------------------------- -register_datehandler(('sr', 'serbian', 'srpski', 'sr_RS'), - DateParserSR, DateDisplaySR_latin) +register_datehandler(('srpski', 'Srpski', + 'sr_Latn', 'sr_Latn_RS', 'sr_RS@latin'), + DateParserSR, DateDisplaySR_Latin) +register_datehandler(('sr', 'српски', 'Српски', 'serbian', + 'sr_RS', 'sr_Cyrl', 'sr_Cyrl_RS'), + DateParserSR, DateDisplaySR_Cyrillic)