From af4eb0d053dcd891920e0ad2a8532ecdf1d35fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 4 Jan 2025 12:04:22 +0100 Subject: [PATCH] Osk: Finish moving out the weird strings to PSPOskConstants.cpp --- CMakeLists.txt | 2 + Core/Dialog/PSPOskConstants.cpp | 27 ++++++----- Core/Dialog/PSPOskConstants.h | 6 +++ Core/Dialog/PSPOskDialog.cpp | 70 ++++++++++++----------------- UWP/CoreUWP/CoreUWP.vcxproj | 4 +- UWP/CoreUWP/CoreUWP.vcxproj.filters | 8 +++- android/jni/Android.mk | 1 + libretro/Makefile.common | 1 + 8 files changed, 65 insertions(+), 54 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fcf74005e7..e44e57a426 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2115,6 +2115,8 @@ add_library(${CoreLibName} ${CoreLinkType} Core/Dialog/PSPNpSigninDialog.h Core/Dialog/PSPOskDialog.cpp Core/Dialog/PSPOskDialog.h + Core/Dialog/PSPOskConstants.cpp + Core/Dialog/PSPOskConstants.h Core/Dialog/PSPPlaceholderDialog.cpp Core/Dialog/PSPPlaceholderDialog.h Core/Dialog/PSPSaveDialog.cpp diff --git a/Core/Dialog/PSPOskConstants.cpp b/Core/Dialog/PSPOskConstants.cpp index d298f8c4c4..7e02f1b0df 100644 --- a/Core/Dialog/PSPOskConstants.cpp +++ b/Core/Dialog/PSPOskConstants.cpp @@ -19,33 +19,33 @@ #include "Core/Dialog/PSPOskConstants.h" +// WARNING: The encoding of this file is WEIRD and gets destroyed if you save it in MSVC! + // Japanese (Kana) diacritics -const wchar_t diacritics[2][103] = -{ +static const wchar_t diacritics[2][103] = { {L"かがきぎくぐけげこごさざしじすずせぜそぞただちぢつづてでとどはばぱばひびぴびふぶぷぶへべぺべほぼぽぼウヴカガキギクグケゲコゴサザシジスズセゼソゾタダチヂツヅテデトドハバパバヒビピビフブプブヘベペベホボポボ"}, {L"はぱばぱひぴびぴふぷぶぷへぺべぺほぽぼぽハパバパヒピビピフプブプヘペベペホポボポ"} }; // Korean (Hangul) consonant -const wchar_t kor_cons[20] = L"ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"; +static const wchar_t kor_cons[20] = L"ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"; // Korean (Hangul) vowels, Some vowels are not used, they will be spaces -const wchar_t kor_vowel[22] = L"ㅏㅐㅑㅒㅓㅔㅕㅖㅗ ㅛㅜ ㅠㅡ ㅣ"; +static const wchar_t kor_vowel[22] = L"ㅏㅐㅑㅒㅓㅔㅕㅖㅗ ㅛㅜ ㅠㅡ ㅣ"; // Korean (Hangul) vowel Combination key -const uint8_t kor_vowelCom[21] = {0,8,9,1,8,10,20,8,11,4,13,14,5,13,15,20,13,16,20,18,19}; +static const uint8_t kor_vowelCom[21] = {0,8,9,1,8,10,20,8,11,4,13,14,5,13,15,20,13,16,20,18,19}; // Korean (Hangul) last consonant(diacritics) -const wchar_t kor_lcons[28] = L"ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ"; +static const wchar_t kor_lcons[28] = L"ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ"; // Korean (Hangul) last consonant Combination key -const uint8_t kor_lconsCom[33] = {18,0,2,21,3,4,26,3,5,0,7,8,15,7,9,16,7,10,18,7,11,24,7,12,25,7,13,26,7,14,18,16,17}; +static const uint8_t kor_lconsCom[33] = {18,0,2,21,3,4,26,3,5,0,7,8,15,7,9,16,7,10,18,7,11,24,7,12,25,7,13,26,7,14,18,16,17}; // Korean (Hangul) last consonant Separation key -const uint8_t kor_lconsSpr[33] = {2,1,9,4,4,12,5,4,18,8,8,0,9,8,6,10,8,7,11,8,9,12,8,16,13,8,17,14,8,18,17,17,9}; +static const uint8_t kor_lconsSpr[33] = {2,1,9,4,4,12,5,4,18,8,8,0,9,8,6,10,8,7,11,8,9,12,8,16,13,8,17,14,8,18,17,17,9}; -const char16_t oskKeys[OSK_KEYBOARD_COUNT][6][14] = -{ +static const char16_t oskKeys[OSK_KEYBOARD_COUNT][6][14] = { { // Latin Lowercase {u"1234567890-+"}, @@ -116,3 +116,10 @@ const char16_t oskKeys[OSK_KEYBOARD_COUNT][6][14] = }, }; +// Accessors, since for some reason we can't declare the above extern??? + +const wchar_t *KorCons() { return kor_cons; } +const wchar_t *KorVowel() { return kor_vowel; } +const wchar_t *KorLCons() { return kor_lcons; } +const wchar_t *JapDiacritics(int index) { return diacritics[index]; } +char16_t OskKeyAt(int keyboard, int row, int col) { return oskKeys[keyboard][row][col]; } diff --git a/Core/Dialog/PSPOskConstants.h b/Core/Dialog/PSPOskConstants.h index d36ce85199..4f74e00e64 100644 --- a/Core/Dialog/PSPOskConstants.h +++ b/Core/Dialog/PSPOskConstants.h @@ -14,3 +14,9 @@ enum OskKeyboardDisplay { // TODO: Something to do native? OSK_KEYBOARD_COUNT }; + +const wchar_t *KorCons(); +const wchar_t *KorVowel(); +const wchar_t *KorLCons(); +const wchar_t *JapDiacritics(int index); +char16_t OskKeyAt(int keyboard, int row, int col); diff --git a/Core/Dialog/PSPOskDialog.cpp b/Core/Dialog/PSPOskDialog.cpp index b7d6773883..212fa409fd 100755 --- a/Core/Dialog/PSPOskDialog.cpp +++ b/Core/Dialog/PSPOskDialog.cpp @@ -45,28 +45,14 @@ static std::map, std::less<>> languageM const uint8_t numKeyCols[OSK_KEYBOARD_COUNT] = {12, 12, 13, 13, 12, 12, 12, 12, 12}; const uint8_t numKeyRows[OSK_KEYBOARD_COUNT] = {4, 4, 6, 6, 5, 4, 4, 4, 4}; -// Japanese (Kana) diacritics -extern const wchar_t diacritics[2][103]; - -// Korean (Hangul) consonant -extern const wchar_t kor_cons[20]; - -// Korean (Hangul) vowels, Some vowels are not used, they will be spaces -extern const wchar_t kor_vowel[22]; - // Korean (Hangul) vowel Combination key -extern const uint8_t kor_vowelCom[21]; - -// Korean (Hangul) last consonant(diacritics) -extern const wchar_t kor_lcons[28]; +static const uint8_t kor_vowelCom[21] = { 0,8,9,1,8,10,20,8,11,4,13,14,5,13,15,20,13,16,20,18,19 }; // Korean (Hangul) last consonant Combination key -extern const uint8_t kor_lconsCom[33]; +static const uint8_t kor_lconsCom[33] = { 18,0,2,21,3,4,26,3,5,0,7,8,15,7,9,16,7,10,18,7,11,24,7,12,25,7,13,26,7,14,18,16,17 }; // Korean (Hangul) last consonant Separation key -extern const uint8_t kor_lconsSpr[33]; - -extern const char16_t oskKeys[OSK_KEYBOARD_COUNT][6][14]; +static const uint8_t kor_lconsSpr[33] = { 2,1,9,4,4,12,5,4,18,8,8,0,9,8,6,10,8,7,11,8,9,12,8,16,13,8,17,14,8,18,17,17,9 }; // This isn't a complete representation of these flags, it just helps ensure we show the right keyboards. static const int allowedInputFlagsMap[OSK_KEYBOARD_COUNT] = { @@ -291,12 +277,12 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) int selectedCol = selectedChar % numKeyCols[currentKeyboard]; if (inputChars.size() == 0) { - wchar_t sw = oskKeys[currentKeyboard][selectedRow][selectedCol]; + wchar_t sw = OskKeyAt(currentKeyboard, selectedRow, selectedCol); if (inputChars.size() < FieldMaxLength()) { string += sw; - i_value[0] = GetIndex(kor_cons, sw); + i_value[0] = GetIndex(KorCons(), sw); if(i_value[0] != -1 && isInput == true) i_level = 1; @@ -306,14 +292,14 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) } else { for(u32 i = 0; i < inputChars.size(); i++) { if(i + 1 == inputChars.size()) { - wchar_t sw = oskKeys[currentKeyboard][selectedRow][selectedCol]; + wchar_t sw = OskKeyAt(currentKeyboard, selectedRow, selectedCol); if(i_level == 0) { string += inputChars[i]; if (inputChars.size() < FieldMaxLength()) { string += sw; - i_value[0] = GetIndex(kor_cons, sw); + i_value[0] = GetIndex(KorCons(), sw); if(i_value[0] != -1 && isInput == true) i_level = 1; @@ -321,7 +307,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) isCombinated = false; } } else if(i_level == 1) { - i_value[1] = GetIndex(kor_vowel, sw); + i_value[1] = GetIndex(KorVowel(), sw); if(i_value[1] == -1) { string += inputChars[i]; @@ -329,7 +315,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) string += sw; if(isInput == true) { - i_value[0] = GetIndex(kor_cons, sw); + i_value[0] = GetIndex(KorCons(), sw); if(i_value[0] != -1) i_level = 1; @@ -348,7 +334,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) } } } else if(i_level == 2) { - int tmp = GetIndex(kor_vowel, sw); + int tmp = GetIndex(KorVowel(), sw); if(tmp != -1) { int tmp2 = -1; for(size_t j = 0; j < sizeof(kor_vowelCom) / 4; j+=3) { @@ -378,7 +364,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) } } } else { - int tmp2 = GetIndex(kor_lcons, sw); + int tmp2 = GetIndex(KorLCons(), sw); if (tmp2 == -1) { string += inputChars[i]; @@ -386,7 +372,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) string += sw; if (isInput == true) { - i_value[0] = GetIndex(kor_cons, sw); + i_value[0] = GetIndex(KorCons(), sw); if(i_value[0] != -1) i_level = 1; @@ -408,7 +394,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) } } } else if(i_level == 3) { - int tmp = GetIndex(kor_lcons, sw); + int tmp = GetIndex(KorLCons(), sw); if(tmp != -1) { int tmp2 = -1; for(size_t j = 0; j < sizeof(kor_lconsCom) / 4; j+=3) { @@ -431,7 +417,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) string += sw; if(isInput == true) { - i_value[0] = GetIndex(kor_cons, sw); + i_value[0] = GetIndex(KorCons(), sw); if(i_value[0] != -1) i_level = 1; @@ -443,14 +429,14 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) } } } else { - int tmp3 = GetIndex(kor_vowel, sw); + int tmp3 = GetIndex(KorVowel(), sw); if (tmp3 == -1) { string += inputChars[i]; if (inputChars.size() < FieldMaxLength()) { string += sw; if(isInput == true) { - i_value[0] = GetIndex(kor_cons, sw); + i_value[0] = GetIndex(KorCons(), sw); if(i_value[0] != -1) i_level = 1; @@ -482,7 +468,7 @@ std::u16string PSPOskDialog::CombinationKorean(bool isInput) i_level = 2; } } else { - int tmp4 = GetIndex(kor_cons, kor_lcons[i_value[2]]); + int tmp4 = GetIndex(KorCons(), KorLCons()[i_value[2]]); if (tmp4 != -1) { u16 code = 0xAC00 + i_value[0] * 0x24C + i_value[1] * 0x1C; @@ -543,17 +529,17 @@ std::u16string PSPOskDialog::CombinationString(bool isInput) i_level = 0; } - if(oskKeys[currentKeyboard][selectedRow][selectedCol] == L'゛') + if(OskKeyAt(currentKeyboard, selectedRow, selectedCol) == L'゛') { for(u32 i = 0; i < inputChars.size(); i++) { if(i + 1 == inputChars.size()) { - for(u32 j = 0; j < wcslen(diacritics[0]); j+=2) + for(u32 j = 0; j < wcslen(JapDiacritics(0)); j+=2) { - if(inputChars[i] == diacritics[0][j]) + if(inputChars[i] == JapDiacritics(0)[j]) { - string += diacritics[0][j + 1]; + string += JapDiacritics(0)[j + 1]; isCombinated = true; break; } @@ -570,17 +556,17 @@ std::u16string PSPOskDialog::CombinationString(bool isInput) } } } - else if(oskKeys[currentKeyboard][selectedRow][selectedCol] == L'゜') + else if(OskKeyAt(currentKeyboard, selectedRow, selectedCol) == L'゜') { for(u32 i = 0; i < inputChars.size(); i++) { if(i + 1 == inputChars.size()) { - for(u32 j = 0; j < wcslen(diacritics[1]); j+=2) + for(u32 j = 0; j < wcslen(JapDiacritics(1)); j+=2) { - if(inputChars[i] == diacritics[1][j]) + if(inputChars[i] == JapDiacritics(1)[j]) { - string += diacritics[1][j + 1]; + string += JapDiacritics(1)[j + 1]; isCombinated = true; break; } @@ -606,7 +592,7 @@ std::u16string PSPOskDialog::CombinationString(bool isInput) if (string.size() < FieldMaxLength()) { - string += oskKeys[currentKeyboard][selectedRow][selectedCol]; + string += OskKeyAt(currentKeyboard, selectedRow, selectedCol); } isCombinated = true; } @@ -642,7 +628,7 @@ void PSPOskDialog::RemoveKorean() else { i_level = 1; - inputChars += kor_cons[i_value[0]]; + inputChars += KorCons()[i_value[0]]; } } else if(i_level == 3) @@ -777,7 +763,7 @@ void PSPOskDialog::RenderKeyboard() { for (int col = 0; col < numKeyCols[currentKeyboard]; ++col) { - temp[0] = oskKeys[currentKeyboard][row][col]; + temp[0] = OskKeyAt(currentKeyboard, row, col); ConvertUCS2ToUTF8(buffer, temp); diff --git a/UWP/CoreUWP/CoreUWP.vcxproj b/UWP/CoreUWP/CoreUWP.vcxproj index c52f636643..19e0f8ca82 100644 --- a/UWP/CoreUWP/CoreUWP.vcxproj +++ b/UWP/CoreUWP/CoreUWP.vcxproj @@ -148,6 +148,7 @@ + @@ -402,6 +403,7 @@ + @@ -1022,4 +1024,4 @@ - + \ No newline at end of file diff --git a/UWP/CoreUWP/CoreUWP.vcxproj.filters b/UWP/CoreUWP/CoreUWP.vcxproj.filters index 3c89d91677..a8d7784797 100644 --- a/UWP/CoreUWP/CoreUWP.vcxproj.filters +++ b/UWP/CoreUWP/CoreUWP.vcxproj.filters @@ -1205,6 +1205,9 @@ HLE + + Dialog + @@ -1897,10 +1900,13 @@ HLE + + Dialog + Ext\gason - + \ No newline at end of file diff --git a/android/jni/Android.mk b/android/jni/Android.mk index dbd8809788..0cd681ef06 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -651,6 +651,7 @@ EXEC_AND_LIB_FILES := \ $(SRC)/Core/Dialog/PSPNetconfDialog.cpp \ $(SRC)/Core/Dialog/PSPNpSigninDialog.cpp \ $(SRC)/Core/Dialog/PSPOskDialog.cpp \ + $(SRC)/Core/Dialog/PSPOskConstants.cpp \ $(SRC)/Core/Dialog/PSPScreenshotDialog.cpp \ $(SRC)/Core/Dialog/PSPPlaceholderDialog.cpp \ $(SRC)/Core/Dialog/PSPSaveDialog.cpp \ diff --git a/libretro/Makefile.common b/libretro/Makefile.common index c1cb5a454f..ee6bb5c7f5 100644 --- a/libretro/Makefile.common +++ b/libretro/Makefile.common @@ -671,6 +671,7 @@ SOURCES_CXX += \ $(COREDIR)/Dialog/PSPNetconfDialog.cpp \ $(COREDIR)/Dialog/PSPNpSigninDialog.cpp \ $(COREDIR)/Dialog/PSPOskDialog.cpp \ + $(COREDIR)/Dialog/PSPOskConstants.cpp \ $(COREDIR)/Dialog/PSPSaveDialog.cpp \ $(COREDIR)/Dialog/PSPScreenshotDialog.cpp \ $(COREDIR)/Dialog/SavedataParam.cpp \