# -*- 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)