From 873a3cc840dac7c3e847853d02f3719ac021befd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Tue, 5 Sep 2017 17:35:30 +0200 Subject: [PATCH] Use `lang_FR` as base class for `lang_FR_CH` & clean-up linting for french --- num2words/lang_FR.py | 21 ++++++------- num2words/lang_FR_CH.py | 66 ++++++++--------------------------------- 2 files changed, 24 insertions(+), 63 deletions(-) diff --git a/num2words/lang_FR.py b/num2words/lang_FR.py index 1209eab..b151f12 100644 --- a/num2words/lang_FR.py +++ b/num2words/lang_FR.py @@ -21,6 +21,8 @@ from .lang_EU import Num2Word_EU class Num2Word_FR(Num2Word_EU): def setup(self): + Num2Word_EU.setup(self) + self.negword = "moins " self.pointword = "virgule" self.errmsg_nonnum = u"Seulement des nombres peuvent être convertis en mots." @@ -49,15 +51,14 @@ class Num2Word_FR(Num2Word_EU): else: if (not (cnum - 80)%100 or not cnum%100) and ctext[-1] == "s": ctext = ctext[:-1] - if (cnum<1000 and nnum != 1000 and ntext[-1] != "s" - and not nnum%100): + if cnum < 1000 and nnum != 1000 and ntext[-1] != "s" and not nnum % 100: ntext += "s" if nnum < cnum < 100: if nnum % 10 == 1 and cnum != 80: return ("%s et %s"%(ctext, ntext), cnum + nnum) return ("%s-%s"%(ctext, ntext), cnum + nnum) - elif nnum > cnum: + if nnum > cnum: return ("%s %s"%(ctext, ntext), cnum * nnum) return ("%s %s"%(ctext, ntext), cnum + nnum) @@ -83,15 +84,15 @@ class Num2Word_FR(Num2Word_EU): def to_ordinal_num(self, value): self.verify_ordinal(value) out = str(value) - out += {"1" : "er" }.get(out[-1], "me") + out += {"1" : "er"}.get(out[-1], "me") return out def to_currency(self, val, longval=True, old=False): hightxt = "Euro/s" if old: - hightxt="franc/s" + hightxt = "franc/s" return self.to_splitnum(val, hightxt=hightxt, lowtxt="centime/s", - jointxt="et",longval=longval) + jointxt="et", longval=longval) n2w = Num2Word_FR() to_card = n2w.to_cardinal @@ -99,10 +100,10 @@ to_ord = n2w.to_ordinal to_ordnum = n2w.to_ordinal_num def main(): - for val in [ 1, 11, 12, 21, 31, 33, 71, 80, 81, 91, 99, 100, 101, 102, 155, - 180, 300, 308, 832, 1000, 1001, 1061, 1100, 1500, 1701, 3000, - 8280, 8291, 150000, 500000, 1000000, 2000000, 2000001, - -21212121211221211111, -2.121212, -1.0000100]: + for val in [1, 11, 12, 21, 31, 33, 71, 80, 81, 91, 99, 100, 101, 102, 155, + 180, 300, 308, 832, 1000, 1001, 1061, 1100, 1500, 1701, 3000, + 8280, 8291, 150000, 500000, 1000000, 2000000, 2000001, + -21212121211221211111, -2.121212, -1.0000100]: n2w.test(val) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) diff --git a/num2words/lang_FR_CH.py b/num2words/lang_FR_CH.py index b6d40a0..032c86f 100644 --- a/num2words/lang_FR_CH.py +++ b/num2words/lang_FR_CH.py @@ -16,27 +16,17 @@ # MA 02110-1301 USA from __future__ import unicode_literals, print_function -from .lang_EU import Num2Word_EU +from .lang_FR import Num2Word_FR -class Num2Word_FR_CH(Num2Word_EU): + +class Num2Word_FR_CH(Num2Word_FR): def setup(self): - self.negword = "moins " - self.pointword = "virgule" - self.errmsg_nonnum = u"Seulement des nombres peuvent être convertis en mots." - self.errmsg_toobig = u"Nombre trop grand pour être converti en mots." - self.exclude_title = ["et", "virgule", "moins"] + Num2Word_FR.setup(self) + self.mid_numwords = [(1000, "mille"), (100, "cent"), (90, "nonante"), - (80, "huitante"), (70, "septante"), (60, "soixante"), + (80, "huitante"), (70, "septante"), (60, "soixante"), (50, "cinquante"), (40, "quarante"), (30, "trente")] - self.low_numwords = ["vingt", "dix-neuf", "dix-huit", "dix-sept", - "seize", "quinze", "quatorze", "treize", "douze", - "onze", "dix", "neuf", "huit", "sept", "six", - "cinq", "quatre", "trois", "deux", "un", "zéro"] - self.ords = { - "cinq": "cinquième", - "neuf": "neuvième", - } def merge(self, curr, next): @@ -45,59 +35,29 @@ class Num2Word_FR_CH(Num2Word_EU): if cnum == 1: if nnum < 1000000: return next + if cnum < 1000 and nnum != 1000 and ntext[-1] != "s" and not nnum % 100: - ntext += "s" + ntext += "s" if nnum < cnum < 100: if nnum % 10 == 1: return ("%s et %s"%(ctext, ntext), cnum + nnum) return ("%s-%s"%(ctext, ntext), cnum + nnum) - elif nnum > cnum: + if nnum > cnum: return ("%s %s"%(ctext, ntext), cnum * nnum) return ("%s %s"%(ctext, ntext), cnum + nnum) - # Is this right for such things as 1001 - "mille unième" instead of - # "mille premier"?? "millième"?? - - def to_ordinal(self,value): - self.verify_ordinal(value) - if value == 1: - return "premier" - word = self.to_cardinal(value) - for src, repl in self.ords.items(): - if word.endswith(src): - word = word[:-len(src)] + repl - break - else: - if word[-1] == "e": - word = word[:-1] - word = word + "ième" - return word - - def to_ordinal_num(self, value): - self.verify_ordinal(value) - out = str(value) - out += {"1" : "er" }.get(out[-1], "me") - return out - - def to_currency(self, val, longval=True, old=False): - hightxt = "Euro/s" - if old: - hightxt="franc/s" - return self.to_splitnum(val, hightxt=hightxt, lowtxt="centime/s", - jointxt="et",longval=longval) - n2w = Num2Word_FR_CH() to_card = n2w.to_cardinal to_ord = n2w.to_ordinal to_ordnum = n2w.to_ordinal_num def main(): - for val in [ 1, 11, 12, 21, 31, 33, 71, 80, 81, 91, 99, 100, 101, 102, 155, - 180, 300, 308, 832, 1000, 1001, 1061, 1100, 1500, 1701, 3000, - 8280, 8291, 150000, 500000, 1000000, 2000000, 2000001, - -21212121211221211111, -2.121212, -1.0000100]: + for val in [1, 11, 12, 21, 31, 33, 71, 80, 81, 91, 99, 100, 101, 102, 155, + 180, 300, 308, 832, 1000, 1001, 1061, 1100, 1500, 1701, 3000, + 8280, 8291, 150000, 500000, 1000000, 2000000, 2000001, + -21212121211221211111, -2.121212, -1.0000100]: n2w.test(val) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)