Activate flake8, isort and coveralls in the configuration of tox (#105)

* Activate flake8, isort and coveralls in the configuration of tox

* Update code to respect PEP8

* Fix bug in the lang_IT for python 3

* Update the README to include the new converters.
This commit is contained in:
Ernesto Rodriguez Ortiz
2017-10-30 14:06:46 -04:00
committed by GitHub
parent c6015db8b4
commit 3da0c54f3b
52 changed files with 1393 additions and 572 deletions

View File

@@ -18,8 +18,8 @@ from __future__ import unicode_literals
import math
from .orderedmapping import OrderedMapping
from .compat import to_s
from .orderedmapping import OrderedMapping
class Num2Word_Base(object):
@@ -250,17 +250,17 @@ class Num2Word_Base(object):
def test(self, value):
try:
_card = self.to_cardinal(value)
except:
except Exception:
_card = "invalid"
try:
_ord = self.to_ordinal(value)
except:
except Exception:
_ord = "invalid"
try:
_ordnum = self.to_ordinal_num(value)
except:
except Exception:
_ordnum = "invalid"
print("For %s, card is %s;\n\tord is %s; and\n\tordnum is %s."

View File

@@ -14,13 +14,9 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
import sys
PY3 = sys.version_info[0] == 3
def to_s(val):
if PY3:
return str(val)
else:
try:
return unicode(val)
except NameError:
return str(val)

View File

@@ -15,7 +15,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import division, unicode_literals, print_function
from __future__ import division, print_function, unicode_literals
from . import lang_EU
@@ -109,7 +110,7 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
for val in [1, 120, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "is", n2w.to_currency(val))
print(val, "is", n2w.to_year(val))

View File

@@ -15,7 +15,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_EU import Num2Word_EU
@@ -55,7 +56,7 @@ class Num2Word_DE(Num2Word_EU):
"sexagint", "septuagint", "oktogint", "nonagint"]
self.high_numwords = (
["zent"] + self.gen_high_numwords(units, tens, lows)
)
)
self.mid_numwords = [(1000, "tausend"), (100, "hundert"),
(90, "neunzig"), (80, "achtzig"), (70, "siebzig"),
(60, "sechzig"), (50, "f\xFCnfzig"),
@@ -141,11 +142,12 @@ to_ordnum = n2w.to_ordinal_num
def main():
for val in [1, 7, 8, 12, 17, 81, 91, 99, 100, 101, 102, 155,
180, 300, 308, 832, 1000, 1001, 1061, 1100, 1500, 1701, 3000,
8280, 8291, 150000, 500000, 3000000, 1000000, 2000001, 1000000000, 2000000000,
-21212121211221211111, -2.121212, -1.0000100]:
8280, 8291, 150000, 500000, 3000000, 1000000, 2000001,
1000000000, 2000000000, -21212121211221211111, -2.121212,
-1.0000100]:
n2w.test(val)
# n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270570)
n2w.test(3000000)
n2w.test(3000000000001)
n2w.test(3000000324566)

View File

@@ -14,7 +14,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import division, unicode_literals, print_function
from __future__ import division, print_function, unicode_literals
from . import lang_EU
@@ -145,8 +146,7 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
for val in [1, 120, 160, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "er", n2w.to_currency(val))
print(val, "er", n2w.to_year(val))

View File

@@ -14,7 +14,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import division, unicode_literals, print_function
from __future__ import division, print_function, unicode_literals
from . import lang_EU
@@ -103,8 +104,7 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
for val in [1, 120, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "is", n2w.to_currency(val))
print(val, "is", n2w.to_year(val))

View File

@@ -14,7 +14,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_EN import Num2Word_EN
@@ -38,8 +39,7 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
for val in [1, 120, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "is", n2w.to_currency(val))
print(val, "is", n2w.to_year(val))

View File

@@ -14,7 +14,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_EN import Num2Word_EN
@@ -37,8 +38,7 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
for val in [1, 120, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "is", n2w.to_currency(val))
print(val, "is", n2w.to_year(val))

View File

@@ -15,6 +15,7 @@
# MA 02110-1301 USA
from __future__ import unicode_literals
from .lang_EN import Num2Word_EN

