51 for (
auto &text_element : TextCommands) {
52 match = text_element.MatchMe(str);
53 if (match.size() > 0) {
54 if (text_element.HasArgument) {
56 std::stoi(match[1].str(),
nullptr, 16));
63 const auto dictionary_element =
66 match = dictionary_element.MatchMe(str);
67 if (match.size() > 0) {
69 DICTOFF + std::stoi(match[1].str(),
nullptr, 16));
104 std::vector<uint8_t> bytes;
105 std::string temp_string = str;
108 while (pos < temp_string.size()) {
110 if (temp_string[pos] ==
'[') {
111 int next = temp_string.find(
']', pos);
119 const auto dictionary_element =
122 if (!parsedElement.
Active) {
123 util::logf(
"Error parsing message: %s", temp_string);
125 }
else if (parsedElement.
Parent == dictionary_element) {
126 bytes.push_back(parsedElement.
Value);
128 bytes.push_back(parsedElement.
Parent.
ID);
131 bytes.push_back(parsedElement.
Value);
141 util::logf(
"Error parsing message: %s", temp_string);
151 std::vector<DictionaryEntry> AllDictionaries;
153 std::vector<uint8_t> bytes;
154 std::stringstream stringBuilder;
160 int temppush_backress =
165 while (address < temppush_backress) {
166 uint8_t uint8_tDictionary = rom->
data()[address++];
167 bytes.push_back(uint8_tDictionary);
171 AllDictionaries.push_back(
DictionaryEntry{(uint8_t)i, stringBuilder.str()});
174 std::sort(AllDictionaries.begin(), AllDictionaries.end(),
176 return a.Contents.size() > b.Contents.size();
179 return AllDictionaries;
183 const std::vector<uint8_t> &rom_data,
int *current_pos) {
185 int pos = *current_pos;
186 uint8_t current_byte;
187 std::vector<uint8_t> temp_bytes_raw;
188 std::vector<uint8_t> temp_bytes_parsed;
189 std::string current_message_raw;
190 std::string current_message_parsed;
194 current_byte = rom_data[pos++];
197 message_data.
ID = message_data.
ID + 1;
199 message_data.
RawString = current_message_raw;
200 message_data.
Data = temp_bytes_raw;
204 temp_bytes_raw.clear();
205 temp_bytes_parsed.clear();
206 current_message_raw.clear();
207 current_message_parsed.clear();
210 }
else if (current_byte == 0xFF) {
214 temp_bytes_raw.push_back(current_byte);
218 if (!text_element.
Empty()) {
221 temp_bytes_parsed.push_back(current_byte);
227 if (dictionary >= 0) {
228 current_message_raw.append(
"[");
230 current_message_raw.append(
":");
232 current_message_raw.append(
"]");
234 auto mutable_rom_data =
const_cast<uint8_t *
>(rom_data.data());
240 for (uint32_t i = address; i < address_end; i++) {
241 temp_bytes_parsed.push_back(rom_data[i]);
249 if (CharEncoder.contains(current_byte)) {
250 std::string str =
"";
251 str.push_back(CharEncoder.at(current_byte));
252 current_message_raw.append(str);
253 current_message_parsed.append(str);
254 temp_bytes_parsed.push_back(current_byte);
263 std::vector<MessageData> &message_data,
264 const std::vector<DictionaryEntry> &dictionary_entries) {
265 std::vector<std::string> parsed_messages;
267 for (
auto &message : message_data) {
268 std::cout <<
"Message #" << message.ID <<
" at address "
270 std::cout <<
" " << message.RawString << std::endl;
272 std::string parsed_message =
"";
273 for (
const uint8_t &
byte : message.Data) {
274 if (CharEncoder.contains(
byte)) {
275 parsed_message.push_back(CharEncoder.at(
byte));
278 if (
byte > 0 &&
byte <= dictionary_entries.size()) {
279 auto dic_entry = dictionary_entries[byte];
280 parsed_message.append(dic_entry.Contents);
282 parsed_message.append(dictionary_entries[0].Contents);
286 if (!text_element.Empty()) {
288 text_element.ID ==
kLine2 || text_element.ID ==
kLine3) {
289 parsed_message.append(
"\n");
291 parsed_message.append(text_element.GenericToken);
296 parsed_messages.push_back(parsed_message);
299 return parsed_messages;
std::string GetParamToken(uint8_t value=0) const