50 for (
auto &text_element : TextCommands) {
51 match = text_element.MatchMe(str);
52 if (match.size() > 0) {
53 if (text_element.HasArgument) {
54 std::string arg = match[1].str().substr(1);
55 return ParsedElement(text_element, std::stoi(arg,
nullptr, 16));
62 const auto dictionary_element =
65 match = dictionary_element.MatchMe(str);
66 if (match.size() > 0) {
68 DICTOFF + std::stoi(match[1].str(),
nullptr, 16));
74 if (CharEncoder.contains(value)) {
75 char c = CharEncoder.at(value);
83 if (text_element != std::nullopt) {
84 return text_element->GenericToken;
89 if (special_element != std::nullopt) {
90 return text_element->GenericToken;
95 if (dictionary >= 0) {
103 std::vector<uint8_t> bytes;
104 std::string temp_string = str;
107 while (pos < temp_string.size()) {
109 if (temp_string[pos] ==
'[') {
110 int next = temp_string.find(
']', pos);
118 const auto dictionary_element =
121 if (!parsedElement.
Active) {
122 util::logf(
"Error parsing message: %s", temp_string);
124 }
else if (parsedElement.
Parent == dictionary_element) {
125 bytes.push_back(parsedElement.
Value);
127 bytes.push_back(parsedElement.
Parent.
ID);
130 bytes.push_back(parsedElement.
Value);
140 util::logf(
"Error parsing message: %s", temp_string);
150 std::vector<DictionaryEntry> AllDictionaries;
152 std::vector<uint8_t> bytes;
153 std::stringstream stringBuilder;
159 int temppush_backress =
164 while (address < temppush_backress) {
165 uint8_t uint8_tDictionary = rom->
data()[address++];
166 bytes.push_back(uint8_tDictionary);
170 AllDictionaries.push_back(
DictionaryEntry{(uint8_t)i, stringBuilder.str()});
173 std::sort(AllDictionaries.begin(), AllDictionaries.end(),
175 return a.Contents.size() > b.Contents.size();
178 return AllDictionaries;
193 const std::vector<uint8_t> &rom_data,
int *current_pos) {
195 int pos = *current_pos;
196 uint8_t current_byte;
197 std::vector<uint8_t> temp_bytes_raw;
198 std::vector<uint8_t> temp_bytes_parsed;
199 std::string current_message_raw;
200 std::string current_message_parsed;
204 current_byte = rom_data[pos++];
207 message_data.
ID = message_data.
ID + 1;
209 message_data.
RawString = current_message_raw;
210 message_data.
Data = temp_bytes_raw;
214 temp_bytes_raw.clear();
215 temp_bytes_parsed.clear();
216 current_message_raw.clear();
217 current_message_parsed.clear();
220 }
else if (current_byte == 0xFF) {
224 temp_bytes_raw.push_back(current_byte);
228 if (text_element != std::nullopt) {
229 current_message_raw.append(text_element->GetParamToken());
230 current_message_parsed.append(text_element->GetParamToken());
231 temp_bytes_parsed.push_back(current_byte);
237 if (dictionary >= 0) {
238 current_message_raw.append(
"[");
240 current_message_raw.append(
":");
242 current_message_raw.append(
"]");
244 auto mutable_rom_data =
const_cast<uint8_t *
>(rom_data.data());
250 for (uint32_t i = address; i < address_end; i++) {
251 temp_bytes_parsed.push_back(rom_data[i]);
259 if (CharEncoder.contains(current_byte)) {
260 std::string str =
"";
261 str.push_back(CharEncoder.at(current_byte));
262 current_message_raw.append(str);
263 current_message_parsed.append(str);
264 temp_bytes_parsed.push_back(current_byte);
273 std::vector<MessageData> &message_data,
274 const std::vector<DictionaryEntry> &dictionary_entries) {
275 std::vector<std::string> parsed_messages;
277 for (
auto &message : message_data) {
278 std::string parsed_message =
"";
279 for (
const uint8_t &
byte : message.Data) {
280 if (CharEncoder.contains(
byte)) {
281 parsed_message.push_back(CharEncoder.at(
byte));
285 for (
const auto &entry : dictionary_entries) {
286 if (entry.ID ==
byte -
DICTOFF) {
291 parsed_message.append(dic_entry.
Contents);
294 if (text_element != std::nullopt) {
296 text_element->ID ==
kLine2 || text_element->ID ==
kLine3) {
297 parsed_message.append(
"\n");
299 parsed_message.append(text_element->GenericToken);
304 parsed_messages.push_back(parsed_message);
307 return parsed_messages;
315 std::vector<uint8_t> raw_message;
316 std::vector<uint8_t> parsed_message;
317 std::string current_raw_message;
318 std::string current_parsed_message;
320 uint8_t current_byte = 0;
321 while (current_byte != 0xFF) {
322 current_byte = rom->
data()[pos++];
324 list_of_texts_.push_back(
325 MessageData(message_id++, pos, current_raw_message, raw_message,
326 current_parsed_message, parsed_message));
328 parsed_message.clear();
329 current_raw_message.clear();
330 current_parsed_message.clear();
332 }
else if (current_byte == 0xFF) {
336 raw_message.push_back(current_byte);
339 if (text_element != std::nullopt) {
340 parsed_message.push_back(current_byte);
341 if (text_element->HasArgument) {
342 current_byte = rom->
data()[pos++];
343 raw_message.push_back(current_byte);
344 parsed_message.push_back(current_byte);
347 current_raw_message.append(text_element->GetParamToken(current_byte));
348 current_parsed_message.append(text_element->GetParamToken(current_byte));
359 if (special_element != std::nullopt) {
360 current_raw_message.append(special_element->GetParamToken());
361 current_parsed_message.append(special_element->GetParamToken());
362 parsed_message.push_back(current_byte);
368 if (dictionary >= 0) {
369 current_raw_message.append(
"[");
371 current_raw_message.append(
":");
373 current_raw_message.append(
"]");
380 for (uint32_t i = address; i < address_end; i++) {
381 parsed_message.push_back(rom->
data()[i]);
389 if (CharEncoder.contains(current_byte)) {
390 std::string str =
"";
391 str.push_back(CharEncoder.at(current_byte));
392 current_raw_message.append(str);
393 current_parsed_message.append(str);
394 parsed_message.push_back(current_byte);