View File

@@ -16,7 +16,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_EU import Num2Word_EU
@@ -186,8 +187,7 @@ def main():
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
print(n2w.to_currency(1222))
print(n2w.to_currency(1222, old=True))
print(n2w.to_year(1222))

View File

@@ -16,7 +16,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_ES import Num2Word_ES
@@ -40,7 +41,7 @@ def main():
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
print(n2w.to_currency(1222))
print(n2w.to_currency(1222, old=True))
print(n2w.to_year(1222))

View File

@@ -16,7 +16,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_ES import Num2Word_ES
@@ -41,7 +42,7 @@ def main():
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
print(n2w.to_currency(1222))
print(n2w.to_currency(1222, old=True))
print(n2w.to_year(1222))

View File

@@ -15,6 +15,7 @@
# MA 02110-1301 USA
from __future__ import unicode_literals
from .base import Num2Word_Base
@@ -32,7 +33,8 @@ class Num2Word_EU(Num2Word_Base):
"octo", "novem"]
tens = ["dec", "vigint", "trigint", "quadragint", "quinquagint",
"sexagint", "septuagint", "octogint", "nonagint"]
self.high_numwords = ["cent"] + self.gen_high_numwords(units, tens, lows)
self.high_numwords = ["cent"] + self.gen_high_numwords(units, tens,
lows)
def to_currency(self, val, longval=True, jointxt=""):
return self.to_splitnum(val, hightxt="Euro/s", lowtxt="Euro cent/s",

View File

@@ -15,7 +15,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_EU import Num2Word_EU
@@ -52,7 +53,8 @@ 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:
@@ -109,7 +111,7 @@ def main():
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
1325325436067876801768700107601001012212132143210473207540327057320957)
print(n2w.to_currency(112121))
print(n2w.to_year(1996))

View File

@@ -15,7 +15,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_FR import Num2Word_FR
@@ -35,7 +36,8 @@ class Num2Word_FR_CH(Num2Word_FR):
if nnum < 1000000:
return next
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:
@@ -61,7 +63,7 @@ def main():
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
1325325436067876801768700107601001012212132143210473207540327057320950)
print(n2w.to_currency(112121))
print(n2w.to_year(1996))

View File

@@ -15,6 +15,7 @@
# MA 02110-1301 USA
from __future__ import unicode_literals
from .lang_FR import Num2Word_FR
@@ -40,7 +41,7 @@ def main():
n2w.test(val)
n2w.test(
1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
1325325436067876801768700107601001012212132143210473207540327057320950)
for val in [1, 120, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "is", n2w.to_currency(val))
print(val, "is", n2w.to_year(val))

View File

@@ -16,7 +16,7 @@
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
ZERO = (u'אפס',)

View File

@@ -14,7 +14,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
class Num2Word_ID():
@@ -128,8 +128,9 @@ class Num2Word_ID():
return self.BASE[int(number[1])]
else:
return (
self.BASE[int(number[0])] + ['puluh'] + self.BASE[int(number[1])]
)
self.BASE[int(number[0])] + ['puluh']
+ self.BASE[int(number[1])]
)
def spell_float(self, float_part):
# spell the float number
@@ -168,7 +169,7 @@ class Num2Word_ID():
def to_cardinal(self, number):
if number >= self.max_num:
raise OverflowError(self.errmsg_toobig % (number, self.maxnum))
raise OverflowError(self.errmsg_toobig % (number, self.max_num))
minus = ''
if number < 0:
minus = 'min '

View File

@@ -14,7 +14,6 @@
# MA 02110-1301 USA
from __future__ import unicode_literals
from .lang_EU import Num2Word_EU
# Globals
# -------
@@ -101,9 +100,10 @@ class Num2Word_IT:
prefix = self.to_ordinal(int(float_number))
else:
prefix = self.to_cardinal(int(float_number))
float_part = str(float_number).split('.')[1]
postfix = " ".join(
# Drops the trailing zero and comma ~~~~
[self.to_cardinal(int(c)) for c in str(float_number % 1)[2:]]
# Drops the trailing zero and comma
[self.to_cardinal(int(c)) for c in float_part]
)
return prefix + Num2Word_IT.FLOAT_INFIX_WORD + postfix

