/*------------------------------------------------------------------------------ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team * * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ #include "CLucene.h" #include "English.h" CL_NS_USE(util) void English::IntToEnglish(int32_t i, StringBuffer* result) { if (i == 0) { result->append(_T("zero")); return ; } if (i < 0) { result->append(_T("minus ")); i = - i; } if (i >= 1000000000) { // billions IntToEnglish(i / 1000000000, result); result->append(_T("billion, ")); i = i % 1000000000; } if (i >= 1000000) { // millions IntToEnglish(i / 1000000, result); result->append(_T("million, ")); i = i % 1000000; } if (i >= 1000) { // thousands IntToEnglish(i / 1000, result); result->append(_T("thousand, ")); i = i % 1000; } if (i >= 100) { // hundreds IntToEnglish(i / 100, result); result->append(_T("hundred ")); i = i % 100; } if (i >= 20) { switch (i / 10) { case 9: result->append(_T("ninety")); break; case 8: result->append(_T("eighty")); break; case 7: result->append(_T("seventy")); break; case 6: result->append(_T("sixty")); break; case 5: result->append(_T("fifty")); break; case 4: result->append(_T("forty")); break; case 3: result->append(_T("thirty")); break; case 2: result->append(_T("twenty")); break; } i = i % 10; if (i == 0) result->append(_T(" ")); else result->append(_T("-")); } switch (i) { case 19: result->append(_T("nineteen ")); break; case 18: result->append(_T("eighteen ")); break; case 17: result->append(_T("seventeen ")); break; case 16: result->append(_T("sixteen ")); break; case 15: result->append(_T("fifteen ")); break; case 14: result->append(_T("fourteen ")); break; case 13: result->append(_T("thirteen ")); break; case 12: result->append(_T("twelve ")); break; case 11: result->append(_T("eleven ")); break; case 10: result->append(_T("ten ")); break; case 9: result->append(_T("nine ")); break; case 8: result->append(_T("eight ")); break; case 7: result->append(_T("seven ")); break; case 6: result->append(_T("six ")); break; case 5: result->append(_T("five ")); break; case 4: result->append(_T("four ")); break; case 3: result->append(_T("three ")); break; case 2: result->append(_T("two ")); break; case 1: result->append(_T("one ")); break; case 0: result->append(_T("")); break; } } TCHAR* English::IntToEnglish(int32_t i) { StringBuffer result; IntToEnglish(i, &result); return result.toString(); } void English::IntToEnglish(int32_t i, TCHAR* buf, int32_t buflen) { StringBuffer result; IntToEnglish(i, &result); _tcsncpy(buf,result.getBuffer(),buflen); }