From 430302930ce889d353a22af1d9ff0c189605bc8b Mon Sep 17 00:00:00 2001 From: Randall Castro Date: Wed, 6 Mar 2024 13:29:12 -0600 Subject: [PATCH 1/2] [ADD] .gitignore: to exclude build artifacts and IDE files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2a9b1bf8..8f01013f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ dist /.tox .eggs/ /venv/ +.venv/ From d63741d985144b77edecd93b39a44ad0965b0427 Mon Sep 17 00:00:00 2001 From: Randall Castro Date: Wed, 6 Mar 2024 13:34:03 -0600 Subject: [PATCH 2/2] [ADD] num2words: es_CR language added --- README.rst | 1 + num2words/__init__.py | 13 +++++---- num2words/lang_ES_CR.py | 30 ++++++++++++++++++++ tests/test_es_cr.py | 61 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 num2words/lang_ES_CR.py create mode 100644 tests/test_es_cr.py diff --git a/README.rst b/README.rst index c5404bb1..0ed664ea 100644 --- a/README.rst +++ b/README.rst @@ -88,6 +88,7 @@ Besides the numerical argument, there are two main optional arguments, ``to:`` a * ``en_NG`` (English - Nigeria) * ``es`` (Spanish) * ``es_CO`` (Spanish - Colombia) +* ``es_CR`` (Spanish - Costa Rica) * ``es_VE`` (Spanish - Venezuela) * ``es_GT`` (Spanish - Guatemala) * ``eu`` (EURO) diff --git a/num2words/__init__.py b/num2words/__init__.py index 789af300..693b0b01 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -19,12 +19,12 @@ from . import (lang_AM, lang_AR, lang_AZ, lang_BY, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, lang_EN_NG, lang_EO, lang_ES, lang_ES_CO, - lang_ES_GT, lang_ES_NI, lang_ES_VE, lang_FA, lang_FI, lang_FR, - lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, lang_ID, - lang_IS, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, - lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, - lang_RO, lang_RU, lang_SK, lang_SL, lang_SR, lang_SV, lang_TE, - lang_TG, lang_TH, lang_TR, lang_UK, lang_VI) + lang_ES_CR, lang_ES_GT, lang_ES_NI, lang_ES_VE, lang_FA, + lang_FI, lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, + lang_HU, lang_ID, lang_IS, lang_IT, lang_JA, lang_KN, lang_KO, + lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, + lang_PT_BR, lang_RO, lang_RU, lang_SK, lang_SL, lang_SR, + lang_SV, lang_TE, lang_TG, lang_TH, lang_TR, lang_UK, lang_VI) CONVERTER_CLASSES = { 'am': lang_AM.Num2Word_AM(), @@ -45,6 +45,7 @@ 'eo': lang_EO.Num2Word_EO(), 'es': lang_ES.Num2Word_ES(), 'es_CO': lang_ES_CO.Num2Word_ES_CO(), + 'es_CR': lang_ES_CR.Num2Word_ES_CR(), 'es_GT': lang_ES_GT.Num2Word_ES_GT(), 'es_NI': lang_ES_NI.Num2Word_ES_NI(), 'es_VE': lang_ES_VE.Num2Word_ES_VE(), diff --git a/num2words/lang_ES_CR.py b/num2words/lang_ES_CR.py new file mode 100644 index 00000000..ee1d4440 --- /dev/null +++ b/num2words/lang_ES_CR.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. +# Copyright (c) 2024, Randall Castro. 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 print_function, unicode_literals + +from .lang_ES import Num2Word_ES + + +class Num2Word_ES_CR(Num2Word_ES): + + def to_currency(self, val, longval=True, old=False): + result = self.to_splitnum(val, hightxt="colón/es", lowtxt="céntimo/s", + divisor=1, jointxt="y", longval=longval) + # Handle exception, in spanish is "un euro" and not "uno euro" + return result.replace("uno", "un") diff --git a/tests/test_es_cr.py b/tests/test_es_cr.py new file mode 100644 index 00000000..a6a451b8 --- /dev/null +++ b/tests/test_es_cr.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. +# Copyright (c) 2024, Randall Castro. 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 unicode_literals + +from num2words import num2words + +from . import test_es + +TEST_CASES_TO_CURRENCY = ( + (1, 'un colón'), + (2, 'dos colónes'), + (8, 'ocho colónes'), + (12, 'doce colónes'), + (21, 'veintiun colónes'), + (81.25, 'ochenta y un colónes y veinticinco céntimos'), + (100, 'cien colónes'), +) + + +class Num2WordsESCOTest(test_es.Num2WordsESTest): + + def test_number(self): + for test in test_es.TEST_CASES_CARDINAL: + self.assertEqual(num2words(test[0], lang='es_CR'), test[1]) + + def test_ordinal(self): + for test in test_es.TEST_CASES_ORDINAL: + self.assertEqual( + num2words(test[0], lang='es_CR', ordinal=True), + test[1] + ) + + def test_ordinal_num(self): + for test in test_es.TEST_CASES_ORDINAL_NUM: + self.assertEqual( + num2words(test[0], lang='es', to='ordinal_num'), + test[1] + ) + + def test_currency(self): + for test in TEST_CASES_TO_CURRENCY: + self.assertEqual( + num2words(test[0], lang='es_CR', to='currency'), + test[1] + )