View File

@@ -282,6 +282,7 @@ class Num2Word_LV(object):
def to_currency(self, n, currency='EUR', cents=True, seperator=','):
return to_currency(n, currency, cents, seperator)
if __name__ == '__main__':
import doctest
doctest.testmod()

View File

@@ -15,7 +15,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import unicode_literals, print_function
from __future__ import print_function, unicode_literals
from .lang_EU import Num2Word_EU

View File

@@ -14,7 +14,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from __future__ import division, unicode_literals, print_function
from __future__ import division, print_function, unicode_literals
from . import lang_EU
@@ -111,7 +112,7 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
for val in [1, 120, 1000, 1120, 1800, 1976, 2000, 2010, 2099, 2171]:
print(val, "er", n2w.to_currency(val))
print(val, "er", n2w.to_year(val))

View File

@@ -18,11 +18,11 @@ u"""
>>> from textwrap import fill
>>> ' '.join([str(i) for i in splitby3('1')])
u'1'
'1'
>>> ' '.join([str(i) for i in splitby3('1123')])
u'1 123'
'1 123'
>>> ' '.join([str(i) for i in splitby3('1234567890')])
u'1 234 567 890'
'1 234 567 890'
>>> print(' '.join([n2w(i) for i in range(10)]))
zero jeden dwa trzy cztery pięć sześć siedem osiem dziewięć
@@ -194,7 +194,12 @@ def get_digits(n):
def pluralize(n, forms):
form = 0 if n == 1 else 1 if (n % 10 > 1 and n % 10 < 5 and (n % 100 < 10 or n % 100 > 20)) else 2
if n == 1:
form = 0
elif 5 > n % 10 > 1 and (n % 100 < 10 or n % 100 > 20):
form = 1
else:
form = 2
return forms[form]

View File

@@ -17,6 +17,7 @@
# MA 02110-1301 USA
from __future__ import division, unicode_literals
import re
from . import lang_EU
@@ -31,13 +32,14 @@ class Num2Word_PT_BR(lang_EU.Num2Word_EU):
def setup(self):
self.negword = "menos "
self.pointword = "vírgula"
self.errmsg_nornum = "Somente números podem ser convertidos para palavras"
self.errmsg_nornum = "Somente números podem ser convertidos para " \
"palavras"
self.exclude_title = ["e", "vírgula", "menos"]
self.mid_numwords = [
(1000, "mil"), (100, "cem"), (90, "noventa"),
(80, "oitenta"), (70, "setenta"), (60, "sessenta"), (50, "cinquenta"),
(40, "quarenta"), (30, "trinta")
(80, "oitenta"), (70, "setenta"), (60, "sessenta"),
(50, "cinquenta"), (40, "quarenta"), (30, "trinta")
]
self.low_numwords = [
"vinte", "dezenove", "dezoito", "dezessete", "dezesseis",
@@ -132,12 +134,15 @@ class Num2Word_PT_BR(lang_EU.Num2Word_EU):
def to_cardinal(self, value):
result = super(Num2Word_PT_BR, self).to_cardinal(value)
# Transforms "mil E cento e catorze reais" into "mil, cento e catorze reais"
# Transforms "mil E cento e catorze reais" into "mil, cento e catorze
# reais"
for ext in (
'mil', 'milhão', 'milhões', 'bilhão', 'bilhões',
'trilhão', 'trilhões', 'quatrilhão', 'quatrilhões'):
if re.match('.*{} e \w*ento'.format(ext), result):
result = result.replace('{} e'.format(ext), '{},'.format(ext), 1)
result = result.replace(
'{} e'.format(ext), '{},'.format(ext), 1
)
return result
@@ -153,7 +158,8 @@ class Num2Word_PT_BR(lang_EU.Num2Word_EU):
thousand_separator = self.thousand_separators[idx]
if char != '0' and thousand_separator:
# avoiding "segundo milionésimo milésimo" for 6000000, for instance
# avoiding "segundo milionésimo milésimo" for 6000000,
# for instance
result.append(thousand_separator)
thousand_separator = ''

View File

@@ -18,11 +18,11 @@ u"""
>>> from textwrap import fill
>>> ' '.join([str(i) for i in splitby3('1')])
u'1'
'1'
>>> ' '.join([str(i) for i in splitby3('1123')])
u'1 123'
'1 123'
>>> ' '.join([str(i) for i in splitby3('1234567890')])
u'1 234 567 890'
'1 234 567 890'
>>> print(' '.join([n2w(i) for i in range(10)]))
ноль один два три четыре пять шесть семь восемь девять
@@ -205,10 +205,10 @@ def get_digits(n):
def pluralize(n, forms):
if (n % 100 < 10 or n % 100 > 20):
if n % 100 < 10 or n % 100 > 20:
if n % 10 == 1:
form = 0
elif (n % 10 > 1 and n % 10 < 5):
elif 5 > n % 10 > 1:
form = 1
else:
form = 2

