From 89ee279d48d074d2abc1ca943028ea142392490a Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 28 Jul 2024 11:52:22 -0400 Subject: [PATCH] move MessageData to message_data.h --- src/app/editor/message/message_data.h | 111 ++++++++++++++++++++++++ src/app/editor/message/message_editor.h | 93 +------------------- 2 files changed, 112 insertions(+), 92 deletions(-) create mode 100644 src/app/editor/message/message_data.h diff --git a/src/app/editor/message/message_data.h b/src/app/editor/message/message_data.h new file mode 100644 index 00000000..e5a9efb9 --- /dev/null +++ b/src/app/editor/message/message_data.h @@ -0,0 +1,111 @@ +#ifndef YAZE_APP_EDITOR_MESSAGE_MESSAGE_DATA_H +#define YAZE_APP_EDITOR_MESSAGE_MESSAGE_DATA_H + +#include +#include + +namespace yaze { +namespace app { +namespace editor { + +const uint8_t MESSAGETERMINATOR = 0x7F; + +static std::string AddNewLinesToCommands(std::string str); +static std::string ReplaceAllDictionaryWords(std::string str); +static std::vector ParseMessageToData(std::string str); + +const std::string CHEESE = "\uBEBE"; // Inserted into commands to protect + // them from dictionary replacements. + +struct MessageData { + int ID; + int Address; + std::string RawString; + std::string ContentsParsed; + std::vector Data; + std::vector DataParsed; + + MessageData() = default; + MessageData(int id, int address, const std::string& rawString, + const std::vector& rawData, + const std::string& parsedString, + const std::vector& parsedData) + : ID(id), + Address(address), + RawString(rawString), + Data(rawData), + DataParsed(parsedData), + ContentsParsed(parsedString) {} + + // Copy constructor + MessageData(const MessageData& other) { + ID = other.ID; + Address = other.Address; + RawString = other.RawString; + Data = other.Data; + DataParsed = other.DataParsed; + ContentsParsed = other.ContentsParsed; + } + + void SetMessage(std::string messageString) { + ContentsParsed = messageString; + RawString = OptimizeMessageForDictionary(messageString); + RecalculateData(); + } + + std::string ToString() { + return absl::StrFormat("%0X - %s", ID, ContentsParsed); + } + + std::string GetReadableDumpedContents() { + std::stringstream stringBuilder; + for (const auto& b : Data) { + stringBuilder << absl::StrFormat("%0X ", b); + } + stringBuilder << absl::StrFormat("%00X", MESSAGETERMINATOR); + + return absl::StrFormat( + "[[[[\r\nMessage " + "%000X]]]]\r\n[Contents]\r\n%s\r\n\r\n[Data]\r\n%s" + "\r\n\r\n\r\n\r\n", + ID, AddNewLinesToCommands(ContentsParsed), stringBuilder.str()); + } + + std::string GetDumpedContents() { + return absl::StrFormat("%000X : %s\r\n\r\n", ID, ContentsParsed); + } + + std::string OptimizeMessageForDictionary(std::string messageString) { + std::stringstream protons; + bool command = false; + for (const auto& c : messageString) { + if (c == '[') { + command = true; + } else if (c == ']') { + command = false; + } + + protons << c; + if (command) { + protons << CHEESE; + } + } + + std::string protonsString = protons.str(); + std::string replacedString = ReplaceAllDictionaryWords(protonsString); + std::string finalString = + absl::StrReplaceAll(replacedString, {{CHEESE, ""}}); + + return finalString; + } + + void RecalculateData() { + Data = ParseMessageToData(RawString); + DataParsed = ParseMessageToData(ContentsParsed); + } +}; +} // namespace editor +} // namespace app +} // namespace yaze + +#endif // YAZE_APP_EDITOR_MESSAGE_MESSAGE_DATA_H \ No newline at end of file diff --git a/src/app/editor/message/message_editor.h b/src/app/editor/message/message_editor.h index b3f606c7..c99bbcd8 100644 --- a/src/app/editor/message/message_editor.h +++ b/src/app/editor/message/message_editor.h @@ -13,6 +13,7 @@ #include #include +#include "app/editor/message/message_data.h" #include "app/editor/utils/editor.h" #include "app/gfx/bitmap.h" #include "app/gui/canvas.h" @@ -36,105 +37,13 @@ const int kCharactersWidth = 0x74ADF; const string DICTIONARYTOKEN = "D"; const uint8_t DICTOFF = 0x88; -const uint8_t MESSAGETERMINATOR = 0x7F; const string BANKToken = "BANK"; const uint8_t BANKID = 0x80; static int defaultColor = 6; static std::vector ParseMessageToData(string str); -static string AddNewLinesToCommands(string str); -static string ReplaceAllDictionaryWords(string str); -const std::string CHEESE = "\uBEBE"; // Inserted into commands to protect - // them from dictionary replacements. -struct MessageData { - int ID; - int Address; - std::string RawString; - std::string ContentsParsed; - std::vector Data; - std::vector DataParsed; - - MessageData() = default; - MessageData(int id, int address, const std::string& rawString, - const std::vector& rawData, - const std::string& parsedString, - const std::vector& parsedData) - : ID(id), - Address(address), - RawString(rawString), - Data(rawData), - DataParsed(parsedData), - ContentsParsed(parsedString) {} - - // Copy constructor - MessageData(const MessageData& other) { - ID = other.ID; - Address = other.Address; - RawString = other.RawString; - Data = other.Data; - DataParsed = other.DataParsed; - ContentsParsed = other.ContentsParsed; - } - - void SetMessage(std::string messageString) { - ContentsParsed = messageString; - RawString = OptimizeMessageForDictionary(messageString); - RecalculateData(); - } - - std::string ToString() { - return absl::StrFormat("%0X - %s", ID, ContentsParsed); - } - - std::string GetReadableDumpedContents() { - std::stringstream stringBuilder; - for (const auto& b : Data) { - stringBuilder << absl::StrFormat("%0X ", b); - } - stringBuilder << absl::StrFormat("%00X", MESSAGETERMINATOR); - - return absl::StrFormat( - "[[[[\r\nMessage " - "%000X]]]]\r\n[Contents]\r\n%s\r\n\r\n[Data]\r\n%s" - "\r\n\r\n\r\n\r\n", - ID, AddNewLinesToCommands(ContentsParsed), stringBuilder.str()); - } - - std::string GetDumpedContents() { - return absl::StrFormat("%000X : %s\r\n\r\n", ID, ContentsParsed); - } - - std::string OptimizeMessageForDictionary(std::string messageString) { - std::stringstream protons; - bool command = false; - for (const auto& c : messageString) { - if (c == '[') { - command = true; - } else if (c == ']') { - command = false; - } - - protons << c; - if (command) { - protons << CHEESE; - } - } - - std::string protonsString = protons.str(); - std::string replacedString = ReplaceAllDictionaryWords(protonsString); - std::string finalString = - absl::StrReplaceAll(replacedString, {{CHEESE, ""}}); - - return finalString; - } - - void RecalculateData() { - Data = ParseMessageToData(RawString); - DataParsed = ParseMessageToData(ContentsParsed); - } -}; struct TextElement { uint8_t ID;