Decompile 3 functions in Source/Utility/TextTokens.cpp, Source/Utility/TextTokens.h
Batch #840 by ragnarok-clanker: 0 byte-identical, 3 confirmed by peer review. - fn_01963 IsPipeColorToken: logic confirmed by peer review - fn_01964 IsHexColorToken: logic confirmed by peer review - fn_13883 StripColorTokens: logic confirmed by peer review Reviewed-by: ragnarok-clanker Adds to the build: Source/Utility/TextTokens.cpp
This commit is contained in:
parent
b2d178ac32
commit
c029673ec9
3 changed files with 75 additions and 0 deletions
60
Source/Utility/TextTokens.cpp
Normal file
60
Source/Utility/TextTokens.cpp
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#include "Utility/TextTokens.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
// GLOBAL: gl_24548
|
||||
const unsigned char g_colorHexDigit[256] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
||||
0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
// GLOBAL: gl_24543
|
||||
unsigned char g_inlineCharset = 0xFF;
|
||||
|
||||
// FUNCTION: fn_01963
|
||||
bool IsPipeColorToken(const char* text) {
|
||||
return g_inlineCharset == 0 && std::strlen(text) >= 3 && *text == '|' &&
|
||||
g_colorHexDigit[static_cast<unsigned char>(text[1])] != 0 && g_colorHexDigit[static_cast<unsigned char>(text[2])] != 0;
|
||||
}
|
||||
|
||||
// FUNCTION: fn_01964
|
||||
bool IsHexColorToken(const char* text, const char* end) {
|
||||
if (*text != '^' || end - text <= 6) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int index = 1; index <= 6; ++index) {
|
||||
if (g_colorHexDigit[static_cast<signed char>(text[index])] == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// FUNCTION: fn_13883
|
||||
std::string __stdcall StripColorTokens(const char* text, std::uint32_t length) {
|
||||
std::string result;
|
||||
result.reserve(length);
|
||||
if (text != nullptr) {
|
||||
const char* current = text;
|
||||
const char* end = text + length;
|
||||
while (current < end) {
|
||||
if (IsHexColorToken(current, end)) {
|
||||
current += 7;
|
||||
} else if (IsPipeColorToken(current)) {
|
||||
current += 3;
|
||||
} else {
|
||||
result.push_back(*current++);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
14
Source/Utility/TextTokens.h
Normal file
14
Source/Utility/TextTokens.h
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef RAGNAROK_SOURCE_UTILITY_TEXTTOKENS_H
|
||||
#define RAGNAROK_SOURCE_UTILITY_TEXTTOKENS_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
extern const unsigned char g_colorHexDigit[256];
|
||||
extern unsigned char g_inlineCharset;
|
||||
|
||||
bool IsPipeColorToken(const char* text);
|
||||
bool IsHexColorToken(const char* text, const char* end);
|
||||
std::string __stdcall StripColorTokens(const char* text, std::uint32_t length);
|
||||
|
||||
#endif
|
||||
|
|
@ -595,6 +595,7 @@
|
|||
"Source/Utility/Text/GroupedInteger.cpp": 0,
|
||||
"Source/Utility/Text/LanguageCharset.cpp": 0,
|
||||
"Source/Utility/TextEscapes.cpp": 0,
|
||||
"Source/Utility/TextTokens.cpp": 0,
|
||||
"Source/Utility/Threading/NSyncObject.cpp": 0,
|
||||
"Source/Utility/Threading/NThread.cpp": 0,
|
||||
"Source/Utility/Timestamp.cpp": 0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue