From b450f4797ee6800e2688b0175b8944c5bcd167e2 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 28 Sep 2022 16:10:40 +0200 Subject: [PATCH] feat: Added wide string to data inspector --- lib/external/pattern_language | 2 +- .../builtin/source/content/data_inspector.cpp | 42 ++++++++++++++++++- plugins/builtin/source/lang/de_DE.cpp | 1 + plugins/builtin/source/lang/en_US.cpp | 1 + plugins/builtin/source/lang/it_IT.cpp | 1 + plugins/builtin/source/lang/ja_JP.cpp | 1 + plugins/builtin/source/lang/ko_KR.cpp | 1 + plugins/builtin/source/lang/pt_BR.cpp | 1 + plugins/builtin/source/lang/zh_CN.cpp | 1 + plugins/builtin/source/lang/zh_TW.cpp | 1 + 10 files changed, 50 insertions(+), 2 deletions(-) diff --git a/lib/external/pattern_language b/lib/external/pattern_language index df5f35b49..65fca44f3 160000 --- a/lib/external/pattern_language +++ b/lib/external/pattern_language @@ -1 +1 @@ -Subproject commit df5f35b49d99ab91786edeb04c077d88e057c1ba +Subproject commit 65fca44f38f61bbaafd6241ac6f17b8f0c1b7369 diff --git a/plugins/builtin/source/content/data_inspector.cpp b/plugins/builtin/source/content/data_inspector.cpp index 0871858d8..9134c6e9c 100644 --- a/plugins/builtin/source/content/data_inspector.cpp +++ b/plugins/builtin/source/content/data_inspector.cpp @@ -396,13 +396,14 @@ namespace hex::plugin::builtin { } ); + constexpr static auto MaxStringLength = 32; + ContentRegistry::DataInspector::add("hex.builtin.inspector.string", 1, [](auto buffer, auto endian, auto style) { hex::unused(buffer, endian, style); auto currSelection = ImHexApi::HexEditor::getSelection(); - constexpr static auto MaxStringLength = 32; std::string value, copyValue; @@ -430,6 +431,45 @@ namespace hex::plugin::builtin { } ); + ContentRegistry::DataInspector::add("hex.builtin.inspector.string16", 2, + [](auto buffer, auto endian, auto style) { + hex::unused(buffer, endian, style); + + auto currSelection = ImHexApi::HexEditor::getSelection(); + + std::string value, copyValue; + + if (currSelection.has_value()) { + std::u16string stringBuffer(std::min(currSelection->size, 0x1000), 0x00); + ImHexApi::Provider::get()->read(currSelection->address, stringBuffer.data(), stringBuffer.size()); + + for (auto &c : stringBuffer) + c = hex::changeEndianess(c, endian); + + auto it = std::remove_if(buffer.begin(), buffer.end(), + [](auto c) { return c == 0x00; }); + buffer.erase(it, buffer.end()); + + value = copyValue = std::wstring_convert, char16_t>("Invalid").to_bytes(stringBuffer.data()); + + if (value.size() > MaxStringLength) { + value.resize(MaxStringLength); + value += "..."; + } + } else { + value = ""; + copyValue = ""; + } + + return [value, copyValue] { ImGui::TextFormatted("L\"{0}\"", value.c_str()); return copyValue; }; + }, + [](const std::string &value, std::endian endian) -> std::vector { + hex::unused(endian); + + return hex::decodeByteString(value); + } + ); + #if defined(OS_WINDOWS) && defined(ARCH_64_BIT) ContentRegistry::DataInspector::add("hex.builtin.inspector.time32", sizeof(u32), [](auto buffer, auto endian, auto style) { diff --git a/plugins/builtin/source/lang/de_DE.cpp b/plugins/builtin/source/lang/de_DE.cpp index 74e02f6bc..874d0f72d 100644 --- a/plugins/builtin/source/lang/de_DE.cpp +++ b/plugins/builtin/source/lang/de_DE.cpp @@ -495,6 +495,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "Wide Zeichen" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "String" }, + { "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/en_US.cpp b/plugins/builtin/source/lang/en_US.cpp index 6f328e22d..7bdcc9679 100644 --- a/plugins/builtin/source/lang/en_US.cpp +++ b/plugins/builtin/source/lang/en_US.cpp @@ -501,6 +501,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "Wide Character" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "String" }, + { "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/it_IT.cpp b/plugins/builtin/source/lang/it_IT.cpp index 79680927e..b25f360d4 100644 --- a/plugins/builtin/source/lang/it_IT.cpp +++ b/plugins/builtin/source/lang/it_IT.cpp @@ -500,6 +500,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "Wide Character" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "String" }, + { "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/ja_JP.cpp b/plugins/builtin/source/lang/ja_JP.cpp index 3c13f983c..a7dcaefcd 100644 --- a/plugins/builtin/source/lang/ja_JP.cpp +++ b/plugins/builtin/source/lang/ja_JP.cpp @@ -503,6 +503,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "Wide Character" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "String" }, + { "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/ko_KR.cpp b/plugins/builtin/source/lang/ko_KR.cpp index 9b0d76d2a..b1d6e8041 100644 --- a/plugins/builtin/source/lang/ko_KR.cpp +++ b/plugins/builtin/source/lang/ko_KR.cpp @@ -500,6 +500,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "Wide Character" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "String" }, + { "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/pt_BR.cpp b/plugins/builtin/source/lang/pt_BR.cpp index 32dc9a12b..0224a63b1 100644 --- a/plugins/builtin/source/lang/pt_BR.cpp +++ b/plugins/builtin/source/lang/pt_BR.cpp @@ -498,6 +498,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "Wide Character" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "String" }, + { "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/zh_CN.cpp b/plugins/builtin/source/lang/zh_CN.cpp index f2094ce70..63d2ecc0a 100644 --- a/plugins/builtin/source/lang/zh_CN.cpp +++ b/plugins/builtin/source/lang/zh_CN.cpp @@ -501,6 +501,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "宽字符" }, { "hex.builtin.inspector.utf8", "UTF-8 码位" }, { "hex.builtin.inspector.string", "字符串" }, + //{ "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" }, diff --git a/plugins/builtin/source/lang/zh_TW.cpp b/plugins/builtin/source/lang/zh_TW.cpp index 6e7a60dcd..4fdea11a4 100644 --- a/plugins/builtin/source/lang/zh_TW.cpp +++ b/plugins/builtin/source/lang/zh_TW.cpp @@ -499,6 +499,7 @@ namespace hex::plugin::builtin { { "hex.builtin.inspector.wide", "框字元" }, { "hex.builtin.inspector.utf8", "UTF-8 code point" }, { "hex.builtin.inspector.string", "字串" }, + //{ "hex.builtin.inspector.string16", "Wide String" }, { "hex.builtin.inspector.time32", "time32_t" }, { "hex.builtin.inspector.time64", "time64_t" }, { "hex.builtin.inspector.time", "time_t" },