Osk: Finish moving out the weird strings to PSPOskConstants.cpp

This commit is contained in:
Henrik Rydgård 2025-01-04 12:04:22 +01:00
parent 1b73f68a44
commit af4eb0d053
8 changed files with 65 additions and 54 deletions

View file

@ -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

View file

@ -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]; }

View file

@ -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);

View file

@ -45,28 +45,14 @@ static std::map<std::string, std::pair<std::string, int>, 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);

View file

@ -148,6 +148,7 @@
<ClInclude Include="..\..\Core\Dialog\PSPMsgDialog.h" />
<ClInclude Include="..\..\Core\Dialog\PSPNetconfDialog.h" />
<ClInclude Include="..\..\Core\Dialog\PSPNpSigninDialog.h" />
<ClInclude Include="..\..\Core\Dialog\PSPOskConstants.h" />
<ClInclude Include="..\..\Core\Dialog\PSPOskDialog.h" />
<ClInclude Include="..\..\Core\Dialog\PSPPlaceholderDialog.h" />
<ClInclude Include="..\..\Core\Dialog\PSPSaveDialog.h" />
@ -402,6 +403,7 @@
<ClCompile Include="..\..\Core\Dialog\PSPMsgDialog.cpp" />
<ClCompile Include="..\..\Core\Dialog\PSPNetconfDialog.cpp" />
<ClCompile Include="..\..\Core\Dialog\PSPNpSigninDialog.cpp" />
<ClCompile Include="..\..\Core\Dialog\PSPOskConstants.cpp" />
<ClCompile Include="..\..\Core\Dialog\PSPOskDialog.cpp" />
<ClCompile Include="..\..\Core\Dialog\PSPPlaceholderDialog.cpp" />
<ClCompile Include="..\..\Core\Dialog\PSPSaveDialog.cpp" />
@ -1022,4 +1024,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

View file

@ -1205,6 +1205,9 @@
<ClCompile Include="..\..\Core\HLE\AtracCtx2.cpp">
<Filter>HLE</Filter>
</ClCompile>
<ClCompile Include="..\..\Core\Dialog\PSPOskConstants.cpp">
<Filter>Dialog</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
@ -1897,10 +1900,13 @@
<ClInclude Include="..\..\Core\HLE\AtracCtx2.h">
<Filter>HLE</Filter>
</ClInclude>
<ClInclude Include="..\..\Core\Dialog\PSPOskConstants.h">
<Filter>Dialog</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\ext\gason\LICENSE">
<Filter>Ext\gason</Filter>
</None>
</ItemGroup>
</Project>
</Project>

View file

@ -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 \

View file

@ -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 \