1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-24 16:55:08 +00:00

HexEditor: Add UTF16 to the value inspector

This commit is contained in:
kleines Filmröllchen 2022-04-12 19:12:03 +02:00 committed by Linus Groh
parent ef113b2f91
commit 19f6ef3a0c
2 changed files with 24 additions and 1 deletions

View file

@ -12,6 +12,7 @@
#include "GoToOffsetDialog.h" #include "GoToOffsetDialog.h"
#include "SearchResultsModel.h" #include "SearchResultsModel.h"
#include "ValueInspectorModel.h" #include "ValueInspectorModel.h"
#include <AK/Forward.h>
#include <AK/Optional.h> #include <AK/Optional.h>
#include <AK/StringBuilder.h> #include <AK/StringBuilder.h>
#include <Applications/HexEditor/HexEditorWindowGML.h> #include <Applications/HexEditor/HexEditorWindowGML.h>
@ -341,7 +342,19 @@ void HexEditorWidget::update_inspector_values(size_t position)
else else
value_inspector_model->set_parsed_value(ValueInspectorModel::ValueType::UTF8, utf8_view.unicode_substring_view(0, 1).as_string()); value_inspector_model->set_parsed_value(ValueInspectorModel::ValueType::UTF8, utf8_view.unicode_substring_view(0, 1).as_string());
// FIXME: Parse as other values like UTF16, Timestamp etc if (byte_read_count % 2 == 0) {
Utf16View utf16_view { Span<u16 const> { reinterpret_cast<u16 const*>(&unsigned_64_bit_int), 4 } };
size_t valid_code_units;
utf8_view.validate(valid_code_units);
if (valid_code_units == 0)
value_inspector_model->set_parsed_value(ValueInspectorModel::ValueType::UTF16, "");
else
value_inspector_model->set_parsed_value(ValueInspectorModel::ValueType::UTF16, utf16_view.unicode_substring_view(0, 1).to_utf8());
} else {
value_inspector_model->set_parsed_value(ValueInspectorModel::ValueType::UTF16, "");
}
// FIXME: Parse as other values like Timestamp etc
m_value_inspector->set_model(value_inspector_model); m_value_inspector->set_model(value_inspector_model);
m_value_inspector->update(); m_value_inspector->update();

View file

@ -9,6 +9,7 @@
#include <AK/Hex.h> #include <AK/Hex.h>
#include <AK/NonnullRefPtr.h> #include <AK/NonnullRefPtr.h>
#include <AK/String.h> #include <AK/String.h>
#include <AK/Utf16View.h>
#include <AK/Utf8View.h> #include <AK/Utf8View.h>
#include <AK/Vector.h> #include <AK/Vector.h>
#include <LibGUI/Model.h> #include <LibGUI/Model.h>
@ -28,6 +29,7 @@ public:
Double, Double,
ASCII, ASCII,
UTF8, UTF8,
UTF16,
__Count __Count
}; };
@ -96,6 +98,8 @@ public:
return "ASCII"; return "ASCII";
case UTF8: case UTF8:
return "UTF-8"; return "UTF-8";
case UTF16:
return "UTF-16";
default: default:
return ""; return "";
} }
@ -137,6 +141,12 @@ public:
return static_cast<i32>(utf8_view.byte_length()); return static_cast<i32>(utf8_view.byte_length());
return 0; return 0;
} }
case UTF16: {
auto utf16_view = Utf16View(utf8_to_utf16(m_values.at(index.row())));
if (utf16_view.validate())
return static_cast<i32>(utf16_view.length_in_code_units() * 2);
return 0;
}
default: default:
return 0; return 0;
} }