From 62b2fafdd0810110e0164c041c559b7ca10b79f2 Mon Sep 17 00:00:00 2001 From: Rudy Huyn Date: Mon, 18 Mar 2019 14:09:13 -0700 Subject: [PATCH] Fix formatting issues with CurrencyConverter and some locales (#242) The ViewModel wrongly assumed that non-breaking spaces were only used between the value and the symbol. It's not the case of all locales using non-breaking spaces as a thousand delimiter (French for example). When it was the case, the function only replaced the first thousand delimiter found and kept the extra space at the end of the string, generating 2 issues: Extra space at the end: #240 Bad formatting of the number: #232 Description of the changes: Replace currencyResult.find(L'\u00a0') by a regex only removing spaces at the end of the string. Fixes #240 and #232 --- src/CalcViewModel/UnitConverterViewModel.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/CalcViewModel/UnitConverterViewModel.cpp b/src/CalcViewModel/UnitConverterViewModel.cpp index 2d4df1c..1cf478f 100644 --- a/src/CalcViewModel/UnitConverterViewModel.cpp +++ b/src/CalcViewModel/UnitConverterViewModel.cpp @@ -53,6 +53,8 @@ constexpr size_t SELECTED_TARGET_UNIT = 2; // x millisecond delay before we consider conversion to be final constexpr unsigned int CONVERSION_FINALIZED_DELAY_IN_MS = 1000; +const wregex regexTrimSpacesStart = wregex(L"^\\s+"); +const wregex regexTrimSpacesEnd = wregex(L"\\s+$"); namespace CalculatorApp::ViewModel { @@ -346,10 +348,15 @@ String^ UnitConverterViewModel::ConvertToLocalizedString(const std::wstring& str if (pos != wstring::npos) { currencyResult.erase(pos, currencyCode.length()); - pos = currencyResult.find(L'\u00a0'); // non-breaking space - if (pos != wstring::npos) + std::wsmatch sm; + if (regex_search(currencyResult, sm, regexTrimSpacesStart)) { - currencyResult.erase(pos, 1); + currencyResult.erase(sm.prefix().length(), sm.length()); + } + + if (regex_search(currencyResult, sm, regexTrimSpacesEnd)) + { + currencyResult.erase(sm.prefix().length(), sm.length()); } }