# -*- 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 unicode_literals | |
from . import ( | |
lang_IS | |
) | |
CONVERTER_CLASSES = { | |
'is': lang_IS.Num2Word_IS() | |
} | |
CONVERTES_TYPES = ['cardinal', 'ordinal', 'ordinal_num', 'year', 'currency'] | |
def num2words(number, ordinal=False, lang='en', to='cardinal', **kwargs): | |
# We try the full language first | |
if lang not in CONVERTER_CLASSES: | |
# ... and then try only the first 2 letters | |
lang = lang[:2] | |
if lang not in CONVERTER_CLASSES: | |
raise NotImplementedError() | |
converter = CONVERTER_CLASSES[lang] | |
if isinstance(number, str): | |
number = converter.str_to_number(number) | |
# backwards compatible | |
if ordinal: | |
return converter.to_ordinal(number) | |
if to not in CONVERTES_TYPES: | |
raise NotImplementedError() | |
return getattr(converter, 'to_{}'.format(to))(number, **kwargs) | |