130 lines
5.5 KiB
Python
130 lines
5.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
|
|
# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
|
|
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
# This library 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
|
|
# Lesser General Public License for more details.
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
# MA 02110-1301 USA
|
|
|
|
from __future__ import division, print_function, unicode_literals
|
|
|
|
from . import lang_EU
|
|
|
|
|
|
class Num2Word_AM(lang_EU.Num2Word_EU):
|
|
CURRENCY_FORMS = {'ETB': (('ብር', 'ብር'), ('ሳንቲም', 'ሳንቲም'))}
|
|
|
|
GIGA_SUFFIX = 'ቢሊዮን'
|
|
MEGA_SUFFIX = 'ሚሊዮን'
|
|
|
|
def set_high_numwords(self, high):
|
|
cap = 3 * (len(high) + 1)
|
|
|
|
for word, n in zip(high, range(cap, 5, -3)):
|
|
if n == 9:
|
|
self.cards[10 ** n] = word + self.GIGA_SUFFIX
|
|
else:
|
|
self.cards[10 ** n] = word + self.MEGA_SUFFIX
|
|
|
|
def setup(self):
|
|
super(Num2Word_AM, self).setup()
|
|
|
|
self.negword = 'አሉታዊ '
|
|
self.pointword = 'ነጥብ'
|
|
self.exclude_title = ['እና', 'ነጥብ', 'አሉታዊ']
|
|
|
|
self.mid_numwords = [(1000, 'ሺህ'), (100, 'መቶ'), (90, 'ዘጠና'),
|
|
(80, 'ሰማኒያ'), (70, 'ሰባ'), (60, 'ስድሳ'),
|
|
(50, 'አምሳ'), (40, 'አርባ'), (30, 'ሠላሳ')]
|
|
self.low_numwords = ['ሃያ', 'አሥራ ዘጠኝ', 'አሥራ ስምንት', 'አሥራ ሰባት',
|
|
'አስራ ስድስት', 'አሥራ አምስት', 'አሥራ አራት', 'አሥራ ሦስት',
|
|
'አሥራ ሁለት', 'አሥራ አንድ', 'አሥር', 'ዘጠኝ', 'ስምንት',
|
|
'ሰባት', 'ስድስት', 'አምስት', 'አራት', 'ሦስት', 'ሁለት',
|
|
'አንድ', 'ዜሮ']
|
|
self.ords = {'አንድ': 'አንደኛ',
|
|
'ሁለት': 'ሁለተኛ',
|
|
'ሦስት': 'ሦስተኛ',
|
|
'አራት': 'አራተኛ',
|
|
'አምስት': 'አምስተኛ',
|
|
'ስድስት': 'ስድስተኛ',
|
|
'ሰባት': 'ሰባተኛ',
|
|
'ስምንት': 'ስምንተኛ',
|
|
'ዘጠኝ': 'ዘጠነኛ',
|
|
'አሥር': 'አሥረኛ',
|
|
'አሥራ አንድ': 'አሥራ አንደኛ',
|
|
'አሥራ ሁለት': 'አሥራ ሁለተኛ',
|
|
'አሥራ ሦስት': 'አሥራ ሦስተኛ',
|
|
'አሥራ አራት': 'አሥራ አራተኛ',
|
|
'አሥራ አምስት': 'አሥራ አምስተኛ',
|
|
'አሥራ ስድስት': 'አሥራ ስድስተኛ',
|
|
'አሥራ ሰባት': 'አሥራ ሰባተኛ',
|
|
'አሥራ ስምንት': 'አሥራ ስምንተኛ',
|
|
'አሥራ ዘጠኝ': 'አሥራ ዘጠነኛ'}
|
|
|
|
def to_cardinal(self, value):
|
|
try:
|
|
assert int(value) == value
|
|
except (ValueError, TypeError, AssertionError):
|
|
return self.to_cardinal_float(value)
|
|
|
|
out = ''
|
|
if value >= self.MAXVAL:
|
|
raise OverflowError(self.errmsg_toobig % (value, self.MAXVAL))
|
|
|
|
if value == 100:
|
|
return self.title(out + 'መቶ')
|
|
else:
|
|
val = self.splitnum(value)
|
|
words, num = self.clean(val)
|
|
return self.title(out + words)
|
|
|
|
def merge(self, lpair, rpair):
|
|
ltext, lnum = lpair
|
|
rtext, rnum = rpair
|
|
if lnum == 1 and rnum < 100:
|
|
return rtext, rnum
|
|
elif 100 > lnum > rnum:
|
|
return '%s %s' % (ltext, rtext), lnum + rnum
|
|
elif lnum >= 100 > rnum:
|
|
return '%s %s' % (ltext, rtext), lnum + rnum
|
|
elif rnum > lnum:
|
|
return '%s %s' % (ltext, rtext), lnum * rnum
|
|
|
|
def to_ordinal(self, value):
|
|
self.verify_ordinal(value)
|
|
outwords = self.to_cardinal(value).split(' ')
|
|
lastwords = outwords[-1].split('-')
|
|
lastword = lastwords[-1].lower()
|
|
try:
|
|
lastword = self.ords[lastword]
|
|
except KeyError:
|
|
lastword += 'ኛ'
|
|
lastwords[-1] = self.title(lastword)
|
|
outwords[-1] = ' '.join(lastwords)
|
|
return ' '.join(outwords)
|
|
|
|
def to_ordinal_num(self, value):
|
|
self.verify_ordinal(value)
|
|
return '%s%s' % (value, self.to_ordinal(value)[-1:])
|
|
|
|
def to_currency(self, val, currency='ብር', cents=True, separator=' ከ',
|
|
adjective=True):
|
|
result = super(Num2Word_AM, self).to_currency(
|
|
val, currency=currency, cents=cents, separator=separator,
|
|
adjective=adjective)
|
|
return result
|
|
|
|
def to_year(self, val, longval=True):
|
|
if not (val // 100) % 10:
|
|
return self.to_cardinal(val)
|
|
return self.to_splitnum(val, hightxt='መቶ', longval=longval)
|