View File

@@ -19,6 +19,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .lang_EU import Num2Word_EU
@@ -157,7 +158,7 @@ def main():
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
n2w.test(13253254360678768017687001076010010122121321432104732075403270573)
print(n2w.to_currency(112121))
print(n2w.to_year(2000))

View File

@@ -29,7 +29,8 @@ class Num2Word_TR(object):
self.errmsg_nonnum = u"Sadece sayılar yazıya çevrilebilir."
self.errmsg_floatord = u"Tam sayı olmayan {} sıralamada kullanılamaz."
self.errmsg_negord = u"Pozitif olmayan {} sıralamada kullanılamaz."
self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. Yazıya çevrilebilecek en büyük rakam {}."
self.errmsg_toobig = u"abs({}) sayı yazıya çevirmek için çok büyük. " \
u"Yazıya çevrilebilecek en büyük rakam {}."
self.exclude_title = []
self.DECIMAL_SIGN = (",",)
self.ORDINAL_SIGN = (".",)
@@ -116,192 +117,319 @@ class Num2Word_TR(object):
def to_cardinal(self, value):
wrd = ""
is_cardinal = self.verify_cardinal(value)
if is_cardinal:
if not int(value) == value:
return self.to_cardinal_float(value)
self.to_splitnum(value)
if not is_cardinal:
return wrd
if self.order_of_last_zero_digit >= len(self.integers_to_read[0]):
# number like 00 and all 0s and even more, raise error
if not int(value) == value:
return self.to_cardinal_float(value)
self.to_splitnum(value)
if self.order_of_last_zero_digit >= len(self.integers_to_read[0]):
# number like 00 and all 0s and even more, raise error
return wrd
if self.total_triplets_to_read == 1:
if self.total_digits_outside_triplets == 2:
if self.order_of_last_zero_digit == 1:
# number like x0, read cardinal x0 and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
return wrd
if self.order_of_last_zero_digit == 0:
# number like xy, read cardinal xy and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][1], ""
)
return wrd
if self.total_triplets_to_read == 1:
if self.total_digits_outside_triplets == 2:
if self.order_of_last_zero_digit == 1:
# number like x0, read cardinal x0 and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
return wrd
if self.order_of_last_zero_digit == 0:
# number like xy, read cardinal xy and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "")
if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == 0:
# number like x, read cardinal x and return
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][0], ""
)
return wrd
if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == 0:
# number like x, read cardinal x and return
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "")
return wrd
if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == 2:
# number like x00, read cardinal x00 and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
return wrd
if self.order_of_last_zero_digit == 1:
# number like xy0, read cardinal xy0 and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
return wrd
if self.order_of_last_zero_digit == 0:
# number like xyz, read cardinal xyz and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][2], ""
)
return wrd
if self.total_triplets_to_read >= 2:
if self.total_digits_outside_triplets == 2:
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 1:
# number like x0 and all 0s, read cardinal x0 0..0
# and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 2:
# number like xy and all 0s, read cardinal xy 0..0
# and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 2:
# number like xy and others, read cardinal xy n..n
# and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 1:
# number like x and all 0s, read cardinal x 0..0
# and return
if not (self.total_triplets_to_read == 2 and
self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 1:
# number like x and others, read cardinal x n..n
# and return
if not (self.total_triplets_to_read == 2 and
self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 1:
# number like x00 and all 0s, read cardinal x00 0..0
# and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 2:
# number like xy0 and all 0s, read cardinal xy0 0..0
# and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 3:
# number like xyz and all 0s, read cardinal xyz 0..0
# and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][2], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 3:
# number like xyz and all others, read cardinal xyz n..n
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
if not (self.total_triplets_to_read == 2 and
self.integers_to_read[0][2] == "1"):
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][2], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
for i in list(range(self.total_triplets_to_read - 1, 0, -1)):
reading_triplet_order = self.total_triplets_to_read - i
if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == 2:
# number like x00, read cardinal x00 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
return wrd
if self.order_of_last_zero_digit == 1:
# number like xy0, read cardinal xy0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
return wrd
if self.order_of_last_zero_digit == 0:
# number like xyz, read cardinal xyz and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "")
return wrd
last_read_digit_order = reading_triplet_order * 3
else:
last_read_digit_order = (reading_triplet_order - 1) * 3 +\
self.total_digits_outside_triplets
if self.total_triplets_to_read >= 2:
if self.total_digits_outside_triplets == 2:
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1:
# number like x0 and all 0s, read cardinal x0 0..0 and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
return wrd
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2:
# number like xy and all 0s, read cardinal xy 0..0 and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
return wrd
if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2:
# number like xy and others, read cardinal xy n..n and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1:
# number like x and all 0s, read cardinal x 0..0 and return
if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
return wrd
if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1:
# number like x and others, read cardinal x n..n and return
if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1:
# number like x00 and all 0s, read cardinal x00 0..0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
return wrd
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2:
# number like xy0 and all 0s, read cardinal xy0 0..0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
return wrd
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3:
# number like xyz and all 0s, read cardinal xyz 0..0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
return wrd
if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3:
# number like xyz and all others, read cardinal xyz n..n
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"):
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
for i in list(range(self.total_triplets_to_read - 1, 0, -1)):
reading_triplet_order = self.total_triplets_to_read - i
if self.total_digits_outside_triplets == 0:
last_read_digit_order = reading_triplet_order * 3
else:
last_read_digit_order = (reading_triplet_order - 1) * 3 + self.total_digits_outside_triplets
if not self.integers_to_read[0][last_read_digit_order: last_read_digit_order + 3] == "000":
if not self.integers_to_read[0][last_read_digit_order] == "0":
wrd += self.HUNDREDS.get(self.integers_to_read[0][last_read_digit_order], "")
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - (
last_read_digit_order) - 1:
if i == 1:
wrd += self.CARDINAL_HUNDRED[0]
return wrd
elif i > 1:
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
else:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 3
] == "000":
if not self.integers_to_read[0][
last_read_digit_order
] == "0":
wrd += self.HUNDREDS.get(
self.integers_to_read[0][last_read_digit_order], ""
)
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - (
last_read_digit_order) - 1:
if i == 1:
wrd += self.CARDINAL_HUNDRED[0]
return wrd
elif i > 1:
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
else:
wrd += self.CARDINAL_HUNDRED[0]
if not self.integers_to_read[0][last_read_digit_order + 1] == "0":
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - (
last_read_digit_order) - 2:
if i == 1:
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][last_read_digit_order + 1], "")
return wrd
elif i > 1:
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][last_read_digit_order + 1], "")
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
else:
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][last_read_digit_order + 1],
"")
if not self.integers_to_read[0][
last_read_digit_order + 1] == "0":
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - (
last_read_digit_order) - 2:
if i == 1:
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][
last_read_digit_order + 1], ""
)
return wrd
elif i > 1:
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][
last_read_digit_order + 1], ""
)
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
else:
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][
last_read_digit_order + 1], ""
)
if not self.integers_to_read[0][last_read_digit_order + 2] == "0":
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - (
last_read_digit_order) - 3:
if i == 1:
if not self.integers_to_read[0][
last_read_digit_order + 2] == "0":
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - (
last_read_digit_order) - 3:
if i == 1:
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
return wrd
if i == 2:
if not self.integers_to_read[0][
last_read_digit_order:
last_read_digit_order + 2
] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
return wrd
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
elif not self.integers_to_read[0][
last_read_digit_order + 2] == "1":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
if i > 2:
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
else:
if not self.integers_to_read[0][
last_read_digit_order:
last_read_digit_order + 2
] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
else:
if i == 2:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 2] == "00":
last_read_digit_order:
last_read_digit_order + 2
] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
elif not self.integers_to_read[0][last_read_digit_order + 2] == "1":
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
elif not self.integers_to_read[0][
last_read_digit_order + 2
] == "1":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
if i > 2:
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
else:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 2] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
else:
if i == 2:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 2] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
elif not self.integers_to_read[0][last_read_digit_order + 2] == "1":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
wrd += self.CARDINAL_TRIPLETS[i - 1]
wrd += self.CARDINAL_TRIPLETS[i - 1]
return wrd
@@ -359,116 +487,220 @@ class Num2Word_TR(object):
if self.total_digits_outside_triplets == 2:
if self.order_of_last_zero_digit == 1:
# number like x0, read ordinal x0 and return
wrd += self.ORDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.ORDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
return wrd
if self.order_of_last_zero_digit == 0:
# number like xy, read ordinal xy and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.ORDINAL_ONES.get(
self.integers_to_read[0][1], ""
)
return wrd
if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == 0:
# number like x, read ordinal x and return
wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][0], "")
wrd += self.ORDINAL_ONES.get(
self.integers_to_read[0][0], ""
)
return wrd
if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == 2:
# number like x00, read ordinal x00 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.ORDINAL_HUNDRED[0]
return wrd
if self.order_of_last_zero_digit == 1:
# number like xy0, read ordinal xy0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.ORDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.ORDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
return wrd
if self.order_of_last_zero_digit == 0:
# number like xyz, read ordinal xyz and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
if not self.integers_to_read[0][2] == "0":
wrd += self.ORDINAL_ONES.get(self.integers_to_read[0][2], "")
wrd += self.ORDINAL_ONES.get(
self.integers_to_read[0][2], ""
)
return wrd
if self.total_triplets_to_read >= 2:
if self.total_digits_outside_triplets == 2:
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1:
# number like x0 and all 0s, read ordinal x0 0..0 and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 1:
# number like x0 and all 0s, read ordinal x0 0..0
# and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.ORDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2:
# number like xy and all 0s, read ordinal xy 0..0 and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "")
wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 2:
# number like xy and all 0s, read ordinal xy 0..0
# and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][1], ""
)
wrd += self.ORDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 2:
# number like xy and others, read cardinal xy n..n and return
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 2:
# number like xy and others, read cardinal xy n..n
# and return
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
if self.total_digits_outside_triplets == 1:
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1:
# number like x and all 0s, read ordinal x 0..0 and return
if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "")
wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 1:
# number like x and all 0s, read ordinal x 0..0
# and return
if not (self.total_triplets_to_read == 2 and
self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][0], ""
)
wrd += self.ORDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 1:
# number like x and others, read cardinal x n..n and return
if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][0], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 1:
# number like x and others, read cardinal x n..n
# and return
if not (self.total_triplets_to_read == 2 and
self.integers_to_read[0][0] == "1"):
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
if self.total_digits_outside_triplets == 0:
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 1:
# number like x00 and all 0s, read ordinal x00 0..0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 1:
# number like x00 and all 0s, read ordinal x00 0..0
# and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1]
wrd += self.ORDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 2:
# number like xy0 and all 0s, read ordinal xy0 0..0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 2:
# number like xy0 and all 0s, read ordinal xy0 0..0
# and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
wrd += self.ORDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - 3:
# number like xyz and all 0s, read ordinal xyz 0..0 and return
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - 3:
# number like xyz and all 0s, read ordinal xyz 0..0
# and return
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "")
wrd += self.ORDINAL_TRIPLETS[self.total_triplets_to_read - 1]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][2], ""
)
wrd += self.ORDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
return wrd
if self.order_of_last_zero_digit < len(self.integers_to_read[0]) - 3:
# number like xyz and all others, read cardinal xyz n..n
wrd += self.HUNDREDS.get(self.integers_to_read[0][0], "")
if self.order_of_last_zero_digit < len(
self.integers_to_read[0]) - 3:
# number like xyz and all others, read cardinal
# xyz n..n
wrd += self.HUNDREDS.get(
self.integers_to_read[0][0], ""
)
wrd += self.CARDINAL_HUNDRED[0]
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][1], "")
if not (self.total_triplets_to_read == 2 and self.integers_to_read[0][2] == "1"):
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][2], "")
wrd += self.CARDINAL_TRIPLETS[self.total_triplets_to_read - 1]
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][1], ""
)
if not (self.total_triplets_to_read == 2 and
self.integers_to_read[0][2] == "1"):
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][2], ""
)
wrd += self.CARDINAL_TRIPLETS[
self.total_triplets_to_read - 1
]
for i in list(range(self.total_triplets_to_read - 1, 0, -1)):
reading_triplet_order = self.total_triplets_to_read - i
if self.total_digits_outside_triplets == 0:
last_read_digit_order = reading_triplet_order * 3
else:
last_read_digit_order = (reading_triplet_order - 1) * 3 + self.total_digits_outside_triplets
last_read_digit_order = \
(reading_triplet_order - 1) * 3 + \
self.total_digits_outside_triplets
if not self.integers_to_read[0][last_read_digit_order: last_read_digit_order + 3] == "000":
if not self.integers_to_read[0][last_read_digit_order] == "0":
if not self.integers_to_read[0][last_read_digit_order] == "1":
wrd += self.CARDINAL_ONES.get(self.integers_to_read[0][last_read_digit_order], "")
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - (
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 3
] == "000":
if not self.integers_to_read[0][
last_read_digit_order
] == "0":
if not self.integers_to_read[0][
last_read_digit_order
] == "1":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][
last_read_digit_order
], ""
)
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - (
last_read_digit_order) - 1:
if i == 1:
wrd += self.ORDINAL_HUNDRED[0]
@@ -480,57 +712,89 @@ class Num2Word_TR(object):
else:
wrd += self.CARDINAL_HUNDRED[0]
if not self.integers_to_read[0][last_read_digit_order + 1] == "0":
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - (
if not self.integers_to_read[0][
last_read_digit_order + 1
] == "0":
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - (
last_read_digit_order) - 2:
if i == 1:
wrd += self.ORDINAL_TENS.get(
self.integers_to_read[0][last_read_digit_order + 1], "")
self.integers_to_read[0][
last_read_digit_order + 1], ""
)
return wrd
elif i > 1:
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][last_read_digit_order + 1], "")
self.integers_to_read[0][
last_read_digit_order + 1], ""
)
wrd += self.ORDINAL_TRIPLETS[i - 1]
return wrd
else:
wrd += self.CARDINAL_TENS.get(self.integers_to_read[0][last_read_digit_order + 1],
"")
wrd += self.CARDINAL_TENS.get(
self.integers_to_read[0][
last_read_digit_order + 1], ""
)
if not self.integers_to_read[0][last_read_digit_order + 2] == "0":
if self.order_of_last_zero_digit == len(self.integers_to_read[0]) - (
if not self.integers_to_read[0][
last_read_digit_order + 2
] == "0":
if self.order_of_last_zero_digit == len(
self.integers_to_read[0]) - (
last_read_digit_order) - 3:
if i == 1:
wrd += self.ORDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
return wrd
if i == 2:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 2] == "00":
last_read_digit_order:
last_read_digit_order + 2] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
elif not self.integers_to_read[0][last_read_digit_order + 2] == "1":
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
elif not self.integers_to_read[0][
last_read_digit_order + 2
] == "1":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
wrd += self.ORDINAL_TRIPLETS[i - 1]
return wrd
if i > 2:
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
wrd += self.ORDINAL_TRIPLETS[i - 1]
return wrd
else:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 2] == "00":
last_read_digit_order:
last_read_digit_order + 2] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
else:
if not self.integers_to_read[0][
last_read_digit_order: last_read_digit_order + 2] == "00":
last_read_digit_order:
last_read_digit_order + 2] == "00":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
elif not self.integers_to_read[0][last_read_digit_order + 2] == "1":
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
elif not self.integers_to_read[0][
last_read_digit_order + 2] == "1":
wrd += self.CARDINAL_ONES.get(
self.integers_to_read[0][last_read_digit_order + 2], "")
self.integers_to_read[0][
last_read_digit_order + 2], ""
)
wrd += self.CARDINAL_TRIPLETS[i - 1]
@@ -539,12 +803,19 @@ class Num2Word_TR(object):
def to_splitnum(self, val):
float_digits = str(int(val * 10 ** self.precision))
if not int(val) == 0:
self.integers_to_read = [str(int(val)), float_digits[len(float_digits) - self.precision:]]
self.integers_to_read = [
str(int(val)),
float_digits[len(float_digits) - self.precision:]
]
else:
self.integers_to_read = ["0", "0" * (self.precision - len(float_digits))
+ float_digits[len(float_digits) - self.precision:]]
self.integers_to_read = [
"0",
"0" * (self.precision - len(float_digits)) +
float_digits[len(float_digits) - self.precision:]
]
if len(self.integers_to_read[0]) % 3 > 0:
self.total_triplets_to_read = (len(self.integers_to_read[0]) // 3) + 1
self.total_triplets_to_read = (len(self.integers_to_read[0]) // 3)\
+ 1
elif len(self.integers_to_read[0]) % 3 == 0:
self.total_triplets_to_read = len(self.integers_to_read[0]) // 3
self.total_digits_outside_triplets = len(self.integers_to_read[0]) % 3
@@ -558,9 +829,10 @@ class Num2Word_TR(object):
else:
found = 1
def to_currency(self, value, **kwargs):
def to_currency(self, value):
valueparts = self.to_cardinal(value).split(self.pointword)
if len(valueparts) == 1:
return valueparts[0] + self.CURRENCY_UNIT[0]
if len(valueparts) == 2:
return self.CURRENCY_UNIT[0].join(valueparts) + self.CURRENCY_SUBUNIT[0]
return self.CURRENCY_UNIT[0].join(valueparts) + \
self.CURRENCY_SUBUNIT[0]

View File

@@ -18,11 +18,11 @@ u"""
>>> from textwrap import fill
>>> ' '.join([str(i) for i in splitby3('1')])
u'1'
'1'
>>> ' '.join([str(i) for i in splitby3('1123')])
u'1 123'
'1 123'
>>> ' '.join([str(i) for i in splitby3('1234567890')])
u'1 234 567 890'
'1 234 567 890'
>>> print(' '.join([n2w(i) for i in range(10)]))
нуль один два три чотири п'ять шiсть сiмь вiсiм дев'ять
@@ -208,10 +208,10 @@ def get_digits(n):
def pluralize(n, forms):
# form = 0 if n==1 else 1 if (n % 10 > 1 and n % 10 < 5 and (n % 100 < 10
# or n % 100 > 20)) else 2
if (n % 100 < 10 or n % 100 > 20):
if n % 100 < 10 or n % 100 > 20:
if n % 10 == 1:
form = 0
elif (n % 10 > 1 and n % 10 < 5):
elif 5 > n % 10 > 1:
form = 1
else:
form = 2

View File

@@ -17,7 +17,6 @@
from __future__ import unicode_literals
to_19 = (u'không', u'một', u'hai', u'ba', u'bốn', u'năm', u'sáu',
u'bảy', u'tám', u'chín', u'mười', u'mười một', u'mười hai',
u'mười ba', u'mười bốn', u'mười lăm', u'mười sáu', u'mười bảy',
@@ -75,12 +74,12 @@ class Num2Word_VN(object):
for (didx, dval) in ((v - 1, 1000 ** v) for v in range(len(denom))):
if dval > val:
mod = 1000 ** didx
l = val // mod
r = val - (l * mod)
lval = val // mod
r = val - (lval * mod)
ret = self._convert_nnn(l) + u' ' + denom[didx]
if r > 0 and r <= 99:
ret = self._convert_nnn(l) + u' ' + denom[didx] + u' lẻ'
ret = self._convert_nnn(lval) + u' ' + denom[didx]
if 99 >= r > 0:
ret = self._convert_nnn(lval) + u' ' + denom[didx] + u' lẻ'
if r > 0:
ret = ret + ' ' + self.vietnam_number(r)
return ret