Added support for pasting of monetary values (#176)
Fixes #52 Description of the changes: Added support for pasting of prefix currency symbols supported by the Windows keyboard. yen or yuan (¥) unspecified currency sign (¤) Ghanaian cedi (₵) dollar or peso ($) colón (₡) won (₩) shekel (₪) naira (₦) Indian rupee (₹) pound (£) euro (€) How changes were validated: Manually tested each prefix currency symbol supported by the Windows keyboard and ran unit tests.
This commit is contained in:
parent
ca15f05227
commit
4a41e37c87
@ -139,7 +139,7 @@ String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode m
|
|||||||
String^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pasteExpression);
|
String^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pasteExpression);
|
||||||
|
|
||||||
// Removing the spaces, comma separator from the pasteExpression to allow pasting of expressions like 1 + 2+1,333
|
// Removing the spaces, comma separator from the pasteExpression to allow pasting of expressions like 1 + 2+1,333
|
||||||
pasteExpression = Utils::RemoveUnwantedCharsFromWstring(englishString->Data());
|
pasteExpression = RemoveUnwantedCharsFromWstring(englishString->Data());
|
||||||
|
|
||||||
// If the last character is an = sign, remove it from the pasteExpression to allow evaluating the result on paste.
|
// If the last character is an = sign, remove it from the pasteExpression to allow evaluating the result on paste.
|
||||||
if (!pasteExpression.empty() && pasteExpression.back() == L'=')
|
if (!pasteExpression.empty() && pasteExpression.back() == L'=')
|
||||||
@ -567,3 +567,21 @@ size_t CopyPasteManager::ProgrammerOperandLength(const wstring& operand, int num
|
|||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return wstring after removing characters like space, comma, double quotes, and monetary prefix currency symbols supported by the Windows keyboard:
|
||||||
|
// yen or yuan(¥) - 165
|
||||||
|
// unspecified currency sign(¤) - 164
|
||||||
|
// Ghanaian cedi(₵) - 8373
|
||||||
|
// dollar or peso($) - 36
|
||||||
|
// colón(₡) - 8353
|
||||||
|
// won(₩) - 8361
|
||||||
|
// shekel(₪) - 8362
|
||||||
|
// naira(₦) - 8358
|
||||||
|
// Indian rupee(₹) - 8377
|
||||||
|
// pound(£) - 163
|
||||||
|
// euro(€) - 8364
|
||||||
|
wstring CopyPasteManager::RemoveUnwantedCharsFromWstring(const wstring& input)
|
||||||
|
{
|
||||||
|
wchar_t unWantedChars[] = { L' ', L',', L'"', 165, 164, 8373, 36, 8353, 8361, 8362, 8358, 8377, 163, 8364, 8234, 8235, 8236, 8237 };
|
||||||
|
return Utils::RemoveUnwantedCharsFromWstring(input, unWantedChars, 18);
|
||||||
|
}
|
||||||
|
@ -58,6 +58,7 @@ namespace CalculatorApp
|
|||||||
static size_t OperandLength(std::wstring operand, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1);
|
static size_t OperandLength(std::wstring operand, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1);
|
||||||
static size_t StandardScientificOperandLength(std::wstring operand);
|
static size_t StandardScientificOperandLength(std::wstring operand);
|
||||||
static size_t ProgrammerOperandLength(const std::wstring& operand, int numberBase);
|
static size_t ProgrammerOperandLength(const std::wstring& operand, int numberBase);
|
||||||
|
static std::wstring RemoveUnwantedCharsFromWstring(const std::wstring& input);
|
||||||
|
|
||||||
static constexpr size_t MaxStandardOperandLength = 16;
|
static constexpr size_t MaxStandardOperandLength = 16;
|
||||||
static constexpr size_t MaxScientificOperandLength = 32;
|
static constexpr size_t MaxScientificOperandLength = 32;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -86,14 +86,7 @@ bool Utils::IsLastCharacterTarget(_In_ wstring const &input, _In_ wchar_t target
|
|||||||
return !input.empty() && input.back() == target;
|
return !input.empty() && input.back() == target;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns wstring after removing characters like space, comma, and double quotes
|
// Return wstring after removing characters specified by unwantedChars array
|
||||||
wstring Utils::RemoveUnwantedCharsFromWstring(wstring input)
|
|
||||||
{
|
|
||||||
wchar_t unWantedChars[] = { L' ', L',', L'"', 8234, 8235, 8236, 8237 };
|
|
||||||
return RemoveUnwantedCharsFromWstring(input, unWantedChars, 6);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns wstring after removing characters specified by unwantedChars array
|
|
||||||
wstring Utils::RemoveUnwantedCharsFromWstring(wstring input, wchar_t* unwantedChars, unsigned int size)
|
wstring Utils::RemoveUnwantedCharsFromWstring(wstring input, wchar_t* unwantedChars, unsigned int size)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < size; ++i)
|
for (unsigned int i = 0; i < size; ++i)
|
||||||
|
@ -280,7 +280,6 @@ namespace Utils
|
|||||||
Platform::String^ GetStringValue(Platform::String^ input);
|
Platform::String^ GetStringValue(Platform::String^ input);
|
||||||
bool IsLastCharacterTarget(std::wstring const &input, wchar_t target);
|
bool IsLastCharacterTarget(std::wstring const &input, wchar_t target);
|
||||||
std::wstring RemoveUnwantedCharsFromWstring(std::wstring inputString, wchar_t* unwantedChars, unsigned int size);
|
std::wstring RemoveUnwantedCharsFromWstring(std::wstring inputString, wchar_t* unwantedChars, unsigned int size);
|
||||||
std::wstring RemoveUnwantedCharsFromWstring(std::wstring input);
|
|
||||||
double GetDoubleFromWstring(std::wstring input);
|
double GetDoubleFromWstring(std::wstring input);
|
||||||
int GetWindowId();
|
int GetWindowId();
|
||||||
void RunOnUIThreadNonblocking(std::function<void()>&& function, _In_ Windows::UI::Core::CoreDispatcher^ currentDispatcher);
|
void RunOnUIThreadNonblocking(std::function<void()>&& function, _In_ Windows::UI::Core::CoreDispatcher^ currentDispatcher);
|
||||||
|
@ -193,6 +193,33 @@ namespace CalculatorUnitTests
|
|||||||
VERIFY_ARE_EQUAL(m_CopyPasteManager.SanitizeOperand(L"______1234___"), L"1234");
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.SanitizeOperand(L"______1234___"), L"1234");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Using unicode literals here until the encoding issues get figured out
|
||||||
|
TEST_METHOD(ValidatePrefixCurrencySymbols)
|
||||||
|
{
|
||||||
|
// ¥5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u00A5\u0035"), L"5");
|
||||||
|
// ¤5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u00A4\u0035"), L"5");
|
||||||
|
// ₵5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20B5\u0035"), L"5");
|
||||||
|
// $5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u0024\u0035"), L"5");
|
||||||
|
// ₡5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20A1\u0035"), L"5");
|
||||||
|
// ₩5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20A9\u0035"), L"5");
|
||||||
|
// ₪5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20AA\u0035"), L"5");
|
||||||
|
// ₦5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20A6\u0035"), L"5");
|
||||||
|
// ₹5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20B9\u0035"), L"5");
|
||||||
|
// £5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u00A3\u0035"), L"5");
|
||||||
|
// €5
|
||||||
|
VERIFY_ARE_EQUAL(m_CopyPasteManager.RemoveUnwantedCharsFromWstring(L"\u20AC\u0035"), L"5");
|
||||||
|
};
|
||||||
|
|
||||||
TEST_METHOD(ValidateTryOperandToULL)
|
TEST_METHOD(ValidateTryOperandToULL)
|
||||||
{
|
{
|
||||||
unsigned long long int result = 0;
|
unsigned long long int result = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user