diff --git a/num2words/__init__.py b/num2words/__init__.py index 07ef2bc..3710934 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -22,7 +22,7 @@ from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, lang_RU, lang_SL, - lang_SR, lang_TH, lang_TR, lang_UK, lang_VI) + lang_SR, lang_TE, lang_TH, lang_TR, lang_UK, lang_VI) CONVERTER_CLASSES = { 'ar': lang_AR.Num2Word_AR(), @@ -60,7 +60,8 @@ CONVERTER_CLASSES = { 'th': lang_TH.Num2Word_TH(), 'tr': lang_TR.Num2Word_TR(), 'nl': lang_NL.Num2Word_NL(), - 'uk': lang_UK.Num2Word_UK() + 'uk': lang_UK.Num2Word_UK(), + 'te': lang_TE.Num2Word_TE() } diff --git a/num2words/lang_KN.py b/num2words/lang_KN.py index 430c52f..3bc1cca 100644 --- a/num2words/lang_KN.py +++ b/num2words/lang_KN.py @@ -17,13 +17,13 @@ from __future__ import unicode_literals -from .base import Num2Word_Base +from .lang_EU import Num2Word_EU -class Num2Word_KN(Num2Word_Base): +class Num2Word_KN(Num2Word_EU): def set_high_numwords(self, high): for n, word in self.high_numwords: - self.cards[10 ** n] = word + self.cards[10**n] = word def setup(self): self.low_numwords = [ diff --git a/num2words/lang_TE.py b/num2words/lang_TE.py new file mode 100644 index 0000000..274d312 --- /dev/null +++ b/num2words/lang_TE.py @@ -0,0 +1,169 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from .lang_EU import Num2Word_EU + + +class Num2Word_TE(Num2Word_EU): + def set_high_numwords(self, high): + for n, word in self.high_numwords: + self.cards[10**n] = word + + def setup(self): + self.low_numwords = [ + "తొంభై తొమ్మిది", + "తొంభై ఎనిమిది", + "తొంభై ఏడు", + "తొంభై ఆరు", + "తొంభై అయిదు", + "తొంభై నాలుగు", + "తొంభై మూడు", + "తొంభై రెండు", + "తొంభై ఒకటి", + "తొంభై", + "ఎనభై తొమ్మిది", + "ఎనభై ఎనిమిది", + "ఎనభై ఏడు", + "ఎనభై ఆరు", + "ఎనభై అయిదు", + "ఎనభై నాలుగు", + "ఎనభై మూడు", + "ఎనభై రెండు", + "ఎనభై ఒకటి", + "ఎనభై", + "డెబ్బై తొమ్మిది", + "డెబ్బై ఎనిమిది", + "డెబ్బై ఏడు", + "డెబ్బై ఆరు", + "డెబ్బై అయిదు", + "డెబ్బై నాలుగు", + "డెబ్బై మూడు", + "డెబ్బై రెండు", + "డెబ్బై ఒకటి", + "డెబ్బై", + "అరవై తొమ్మిది", + "అరవై ఎనిమిది", + "అరవై ఏడు", + "అరవై ఆరు", + "అరవై అయిదు", + "అరవై నాలుగు", + "అరవై మూడు", + "అరవై రెండు", + "అరవై ఒకటి", + "అరవై", + "యాభై తొమ్మిది", + "యాభై ఎనిమిది", + "యాభై ఏడు", + "యాభై ఆరు", + "యాభై అయిదు", + "యాభై నాలుగు", + "యాభై మూడు", + "యాభై రెండు", + "యాభై ఒకటి", + "యాభై ", + "నలభై తొమ్మిది", + "నలభై ఎనిమిది", + "నలభై ఏడు", + "నలభై ఆరు", + "నలభై అయిదు", + "నలభై నాలుగు", + "నలభై మూడు", + "నలభై రెండు", + "నలభై ఒకటి", + "నలభై", + "ముప్పై తొమ్మిది", + "ముప్పై ఎనిమిది", + "ముప్పై ఏడు", + "ముప్పై ఆరు", + "ముప్పై ఐదు", + "ముప్పై నాలుగు", + "ముప్పై మూడు", + "ముప్పై రెండు", + "ముప్పై ఒకటి", + "ముప్పై", + "ఇరవై తొమ్మిది", + "ఇరవై ఎనిమిది", + "ఇరవై ఏడు", + "ఇరవై ఆరు", + "ఇరవై అయిదు", + "ఇరవై నాలుగు", + "ఇరవై మూడు", + "ఇరవై రెండు", + "ఇరవై ఒకటి", + "ఇరవై", + "పందొమ్మిది", + "పధ్ధెనిమిది", + "పదిహేడు", + "పదహారు", + "పదునయిదు", + "పధ్నాలుగు", + "పదమూడు", + "పన్నెండు", + "పదకొండు", + "పది", + "తొమ్మిది", + "ఎనిమిది", + "ఏడు", + "ఆరు", + "అయిదు", + "నాలుగు", + "మూడు", + "రెండు", + "ఒకటి", + "సున్న", + ] + + self.mid_numwords = [(100, "వంద")] + + self.high_numwords = [(7, "కోట్ల"), (5, "లక్ష"), (3, "వేయి")] + + self.pointword = "బిందువు " + + self.modifiers = [ + " ్ ", + "ా ", + " ి ", + " ీ ", + " ు ", + " ూ ", + " ృ ", + " ౄ ", + " ె ", + " ే ", + " ై ", + " ొ", + " ో ", + " ౌ ", + " ఁ ", + " ం ", + " ః ", + ] + + 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: + if ltext[-1] in self.modifiers: + return ("%s %s" % (ltext[:-1], rtext), lnum + rnum) + else: + return ("%s %s" % (ltext+"ల", rtext), lnum + rnum) + elif rnum > lnum: + return ("%s %s" % (ltext, rtext), lnum * rnum) + return ("%s %s" % (ltext, rtext), lnum + rnum) + + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)[-1:]) + + def to_ordinal(self, value): + self.verify_ordinal(value) + outwords = self.to_cardinal(value) + if outwords[-1] in self.modifiers: + outwords = outwords[:-1] + ordinal_num = outwords + "వ" + return ordinal_num diff --git a/tests/test_kn.py b/tests/test_kn.py index 6be2054..fa42cbd 100644 --- a/tests/test_kn.py +++ b/tests/test_kn.py @@ -58,10 +58,16 @@ class Num2WordsKNTest(TestCase): num2words(1003, lang='kn', to='ordinal'), u'ಒಂದು ಸಾವಿರದ ಮೂರನೇ' ) - - def test_ordinal_num(self): self.assertEqual(num2words(2, lang="kn", ordinal=True), u"ಎರಡನೇ") self.assertEqual(num2words(5, lang="kn", ordinal=True), u"ಐದನೇ") self.assertEqual(num2words(16, lang="kn", ordinal=True), u"ಹದಿನಾರನೇ") self.assertEqual(num2words(113, lang="kn", ordinal=True), u"ಒಂದು ನೂರ ಹದಿಮೂರನೇ") + + def test_ordinal_num(self): + self.assertEqual(num2words(2, lang="kn", to='ordinal_num'), u"2ಎರಡನೇ") + self.assertEqual(num2words(5, lang="kn", to='ordinal_num'), u"5ಐದನೇ") + self.assertEqual(num2words(16, lang="kn", to='ordinal_num'), + u"16ಹದಿನಾರನೇ") + self.assertEqual(num2words(113, lang="kn", to='ordinal_num'), + u"113ಒಂದು ನೂರ ಹದಿಮೂರನೇ") diff --git a/tests/test_te.py b/tests/test_te.py new file mode 100644 index 0000000..6314310 --- /dev/null +++ b/tests/test_te.py @@ -0,0 +1,70 @@ +# -*- 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 unittest import TestCase + +from num2words import num2words + + +class Num2WordsTETest(TestCase): + def test_numbers(self): + self.assertEqual(num2words(66, lang="te"), u"అరవై ఆరు") + self.assertEqual(num2words(1734, lang="te"), + u"ఒకటి వేయి ఏడు వందల ముప్పై నాలుగు") + self.assertEqual(num2words(134, lang="te"), + u"ఒకటి వందల ముప్పై నాలుగు") + self.assertEqual(num2words(54411, lang="te"), + u"యాభై నాలుగు వేయి నాలుగు వందల పదకొండు") + self.assertEqual(num2words(42, lang="te"), u"నలభై రెండు") + self.assertEqual(num2words(893, lang="te"), + u"ఎనిమిది వందల తొంభై మూడు") + self.assertEqual( + num2words(1729, lang="te"), u"ఒకటి వేయి ఏడు వందల ఇరవై తొమ్మిది" + ) + self.assertEqual(num2words(123, lang="te"), u"ఒకటి వందల ఇరవై మూడు") + self.assertEqual(num2words(32211, lang="te"), + u"ముప్పై రెండు వేయి రెండు వందల పదకొండు") + + def test_cardinal_for_float_number(self): + self.assertEqual(num2words(1.61803, lang="te"), + u"ఒకటి బిందువు ఆరు ఒకటి ఎనిమిది సున్న మూడు") + self.assertEqual(num2words(34.876, lang="te"), + u"ముప్పై నాలుగు బిందువు ఎనిమిది ఏడు ఆరు") + self.assertEqual(num2words(3.14, lang="te"), + u"మూడు బిందువు ఒకటి నాలుగు") + + def test_ordinal(self): + self.assertEqual(num2words(1, lang='te', to='ordinal'), u"ఒకటివ") + self.assertEqual(num2words(22, lang='te', to='ordinal'), + u"ఇరవై రెండువ") + self.assertEqual(num2words(23, lang='te', to='ordinal'), + u"ఇరవై మూడువ") + self.assertEqual(num2words(12, lang='te', to='ordinal'), u"పన్నెండువ") + self.assertEqual(num2words(130, lang='te', to='ordinal'), + u"ఒకటి వందల ముప్పైవ") + self.assertEqual(num2words(1003, lang='te', to='ordinal'), + u"ఒకటి వేయిల మూడువ") + self.assertEqual(num2words(4, lang='te', to='ordinal'), + u"నాలుగువ") + + def test_ordinal_num(self): + self.assertEqual(num2words(2, lang="te", to='ordinal_num'), u"2వ") + self.assertEqual(num2words(3, lang="te", to='ordinal_num'), u"3వ") + self.assertEqual(num2words(5, lang="te", to='ordinal_num'), u"5వ") + self.assertEqual(num2words(16, lang="te", to='ordinal_num'), u"16వ") + self.assertEqual(num2words(113, lang="te", to='ordinal_num'), + u"113వ")