move MessageData to message_data.h
This commit is contained in:
111
src/app/editor/message/message_data.h
Normal file
111
src/app/editor/message/message_data.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
#ifndef YAZE_APP_EDITOR_MESSAGE_MESSAGE_DATA_H
|
||||||
|
#define YAZE_APP_EDITOR_MESSAGE_MESSAGE_DATA_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
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<uint8_t> 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<uint8_t> Data;
|
||||||
|
std::vector<uint8_t> DataParsed;
|
||||||
|
|
||||||
|
MessageData() = default;
|
||||||
|
MessageData(int id, int address, const std::string& rawString,
|
||||||
|
const std::vector<uint8_t>& rawData,
|
||||||
|
const std::string& parsedString,
|
||||||
|
const std::vector<uint8_t>& 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
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "app/editor/message/message_data.h"
|
||||||
#include "app/editor/utils/editor.h"
|
#include "app/editor/utils/editor.h"
|
||||||
#include "app/gfx/bitmap.h"
|
#include "app/gfx/bitmap.h"
|
||||||
#include "app/gui/canvas.h"
|
#include "app/gui/canvas.h"
|
||||||
@@ -36,105 +37,13 @@ const int kCharactersWidth = 0x74ADF;
|
|||||||
|
|
||||||
const string DICTIONARYTOKEN = "D";
|
const string DICTIONARYTOKEN = "D";
|
||||||
const uint8_t DICTOFF = 0x88;
|
const uint8_t DICTOFF = 0x88;
|
||||||
const uint8_t MESSAGETERMINATOR = 0x7F;
|
|
||||||
const string BANKToken = "BANK";
|
const string BANKToken = "BANK";
|
||||||
const uint8_t BANKID = 0x80;
|
const uint8_t BANKID = 0x80;
|
||||||
|
|
||||||
static int defaultColor = 6;
|
static int defaultColor = 6;
|
||||||
|
|
||||||
static std::vector<uint8_t> ParseMessageToData(string str);
|
static std::vector<uint8_t> 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<uint8_t> Data;
|
|
||||||
std::vector<uint8_t> DataParsed;
|
|
||||||
|
|
||||||
MessageData() = default;
|
|
||||||
MessageData(int id, int address, const std::string& rawString,
|
|
||||||
const std::vector<uint8_t>& rawData,
|
|
||||||
const std::string& parsedString,
|
|
||||||
const std::vector<uint8_t>& 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 {
|
struct TextElement {
|
||||||
uint8_t ID;
|
uint8_t ID;
|
||||||
|
|||||||
Reference in New Issue
Block a user